{"_id":"@balena/jellyfish-plugin-base","_rev":"2015-df68b1c430208e0dfb1cce8fb7d45be3","name":"@balena/jellyfish-plugin-base","dist-tags":{"latest":"2.2.26"},"versions":{"0.0.2-initial-setup-5e8f2757dedda83475b5e50a2e710610d6479876":{"name":"@balena/jellyfish-plugin-base","version":"0.0.2-initial-setup-5e8f2757dedda83475b5e50a2e710610d6479876","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@0.0.2-initial-setup-5e8f2757dedda83475b5e50a2e710610d6479876","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"kaisoz","email":"tomast@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"ddbddaee13a1f55326bb020b19a8879fab38e257","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-0.0.2-initial-setup-5e8f2757dedda83475b5e50a2e710610d6479876.tgz","fileCount":6,"integrity":"sha512-CGmiGOdQf7E8u3qAY/PW24DV5gbmpAXgCiWtLorgNZegPM2Sfb44zr/Ax1v9/Xs8z73S4kcko3j0tzv2DjBfGA==","signatures":[{"sig":"MEUCIQDp9l5Dw3a04K+68wTfNlGY92SUbZJ5rdkmIdPviXXkgAIgKgJ9zgbp6XVfMoKx/FCGPj87+zVPMdWrF2XICnR1Dq8=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":3115,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJf/TJBCRA9TVsSAnZWagAAOR8P/01XaxJeFJsqosiyUUNg\nL0xlKt7la+hUX3hc+F3ugNsdKuobzjmj5rOBF+HNud/tB6aSGEQ1Yuey1GtZ\nrXvAdgFEWMhU0AHBN2yNftl/iuff5Sf2U8r2GPRuyALji2ZAnVLzIQWFvwV+\nhutP5Nn+kOXavTN+Ow9hLv/bHHQF0Kcw+DiaVlqUjpwQbAwhz7um0r2LwKRb\nQwBZAvY1Nt+1GI7cwcVACsfnn7Y+wqABys/9jg67oj71oOhzm2ehVK2xOpsq\n2RwsYKy1LZWIh0Ls1L1Dc5wJPq5e8M/gWqMrYe078msJ0RtjvgBL3ri+hSO5\nZRhwa5mURnHmzrkVABOKAlLFYMYo1xAwjOMP5UORNeDEV8nNHMhbe62v3+KQ\nk5JP4TxyR61INbMurad71Jr2ZXfVeCrfet2Vbn9a7KTFdOdleKtQQf5927JJ\n6y7/1es7r6Pu810E483QaNDkuP0kT4rOgLuUKUR3rjFfbZyWKZebsEYE0Ysm\njxGIRDNdislrfAx0FtupPH7/YnNYy7buUjsIwlFSyQT5WyIRvZRJJKtZEY57\nYLuVpGJFtUjtmPXi7R3UgBqfDCfsjtb1oMf8dmcXd3srVMJpxBgfiCbbnN1t\n1L9zDqS+67b2fic3KzFUuLufg6fYzpeXdLswbNr4NJEzp81Cj6rrIow7GWqD\n3Qga\r\n=vnBn\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","husky":{"hooks":{"pre-commit":"lint-staged"}},"types":"build/index.d.ts","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"5e8f2757dedda83475b5e50a2e710610d6479876","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint --typescript lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=shellcheck,@types/jest","test":"npm run doc && catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc","check":"./scripts/check-filenames.sh && ./scripts/check-licenses.sh && ./scripts/check-deployable-lib.sh && shellcheck ./scripts/*.sh","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --typescript --fix lib test","postinstall":"if [ -z \"$CI\" ] && [ -d \".git\" ]; then husky install; fi"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish pluginsh","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --typescript --fix","npm run doc"]},"_nodeVersion":"12.18.1","dependencies":{},"_hasShrinkwrap":false,"devDependencies":{"jest":"^26.6.3","husky":"^5.0.6","deplint":"^1.1.2","ts-jest":"^26.4.4","typedoc":"^0.20.14","depcheck":"^1.3.1","shellcheck":"^0.4.4","typescript":"^4.1.3","@types/jest":"^26.0.20","lint-staged":"^10.5.3","@balena/lint":"^5.3.0","catch-uncommitted":"^1.6.2"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_0.0.2-initial-setup-5e8f2757dedda83475b5e50a2e710610d6479876_1610428993152_0.9528639235939329","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"0.0.2":{"name":"@balena/jellyfish-plugin-base","version":"0.0.2","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@0.0.2","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"kaisoz","email":"tomast@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"c3b015eb67e98d256125968aacbad38f8e9c2e48","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-0.0.2.tgz","fileCount":6,"integrity":"sha512-k9JcGd+V/wUREJgQBzHbc3uWJlEPjrD+X3lPO/PD0+yxg8OyAARe9783xRMyv0ac5Rrpavr3+SjUnK+TEFuhMg==","signatures":[{"sig":"MEMCIGgwxRNHziqMf/4oIslNK99DFVFIEFIpH1xUiRHRP54RAh9btRM7ye14y86hCo9xF9YzmDdg3lfl6rqRuqCE6udb","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":3060,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJf/TUvCRA9TVsSAnZWagAAWfEQAJnxRW2hbmD256Kqloxu\nFeTsBE2L4sajxPtCGqQigLEw9NIeb0fmu5GKhkIE2fWN9lFcTP4P/i/hI97a\n5oDyO9DzLJGMe+55kyfMN8sno7VjdJGzjYDnFbD4ylFkPSB03yICmnEQ9uRC\nQtVALIFUlFsZ18X5dUqIsK2yX0t7n53vethd8fX2chcdNhUkv9lYuZMnnDlW\n6u03XppGhvF6taRtDIeuFoiaAHV8izAXG+bR0Yr+Lg8jEGbM3Sre09uwt2/a\nfVhur3T0xJVlz+ZaQBbKFHWxV71ybpo/a92akvsyoM4RjUPLs7h5zDJrh88O\nPh7p6UUCkxj8nkC90KAJUnsDM+ajiEs992CbilU0Dk1VzBD4WDYv9LArefzc\nYfVdXf5ave99e8SunVKdAYOzKhZAtqCxLFs1uqem9jXr0h/Nzas4dPXgkZ2x\nihYeZV+6btH6Japcw+Z8JLhgPgs/kCu4PbeAvyKTI4WpLpU90BDZkK+5A+9W\nTISWfYRYRdfpqSD2OXi/tsrE0vx6Uh+9ANicc+cApnfaZgVoeldAlMNgNpaN\nQI/2eo3eZHZBVZdf9qGvEag0Ci2v2wiW2xkgnTLLSFRjzUXksf3YII+FKnac\n6WJezaDUa/DUs70FIDXiwWbdj8aZugs504m1EY5XL3uCIcbhfSpjD7/Z5QQw\ndH8S\r\n=xC1Q\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","husky":{"hooks":{"pre-commit":"lint-staged"}},"types":"build/index.d.ts","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"4dd60a9b5dda1a25f63802680010c00733e0f17d","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint --typescript lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=shellcheck,@types/jest","test":"npm run doc && catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc","check":"./scripts/check-filenames.sh && ./scripts/check-licenses.sh && ./scripts/check-deployable-lib.sh && shellcheck ./scripts/*.sh","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --typescript --fix lib test","postinstall":"if [ -z \"$CI\" ] && [ -d \".git\" ]; then husky install; fi"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish pluginsh","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --typescript --fix","npm run doc"]},"_nodeVersion":"12.18.1","dependencies":{},"_hasShrinkwrap":false,"devDependencies":{"jest":"^26.6.3","husky":"^5.0.6","deplint":"^1.1.2","ts-jest":"^26.4.4","typedoc":"^0.20.14","depcheck":"^1.3.1","shellcheck":"^0.4.4","typescript":"^4.1.3","@types/jest":"^26.0.20","lint-staged":"^10.5.3","@balena/lint":"^5.3.0","catch-uncommitted":"^1.6.2"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_0.0.2_1610429742949_0.18578272575749843","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"0.0.3-update-readme-4f70407c2638cd42aeaf2a354e6fb63e5fbba82c":{"name":"@balena/jellyfish-plugin-base","version":"0.0.3-update-readme-4f70407c2638cd42aeaf2a354e6fb63e5fbba82c","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@0.0.3-update-readme-4f70407c2638cd42aeaf2a354e6fb63e5fbba82c","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"kaisoz","email":"tomast@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"cd7f99c14389580cc8bf8ed3de9172ffececf47f","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-0.0.3-update-readme-4f70407c2638cd42aeaf2a354e6fb63e5fbba82c.tgz","fileCount":6,"integrity":"sha512-z7Y6XRD3O0SCiC7px2jz+LATHRXHVde9r741QbDoaEH/HQbRIcekALUpIi6LGkeYLUBqNw/YKDw9aw4u6t17Ew==","signatures":[{"sig":"MEUCIQCD/2ENyGQaY1svtcmU1Jq/Kf6cpvjDD8q1Snr6zAe3NwIgES1Kdbl36rtwfd3RKQfIwoIHk8Mg8T4I0POuM8p+gxA=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":3526,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJf/qoVCRA9TVsSAnZWagAAiA4QAIQCMyECgW9qgT4EXKdP\nSE3DEpfSJjQEBCYQX+DX6Ep4pokcGQOWsJyFr6mOgxQMvE1Nt0jw88ibFK1X\n/JS38PJUFBZYbU6vFNRNrus4G1tkmRx1niW3iRPqhKU2n0khQJ8HEsseRRKR\nGTcjXdA0mPbTc1LXpSaxv7xZCv7woz2STlhLCGtxcWoA4U7lrDzZwxyRxn3n\nMUoK8Kh06JvesZR4DmBmOCFiu+SGB2jgwmOV9qTZeEnshsy0LsjeZyqHuM4D\nGlP+CdkPPsdetSQ98CIsMjUUdq4e1gNGyAFeF55OxrQRfqyskdiga+xoqqUb\nmpT4ftBnzd1TNbvUURtup6rxeTbczCDUZcxZw1OuGKvPXyyqt90ME6LoY8JZ\neVlUjrhltbP8Og4aLVVhqYzkB4vBXCroTGcPQM5m7MfnowXcHtsqC0MJyPHZ\n1jGbN+Yv30phPmwRjgdKzkD9fFcC4rW3XM6JGo/+RfjOfgC6JwPtcz5zlADY\nqD8bu2YGrgnjN5UlwMJEwZ9i67YThjItQ7FfwHKc5Rb2lHAO8GFfVg2N1Ib7\nXihcctnpyB+uw2lUrDslqPeLzWKCVGw14T19REDvdpKqPpIzjWNLpVmB7iCl\nL7NMhgTrWsUlNMzqJA/hzRbBnySRucv49pQbQEkQ+reEVY0ONzzChLbI9oCJ\nX0G5\r\n=6w9g\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","husky":{"hooks":{"pre-commit":"lint-staged"}},"types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPlugin` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\nBelow is an example how to use this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager([\n\tDefaultPlugin\n])\nconst cards = pluginManager.getCards(mixins)\n```\n\n# Documentation\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"4f70407c2638cd42aeaf2a354e6fb63e5fbba82c","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint --typescript lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=shellcheck,@types/jest","test":"npm run doc && catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc","check":"./scripts/check-filenames.sh && ./scripts/check-licenses.sh && ./scripts/check-deployable-lib.sh && shellcheck ./scripts/*.sh","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --typescript --fix lib test","postinstall":"if [ -z \"$CI\" ] && [ -d \".git\" ]; then husky install; fi"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish pluginsh","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --typescript --fix","npm run doc"]},"_nodeVersion":"12.18.1","dependencies":{},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^26.6.3","husky":"^5.0.6","deplint":"^1.1.2","ts-jest":"^26.4.4","typedoc":"^0.20.14","depcheck":"^1.3.1","shellcheck":"^0.4.4","typescript":"^4.1.3","@types/jest":"^26.0.20","lint-staged":"^10.5.3","@balena/lint":"^5.3.0","catch-uncommitted":"^1.6.2"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_0.0.3-update-readme-4f70407c2638cd42aeaf2a354e6fb63e5fbba82c_1610525205070_0.4772783087844894","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"0.0.3-update-readme-8439f7448285ef8e023b0ccb2f6b857f14d5348c":{"name":"@balena/jellyfish-plugin-base","version":"0.0.3-update-readme-8439f7448285ef8e023b0ccb2f6b857f14d5348c","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@0.0.3-update-readme-8439f7448285ef8e023b0ccb2f6b857f14d5348c","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"kaisoz","email":"tomast@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"2a431e5d26abf78c253743cdd181707eaaaae2bd","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-0.0.3-update-readme-8439f7448285ef8e023b0ccb2f6b857f14d5348c.tgz","fileCount":6,"integrity":"sha512-XEw/lZUjA2rtlfopLqUhnJCV72Hs0Pf87PiO55XlIsdNZzdjLO7Xtolv83RN/qP8ELQWTKatqNQVbtNuPcYIvQ==","signatures":[{"sig":"MEYCIQClRhhcwQl/VaYE+d5li+wu/+nuKagWzBNl9dkF1l658gIhAKJQfqVSJosG/Hk8TueiKfJIgs5WZTJXC3dsZ/JRSjl2","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":3526,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJf/rIqCRA9TVsSAnZWagAA0lcP/1LYmBUReJ+2WHqmKll3\nbapQcLtirW6oZwGZgDj4bSa1pc/sYYJXgtFHV6+fKfKLX0qeh4blERDkpOJ9\nF0y10/A7Tdjq9n6nmbcADHVruA8v4K8kbSNlI+cSHNUkiOHZYHmavN1ln5O7\nxnRTOyPms5gLamjVJFzPUyGsvCTUWqR+SeSMkDufRh7/dRPymWFjNSvxT5RR\nV2C7S9MMzhNSUhI3gd+jMJsHiit+8tBNIyiBWbzl3TPokmolq7DuQeP9bRSc\nvo6gB4dv16R7HWjTCD0RiolN5+RqzFGzOzLZEsUok6UZhSpKFEO1/CxyGrRi\nkZu4foJZYqBKbMASrraGo7rQzgysUB+o75HEoxhK2fqHlkwbtGMIC2JZ4gwG\nDO2bA05VUQ2G4bHrW9t1QPgmy6ncuHcxWzdCQLPgTcVGj1Aq8NUn2oOQQxEX\nDiBEHaDL6JcLlVe1SC03Bv0fIAdvHOrg3OGgjbKfq8trUWwT+nymEAeFLaJK\nhiB+KwEt8XkG4SEPmolHyBGmve491rtzyDfVHRmq3k41WvhlhkQaMkFIAceb\nOnoxp5qZN+38WMHcb06oNuix7eaT0fslrnaamzUI33D4aejZWVuYpY4nzjHI\nBPn6MbcnvpoRGpoBEFs273TU/B//u8NVTUTw9e1zI+O1xKJLcIj+jl3y30zn\nNBNy\r\n=Gblh\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","husky":{"hooks":{"pre-commit":"lint-staged"}},"types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPlugin` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\nBelow is an example how to use this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager([\n\tDefaultPlugin\n])\nconst cards = pluginManager.getCards(mixins)\n```\n\n# Documentation\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"8439f7448285ef8e023b0ccb2f6b857f14d5348c","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint --typescript lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=shellcheck,@types/jest","test":"npm run doc && catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc","check":"./scripts/check-filenames.sh && ./scripts/check-licenses.sh && ./scripts/check-deployable-lib.sh && shellcheck ./scripts/*.sh","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --typescript --fix lib test","postinstall":"if [ -z \"$CI\" ] && [ -d \".git\" ]; then husky install; fi"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish pluginsh","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --typescript --fix","npm run doc"]},"_nodeVersion":"12.18.1","dependencies":{},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^26.6.3","husky":"^5.0.6","deplint":"^1.1.2","ts-jest":"^26.4.4","typedoc":"^0.20.14","depcheck":"^1.3.1","shellcheck":"^0.4.4","typescript":"^4.1.3","@types/jest":"^26.0.20","lint-staged":"^10.5.3","@balena/lint":"^5.3.0","catch-uncommitted":"^1.6.2"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_0.0.3-update-readme-8439f7448285ef8e023b0ccb2f6b857f14d5348c_1610527273817_0.21478354649578346","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"0.0.3":{"name":"@balena/jellyfish-plugin-base","version":"0.0.3","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@0.0.3","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"kaisoz","email":"tomast@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"9672aac5fd1b28431aee99d7e71fe1731c24b335","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-0.0.3.tgz","fileCount":6,"integrity":"sha512-0vApOdsmhpbs8cSxNSElhvOX+xcJyS1XJZqfUp2Zz57azBa64y0I+Ysb5V79AJbJMIGD/IMRvprx4TYV0cP2VQ==","signatures":[{"sig":"MEQCIAhTCdgwMJwr9y8fDkPu4/Bh0K7rfXLkuTVpcLMk8YMQAiAPIHyLZfoGotVOQcaCkVuyuLeAZWjV/uiaPhLONPN43Q==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":3471,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJf/rLUCRA9TVsSAnZWagAAKM4P/jA8r7qn2U12UFXCeU56\no4IWNkOEed/rvm/oeEOOIdAz7Zuf7UzuW/r61d9nCH29/jeuElym+GbXO0+N\n0mx1wHEE2kkRXJDp3C3NucO+Zcv3p1R8CUILyh41WU6MQSL+cLpzZnZZUaSA\nJQUvsvmxRZl2OYzv/n59vcajssPqjqkwe2FIQmSUErldZkoI3sPvi3u2mTxI\nSeYuobVDKRwmlsQl9aT7VQqdSakWzidQ486qbj6B4y74CLkLNlaDq13IPnWl\niK03KySJ8qit2SeqqEndYgk9qYqHqV72jnmCubYApuLzp9iw02+STCMZBRbU\nWh0rhXIUFedpqTVSSemt2bEhCxwjCc39TiBjm7FCQiacbOFLj/TrdgyhD/e/\neII6xEOufL32LhclitgVHYq++xC6TYZ39kSDhuxBGhRYsAU2LmpUK++qfb0h\namZLbOtYb9SdL3psR+etIjCvgdtVLWroljW1DbyHN77tEr8gPCjcZH/G++w1\njQkbD664Z36+MkW2O5FFZPDUe8iQ2stL3N19IVP8H/PUiv5qxtZul0UnYlMg\nLjdWh64hMeIjSgFA2GaVVlq/1VoN0O+pCaUsrtoKUh2tuwG2ICnpTdz0bV0m\nnFNiU6sG4mOYFoO6nO0gFXw5kfTGLt4vV8f0uScibzQi8L+UiBCYAV9hb8+3\nPcqT\r\n=0bTg\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","husky":{"hooks":{"pre-commit":"lint-staged"}},"types":"build/index.d.ts","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"5c25d5bd4935b0adcef5f523789f4a00f53f5f27","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint --typescript lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=shellcheck,@types/jest","test":"npm run doc && catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc","check":"./scripts/check-filenames.sh && ./scripts/check-licenses.sh && ./scripts/check-deployable-lib.sh && shellcheck ./scripts/*.sh","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --typescript --fix lib test","postinstall":"if [ -z \"$CI\" ] && [ -d \".git\" ]; then husky install; fi"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish pluginsh","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --typescript --fix","npm run doc"]},"_nodeVersion":"12.18.1","dependencies":{},"_hasShrinkwrap":false,"devDependencies":{"jest":"^26.6.3","husky":"^5.0.6","deplint":"^1.1.2","ts-jest":"^26.4.4","typedoc":"^0.20.14","depcheck":"^1.3.1","shellcheck":"^0.4.4","typescript":"^4.1.3","@types/jest":"^26.0.20","lint-staged":"^10.5.3","@balena/lint":"^5.3.0","catch-uncommitted":"^1.6.2"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_0.0.3_1610527444315_0.4939355285889395","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"0.1.0-add-jellyfish-plugin-3ae0337dc7f30a0756afa66d7f978b73215a2027":{"name":"@balena/jellyfish-plugin-base","version":"0.1.0-add-jellyfish-plugin-3ae0337dc7f30a0756afa66d7f978b73215a2027","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@0.1.0-add-jellyfish-plugin-3ae0337dc7f30a0756afa66d7f978b73215a2027","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"kaisoz","email":"tomast@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"06a0548048d8e15b93ef0cf35c42ec3b1c4a051f","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-0.1.0-add-jellyfish-plugin-3ae0337dc7f30a0756afa66d7f978b73215a2027.tgz","fileCount":12,"integrity":"sha512-azd4b45POlXVVOhImqbF2/LMOWLKmjsN14Owb78MV62PbbubNJGHizSbm5i+631JMj+bv4HZ7MNiaWFtsSQdnQ==","signatures":[{"sig":"MEUCIQDNHH6Z2/H77HJUu+3IUsKiBAVJ2xVOHqhdgBMItcB1ewIgAKWtg9ybG2q0nhrbXX0Zmfu0RtPZA6eIh9y8gjapcnA=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":8667,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgAPD1CRA9TVsSAnZWagAAZqwP/j6BotTCvu4H0rD9Iods\nHCK8PHxkAs+swqElj9IfCIvdwlItqXV4eRtUXAnTB58cQYRReJjErtEpArh4\naIzjKhi2m3POHmWRAQOaxSlE0k8CYPLK7eGOgqSHDd9ncgrDfhae1jU5PXCK\nchVb44dE8UE+3Y3actvNytiw5MteBGupuyWiyI5wjxjjK9CeYQLYkULdgP5O\nP+W9No35Pe2bDHQxmYOejAV+AuQx8l0pmix3JZ2yRmpGTH5nXt4HNXoLY3cU\nR+TOsgTrBqNYRiUsHSPg6CUE1XCbVcBIoqO9vQKxJ41QdkerERI1Ln2LRCSG\nvr8lrh+oaxNmTEKyd1HkCUbgHFNaxHwkcSYz85yZUqKWRMTWSgKQghrk+Hwb\nyL2bae1jFXzRe0GXjdXuot/IB9CZCv+spkzOUPqyyyEyuQjyZNaTkKt+kGQT\nZwRsyu9p9GuYJU+FUogzaV4uiWI607IM2SvvjAqgvjNSgYhOwmsgGXky+ZTs\nI6YN71OyM6TOIbsF9pe5I7xIIgmTj/PArmEEGYuK87zJqaw4yq4Fb5+8Zhfz\n6A7lA1n0ZzXemKaJ3HNhlCpDEkaoquQK7rVvmwTzBnvHzndc+jWq4ju28IOz\nOfiYOc3xPDZz4nYwOEhsKA7cUu9TFFO6pm75fprQ2K8kgJlNWJOa48gaJann\n0nCT\r\n=qU2R\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","husky":{"hooks":{"pre-commit":"lint-staged"}},"types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPlugin` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\nBelow is an example how to use this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager([\n\tDefaultPlugin\n])\nconst cards = pluginManager.getCards(mixins)\n```\n\n# Documentation\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"3ae0337dc7f30a0756afa66d7f978b73215a2027","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint --typescript lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=shellcheck,@types/jest","test":"npm run doc && catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc","check":"./scripts/check-filenames.sh && ./scripts/check-licenses.sh && ./scripts/check-deployable-lib.sh && shellcheck ./scripts/*.sh","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --typescript --fix lib test","postinstall":"if [ -z \"$CI\" ] && [ -d \".git\" ]; then husky install; fi"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish pluginsh","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --typescript --fix","npm run doc"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.20"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^26.6.3","husky":"^5.0.6","sinon":"^9.2.3","deplint":"^1.1.2","ts-jest":"^26.4.4","typedoc":"^0.20.14","depcheck":"^1.3.1","shellcheck":"^0.4.4","typescript":"^4.1.3","@types/jest":"^26.0.20","lint-staged":"^10.5.3","@balena/lint":"^5.3.0","@types/sinon":"^9.0.10","catch-uncommitted":"^1.6.2"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_0.1.0-add-jellyfish-plugin-3ae0337dc7f30a0756afa66d7f978b73215a2027_1610674421022_0.15348496211554097","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"0.1.0-add-jellyfish-plugin-2b4f368a1af03dbe4d1db958087bf0d85ac3440a":{"name":"@balena/jellyfish-plugin-base","version":"0.1.0-add-jellyfish-plugin-2b4f368a1af03dbe4d1db958087bf0d85ac3440a","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@0.1.0-add-jellyfish-plugin-2b4f368a1af03dbe4d1db958087bf0d85ac3440a","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"kaisoz","email":"tomast@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"7519033d9c75161d6f0cf1908a78a55a0ef1d76a","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-0.1.0-add-jellyfish-plugin-2b4f368a1af03dbe4d1db958087bf0d85ac3440a.tgz","fileCount":12,"integrity":"sha512-OHmsn5ldc5AmoLww+0am7bi04H+tGZw/v9s6SD/rl68TNyzbnqi3TGpHgvIxk2cVSMNCWk2t1DpPvX/bBS6auw==","signatures":[{"sig":"MEYCIQDrFa6LZavyPDNu369fEeskuYMr50qn+b5PSnKHeRawNgIhAKl0CSXT85xJL0UXLUnkq0K2/v0wgeH9wzkfnPNWn4W6","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":8667,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgAPLrCRA9TVsSAnZWagAARB8P/2WtQowWeJjIpbjfZLCk\n/GGtOFOF7lKCAzLPNEPp6VbcUwu1pqCp8gZ2LpeqRZixeyn8aJBz32MLfMAU\nMCqceFYQwRiHwP1+uWlZV8j5hhbhK9QPGLiKYCL4iZ0OYoaVADNxc5JsNbsp\nfviT/9fEjOWZzf8znCzVaxzaRXBlQpHp8YNtw4zD2DC/N7JNVwHJwPz6yBl6\nOAAG88T+4Zyznu+4R5+ehRbU33y6SWKK4fHiKlRykx7F8nmgHWWMOX2//sM3\n4Qe7wmXUt0grKw14WIvBbl2xBIBfXMA/jltO2USOnByD+todGCA4ascp6by4\nwQEopiVf3sJW+PBQZ2WFPtGXwqGijBuIWGD01ohrKqGBUBqhtFZIuxedc69E\n0+rKCiXGkWTg43G2bT5GDWiyPo6HsKaj9bA/Vk3y0Jc/zaIUVMOFYKym79o2\nMpRAPTdPDpcsldsX8BlTgAJj/LIXTejZV68VR2R6Q8GFsnnUkv+okfXXs9sR\nSTWMR12JkNYvBlAU2Hpg5gMm5FmYndHVArdAkxQAhMSRxuHxiF0TjeKluAA2\nRNwUQyB1zQceAhs8OXthsJXX3ryTLat5VmS8IREyAHyKuPetoIXi/cD4QGO/\ng54d6xll54j8oj4TSlVrxuaSlvAtIs6vlVArLOYeg9BAWF1v0lcp/rjQVf/h\n6EGp\r\n=ZKML\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","husky":{"hooks":{"pre-commit":"lint-staged"}},"types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPlugin` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\nBelow is an example how to use this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager([\n\tDefaultPlugin\n])\nconst cards = pluginManager.getCards(mixins)\n```\n\n# Documentation\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"2b4f368a1af03dbe4d1db958087bf0d85ac3440a","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint --typescript lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=shellcheck,@types/jest","test":"npm run doc && catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc","check":"./scripts/check-filenames.sh && ./scripts/check-licenses.sh && ./scripts/check-deployable-lib.sh && shellcheck ./scripts/*.sh","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --typescript --fix lib test","postinstall":"if [ -z \"$CI\" ] && [ -d \".git\" ]; then husky install; fi"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish pluginsh","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --typescript --fix","npm run doc"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.20"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^26.6.3","husky":"^5.0.6","sinon":"^9.2.3","deplint":"^1.1.2","ts-jest":"^26.4.4","typedoc":"^0.20.14","depcheck":"^1.3.1","shellcheck":"^0.4.4","typescript":"^4.1.3","@types/jest":"^26.0.20","lint-staged":"^10.5.3","@balena/lint":"^5.3.0","@types/sinon":"^9.0.10","catch-uncommitted":"^1.6.2"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_0.1.0-add-jellyfish-plugin-2b4f368a1af03dbe4d1db958087bf0d85ac3440a_1610674923513_0.8263165458314512","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"0.1.0-add-jellyfish-plugin-74e3a8b4c74ec5869400d550f3d4a002f0d70336":{"name":"@balena/jellyfish-plugin-base","version":"0.1.0-add-jellyfish-plugin-74e3a8b4c74ec5869400d550f3d4a002f0d70336","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@0.1.0-add-jellyfish-plugin-74e3a8b4c74ec5869400d550f3d4a002f0d70336","maintainers":[{"name":"toochevere","email":"pj@balena.io"},{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"kaisoz","email":"tomast@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"605447e4d7024edbf7cc93d06013e1169d21890d","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-0.1.0-add-jellyfish-plugin-74e3a8b4c74ec5869400d550f3d4a002f0d70336.tgz","fileCount":12,"integrity":"sha512-9uILHz69wm9AgtbjHLo2SA4+e4Y4B9/6EAhe81YA1+U4kEpO91mtZ8rTJC1ziuIqapoZeMSn6ucp8luMBTyH2w==","signatures":[{"sig":"MEQCIB5wCGVEiMLawDzMD4R5doSpEXNgeMe4oiJSBBs3goBAAiA3LX1nb7zBUu5KDpzprQwqPQYKDAOQ/CBto8sJ6IHwIg==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":9568,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgBOwBCRA9TVsSAnZWagAA8IYQAJtH5OOthH9lzyKpP2rZ\nFfl6Z6BNxgsa3vI2UCfYtMv2CYVtOK/J1o4TWBiUlVAgFsMEIeEZLL2NCFvy\nnuZHzk5bQLILstzWZ+rQ5yXXnlGbkGWFhISvkDURMw/g6AOSHXYCQQttwzvL\n7TTelKawqCeawCcFc61/T9+A1mLgyUr6XdWJxeJUbG+Y5tDPQqUq4hOIKxf7\nk2qykyppngl7SxYn535rrBftrKl/mRoFLtTXR7pkyfjj17A19f3OSNJcqGPi\nwUjI/3gKtVJQfiMQ+TR0DcRM9jnqJ8SEWQgDv86wDRLhdBWrrT5c4foEeX/m\nXJwmS1/HjLr6h3HdOL9IYmCatkP2ZoVsUAG8EH5H+SaVDW2zUvz+dusBwIZ/\nrpcZCzQxOW/scMIy2r5nGvMoWhVx/0Qy33s2R+CCU+hoJ/n6/Kpn+UfrfNdD\nyoQeXsEIKwiJlbZWkRaveEIA77QpC8hsGusD1im+FzBln8t4lX1IanGP2dfx\nJ6CfUSmGHH/aE/rOQBqyrvYfICBOvsonby85suC/7MmH3BtuIlWKuxBSbspw\npRk32fw+MC8GngSbdUBDJJG6DVpHZhtdzKskvEI1rNU5FXKtmOhTo2tPsjzK\nBzop+WrszPlqRFjqKu7ti09pNTRcrAjdkFMfleIN2t2lJ2lVo6mag2S8Vf91\n3MBF\r\n=Yjm0\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","husky":{"hooks":{"pre-commit":"lint-staged"}},"types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPlugin` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPlugin`\n\nBelow is an example how to use the `JellyfishPlugin` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPlugin\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPlugin {\n\tconstructor() {\n\t\tsuper({\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: []\n\t\t})\n\t}\n}\n\nconst myPlugin = new MyPlugin()\n\n```\n\nThe `JellyfishPlugin` constructor takes a single argument with the following optional properties:\n\n* **cards** - an array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - a map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an array of integrations defined by the plugin.\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager([\n\tDefaultPlugin\n])\nconst cards = pluginManager.getCards(mixins)\n```\n\n# Documentation\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"74e3a8b4c74ec5869400d550f3d4a002f0d70336","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint --typescript lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=shellcheck,@types/jest","test":"npm run doc && catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc","check":"./scripts/check-filenames.sh && ./scripts/check-licenses.sh && ./scripts/check-deployable-lib.sh && shellcheck ./scripts/*.sh","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --typescript --fix lib test","postinstall":"if [ -z \"$CI\" ] && [ -d \".git\" ]; then husky install; fi"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish pluginsh","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --typescript --fix","npm run doc"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.20"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^26.6.3","husky":"^5.0.6","sinon":"^9.2.3","deplint":"^1.1.2","ts-jest":"^26.4.4","typedoc":"^0.20.14","depcheck":"^1.3.1","shellcheck":"^0.4.4","typescript":"^4.1.3","@types/jest":"^26.0.20","lint-staged":"^10.5.3","@balena/lint":"^5.3.0","@types/sinon":"^9.0.10","catch-uncommitted":"^1.6.2"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_0.1.0-add-jellyfish-plugin-74e3a8b4c74ec5869400d550f3d4a002f0d70336_1610935296816_0.6265884233792236","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"0.1.0":{"name":"@balena/jellyfish-plugin-base","version":"0.1.0","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@0.1.0","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"kaisoz","email":"tomast@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"c17d40bf2cec482706f1d00fcbc368684af8921d","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-0.1.0.tgz","fileCount":12,"integrity":"sha512-lPXj44c60IA6vTuV6sXgP1p34DvmGT3roxUJqCbPaGZ9sMeUKM5jJU5T0ixfmwKe5QWx8T5gi0AbSnquQZ3gig==","signatures":[{"sig":"MEUCIQCFcAb5vokEOvwiZxbS10aurOHb/pY+OXSCHS6CJTF4DwIgXn7kTzrCjgbcovRL+23GTn9B7R56uiaUMVVYRML9fVM=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":9506,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgDjjPCRA9TVsSAnZWagAAHp4QAIBjmw4mNRCT75hTL0Cz\n/I34HsGTB7l6i7QOrDmFc0tUt9m9X6AlQ8WHPTDoHWSv9Lr6AldXdvq0erdd\noBU/Mmuz0a8JWZVsl4zd8MN0LacI1boNFCwQiES/3r6Ut8vrNF2lCwbDpy/g\nmJQGbjPFM5a0dLYFVy8Hpi/pTPKjmFe+JOO/KmBctkW/HiqpxlDgkPGtLSrf\n5XravuBfaoOikWPMoHKuCqZVq6ZolZ2Ksc2HRiLzBAHzG9a7oxD+tap0KIHS\niVaEkiryC668QlyKfGmqpB5PWswNrx4Uzq+2/j0I49tipFzz5DqXuw0Ty8TP\nmYo+mnGpTa9fWcxhIHs5dSogkeYwztvjfxlbyKpxUu/8AEeE+WaQP49KAqb0\nvp+mS/pJEBcxGJQvk8aXsIRKWu6cU3P3gc5cDbY2GgNN0xTWyT9iJWkFp1ZY\nH0q+N3M6MX7UUOK+hjbYOzmqfxiyg673LAf+qoeEfB8ak0HtYSKwU2yVEVCj\nHxJJUkvG/1p5LKaNh+vfG9M2p2yptTjbaBMwxcau8ehSWWPUn+XaAE/To1bw\nTTBxn/bE5VfULbt/VVjcphLreo6647x/0H41ekis6MHLd9NCaaoJSAFsRmWx\nJqGLcziN7Uvj3P4H6guf3J5UVLVCITvQLVzla6Le1tIDkfyOSdPMz72gdL/V\nRFEs\r\n=OZJR\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","husky":{"hooks":{"pre-commit":"lint-staged"}},"types":"build/index.d.ts","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"5d741a14877bddd286bf91bf482e3a1b99c0fa7f","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint --typescript lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=shellcheck,@types/jest","test":"npm run doc && catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc","check":"./scripts/check-filenames.sh && ./scripts/check-licenses.sh && ./scripts/check-deployable-lib.sh && shellcheck ./scripts/*.sh","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --typescript --fix lib test","postinstall":"if [ -z \"$CI\" ] && [ -d \".git\" ]; then husky install; fi"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish pluginsh","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --typescript --fix","npm run doc"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.20"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^26.6.3","husky":"^5.0.6","sinon":"^9.2.3","deplint":"^1.1.2","ts-jest":"^26.4.4","typedoc":"^0.20.14","depcheck":"^1.3.1","shellcheck":"^0.4.4","typescript":"^4.1.3","@types/jest":"^26.0.20","lint-staged":"^10.5.3","@balena/lint":"^5.3.0","@types/sinon":"^9.0.10","catch-uncommitted":"^1.6.2"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_0.1.0_1611544783155_0.6226294264536174","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"1.0.0-add-plugin-manager-68ed1c7ca04e201cac7b127888748dde4429c759":{"name":"@balena/jellyfish-plugin-base","version":"1.0.0-add-plugin-manager-68ed1c7ca04e201cac7b127888748dde4429c759","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@1.0.0-add-plugin-manager-68ed1c7ca04e201cac7b127888748dde4429c759","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"a6c64923c93c2325b37f440ce4c5e6a020088a91","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-1.0.0-add-plugin-manager-68ed1c7ca04e201cac7b127888748dde4429c759.tgz","fileCount":3,"integrity":"sha512-BxZMlh0UDTNwaGgJIL8yMt+AjoIiGiTBtn3eoWzqX5+qd2NQdvRVduZC1i3EZUVQN9AIeHR5S63m4PqcPgR4QA==","signatures":[{"sig":"MEYCIQDBDAORwC2B6Jh34cQvhZuugjdBocfNCJVoYtcUmBsttgIhALyzP0yvTCEIPMYFGzTQgAy/0LnVAtsy4Oe6PrxGIkrZ","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":5242,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgD/9SCRA9TVsSAnZWagAAUf4QAIJXvWmeLh81wACg8pbi\nFU8oVe0+GaPO4LvsspwGLfyy9ujfK+8azb73iz8IdGU8ixojfhZRnVLb2QMc\nv2aBDTfkWa280hU7Rly4yCPrMqAU6v2/3YPzyAGunqSzGVa0JHnYYZy+szZm\nFydTL5bO00hMFe7AbT8WXd+RNJULo1f+FmpLYZWEoRjtQrY/K6EOAGgfcIqW\nKJBuhEJVrK9C4P3BJ8+ov80EYeobMueYLV9ACGuyiT1sVkpI7Cn6wS2d60vh\nNbgE5Rxd59aatfmT3/s2bEK+Wtv/jK9QlFtNRoWplGBklmc8nFIL2wpLM4DS\nBLLB7YHoYFO9EGqsp79cmTh88Lh45VF9A0c52JO8r+rPhoj1mGM2D737V70W\n7fnszH5z3C1jMvt6NwYI3H85oQNciwrpf95nAw9bqKzqBKBHKLtNxmRW9Sy1\n1fNoOc0DkWnelLqfstt12J9EeJYP1k5+vWL+U1tWAMKuldXMTvnRZfzHFexk\nk6Trf1fPLyyQeVsMpOz2/187PmXPOycIenv83mMX4kf64dt+g0wJ8zZZF97k\nwOmoqbW5ztd7rD/AVqjotf9gYxVMpUUELG8Ud0ryz+iMreg5DBIPyYR7+3Cl\nzpc6abzI18BPKupRzR7OGA8TjHqG88TDLIb3i7f31iK9t6rEBl4oFuuEWUHM\nT61N\r\n=Jzxm\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","husky":{"hooks":{"pre-commit":"lint-staged"}},"types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: []\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"68ed1c7ca04e201cac7b127888748dde4429c759","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint --typescript lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=shellcheck,@types/jest","test":"npm run doc && catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc","check":"./scripts/check-filenames.sh && ./scripts/check-licenses.sh && ./scripts/check-deployable-lib.sh && shellcheck ./scripts/*.sh","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --typescript --fix lib test","postinstall":"if [ -z \"$CI\" ] && [ -d \".git\" ]; then husky install; fi"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --typescript --fix","npm run doc"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.20","semver":"^7.3.4","skhema":"^5.3.3","json-schema":"^0.3.0","@balena/jellyfish-logger":"^0.0.217"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^26.6.3","husky":"^5.0.6","sinon":"^9.2.3","deplint":"^1.1.2","ts-jest":"^26.4.4","typedoc":"^0.20.14","depcheck":"^1.3.1","shellcheck":"^0.4.4","typescript":"^4.1.3","@types/jest":"^26.0.20","lint-staged":"^10.5.3","@balena/lint":"^5.3.0","@types/sinon":"^9.0.10","@types/semver":"^7.3.4","catch-uncommitted":"^1.6.2"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_1.0.0-add-plugin-manager-68ed1c7ca04e201cac7b127888748dde4429c759_1611661138452_0.2344661607432199","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"1.0.0-add-plugin-manager-411a8ac59bab206b03bb0c458d806b4c83cdb9d5":{"name":"@balena/jellyfish-plugin-base","version":"1.0.0-add-plugin-manager-411a8ac59bab206b03bb0c458d806b4c83cdb9d5","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@1.0.0-add-plugin-manager-411a8ac59bab206b03bb0c458d806b4c83cdb9d5","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"e49329be37cf6e37b3d9a93008b12bfaaa0e3f2f","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-1.0.0-add-plugin-manager-411a8ac59bab206b03bb0c458d806b4c83cdb9d5.tgz","fileCount":3,"integrity":"sha512-fap2soPGj69aZHt43EAETvPxsxHE76i6dBDx25GyAoHZpwzzKfS45W3pKyUnfrGvrGnvlEE/vrLgQNjUttMQbg==","signatures":[{"sig":"MEYCIQCcd1Lxpa8NT2u5ebTiORnbsUvnAgE1A7zwemH/WSRVOwIhAIYQMnA5hTgLIsZaZRqXrf3odU3JZ8/i89TxUNZQk1Ca","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":5242,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgEVNICRA9TVsSAnZWagAAojkP/3jkojIF/3+QNaRm2lvK\n+7jVJAMKW+ZY8UTCUf/81aQ9Aw1hO8g0kFJ/4Qx9eBUl4tP7mY9XRvxanRYi\nQ1kOMlikL2pUyS//Qp7/UMAWfxIJpgC2WhPbuFb99UE6pDxprzxnFFN0NrtY\nhz9BEor5+hbC+vNmOmiEHhoSiIvM2DOdCPsex8FeoTnXAcjLw2D8M1//d2k3\nlEaZvg8pWG3zC6t6JeBWM+vVfPxf+v08SDoHcOKQPiimDPi8A/yKEDZk//xM\nAeIDZrcEELtaOTFD/fzbnVuhS/+if0f4Diw6g1GYC0r+x2zvNL8hMpWIlBhB\niq2wRbzEGjNBtvtjX6b2xqWxg6R7GSsayX/LGnX+isHZCQzFPd5hNyF6GABx\nF0cUD04ENhZxnIS4UIMv7z/5mkwJVDUgog3WwVUgo7esbUTvzOAynzpvUbhP\nv5kitYAt1CaELX7Awxtr4f/taYMx0esbP7YCbV3hNZNgIuRLTMB8L2HXhqxU\nAf5HtqB0RzIyVfvr8y58e05QtLwRoGgndxTnCmYRMDWk15OQhO21jGov77DG\nTQJ0fXM3fv45V7xlacZWV3M7u5pO89VTXV65yZU0h/aIqAC7LTJdBBapxqu0\nDALIeVgasGAiLVZ6kFenoQGEfdKFWNJpcKs79j0KqgQzUOFkCAE6UUwuTC2p\nNiB/\r\n=y8us\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","husky":{"hooks":{"pre-commit":"lint-staged"}},"types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: []\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"411a8ac59bab206b03bb0c458d806b4c83cdb9d5","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint --typescript lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=shellcheck,@types/jest","test":"npm run doc && catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc","check":"./scripts/check-filenames.sh && ./scripts/check-licenses.sh && ./scripts/check-deployable-lib.sh && shellcheck ./scripts/*.sh","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --typescript --fix lib test","postinstall":"if [ -z \"$CI\" ] && [ -d \".git\" ]; then husky install; fi"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --typescript --fix","npm run doc"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.20","semver":"^7.3.4","skhema":"^5.3.3","json-schema":"^0.3.0","@balena/jellyfish-logger":"^0.0.217"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^26.6.3","husky":"^5.0.6","sinon":"^9.2.3","deplint":"^1.1.2","ts-jest":"^26.4.4","typedoc":"^0.20.14","depcheck":"^1.3.1","shellcheck":"^0.4.4","typescript":"^4.1.3","@types/jest":"^26.0.20","lint-staged":"^10.5.3","@balena/lint":"^5.3.0","@types/sinon":"^9.0.10","@types/semver":"^7.3.4","catch-uncommitted":"^1.6.2"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_1.0.0-add-plugin-manager-411a8ac59bab206b03bb0c458d806b4c83cdb9d5_1611748167483_0.6466313774557444","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"1.0.0-add-plugin-manager-411a8ac59bab206b03bb0c458d806b4c83cdb9d5asd":{"name":"@balena/jellyfish-plugin-base","version":"1.0.0-add-plugin-manager-411a8ac59bab206b03bb0c458d806b4c83cdb9d5asd","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@1.0.0-add-plugin-manager-411a8ac59bab206b03bb0c458d806b4c83cdb9d5asd","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"07a984398b9bbbbd54c44f8acefd98812a9af78d","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-1.0.0-add-plugin-manager-411a8ac59bab206b03bb0c458d806b4c83cdb9d5asd.tgz","fileCount":18,"integrity":"sha512-Usfzg0tJQFpj+rYxOM9esLTD3mdCyyGhMRXO9za5KqxbtRAF+MLAKjka6aTBnOMYd0ZjExA76sDs3P0XKxwsYQ==","signatures":[{"sig":"MEUCIQCGbuNJB3FLmWiNzuLbMFgDxTmkJhUfCMIo9+L5NBPnsgIgRTUXrbZUXBHipaIzhRPyDV+SlVDqX8Bpbc147f9mEps=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":21515,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgEVPVCRA9TVsSAnZWagAAMyoP/07NSKOCTkbUGnq6B0C2\n01VBNaPBJGdY8ZZgxQXvpD9sk9p0/Ox+GYWjGgShS5R9KMaD7tqs/4RYyxQP\nuPoqTxqG9T97xFcQJTF/Kd0bBK+pkcUR1RNQbyJIu0pnL5Y6nZaSsQSAMk7p\n+FhHOn/f3O4nfyFqXa6UIUwm3TCNg+YhBRsEdB76fxID35YfVkpkgYTVpDr0\nlaL2yeWuZwSJ0xzp3d/2QHPbF3ID2Edr4/lx6SyL/EptXZKN7vUoouQpHjAo\nCO2GkChC8+I6iiy27WLIfD+onJ0Yha/RlQT8zCAD8jXXqqpjTuIXDIPcIRmS\nqUF0M3LdkvXhBElT0eym2glumZYFgWC7gklnb5fqYI5w2UY+1hy8LFD5Gy+4\nxIP5lpWQIzYL4mvCRMU8sQ+WE7fwXm7PB1hW6dPZpaY32VWaBGcuQ3tLXBsZ\nRqmhtdkkn5TZphQJtm3qJua8YQsHTvRfSYRnaFxdYIzq5VbuN9/A65eJk1XV\nTWZrmEADFmp26PCqW2KXOrhhxEtTtxGRF62f2Z+8LSeibMXH6o6DVdi6lhqZ\n/5Wk9gMbktiEDsfwy/A6J/FAgTO8uogPyCDGG1b9/ZaOLJxfByUvukz087Xa\nbDfaXRFJvb8ntHEk0Kcz9ArvFqk8emr9UWS2+9uwSSoDQ6DfmA2r1jAjFpVa\n4OsC\r\n=rLtC\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","husky":{"hooks":{"pre-commit":"lint-staged"}},"types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: []\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"411a8ac59bab206b03bb0c458d806b4c83cdb9d5","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint --typescript lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=shellcheck,@types/jest","test":"npm run doc && catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc","check":"./scripts/check-filenames.sh && ./scripts/check-licenses.sh && ./scripts/check-deployable-lib.sh && shellcheck ./scripts/*.sh","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --typescript --fix lib test","postinstall":"if [ -z \"$CI\" ] && [ -d \".git\" ]; then husky install; fi"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --typescript --fix","npm run doc"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.20","semver":"^7.3.4","skhema":"^5.3.3","json-schema":"^0.3.0","@balena/jellyfish-logger":"^0.0.217"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^26.6.3","husky":"^5.0.6","sinon":"^9.2.3","deplint":"^1.1.2","ts-jest":"^26.4.4","typedoc":"^0.20.14","depcheck":"^1.3.1","shellcheck":"^0.4.4","typescript":"^4.1.3","@types/jest":"^26.0.20","lint-staged":"^10.5.3","@balena/lint":"^5.3.0","@types/sinon":"^9.0.10","@types/semver":"^7.3.4","catch-uncommitted":"^1.6.2"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_1.0.0-add-plugin-manager-411a8ac59bab206b03bb0c458d806b4c83cdb9d5asd_1611748308898_0.6058113574565829","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"1.0.0-add-plugin-manager-4c90716f8ec452158887852a50de0e2edb4553bf":{"name":"@balena/jellyfish-plugin-base","version":"1.0.0-add-plugin-manager-4c90716f8ec452158887852a50de0e2edb4553bf","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@1.0.0-add-plugin-manager-4c90716f8ec452158887852a50de0e2edb4553bf","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"2d6556ce5472458a816396b5e961d1541034bb23","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-1.0.0-add-plugin-manager-4c90716f8ec452158887852a50de0e2edb4553bf.tgz","fileCount":18,"integrity":"sha512-2KzyegAFU8+NgHYSvX0xcpntb6ITB+2f42zCAvObl2gaLOrz22LMuaMbxWrDHlY8749orOxdMVInleDzoNaUHg==","signatures":[{"sig":"MEUCIQDa2nbuX+GfKoXayWlFfybn57MSZGaI1AQTEM/xBRZ/cwIgAiSbQFN9gZkw/8MmGXLIdo0kCLjgdD4zsRV2Vnz8psA=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":21512,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgEVuiCRA9TVsSAnZWagAAUEEQAIa3Xu5srVBGdTQvgJdP\nVHh5wHGb0bp6aDpjqqMb32YvVR5Ya8hUlMsQO/pYUc23SwneaTd1LSVGC3Dn\nBrz1eLOYyBidfKFNBH4MvgmlWyy7d3eXh/kNhKk+AeIBE9ijXts/cpo8bom8\nuoL+lvNnDg6WjW6li6gu/DUCwwFOIfvy4Fdc3afiWuCvi/IzhakEXMeUiVH4\n+CWPZYsE/XfHjI1CjYXM9Nj3Oqo0PWlCUKzRZmBpyicE34Iwi6NSLf8fX5T+\n/NhxaPO9OfbzdEVC7xnUmiwNqb/PmNccgqUvhl+yiY7JNA9D9vnrkgC7uZb/\nOLAnS2FSc20nIq/3ntsq6YWT71fmI9vOI/So/eeeqnhhUnWoMxvqSTha2tPj\n3yXGjJ0nhSNMkGbIpBWQCy10mEPc5M4w1JYgob/0wD/DU0XX9uzUIE6Z0Lp9\nGNd7JfGxKI6Ye9M1/W0uRPyxdNiHSIlnZww0YbtJQdole2FovJBpABGRQVdU\nkmS/OR451OnDIjUvroQEqxbewon2Pypf+w+dWUbia+TVFl703TtaA4riy/H6\nhi54BGY5Nvj5CjJ2mLLR2dt93wjJbRJ9+lcULooJK+87E3ZD+q5nP2jPIf0b\nrbbi1k/4v19jrn3yNwRLk+B4frVDHi/+giwCmYZFrljrM5Ap9iKHQEnROt/n\nJJKQ\r\n=R9ty\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","husky":{"hooks":{"pre-commit":"lint-staged"}},"types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: []\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"4c90716f8ec452158887852a50de0e2edb4553bf","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint --typescript lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=shellcheck,@types/jest","test":"npm run doc && catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc","check":"./scripts/check-filenames.sh && ./scripts/check-licenses.sh && ./scripts/check-deployable-lib.sh && shellcheck ./scripts/*.sh","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --typescript --fix lib test","postinstall":"if [ -z \"$CI\" ] && [ -d \".git\" ]; then husky install; fi"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --typescript --fix","npm run doc"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.20","semver":"^7.3.4","skhema":"^5.3.3","json-schema":"^0.3.0","@balena/jellyfish-logger":"^0.0.217"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^26.6.3","husky":"^5.0.6","sinon":"^9.2.3","deplint":"^1.1.2","ts-jest":"^26.4.4","typedoc":"^0.20.14","depcheck":"^1.3.1","shellcheck":"^0.4.4","typescript":"^4.1.3","@types/jest":"^26.0.20","lint-staged":"^10.5.3","@balena/lint":"^5.3.0","@types/sinon":"^9.0.10","@types/semver":"^7.3.4","catch-uncommitted":"^1.6.2"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_1.0.0-add-plugin-manager-4c90716f8ec452158887852a50de0e2edb4553bf_1611750306322_0.4518218011283741","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"1.0.0-add-plugin-manager-6dcf90b996884be485d47a37685e2154c2f4f62d":{"name":"@balena/jellyfish-plugin-base","version":"1.0.0-add-plugin-manager-6dcf90b996884be485d47a37685e2154c2f4f62d","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@1.0.0-add-plugin-manager-6dcf90b996884be485d47a37685e2154c2f4f62d","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"8296b858c69227c3156614c60ca0f9b6a8452d62","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-1.0.0-add-plugin-manager-6dcf90b996884be485d47a37685e2154c2f4f62d.tgz","fileCount":18,"integrity":"sha512-hC3MRiDWjL8aDah2Lar2/dZNjsLv9n2zjmbFbqkYjalu79sp1Y9UnzJAozPP5oRlP/wBVt98l1IaH14ffb14bg==","signatures":[{"sig":"MEUCIQDGcKcIw+Zdltuuk2VPzaqRWOxWDrLSVO/FFH8KYUH0bgIgRvcK4RmFEHjWVa3ahEoHccUwkchA7T87h1xTiPjVQYg=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":22065,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgEiyNCRA9TVsSAnZWagAAtz0QAINEGPUqD+4ADHuPiCLb\nhN6ZHQqZdI6konFlhVf7kwzHYuH5CBrLXAfi7jy0UJSoh+lDv/UvdwzCAzA9\ntYaWEgkCSRkYmOW4N5/3k3x4MtcYXK3GYkuR9DZ2nT7PeyEFaPTolvZP2wQL\nQFIPbq3qs+/tW34R/UscInusW2Fih5Q2mHLzs9fQ0RZuNH5qUT8mTzYhelJK\n7pqXW8VLKhaGfj83PDMFbb8UOeBYb7FLGrXiDUPmoNCnVystjYWtZlmCzqPg\n2pFf/8v0GFKlzaYEOn1GbEkIw+ZMpd/rXxMlseNgbwdEUKWjGhk+hWpB6Yxv\nStlURyL0MOyg07P/6yF1HMkMtIFQqOEIipLFQDDDJwP/fhH5xABtmv3mVdoi\njWE32cTQkybA9C0bG36RFcKv99Qsg3Iedzluz/hEQDk7LxyQTNxg74MKH1ZZ\nAea5ZKxEJz+STqkX9YHqA/sWs/8Fir0QUrH/HJwityMF/PETY1h4LMFKKW1X\nTaGcVYbNAhx226xaFqQzhCVvS/Rnrd9Q43/BXhrU1VrHr22b87jWl83+FNwm\n0og9QCoxP2Ye9KYP/Qp91pdbDSoahexmCH142vGpgrJvP6sXJxjEaNTwQmse\nG950aWWMmrCLLNiTrQXoZHDULB9rdtQCYhPw6vNonJEaR4CUQQxH4JraEDgb\nk1eK\r\n=acq4\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","husky":{"hooks":{"pre-commit":"lint-staged"}},"types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: []\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"6dcf90b996884be485d47a37685e2154c2f4f62d","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint --typescript lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=shellcheck,@types/jest","test":"npm run doc && catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc","check":"./scripts/check-filenames.sh && ./scripts/check-licenses.sh && ./scripts/check-deployable-lib.sh && shellcheck ./scripts/*.sh","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --typescript --fix lib test","postinstall":"if [ -z \"$CI\" ] && [ -d \".git\" ]; then husky install; fi"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --typescript --fix","npm run doc"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.20","semver":"^7.3.4","skhema":"^5.3.3","json-schema":"^0.3.0","@balena/jellyfish-logger":"^0.0.217"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^26.6.3","husky":"^5.0.6","sinon":"^9.2.3","deplint":"^1.1.2","ts-jest":"^26.4.4","typedoc":"^0.20.14","depcheck":"^1.3.1","shellcheck":"^0.4.4","typescript":"^4.1.3","@types/jest":"^26.0.20","lint-staged":"^10.5.3","@balena/lint":"^5.3.0","@types/sinon":"^9.0.10","@types/semver":"^7.3.4","catch-uncommitted":"^1.6.2"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_1.0.0-add-plugin-manager-6dcf90b996884be485d47a37685e2154c2f4f62d_1611803788883_0.49680695447245626","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"1.0.0-add-plugin-manager-499b0723694b9b5c351fdb64ce20298870f9f8fc":{"name":"@balena/jellyfish-plugin-base","version":"1.0.0-add-plugin-manager-499b0723694b9b5c351fdb64ce20298870f9f8fc","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@1.0.0-add-plugin-manager-499b0723694b9b5c351fdb64ce20298870f9f8fc","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"a26b7b89a72768991aa1ca79fe31aa4d8600550c","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-1.0.0-add-plugin-manager-499b0723694b9b5c351fdb64ce20298870f9f8fc.tgz","fileCount":18,"integrity":"sha512-Y/4UPWFKfyBKtP9iB3Pn62L+Dj2Rs6WxbrElpc+hzoHpD4kCJf1tbmI3Pwmbhghh+fXWIbwiuqIZ6F/5YnayjA==","signatures":[{"sig":"MEUCIGi5INVXhnuEChi8Z9NGQxj8cdFn3Fb7JI55HMkaGJb/AiEA9r2Oyw2kXGvqr5tTWW/vZ6ldz/BLlX7qmGWKTAkM55Q=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":22065,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgEjO3CRA9TVsSAnZWagAADpMQAI7Mg6R1Lu8ZzF2mJ0aq\nE5kustNCXnNH8VANrA1VhhwbIB9kWtzk7BKch1SFWn5O3/sP2DSrtD597qLn\ncN8YIvsXHkWxTR1PpN9xdfBY5MYi9yl9Ik+ddrXkUXaDKrg6XvFI38+MTDjK\nCebha4dj8WPVL0f4lrJK7MS6HH0eIC6cVg+BRwBq9lKGZ8Zuo2C5AIfw7gwf\nFz3KO//UmqGVJNTinbSTrmFhGAeNun9JvnhtkaUUudfC/ZS38M1Bd8tlmpMQ\nOxy/RuQyDaRPHy89PPqPGUYhjppJmokG/+7Wb0an7/NAGi0dp0MoUwYcn7Jz\njPdOKN0pjIKTlnwj0C1VNB0qfnELUIesomNhRA+8T9B+QZTZKAZwneFVzUfM\n+zTZXW5F4ZCdPLRCv63Ltam/WRqjoLrIPwCe0Yi9z15rJTqrgN+oEqwO1hei\n0d2kS2AqpzlFbUG6k9w8O0o/bfy9NicsPyz6ODYE4j1nAU2mhe+krEVaxC41\nqLc8JKnss21ob9ppp0quHUTQ7bFniq43qNANiIWHpqPnvc0tSenXEinU9X3I\nE540LuCwso/I9g1HTAaNQWJv0bGSMoygVZ28+mHvmgOpujr1BeQ16ixOcnMW\nYysrWZcs4QkdJY7hKEGlcWPfZFhTE1t762x9xuOVH/3yaySO5KbejJPgV0ew\ns/J/\r\n=iu1i\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","husky":{"hooks":{"pre-commit":"lint-staged"}},"types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: []\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"499b0723694b9b5c351fdb64ce20298870f9f8fc","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint --typescript lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=shellcheck,@types/jest","test":"npm run doc && catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc","check":"./scripts/check-filenames.sh && ./scripts/check-licenses.sh && ./scripts/check-deployable-lib.sh && shellcheck ./scripts/*.sh","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --typescript --fix lib test","postinstall":"if [ -z \"$CI\" ] && [ -d \".git\" ]; then husky install; fi"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --typescript --fix","npm run doc"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.20","semver":"^7.3.4","skhema":"^5.3.3","json-schema":"^0.3.0","@balena/jellyfish-logger":"^0.0.217"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^26.6.3","husky":"^5.0.6","sinon":"^9.2.3","deplint":"^1.1.2","ts-jest":"^26.4.4","typedoc":"^0.20.14","depcheck":"^1.3.1","shellcheck":"^0.4.4","typescript":"^4.1.3","@types/jest":"^26.0.20","lint-staged":"^10.5.3","@balena/lint":"^5.3.0","@types/sinon":"^9.0.10","@types/semver":"^7.3.4","catch-uncommitted":"^1.6.2"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_1.0.0-add-plugin-manager-499b0723694b9b5c351fdb64ce20298870f9f8fc_1611805623599_0.6342592216761151","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"1.0.0-add-plugin-manager-8e135731a43c38110a431025a903444c7abf2c40":{"name":"@balena/jellyfish-plugin-base","version":"1.0.0-add-plugin-manager-8e135731a43c38110a431025a903444c7abf2c40","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@1.0.0-add-plugin-manager-8e135731a43c38110a431025a903444c7abf2c40","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"2688c14c6f60b040c7a80e0bfbf7ca9f39130018","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-1.0.0-add-plugin-manager-8e135731a43c38110a431025a903444c7abf2c40.tgz","fileCount":18,"integrity":"sha512-swuNAWNdD5vAr0AJfFJPhemOcu4YvSoCR6iOIjHABOGw3Z5w8ukvTe4SJGHu8cysa9OdZD3/jeR2RbDeYHlCWA==","signatures":[{"sig":"MEUCIF/XYxnqzoN2HnnYMPMMQPA+NlXtixZAK+DNI3Kpb41YAiEA72ADls/T7PgfCGPqI1r9p/Z6ta0Ndeu1Bh2hLgXWIVA=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":22207,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgEm3xCRA9TVsSAnZWagAAX3QP/0p/BX7RPNAAaSx69UXu\nurZFLkt5O0Vw50ujdoK6nqA82px3GEUhs8bbf4mI1Av9C79HdqLvXmWEs6aZ\nAWoHpybvnRYSJmpQ95LO/Rh0OzkYP0MBrEqsA+3iYtth39kW+EcVtPAnLY+M\nv/uznKqUUTtDc/Q0g+MYwE1jWmyzlpqyZfEuJQBME89VVYBYwWA8sFmrGzg3\ndz+eliUSh/QFSQt5E2WlqOB1xguxxvrAJmQ8fyfeRfdIfRCcuc5mll0kPP4B\neknVwMGOxGmxGqhnZHiA34O6Q+li4bt3IuEOqkTrcIhhRpjB5U+t1bqLawc/\ndUHY0uEA7YKaCZJLOHoaJywDEt9wgqB+4WF3lj9FxFHLYJj5PoS8+YGlVIL0\nHR6g7VdWCfNQ5uKnjsMNQEN9NRjU0ftycb6z17G4ykhJ7Sn2l1ggAyVDpgTT\n5rPGwNloQdBpv2RkM/22uUm1P/Od3NdbuXSCX+CENP/uMsrUYzrCIhSFym/V\nHaa4mesWvHIe9mBWRE8MH4Bx+N6F6wKGb42h4fuhtsHLSCuqj5/1B0oxlnTB\ni10XopNyyGWAWCekmXCwKBQ2GwITf5UI/eh3XngIauRD40c+oSdSMnQcyTmx\nR4JTqdCS7tUOKDwEpyrtIACA95FMl2lG6gaWR0llthrjlULPlRWA8d/jxNH9\nOZYl\r\n=HUaD\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","husky":{"hooks":{"pre-commit":"lint-staged"}},"types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: []\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"8e135731a43c38110a431025a903444c7abf2c40","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint --typescript lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=shellcheck,@types/jest","test":"npm run doc && catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc","check":"./scripts/check-filenames.sh && ./scripts/check-licenses.sh && ./scripts/check-deployable-lib.sh && shellcheck ./scripts/*.sh","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --typescript --fix lib test","postinstall":"if [ -z \"$CI\" ] && [ -d \".git\" ]; then husky install; fi"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --typescript --fix","npm run doc"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.20","semver":"^7.3.4","skhema":"^5.3.3","json-schema":"^0.3.0","@balena/jellyfish-logger":"^0.0.217"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^26.6.3","husky":"^5.0.6","sinon":"^9.2.3","deplint":"^1.1.2","ts-jest":"^26.4.4","typedoc":"^0.20.14","depcheck":"^1.3.1","shellcheck":"^0.4.4","typescript":"^4.1.3","@types/jest":"^26.0.20","lint-staged":"^10.5.3","@balena/lint":"^5.3.0","@types/sinon":"^9.0.10","@types/semver":"^7.3.4","catch-uncommitted":"^1.6.2"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_1.0.0-add-plugin-manager-8e135731a43c38110a431025a903444c7abf2c40_1611820529074_0.6734456010766421","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"1.0.0":{"name":"@balena/jellyfish-plugin-base","version":"1.0.0","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@1.0.0","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"36cc1f0e3fc3ac062423087581a389c2cb6ce4a8","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-1.0.0.tgz","fileCount":18,"integrity":"sha512-4x/f8lNPOOk9ZIIYrK6ixCmPfn/OV1nn5s3+j6dzYGGzb5BVq4lqF/z8nDd6hwZb8b837PO3cE2OyBJsCFb0EQ==","signatures":[{"sig":"MEUCIQCIEWg8CD7z2fZqVmHln6DgWRyHIIVanMJCERqJoy9siAIgL0prp/U31mwOJ8655gaKeYoRK6V/M0FzUIRdHnpiCSA=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":22147,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgE1HlCRA9TVsSAnZWagAAJEUP/jjVEsNaQYHRlAp1kpi6\nbimTFwdyxD5ZVEJsOaDhU9KZalgquIPpTD8rgR2Tju7jt9BkDpF/2/bqYiLT\nVE3BFGVzVoFwwObgYZ1JRsXw81d/O+UqiBpkMoLyTnXuURyOq5kAD1Pp4kn2\nSaRcasBT3SoA91BqoOyU4yWW4Pd6NU7nHRfUu85ZHs0dv6OxCDmzr6/NuFsp\ncz7LvOn/elkWDa23U3jrZSmQj5rNmdW+U7pQkyEFJeHLo49YbNF2FDE5cdKn\nNZb1TpsKyYmIoXsWTf716BhYY0VTiqQHh9bP1cMKee/dYYawQucFUITY6Gdv\ngp1KufhRlAGv5lU0RTjwSZaC944+FWZbmMhkR2CD5GiFUnjW1tRHDqZXOfma\nwDlmWvu3kV9kEFm1QSTYMQtJKOO2ea7bKFSYybPU3Gom8rGjQ93zwzc1BKsM\nbwGyXvuuP5rkKG+xyhjxxH3KY1tC4jPCBvzn8jV5Ti+CXHJNOFGxqqP2iByj\nwajuitMpuLxEP/iYrT4FhOf4cc/go12PO2wPI8DVXSYhRsnZKlLdKaT2lNAc\nlzSzG8TEBezuszeXNSGPWDz/47mGDJfZ35x1FWzKG9WJVWTJiUqn44toEFwp\nnAUuzuW8yVbPpgnreDhnrf58Q+pRF20CFJtIIlbtl/SdYdiRnaJDHVgqzuXt\nu2yc\r\n=YwGS\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","husky":{"hooks":{"pre-commit":"lint-staged"}},"types":"build/index.d.ts","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"0a93c8946f9c85883e92d9c9f368fb5f1ac5a631","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint --typescript lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=shellcheck,@types/jest","test":"npm run doc && catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc","check":"./scripts/check-filenames.sh && ./scripts/check-licenses.sh && ./scripts/check-deployable-lib.sh && shellcheck ./scripts/*.sh","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --typescript --fix lib test","postinstall":"if [ -z \"$CI\" ] && [ -d \".git\" ]; then husky install; fi"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --typescript --fix","npm run doc"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.20","semver":"^7.3.4","skhema":"^5.3.3","json-schema":"^0.3.0","@balena/jellyfish-logger":"^0.0.217"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^26.6.3","husky":"^5.0.6","sinon":"^9.2.3","deplint":"^1.1.2","ts-jest":"^26.4.4","typedoc":"^0.20.14","depcheck":"^1.3.1","shellcheck":"^0.4.4","typescript":"^4.1.3","@types/jest":"^26.0.20","lint-staged":"^10.5.3","@balena/lint":"^5.3.0","@types/sinon":"^9.0.10","@types/semver":"^7.3.4","catch-uncommitted":"^1.6.2"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_1.0.0_1611878884711_0.4140870427297989","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"1.1.0-add-actions-5442adb632a2efe4fb64fe073969c3a51605dda2":{"name":"@balena/jellyfish-plugin-base","version":"1.1.0-add-actions-5442adb632a2efe4fb64fe073969c3a51605dda2","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@1.1.0-add-actions-5442adb632a2efe4fb64fe073969c3a51605dda2","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"9dd6448367014d8805128d8718ca09acbd3b119e","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-1.1.0-add-actions-5442adb632a2efe4fb64fe073969c3a51605dda2.tgz","fileCount":18,"integrity":"sha512-LlTj7Jxw2q9t/kj9oVmicWyA5DTrEINqJEeAbkY670b2X8F8l67bGAYM5GpsqudMzGtDFlr3qul4cSalPOITSw==","signatures":[{"sig":"MEQCICaQ0sYL5EtNVQa9aA7O3R2xmie5z4s3E17GCsgqsJhsAiAQUSWY1VCRJ1X6ZzxN0P0gNfJIdwNatRW1smj9iUgwOQ==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":24463,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgFnlECRA9TVsSAnZWagAAPIwP/16Aq7CFlkw5AKG8xMyl\nvqSoz2EqmNDcwkKi1KxQw7DOVxHGPYInPzQFrae7BzVqwcd1jICRD9AjddBi\n7h4R/ZBI1R16ekNSg86ZHiK6cQKOn7gRledBIEMNmS84La8Llu3w1tCWLk+k\npt1ihsx3qQLsgJSur6XMY+FIt6klSY5kTRm9Jw2/XCvoe7w/jh4oZsZu0KJo\nPj6XTsZIbuNdw4Wvyec4ZLR+HD5qPpe3KwmKFl/mC/SfcLvWdPWN+sdnet/j\naqVzt1X5BJy/ObPLMRQaVc5kUhE5zwun5dTPJCcrB/pYa6QVyuqyqWxtz7Hu\n6Morzv5nyZE29B02S8v5gZbklrzIH7XCxYJb1m4stVW0cmeLc3sezJJ37WYc\nOVUgJ5sdzJ1XmVZKRb4iqhfTGfyM+oXhW61KjRL4h6XltzzeRRJmjZ7TTrtk\nQ7gnFufyuQewq6S3CuHSUwaw3HQvgL8jpqjRXjj1+GU0RjRV9C5s0C9ieJ33\nwrpBP+MSOAmaiVY1V/uC/4k0imKlT0xsEbcEhxDOdrtiPwOGZjN1jhZrOnXe\nxP+N8zsrBERJktzTn0HtBuUg6mSf4Y7h1I6ibUsP+bucd8IJhzUD9H8sb+VM\nr0bAW/UYANtuXuqTTpYUivSyLivFBclKSw36SN/FJteEnVyC/JEpGHR4ofUV\nOl3V\r\n=UGdK\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","husky":{"hooks":{"pre-commit":"lint-staged"}},"types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"5442adb632a2efe4fb64fe073969c3a51605dda2","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint --typescript lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=shellcheck,@types/jest","test":"npm run doc && catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc","check":"./scripts/check-filenames.sh && ./scripts/check-licenses.sh && ./scripts/check-deployable-lib.sh && shellcheck ./scripts/*.sh","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --typescript --fix lib test","postinstall":"if [ -z \"$CI\" ] && [ -d \".git\" ]; then husky install; fi"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --typescript --fix","npm run doc"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.20","semver":"^7.3.4","skhema":"^5.3.3","json-schema":"^0.3.0","@balena/jellyfish-logger":"^0.0.217"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^26.6.3","husky":"^5.0.6","sinon":"^9.2.3","deplint":"^1.1.2","ts-jest":"^26.4.4","typedoc":"^0.20.14","depcheck":"^1.3.1","shellcheck":"^0.4.4","typescript":"^4.1.3","@types/jest":"^26.0.20","lint-staged":"^10.5.3","@balena/lint":"^5.3.0","@types/sinon":"^9.0.10","@types/semver":"^7.3.4","catch-uncommitted":"^1.6.2"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_1.1.0-add-actions-5442adb632a2efe4fb64fe073969c3a51605dda2_1612085571763_0.06461338496385127","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"1.0.1-whitesource-configure-0591ec5999bff9095383e5f7f837e1b1414be79c":{"name":"@balena/jellyfish-plugin-base","version":"1.0.1-whitesource-configure-0591ec5999bff9095383e5f7f837e1b1414be79c","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@1.0.1-whitesource-configure-0591ec5999bff9095383e5f7f837e1b1414be79c","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"15b255d04d03478afc9b87a55c7f6f4ba41e1c48","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-1.0.1-whitesource-configure-0591ec5999bff9095383e5f7f837e1b1414be79c.tgz","fileCount":18,"integrity":"sha512-0KfXL0h95SDrrHgRzq7Z0Bs5DEc9BoblnFfHEBD566iK4GHSYkuwX3dSd2sC0R0mga9ZrmDpTWdofyXUmkvgfw==","signatures":[{"sig":"MEQCIEdSqFfL+nbjseYcpFF+DMv1KxK7BNQIB3QgpzMrLbe1AiBGjiARvneb4biYENnndGbNBepbrch11dcYDY+3q+cE+Q==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":22310,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgGK87CRA9TVsSAnZWagAAOyYP+QFuxmaflG7sz4XfjUWu\nckqy6nIGLRKE4b28OUyPByV7n93duY7vcym/i/IfKsvmOHjjzjKXHYNCk/Xp\nmqVIeJ4tvg8wtDbgKVgR1qWBkEiqPvOALlIvRIYwjd4pdCIBXR8M66TlqGo/\nEBtBH5veY7lm3wmg3bR6foU4b0e/pj1MRn9R+yHHOz3hSbR1h7R4aG/LC4Wr\ncNgEQT6JCcIdUyn3SqkiXvb+IKfysPVBeZ1qke8Mv4TKiRMBsqGKqMMWTle5\nhnvGn+11HeDrLVRq6XOG+/mX1GE9XbduWW5OV5ZkykQTFvFbFVAFXu1JlIrJ\nUdpZXHB1ytMeLmpeMOIJhLsHKltpj+NKGCenRSLRHH7pg8dGFDRbA4tuwX8A\nStlmdyXsbVwvSGPaZ7vqhqyBZWoDUFOweoy/EnQQkmfqMmGCYBictSgM4YbW\n88SPRa7XILCeygLsNzzQSsGqcGw4gXHQ165C4au+XsBV3eZmWmlIwKMV8rCZ\nHqGzM0wx8o+dW/whlOeYZlFMk006NUphMGpzsDifZnA2O112dtH+wYrAcEOn\nMNRMHhkmOo4clAXju1JVqppKnrrpCYQxSyZKlgAAT8UsUyexyICjKzhckdnG\nYYs2Wiq9KvuGyP9IKqXjWPcz9cedX24hIv+F2JUn+768i5MO9WvETc3l351g\n8I0S\r\n=CBV0\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","husky":{"hooks":{"pre-commit":"lint-staged"}},"types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: []\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"0591ec5999bff9095383e5f7f837e1b1414be79c","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint --typescript lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=shellcheck,@types/jest","test":"npm run doc && catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc","check":"./scripts/check-filenames.sh && ./scripts/check-licenses.sh && ./scripts/check-deployable-lib.sh && shellcheck ./scripts/*.sh","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --typescript --fix lib test","postinstall":"if [ -z \"$CI\" ] && [ -d \".git\" ]; then husky install; fi"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --typescript --fix","npm run doc"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.20","semver":"^7.3.4","skhema":"^5.3.3","json-schema":"^0.3.0","@balena/jellyfish-logger":"^0.0.217"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^26.6.3","husky":"^5.0.6","sinon":"^9.2.3","deplint":"^1.1.2","ts-jest":"^26.4.4","typedoc":"^0.20.14","depcheck":"^1.3.1","shellcheck":"^0.4.4","typescript":"^4.1.3","@types/jest":"^26.0.20","lint-staged":"^10.5.3","@balena/lint":"^5.3.0","@types/sinon":"^9.0.10","@types/semver":"^7.3.4","catch-uncommitted":"^1.6.2"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_1.0.1-whitesource-configure-0591ec5999bff9095383e5f7f837e1b1414be79c_1612230459498_0.31819298364899185","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"1.0.1":{"name":"@balena/jellyfish-plugin-base","version":"1.0.1","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@1.0.1","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"0fa72bdd6f6493ceee0dda4287539ac5e3edd414","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-1.0.1.tgz","fileCount":18,"integrity":"sha512-esDWMPz3ELRDYwet47vTYRAg3UYmoHv3caGwa9tbv4ampBRTDdgxqN31P30M6InRg6O5vcs6SDJPQB5P/Css4A==","signatures":[{"sig":"MEYCIQDnqYa4Ix+8nY+t3uNklq/nOs1EdxNgoflVnvxW3LqFtQIhAMfZejvnpjdGJc5Y4HCXJ7j5miDm+RiMhs6kcuOyQdaG","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":22247,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgGK/7CRA9TVsSAnZWagAAv+sQAJrHInvDZT9N9uukPM4R\n6Sbv+EuWvVC91vVBWWTy0HIfKDxuNKGHnSBVR1s8M+evfBpUA+JVfY7cThvX\nyAiHTOFu246Rcof5CDZ/6NB19G2crfFMmZz6l8tvB4c7Ysy4JZe7K8NcaFSP\n/t9mrSi4i08iJamZZBXUMRDemtwAX5Zi18tYWtkHaOv/5fQ6XueDxjFqhzn8\noWOiefOocuKZSOzXiDdEdm3zFDZg5wpbMj/TxXBiqETTjvpYRaaeCzUZF5L1\nYhyNLdFlwq1racJ0e1xrYFd8Umn5QIa2mIA7y2u0eyjMzJsWwn6zkFn1SQ+k\nUHP12+AhJDe4lqjvDyhSJF8BcyRDnOy1y1tmlN/Wax/8rG+znoqLc4QbEocj\na/FQh0R83yQzXtuW5NAD5UXft/Tw8o9t7m/MooIL1YlhsPYLBmE4jWRZNqRV\n7V83NrYgHPLjnPTK8GkVML8GZSrA2lNmyXhNNyqizidvMycwWP7NZDz/KY4a\n0SFwCikQO+y0gJEitcKhYwf3icW8TFHPUDgDSnq84mrFmUgEE4QI6VqiPIUl\nSBT8Y+76TofY4RI7JktC4CjWDJ72Kt0ECICqWOzaXEfjLCyjBALMHNaLJKzy\nJbQQCuBh1+8cbXhfKXWQM8Pylpa9m78emR5pstfMtOU6uFaXTUuqPLrQajN+\ngYdT\r\n=+BD3\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","husky":{"hooks":{"pre-commit":"lint-staged"}},"types":"build/index.d.ts","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"e1349c33c47d823f9ba95b053a90af6c8e0e948b","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint --typescript lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=shellcheck,@types/jest","test":"npm run doc && catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc","check":"./scripts/check-filenames.sh && ./scripts/check-licenses.sh && ./scripts/check-deployable-lib.sh && shellcheck ./scripts/*.sh","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --typescript --fix lib test","postinstall":"if [ -z \"$CI\" ] && [ -d \".git\" ]; then husky install; fi"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --typescript --fix","npm run doc"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.20","semver":"^7.3.4","skhema":"^5.3.3","json-schema":"^0.3.0","@balena/jellyfish-logger":"^0.0.217"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^26.6.3","husky":"^5.0.6","sinon":"^9.2.3","deplint":"^1.1.2","ts-jest":"^26.4.4","typedoc":"^0.20.14","depcheck":"^1.3.1","shellcheck":"^0.4.4","typescript":"^4.1.3","@types/jest":"^26.0.20","lint-staged":"^10.5.3","@balena/lint":"^5.3.0","@types/sinon":"^9.0.10","@types/semver":"^7.3.4","catch-uncommitted":"^1.6.2"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_1.0.1_1612230651269_0.9591052572698464","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"1.0.2-bump-deplint-bcfc700b79e73398f5ce3fffe678dec7df4a0179":{"name":"@balena/jellyfish-plugin-base","version":"1.0.2-bump-deplint-bcfc700b79e73398f5ce3fffe678dec7df4a0179","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@1.0.2-bump-deplint-bcfc700b79e73398f5ce3fffe678dec7df4a0179","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"2740271d16e3cfb91be47d5ece74efa809f2d79f","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-1.0.2-bump-deplint-bcfc700b79e73398f5ce3fffe678dec7df4a0179.tgz","fileCount":18,"integrity":"sha512-1vxbhV+1NjgYWkrtlVNcpy7yfSL5h3X+D2uU9ueoIvwBeAGVyBR2g5Ae4fP4tLhGzAYDX3AsQmKFwVvZdUeJMQ==","signatures":[{"sig":"MEUCIBHdVWwahCWycJBnib2XJx/UGkYDaE3i91UW7twWfyMrAiEAn580J/DHuHIhBOVNAMPpQnmcY6/CuR6itEYYDJIBseE=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":22367,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgGiWBCRA9TVsSAnZWagAAkrsQAIsZTAtFuSJ/EwzO7VmY\ngra0kpTEMTBRPVnyVp9m3JrI6yhyXREZMdyA+2ev34V0bFeqpFdknvguyhxV\ns1QKAFMfITegUedpemubrUjTOEp4q4MYPLtjQVZgxuu7hc6vMKbus5X9tQA3\nEr0bewXeGnk9hLcvIwl3YJmh3XuxxFrmxrbLz4Pae+OhmCsffSJBYhbwYljT\nU4SEYEJ9yAnEmNqEINuCbzSi4qxJ1dj+m0tjCplVEXJfMANfV+sAb+0gfN4t\nFyhJv699u1KCb5hzOnhj94fRYdpdyAuiIqsQZAWd067mBEzg9Ae9cCc/2Otp\nGiSV3wvW+mZWXpzmutraP4MIxcJ2AqETRYlMhxt4Ia2bx9NasiH3x84IwRlr\nFR+++ex5zbR/nx+/IxDjajtV0VYwTTBOg8rczHyn33QmhQRaNR58zRY8MWIX\nfTQxWi2jRKhlrW4IHwvrsmpdJuEyIiNN8W5vQzHn1FpXywsTRVOjpAXd9at/\ns3C3LRSnz3/yErGhW2ZzJkO/fmrKyB/G+RcOCge2zxLz6A8z4CUeuLm88J5d\n7499yJxdXghtWuPjIwkXhWuTk0nO4kFJkCJgI4DwQShy4iPg7gYSNnJ/SYqH\nu8/G2Dbg/uHUnobCARAizFjyc4H9idu/QZEZPWW0Qn/H2Qcohj6xXp9aMH/n\n7HD2\r\n=2q8U\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","husky":{"hooks":{"pre-commit":"lint-staged"}},"types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: []\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"bcfc700b79e73398f5ce3fffe678dec7df4a0179","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint --typescript lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=shellcheck,@types/jest","test":"npm run doc && catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc","check":"./scripts/check-filenames.sh && ./scripts/check-licenses.sh && ./scripts/check-deployable-lib.sh && shellcheck ./scripts/*.sh","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --typescript --fix lib test","postinstall":"if [ -z \"$CI\" ] && [ -d \".git\" ]; then husky install; fi"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --typescript --fix","npm run doc"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.20","semver":"^7.3.4","skhema":"^5.3.3","json-schema":"^0.3.0","@balena/jellyfish-logger":"^0.0.217"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^26.6.3","husky":"^5.0.6","sinon":"^9.2.3","deplint":"^1.1.3","ts-jest":"^26.4.4","typedoc":"^0.20.14","depcheck":"^1.3.1","shellcheck":"^0.4.4","typescript":"^4.1.3","@types/jest":"^26.0.20","lint-staged":"^10.5.3","@balena/lint":"^5.3.0","@types/sinon":"^9.0.10","@types/semver":"^7.3.4","catch-uncommitted":"^1.6.2"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_1.0.2-bump-deplint-bcfc700b79e73398f5ce3fffe678dec7df4a0179_1612326273481_0.05761726436590031","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"1.0.2":{"name":"@balena/jellyfish-plugin-base","version":"1.0.2","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@1.0.2","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"1054eb3628a2ae57c48dcf3535f08dee7e4364b6","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-1.0.2.tgz","fileCount":18,"integrity":"sha512-efOMDKQN4RK/55VIh0hCcVjU8A1rhgjrmPDBi1fZKrIyFFW4Iy1LB/vgpNtL598woN5oNKM0fq3Kd5B3rmypkQ==","signatures":[{"sig":"MEUCIQCRUEhfRkZsdqAU6EmclHkCc3sA5Z17zFSdGLxQmJk4QwIgAY0oZ5T8nUh16rtFmJwuSllp/5NhTcNeymzpZ8U+2BI=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":22313,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgGiZ2CRA9TVsSAnZWagAAY4IP/ipVgKPsnx6C8PIhlvSL\nDT21x3c8LXfcErVxvCZeFxgxymX2bLb+bmWdK07vNbrodCy05Ur7gpPmll13\nkgpyOfNELVA+DXSsS85M9gGw7U4fybuofa5w7ymyXzfy8BGS8TiLLtKZf+C6\ncJzhezprSRx7rRnWNvoA0CnrWe7lUf2b5L1qRs2eBRRpE1gnWaaAFr56bvid\nYHrDP+X4AHs2wzyhTePJ67VaO0oD77aPBAkijYqwXPgCDjjarhCTxEJ58lLO\nog1Tdz3lmYsPWtqHuOq3zJw9niENtTNAMb4+hlWTxq2dBD+kKQzwWMaHlNbq\nY3agLf0pqG46/JbblVXJgHFoaBVWwAUjqofB4n9p/cdhK3a5UDHCHYPeEteC\nKk6A7GZcF3Goe7LuqRHtmUqYglzoEAp+4sXy0Jd+p6+7mUc7TPMzUCylYRMJ\nJXeZgy3S+7ONncweVuygJ2yg0q4gIQsU/Q/Kb3XYm43s5cuxjR8Dji1e/Lk3\nKyZ0e5yXR6AMfh289UQ6IqFNbzF22phEaOY4uatmtYz+4JuFZTeJBCnYMHPb\nIFAcUacbFiOXnCzMjxPRv02JjIdIUm15C5UxdLAMpB+bDMdQ9YO2Umpp3e7l\n1y9GC5yAQyvoEGZ3vjrC7niIzUk3lQfQp7IEmBNeC0P86VCH8TY0kcPpp0zU\nZT38\r\n=afvG\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","husky":{"hooks":{"pre-commit":"lint-staged"}},"types":"build/index.d.ts","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"d1117dac6221020543ce7f10c992aa309465d9ea","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint --typescript lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=shellcheck,@types/jest","test":"npm run doc && catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc","check":"./scripts/check-filenames.sh && ./scripts/check-licenses.sh && ./scripts/check-deployable-lib.sh && shellcheck ./scripts/*.sh","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --typescript --fix lib test","postinstall":"if [ -z \"$CI\" ] && [ -d \".git\" ]; then husky install; fi"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --typescript --fix","npm run doc"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.20","semver":"^7.3.4","skhema":"^5.3.3","json-schema":"^0.3.0","@balena/jellyfish-logger":"^0.0.217"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^26.6.3","husky":"^5.0.6","sinon":"^9.2.3","deplint":"^1.1.3","ts-jest":"^26.4.4","typedoc":"^0.20.14","depcheck":"^1.3.1","shellcheck":"^0.4.4","typescript":"^4.1.3","@types/jest":"^26.0.20","lint-staged":"^10.5.3","@balena/lint":"^5.3.0","@types/sinon":"^9.0.10","@types/semver":"^7.3.4","catch-uncommitted":"^1.6.2"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_1.0.2_1612326518157_0.5368571766399708","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"1.1.0-add-actions-5f87a05b56c3c72f3b2cf7363c526e8dedb988ab":{"name":"@balena/jellyfish-plugin-base","version":"1.1.0-add-actions-5f87a05b56c3c72f3b2cf7363c526e8dedb988ab","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@1.1.0-add-actions-5f87a05b56c3c72f3b2cf7363c526e8dedb988ab","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"133932131f0d33a74d011b732d1cc3cac11ab529","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-1.1.0-add-actions-5f87a05b56c3c72f3b2cf7363c526e8dedb988ab.tgz","fileCount":18,"integrity":"sha512-EKYTTxWPPHoFtHnChhzRslNaHe/ncfoVtomWMjOdDtGOnYnFW0OpauI5uGUPWrYJTY6TEnHbgLyHKk+L++67RQ==","signatures":[{"sig":"MEUCIQCEY5RFd8fI7gY1W5MMdGTGXrL8E2JdNNnqNCd1b0wL7wIgBR8viwGKjHzRI0vc5Ql35V6OXu4L5rCQyKB07/fiXHg=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":24892,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgGkwfCRA9TVsSAnZWagAAW28P/1N0HOggg0uEoxY+jhDg\nYVqZeuO+84uGbDF8NFrZgSgHKb+zbfAVAgSW4L5qMOOsNuWzCltYjPJMWzk9\nxDzPuypxlWTxz1c5U+tUDR8scwNZsVHUxmcuwAmDBdm55YzHBDXJ8ABujrHZ\nuVDfdkBKwaORMNxtjaEU02YWr5rCt5ENZCTDSEkN1GJz23ezHxwgfZ5pQaVN\nc8PbddKIozkStgPszpVeFHB4qnm1HPQrNEkD4EYgVGj4q2rr2SznifYS5KrT\nMUFAj4RVrDTcZXK+PJt7qlX0JM61qTWVOnjtAebJSGGLxz5L7mbm7bZ9xGI0\nrbzZ4zqydNXcQlBzIIsxWYeghjG6NxH24/vtmvMrT1I6HozBz7WYQmxjywpA\ntEgIGtCLhKS+Dby0b2lZ5h/hnyKOJd7WuwcU39P8rpkrx4MaMPEozTvhOKY6\nPH+xdgSh1r1oByqj15gTP+388yYpEpcbmV+K6G4iV2bBREL9Wrbp/RBleShP\nd2ttJ7LFy586BX+EIZombju1+pyiM6o+7rI4TSHCN4m1N1m9dcLw7bv5XONJ\npE8OvdlQOqitbPlaH8ACwW+vlbeEyPyvqPlxgmAzo/94T4HfPVqJjOiCr937\n+agWd67FmIljOTsQRgjM3Dl/6UUlw+gQcPkFi/Ugs1mNSt79fCvP4PXXfVRE\n/EVO\r\n=6Ab3\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","husky":{"hooks":{"pre-commit":"lint-staged"}},"types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"5f87a05b56c3c72f3b2cf7363c526e8dedb988ab","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint --typescript lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=shellcheck,@types/jest","test":"npm run doc && catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc","check":"./scripts/check-filenames.sh && ./scripts/check-licenses.sh && ./scripts/check-deployable-lib.sh && shellcheck ./scripts/*.sh","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --typescript --fix lib test","postinstall":"if [ -z \"$CI\" ] && [ -d \".git\" ]; then husky install; fi"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --typescript --fix","npm run doc"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.20","semver":"^7.3.4","skhema":"^5.3.3","json-schema":"^0.3.0","@balena/jellyfish-logger":"^0.0.217"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^26.6.3","husky":"^5.0.6","sinon":"^9.2.3","deplint":"^1.1.3","ts-jest":"^26.4.4","typedoc":"^0.20.14","depcheck":"^1.3.1","shellcheck":"^0.4.4","typescript":"^4.1.3","@types/jest":"^26.0.20","lint-staged":"^10.5.3","@balena/lint":"^5.3.0","@types/sinon":"^9.0.10","@types/semver":"^7.3.4","catch-uncommitted":"^1.6.2"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_1.1.0-add-actions-5f87a05b56c3c72f3b2cf7363c526e8dedb988ab_1612336158836_0.6935615203169905","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"1.1.0-add-actions-3d36c38c10e04286d8c4a67231792f130a9bd624":{"name":"@balena/jellyfish-plugin-base","version":"1.1.0-add-actions-3d36c38c10e04286d8c4a67231792f130a9bd624","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@1.1.0-add-actions-3d36c38c10e04286d8c4a67231792f130a9bd624","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"a98efebebe1e794d9a9ffb0e8d2a3cf6a1ab0511","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-1.1.0-add-actions-3d36c38c10e04286d8c4a67231792f130a9bd624.tgz","fileCount":18,"integrity":"sha512-OPxcomvzxrMQvAP9AwczBQTXBcjSxC61PT9WXRJauvI/x4gn4gMwQKbQxS2wUcdWr9a6jinSzIgCmVBm2SNSmQ==","signatures":[{"sig":"MEYCIQCijyOVT9bgPPHDsa3hpBd8UilOyKZyY0pa56chFEpyqQIhAJVeBC6Wp6abVmqni0vJv4P9WIzWfJOwW8G1vd8sOxgh","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":25124,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgGlbUCRA9TVsSAnZWagAAar4P/jQy3xZMLHuAVqEdXY5g\nI3GuGY5lqWJwMznF5oRDqv9IpuieXUMgc7g/vZUoR56IaOg8B3CZPXoZu55B\nPYGPb8lunesPlcqTQOtrysMiPk59UMQngYKUPGNz9Kq8Nu6cKKWbx4Zj7GCt\ndLLehm8MHui+B3y+hR/BdBX0WsMyDvkd2krOAH09bMtwVnGZmlF2FlO3A30l\nbfjiX012P/szZbP3p8a9kGq9X28C5unh4FLJNuJ5tnyzfN6Y2QbP8Op755uY\nl6GFtq0OYWcsC/xACwsCUUJf1/LH1okOi/cPVXEdcjnS6IgAybrlJhnBhacF\nC06dZzoHT0timAKVH0y4M+DGDOC2M+f/N5wImr/z2O8fv6tstORhmkEKuE0f\nlfuvkmfX+5975Jl2hilCEKLQrg3p+rFl2zDkWpAqirZntr5jfcBnr8+2ZNkn\nYraWotUmHtZIEZEy7SgvcPGl6RXQTSnkFvAWS/KA71Y3Q52KsnNOdZKhagOB\n4YkWj7xyhvD3JFqrRB7QVHMiv8LlWrqJfmq4n1TFyBAo+Fa0fW5QK4Tbvk2V\neUsSm9wAu0mncR0qDmi7zFutiQpoIl0tXCimrDLzUVs3A16U+TEImg4ezNlR\niKmIUYaEzyRKUnDQfeR8eTowqiGJHK/gB+QJOXidGRfWG9L2M7l+le+AwcVg\nONLs\r\n=4myy\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","husky":{"hooks":{"pre-commit":"lint-staged"}},"types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"3d36c38c10e04286d8c4a67231792f130a9bd624","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint --typescript lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=shellcheck,@types/jest","test":"npm run doc && catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc","check":"./scripts/check-filenames.sh && ./scripts/check-licenses.sh && ./scripts/check-deployable-lib.sh && shellcheck ./scripts/*.sh","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --typescript --fix lib test","postinstall":"if [ -z \"$CI\" ] && [ -d \".git\" ]; then husky install; fi"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --typescript --fix","npm run doc"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.20","semver":"^7.3.4","skhema":"^5.3.3","json-schema":"^0.3.0","@balena/jellyfish-logger":"^0.0.217"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^26.6.3","husky":"^5.0.6","sinon":"^9.2.3","deplint":"^1.1.3","ts-jest":"^26.4.4","typedoc":"^0.20.14","depcheck":"^1.3.1","shellcheck":"^0.4.4","typescript":"^4.1.3","@types/jest":"^26.0.20","lint-staged":"^10.5.3","@balena/lint":"^5.3.0","@types/sinon":"^9.0.10","@types/semver":"^7.3.4","catch-uncommitted":"^1.6.2"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_1.1.0-add-actions-3d36c38c10e04286d8c4a67231792f130a9bd624_1612338900592_0.4012501864307876","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"1.1.0-add-actions-0c527a4a2290c464b5990ad0efc4c0ed68cb1248":{"name":"@balena/jellyfish-plugin-base","version":"1.1.0-add-actions-0c527a4a2290c464b5990ad0efc4c0ed68cb1248","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@1.1.0-add-actions-0c527a4a2290c464b5990ad0efc4c0ed68cb1248","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"013e2563bf9a22ec1910638d548d79de9ccca544","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-1.1.0-add-actions-0c527a4a2290c464b5990ad0efc4c0ed68cb1248.tgz","fileCount":18,"integrity":"sha512-Iz7nI4Ox2k3k0p019KCjEgluZFrfQVyfCc8+YdGouVcgzapzSJ9YXJb9GtBxV3V69Aa3AHwRbRfMKsdCMPNvzQ==","signatures":[{"sig":"MEQCID3SMzpxaAF2yd/S1b8bi2vTGETgDboMM5X6XF1wg86lAiALACclCuGWXP3XkNKdk7I8x5s/xqELTD4urtOWxDC3lw==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":25340,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgGlrZCRA9TVsSAnZWagAAxbIQAJ+RNAT0ICK5hSKUSc4W\nvUta+EqoAQTk4LZXoz46gw4EmYPo9i2EuqArQkM2kdX72V9K/InH6Y6Df9Yw\nFDCDBh8XrSBObZ572ttve1EMRQl37mcWTUVsnP7Nj20ggNDm99/tpmuz4jbX\nxTZA3CBmfnY2ViplNC+a7tMXO+PBaujC9pVO++xcNxj+ZICg9kiOPl7sye6e\nS4+T3SVexTkU0BIca+KnP/457ggHOLeqm6KDEuvr5O5091r978GIk+BEkKvv\ngsx5WggJ9Mb378Wtfy1AaJ2UJaaHOVRoa6HUZOjA5zwRBukhAW36pKpMkxLI\nWjdPVmY+oUaqpALRbqEwKUO8JhdXltdnmu0iPCFAt4g1I6OwfJ6MKG6mqWK2\nrkL/Bd060P2JZFHLx5bs1aRQtiScrDnzk8JHcDvyLDRcXdo8vW9cOsxbucTv\nhdO6jDfEUdl+3Ol1YvpU1n6y4QcNbnL/WknTRMzEHcN4PS5BNA4GrPm4nu07\n1l/4ZKdz0RQlBTSXqBY0+Cdukoke2t9mf7ey7CjA3ZL42dreCNBokzz+R/tR\nLoznYwhAuQFWXjKuS6Jr6hLPrcMb+Ut109/0KQx5D2oku2geWzUo0AB9KW/c\nntoTYunwKfKAlqkybNFZgjs++r2OejE4x41bwSWbfXdoJH0Zod0iJGnWj4BK\nmCFi\r\n=X9u9\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","husky":{"hooks":{"pre-commit":"lint-staged"}},"types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"0c527a4a2290c464b5990ad0efc4c0ed68cb1248","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint --typescript lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=shellcheck,@types/jest","test":"npm run doc && catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc","check":"./scripts/check-filenames.sh && ./scripts/check-licenses.sh && ./scripts/check-deployable-lib.sh && shellcheck ./scripts/*.sh","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --typescript --fix lib test","postinstall":"if [ -z \"$CI\" ] && [ -d \".git\" ]; then husky install; fi"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --typescript --fix","npm run doc"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.20","semver":"^7.3.4","skhema":"^5.3.3","json-schema":"^0.3.0","@balena/jellyfish-logger":"^0.0.217"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^26.6.3","husky":"^5.0.6","sinon":"^9.2.3","deplint":"^1.1.3","ts-jest":"^26.4.4","typedoc":"^0.20.14","depcheck":"^1.3.1","shellcheck":"^0.4.4","typescript":"^4.1.3","@types/jest":"^26.0.20","lint-staged":"^10.5.3","@balena/lint":"^5.3.0","@types/sinon":"^9.0.10","@types/semver":"^7.3.4","catch-uncommitted":"^1.6.2"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_1.1.0-add-actions-0c527a4a2290c464b5990ad0efc4c0ed68cb1248_1612339929130_0.5311473825770023","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"1.0.3-renovate-npm-version-6313f55519ce7dce2a96412eeddde9f2e7856266":{"name":"@balena/jellyfish-plugin-base","version":"1.0.3-renovate-npm-version-6313f55519ce7dce2a96412eeddde9f2e7856266","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@1.0.3-renovate-npm-version-6313f55519ce7dce2a96412eeddde9f2e7856266","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"27a3b262058f9b6d8bcfc3947007835ad4ebf766","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-1.0.3-renovate-npm-version-6313f55519ce7dce2a96412eeddde9f2e7856266.tgz","fileCount":18,"integrity":"sha512-lmbikR+ueEOlqyciASZF08Ppy2pwfKIpoALGij6hDb9ojdscfePDlf3gjt4Vk011ytrzfBX9FwXhQ3SyW/nirQ==","signatures":[{"sig":"MEYCIQCXU8T/ZwNow3GqRGiyrgt9tWIa8mT5Q9+nT9d9/356WQIhAIZtjKIn288YMKEXB92hq9nWbdwmyvBJkklrHDiUlS3v","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":22444,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgHPRrCRA9TVsSAnZWagAAO/QQAKI1sYjm4afD5j/LqFmc\nvgAG+kxmnLmypNbRz31PdgBVMqhyK0Xp2W1j4nQP2R4thA0FLuFX75V5Ihr+\nLAj9VVREcO3TJBuSbtUJY6INCaSHF3aMLenCQt/nO7Hc7didSAPs39oDTVL7\nxCGmu79T53MqpHUuMAF6YY6f6yhMBgaBit6m+rPu7f0CsLl5CW7PGUUFZnAO\nUX5sW7IVycKhOzPbX6ACfr6jGy1Mz1fo0Wtz3JDyYPvukXXPVGh0TBxz2jAB\nsSVuzMeFYkeMgu8ky5uROiNqH7nT7hVxwCR3e75v/30M3KGuG08N7BhR2RO+\nS1yQTFrLj/EBN8ANi1bvFNZyU4/InTVzKL3K26y+6X5r4w85geW8k7MFLjOv\nDkLbcREIF/LhfXPVe2cvkGSJqqRmiFvQVWRxe+9ZsMvoahMHqgjyXGku8Tus\nFWxfLJz6PqMepro0IGX2icBFISvT+DgMykAq/9HtgtpFJfgio51KaIZs0jT2\nwQGBoM/MRORicpAXeZ+59i9xXE0GYhRC3qyXBjLtzy52vbAK/aj+TvKSZtbG\nNScHj9wODQK1VUsU/SveP0FDjIE8BwK7j3yGe1FvvAQ69gWL/uas1nRmIbDa\n8W/UlufoN3CU0c1avukRpKaIZYEjgClQWMWHThshHsIlgR3sbRn50ueQeAr1\nmS6r\r\n=9dch\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","husky":{"hooks":{"pre-commit":"lint-staged"}},"types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: []\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"6313f55519ce7dce2a96412eeddde9f2e7856266","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint --typescript lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=shellcheck,@types/jest","test":"npm run doc && catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc","check":"./scripts/check-filenames.sh && ./scripts/check-licenses.sh && ./scripts/check-deployable-lib.sh && shellcheck ./scripts/*.sh","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --typescript --fix lib test","postinstall":"if [ -z \"$CI\" ] && [ -d \".git\" ]; then husky install; fi"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --typescript --fix","npm run doc"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.20","semver":"^7.3.4","skhema":"^5.3.3","json-schema":"^0.3.0","@balena/jellyfish-logger":"^0.0.217"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^26.6.3","husky":"^5.0.6","sinon":"^9.2.3","deplint":"^1.1.3","ts-jest":"^26.4.4","typedoc":"^0.20.14","depcheck":"^1.3.1","shellcheck":"^0.4.4","typescript":"^4.1.3","@types/jest":"^26.0.20","lint-staged":"^10.5.3","@balena/lint":"^5.3.0","@types/sinon":"^9.0.10","@types/semver":"^7.3.4","catch-uncommitted":"^1.6.2"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_1.0.3-renovate-npm-version-6313f55519ce7dce2a96412eeddde9f2e7856266_1612510314637_0.53217788590662","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"1.0.3":{"name":"@balena/jellyfish-plugin-base","version":"1.0.3","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@1.0.3","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"5635b1c299075acd18397564f02cad5ca454849e","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-1.0.3.tgz","fileCount":18,"integrity":"sha512-0qGSR6QRSA+QV+6AdjRu6OVA+xZYRYWapFPAdxQKFaQ4r8mp5TpYOhz1GuDHlXkpZWfpTuI0pkgukvK5XVqzYw==","signatures":[{"sig":"MEYCIQCapxYuUrWjotDk8fulx36QBhyB21aFSPqZ2fBvSjM5jQIhAPQhCgKCE8X3sHzlGTkTI9mVbJ3svbJRZnT99t+6mQy5","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":22382,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgHPWKCRA9TVsSAnZWagAAwVsP/jqY2LX3TveNUZbSoIWh\nlDlx71auBQkczqDpmkwx4MPfc0DkT9IMqkDgnR8wnHnzAxWif8ZQNDpFlN5V\nZBlHX4b69qSaqVd3tleQbBtYRRajMID3uwAe7em8P8hqu93gvRC1ES//dKl1\nyWruhs7yDa+WKifyH5xJLKBZXcy8fgXNohQzoNGKrIB/EJipFFAF3R4ZvN7k\nBXZKc47SDBFU7aCHpCkRfGOBWHvU+SOXZ7j1A90sOBNeqNokumc72dUKBOL6\n38KUX+a3ADJW8rs+2t4x0lHZgVKTMLlYcMJ9K+OJ78jMw9+2trdVKnMjMyN/\nBPs2VAKIkewVP772BUHxA03FW+sw6qQiNOaJz9fbxtV047K2CGN8FyIolxZG\nSDMWzy4devgf90/6LornFmSfrqpZZumk7dBrnbPi4SqVE99jC4xVVwDN1vGY\nZ/g7C2J1NkxvDMFn4BkkkyrQIajG+XB2p78MaIIMmYUqf8Dt5FZs3ycNI4PL\n57C4h2S9AJEXIa1tKOrEujhSQXPqh2c1STe9liDlm7s+rOPWRwh+gGidBead\n/bufmH65MCObiHV+YcRb1zEgqrdx2w6Esz4bSsUUsnvxmI0JcE7sqjIcSAH0\n+Mt4khv3twJsFKpLfazoopESkRDBqonbXIiDmr3M7h4CRuKGdeJ0Eo+ocfnZ\ndXJV\r\n=LciC\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","husky":{"hooks":{"pre-commit":"lint-staged"}},"types":"build/index.d.ts","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"16e9420df356b41217d934151246a34f7bc9faaa","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint --typescript lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=shellcheck,@types/jest","test":"npm run doc && catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc","check":"./scripts/check-filenames.sh && ./scripts/check-licenses.sh && ./scripts/check-deployable-lib.sh && shellcheck ./scripts/*.sh","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --typescript --fix lib test","postinstall":"if [ -z \"$CI\" ] && [ -d \".git\" ]; then husky install; fi"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --typescript --fix","npm run doc"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.20","semver":"^7.3.4","skhema":"^5.3.3","json-schema":"^0.3.0","@balena/jellyfish-logger":"^0.0.217"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^26.6.3","husky":"^5.0.6","sinon":"^9.2.3","deplint":"^1.1.3","ts-jest":"^26.4.4","typedoc":"^0.20.14","depcheck":"^1.3.1","shellcheck":"^0.4.4","typescript":"^4.1.3","@types/jest":"^26.0.20","lint-staged":"^10.5.3","@balena/lint":"^5.3.0","@types/sinon":"^9.0.10","@types/semver":"^7.3.4","catch-uncommitted":"^1.6.2"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_1.0.3_1612510601637_0.27177296280443586","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"1.1.0-add-actions-12850ddff66c74e242cdc7249aec1019e51e3766":{"name":"@balena/jellyfish-plugin-base","version":"1.1.0-add-actions-12850ddff66c74e242cdc7249aec1019e51e3766","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@1.1.0-add-actions-12850ddff66c74e242cdc7249aec1019e51e3766","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"7758d84cefa03924395bbb7a614a795423f32c72","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-1.1.0-add-actions-12850ddff66c74e242cdc7249aec1019e51e3766.tgz","fileCount":18,"integrity":"sha512-OcH2gNmEsfy1uylIfobil0A87FER95zdq1KAPrVg9A8ap2w0lKXr/YQa8t8GAAMpPzlGBxcAcTfc7YwZbTyP3w==","signatures":[{"sig":"MEUCIQDVRbSioCTghUlzZHTZL+0DkPLInm3IQnOS5ua0pODFZwIgEr9cQKdu9A5siJjIyS57Vl845ObME+VhVBRZHw8JHiE=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":25409,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgHQPuCRA9TVsSAnZWagAAcBIP/AlcaOxhYdZFlbgHjPSR\n1f9tKZjd3NHhVBgDGStkgOVJx3vCkblygG6COAe7wy9dCJlmGhcu+8UZPAkv\nhc/cae/NQjscSZh6+rNaJsJFM95LsAVk5OF/Y36DjIlCWcffM68x7LBhecE4\nZwLYHLWlpD6eUdRjYU6I18Mo737Q/lQfkilAlAXyEiqIt6RPlJL8ph4LWt4u\nLozl+awmFyyGS0DRs9B5gHys4AiBr08m3A8jiQAd4cHlkdXKw02BCo8PmeSP\nLxNkSywaFWT+w18/R+cpoLwqjfpqd8QG4zENYHusfQdU8RJhyV+L8Z6mKJ8g\n8FrCd4gMVSbRd2ohDDtFzoU/J5kGGv6XT8M35jo61e7VEK3H9MomoJQNkTC+\nhYjjGa3EGi1pWFey/EbpIT+jX6JtHYWyLLcdzvxdgepU2PoKthZu6Csj2Ldm\n89nC6vuOoWZoa8lpPOyeJVY86ev05yV11+k1AcoEqNcs4Sq5XkGBabLWe7WD\nZUZ8AW4Z0mf6U32tlDwYcj597zxkTnLHTIxhZMosq571UA5JoOcRLQNgsDCC\naM7bN+qjTUfG3gts4TZNFcNGPOmJCRflCTtfWDrKYAv3TNpQRuNP5QIT88tR\nfSA/3/8KqZeK6vEN1QvSNTM1frAc/Y2MJo1g4HEySUyvJQJWkClKeoVu30qt\nyd/Z\r\n=OriO\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","husky":{"hooks":{"pre-commit":"lint-staged"}},"types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"12850ddff66c74e242cdc7249aec1019e51e3766","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint --typescript lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=shellcheck,@types/jest","test":"npm run doc && catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc","check":"./scripts/check-filenames.sh && ./scripts/check-licenses.sh && ./scripts/check-deployable-lib.sh && shellcheck ./scripts/*.sh","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --typescript --fix lib test","postinstall":"if [ -z \"$CI\" ] && [ -d \".git\" ]; then husky install; fi"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --typescript --fix","npm run doc"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.20","semver":"^7.3.4","skhema":"^5.3.3","json-schema":"^0.3.0","@balena/jellyfish-logger":"^0.0.217"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^26.6.3","husky":"^5.0.6","sinon":"^9.2.3","deplint":"^1.1.3","ts-jest":"^26.4.4","typedoc":"^0.20.14","depcheck":"^1.3.1","shellcheck":"^0.4.4","typescript":"^4.1.3","@types/jest":"^26.0.20","lint-staged":"^10.5.3","@balena/lint":"^5.3.0","@types/sinon":"^9.0.10","@types/semver":"^7.3.4","catch-uncommitted":"^1.6.2"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_1.1.0-add-actions-12850ddff66c74e242cdc7249aec1019e51e3766_1612514286291_0.6002856254983024","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"1.1.0":{"name":"@balena/jellyfish-plugin-base","version":"1.1.0","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@1.1.0","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"aa8e1cbf4d465e1f2e814eac98387dbab6fd80d2","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-1.1.0.tgz","fileCount":18,"integrity":"sha512-EB5P0j3e3hftfQAQxHI/wp7g1prBe4gCp5C3Npllwp1CYaf32ugt+B0TIW9OuLa+57M2O7BJyhGa5MN8RrU3QA==","signatures":[{"sig":"MEUCIQC15VCDJpR50QkhlWHCYPh/5RFXJlESK/iqhq7hu52V9AIgM5H5W3N4renG8qIj1gy8oId9dFsLaZGkCPQ3eg9GKe8=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":25356,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgHQS3CRA9TVsSAnZWagAAldcQAKJtC3oyXGXOBIYRzHVt\nDfIgYspiB2boQpDGjnR2UENrov+6sorVgGuFSlh5CjTXJUoggNhl/mj/mI0g\nC3wD+35PCAFh/SuW+RPCafr0s6dlC1rJnDGp+IX90ySXdwMW/Q8120WiMCzb\n4HLtXA+3xy1m6ZG8VFcLK9Pk/0nLdqbu8t6bzx0O0Xxmcva7JN/sO/wezQL/\n3qwh1VisYIlWdjpVqchBnq6V6ZkF4bSivG5iiSZx4ev8D4YYxDDZwNRNLhhw\neiyfAM6FQqSYadWcgM2Y1wqWuE33m0aVWuRMow3hT8Gq3Kb1x6P925AEtADz\nHNuMae5iUf3+7DofYOIuA204UAQMRyRgGyEvBw3JV9PnbMDSgLvn1kg3sidx\nleVYgFEXHEM7nZiSTDk9OC93TsMJeGOL+sg/eX1SnYJDNvQvAqUTowyb+4t3\nzx5XRV0EJuhuRHTeCp+CZPuK7a+gbAYRVwyTMdgh6X/dJmXlwlpYkOQtRkC3\n3k/hDYsxrHkeyoJDn86qDfYJXMckLkEq671FJhgaAG/GYKzYl4AdWZ2Kych5\nevR8C7mZeXfCNqJOXPLvXMWWzTwaadyKc5DezswIj22+9wD06aPjEyXhnTe+\nG9w812Iz4R47wziTpY1H5ibPvsnhhI/9ghzHZ1s65z8GF3pt4/lzbOBIHCJ2\nH/vI\r\n=Ec8M\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","husky":{"hooks":{"pre-commit":"lint-staged"}},"types":"build/index.d.ts","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"769d58bae59926781a0025d48f1b9c5d299508e0","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint --typescript lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=shellcheck,@types/jest","test":"npm run doc && catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc","check":"./scripts/check-filenames.sh && ./scripts/check-licenses.sh && ./scripts/check-deployable-lib.sh && shellcheck ./scripts/*.sh","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --typescript --fix lib test","postinstall":"if [ -z \"$CI\" ] && [ -d \".git\" ]; then husky install; fi"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --typescript --fix","npm run doc"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.20","semver":"^7.3.4","skhema":"^5.3.3","json-schema":"^0.3.0","@balena/jellyfish-logger":"^0.0.217"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^26.6.3","husky":"^5.0.6","sinon":"^9.2.3","deplint":"^1.1.3","ts-jest":"^26.4.4","typedoc":"^0.20.14","depcheck":"^1.3.1","shellcheck":"^0.4.4","typescript":"^4.1.3","@types/jest":"^26.0.20","lint-staged":"^10.5.3","@balena/lint":"^5.3.0","@types/sinon":"^9.0.10","@types/semver":"^7.3.4","catch-uncommitted":"^1.6.2"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_1.1.0_1612514487507_0.6352030286735715","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"1.1.1-use-shared-renovate-config-8ef49a553279b2030f19374e12610022cc990210":{"name":"@balena/jellyfish-plugin-base","version":"1.1.1-use-shared-renovate-config-8ef49a553279b2030f19374e12610022cc990210","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@1.1.1-use-shared-renovate-config-8ef49a553279b2030f19374e12610022cc990210","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"5dff7f10d041d007f16b8debe528941676215e90","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-1.1.1-use-shared-renovate-config-8ef49a553279b2030f19374e12610022cc990210.tgz","fileCount":18,"integrity":"sha512-MK7WgYW0INtRsLgAc/DTSAH38Ov7LfeNu15k9MKQQ+i5WOH/05HUDtanSxPv+4QPI3+7EwCNAAH6ddfZwSv79A==","signatures":[{"sig":"MEYCIQDEmrFzW4qJ3ewmz8ZBnT+brhr4lqloYa38uzgsmQcHdAIhAPjX4b1lJtrCaDOF28dDZYKHmBrKTAJXPTvlegUgT5Ur","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":25500,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgHzu1CRA9TVsSAnZWagAATlQP/0QY+rZ8Q9PHUzuoAtod\nqHOCyki7QFvCZWobucfzPHcOHNnKoD+2+WvcKNEPGgMoss35IprDXiTzN2Z0\nAOTjX1COhUCRt3lgPjgCazlxW4zWxP4WrnZ3pdI3oUyLISutSnVd0rGmrd3W\nPFBLaEVjWG2kgs+ia8Wf6oqX4cfCRRSHxp35BqBZFJfd++VoSeHN+ZGULbzi\noqJpqIEE//QL/OfGOYw4CrElINxCOHPNv/XXL+8t0e8wUYq2VhoRXG1hDJCZ\neta6mE2fItj88519ZtsvFQHAsDczsVpTvDi1pR+OYdARVhBxpo6gqRgav64i\nfmxe3FJSckGDavxEgMG+hTkwpQzh0V8mSILYucnt65AtEREIVN++QOxaFUyE\nzgJFpVy97EA4fXmkLnnuftoN41/iL1RJj20PiMrtF8iZIIUtVvAFSsOihPkv\njJ6jghdEkzpnyatzcRHdEo39ByBnzVPkGhiglVK35/HUCP0oC5XkzEOA1JwG\nXRpWoVfXTljg5IuFOyU8E6aSsVdGTk/pD9qcgI804BqlRwKFlMY8JMULQfKg\nD3W+nviuHIq+aEBczaaULhXXJZO2AE9YDcGI94A2GXH+BZsIFoCYWxmWF2BS\neAjmaLrMiR5K/VdfMDa4eDE8TuNl46RnrvQ86IzI3BgtNAWuz8uXfIfPbW8L\nTihl\r\n=BHkr\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","husky":{"hooks":{"pre-commit":"lint-staged"}},"types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"8ef49a553279b2030f19374e12610022cc990210","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint --typescript lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=shellcheck,@types/jest","test":"npm run doc && catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc","check":"./scripts/check-filenames.sh && ./scripts/check-licenses.sh && ./scripts/check-deployable-lib.sh && shellcheck ./scripts/*.sh","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --typescript --fix lib test","postinstall":"if [ -z \"$CI\" ] && [ -d \".git\" ]; then husky install; fi"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --typescript --fix","npm run doc"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.20","semver":"^7.3.4","skhema":"^5.3.3","json-schema":"^0.3.0","@balena/jellyfish-logger":"^0.0.217"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^26.6.3","husky":"^5.0.6","sinon":"^9.2.3","deplint":"^1.1.3","ts-jest":"^26.4.4","typedoc":"^0.20.14","depcheck":"^1.3.1","shellcheck":"^0.4.4","typescript":"^4.1.3","@types/jest":"^26.0.20","lint-staged":"^10.5.3","@balena/lint":"^5.3.0","@types/sinon":"^9.0.10","@types/semver":"^7.3.4","catch-uncommitted":"^1.6.2"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_1.1.1-use-shared-renovate-config-8ef49a553279b2030f19374e12610022cc990210_1612659636631_0.00953213516443574","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"1.1.1":{"name":"@balena/jellyfish-plugin-base","version":"1.1.1","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@1.1.1","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"084ff51f15d6c556a3012f3fcc44a7349595d78f","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-1.1.1.tgz","fileCount":18,"integrity":"sha512-Ql1CGGvPFV65B56qRCVOzKyddhlHpehKwmLAQm7XUUOHhNmINri7Wnnq11Ae5E+m3XFFjf8W/DMbh7Pyplp7/A==","signatures":[{"sig":"MEUCIBPE2Su1UA3ZFxlScDE3JOolZiPx2Urn3gudtCMXn5c/AiEAvX8iJk/jMJKnR+/t9bzX0qaZKlEad08z6o4c73+SZuk=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":25432,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgHzxzCRA9TVsSAnZWagAAursQAIo0CLWtYdxsRm2+NWmh\nSHngqiVQPSdBIwkr+mKHf+War6at+IKyY1jYw1AVvsD6tE8bsgL+RXp0zZJD\nu+wLXAtXYnGLjGxAbwqI4yRdx7wER28foEUEvRG3yZUqiloY1juFDFO8lDX5\n+dtr8fvRdpw3XoD5Mb6LidjtqxMAhcM2RpZgY96nZ80V7YS0K8K5J8zTl+8c\nI+ri6X7DhmrzKUoVsg+cE0Mp2k1vrAZM4VsBYdUD8RQrRW+5tkVtL7aXtnql\nYFXvl49DcHb20wk0xaqwdBZb3NFPJmm/UZpgM6whkk8k6ONe5DCmqXR/0iJr\nBQAckfMi+trXUGyuY0TLJjON3HJOFqrD2whnw9hdmkjufPcz2+3GlHe+87oK\nbms/2cMf0i4nPX/Dfa6F2sywmgROnJNYo4R49q3JKn9HTs6Ge2VrfaOtHTs0\ntNqYoLY7DlVs41F8wpN5flHMJgHykcDxbG8GcX0EOUjobiuW4Q0HLUNb8LY8\nyu/4Jbdyp3VgNTKWrJQDyulbrC87HmfUF2Fd4A8xZHkv5hWGRiPI7b6auGiq\nWjVGcFTY/+WowPDoZ+G5r7uzcMn1/N5S8W43Rl9zFRbBCTwxvqDzCfw7LRnh\n0TNgfYnfkVi10hN3M24+52FaI3gPmqgPW5Ig5Up+MH2hVhrkrz6qnlhK79XK\nQFY0\r\n=fvCn\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","husky":{"hooks":{"pre-commit":"lint-staged"}},"types":"build/index.d.ts","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"3eb517915745182a6400b0cf3aa0b2a42db6aabc","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint --typescript lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=shellcheck,@types/jest","test":"npm run doc && catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc","check":"./scripts/check-filenames.sh && ./scripts/check-licenses.sh && ./scripts/check-deployable-lib.sh && shellcheck ./scripts/*.sh","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --typescript --fix lib test","postinstall":"if [ -z \"$CI\" ] && [ -d \".git\" ]; then husky install; fi"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --typescript --fix","npm run doc"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.20","semver":"^7.3.4","skhema":"^5.3.3","json-schema":"^0.3.0","@balena/jellyfish-logger":"^0.0.217"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^26.6.3","husky":"^5.0.6","sinon":"^9.2.3","deplint":"^1.1.3","ts-jest":"^26.4.4","typedoc":"^0.20.14","depcheck":"^1.3.1","shellcheck":"^0.4.4","typescript":"^4.1.3","@types/jest":"^26.0.20","lint-staged":"^10.5.3","@balena/lint":"^5.3.0","@types/sinon":"^9.0.10","@types/semver":"^7.3.4","catch-uncommitted":"^1.6.2"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_1.1.1_1612659826793_0.7554041821085355","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"1.1.2-renovate-non-major-f525f4fdba7b11c198157f395483c30f9958495c":{"name":"@balena/jellyfish-plugin-base","version":"1.1.2-renovate-non-major-f525f4fdba7b11c198157f395483c30f9958495c","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@1.1.2-renovate-non-major-f525f4fdba7b11c198157f395483c30f9958495c","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"f08727610ef2d362089e685fe48e53e165146dc8","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-1.1.2-renovate-non-major-f525f4fdba7b11c198157f395483c30f9958495c.tgz","fileCount":18,"integrity":"sha512-WmsI1CuTCVFOksk3jYoKt+4O20VtykEgB+KiPc0Kfu7YteFQcov9//LDuOgXIha8hZmLt+5NEo672E3aaE4a4Q==","signatures":[{"sig":"MEUCIQCZkEa7JAHkdnpIpm9OGMUTtUzmDj4aHjHj1C3E3YY+pwIgfG0iRvuZnyi0KPafg0AlqcrdtijQbIsW8cFVejYC4pM=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":25560,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgH6s8CRA9TVsSAnZWagAAZSsP/1c5Pq/J2FSN2emcAwrY\nCEiMg7DaWhGCert7KezbB0SXdsgTU92oNRGfpAavrJ86ghuGawqnbhn5NIx6\nRf6szHl/hfNaGqEMzkWrR2oNaM7XzINn8qy0lqfrgF2TmSaP7a0nqNyDUx1R\nSgDa2yDENMw05Fx7jlV8vxUBkCEdcWvluKNssjSaa8/8vFvaJNxSHzebx4wW\nWXO2B48b/ymOuDNyQyU2TLI+xmyUx+YqDc7znooTpeegeLpr9i4fH0Ewvz+f\nQ04LjeI2PqhHORckPkrxt/1tFbBg31a0brfBn2jrVqw/gpq/pgxU6ZFjV7mW\nW/tpipbyNLnRGckAWVnYsBhsai+PxlUrYL5bUxhxgUINU2BT2P7vAEnmKWdv\nb7Pbl3Kg9+H/oW5XbY14H+MvSxGqn4PLAX+Si6bl0bZfd3UanX7uKf3zCKMw\nl9V8neyqVpnXi8qDDvkXV00kQcfhZvX9MAIt1XtoqJV/J2OZhgucRx1pMikV\nrFUFvULAYGf2+w0FsHIZkNPWeGS1oJxN6pvkQ49En6FGBKUri1y2CO/tZ7uQ\nQSvvY/juE7mJjfIIHdTwZw7xfB/DSt5dY55ijyitjyFKHnd0s1z5BC6ReV76\nW2eNebfYX40WtrTecDl7ntkQP1ItuW2ZmFuzdKQrLVx1yGZkoxF2mY2du/ni\nWhuq\r\n=n50n\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","husky":{"hooks":{"pre-commit":"lint-staged"}},"types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"f525f4fdba7b11c198157f395483c30f9958495c","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint --typescript lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=shellcheck,@types/jest","test":"npm run doc && catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc","check":"./scripts/check-filenames.sh && ./scripts/check-licenses.sh && ./scripts/check-deployable-lib.sh && shellcheck ./scripts/*.sh","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --typescript --fix lib test","postinstall":"if [ -z \"$CI\" ] && [ -d \".git\" ]; then husky install; fi"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --typescript --fix","npm run doc"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.20","semver":"^7.3.4","skhema":"^5.3.3","json-schema":"^0.3.0","@balena/jellyfish-logger":"^0.0.231"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^26.6.3","husky":"^5.0.8","sinon":"^9.2.4","deplint":"^1.1.3","ts-jest":"^26.5.0","typedoc":"^0.20.23","depcheck":"^1.3.1","shellcheck":"^0.4.4","typescript":"^4.1.3","@types/jest":"^26.0.20","lint-staged":"^10.5.4","@balena/lint":"^5.4.0","@types/sinon":"^9.0.10","@types/semver":"^7.3.4","catch-uncommitted":"^1.6.2"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_1.1.2-renovate-non-major-f525f4fdba7b11c198157f395483c30f9958495c_1612688187844_0.06070271422574214","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"1.1.2-bump-logger-be125befae167e98901ea1efd7aa7c2f7fb2a739":{"name":"@balena/jellyfish-plugin-base","version":"1.1.2-bump-logger-be125befae167e98901ea1efd7aa7c2f7fb2a739","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@1.1.2-bump-logger-be125befae167e98901ea1efd7aa7c2f7fb2a739","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"1ae0f5bc5dc625a4ad1229a61021d3286ab12140","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-1.1.2-bump-logger-be125befae167e98901ea1efd7aa7c2f7fb2a739.tgz","fileCount":18,"integrity":"sha512-A3j0kO/k4atQ8UuW+9XNb4lPZNoBb+Wzs2kM4Y0GX2k3aQRTrOZLgh9z+NRwcTZ2zaC7AVopXzVzlgFm4iCUbA==","signatures":[{"sig":"MEUCIFoM9lNn2RgCLPsvy7LePCZD+qLn65BdPUQ7/zAXOVNlAiEAs+dMYV+iZfm9P2Nb8QUewJz8E3rYWSO9YEdl/XWb6GQ=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":25548,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgH6tSCRA9TVsSAnZWagAAZI8P/2wtXu/eJvBZN625Ek9e\nXBs3x8xCIY1s2SVJ26Y5Xs/vKpaGcZLyDl1gC2Q95Lj8Ctx8s72iT916MrAW\nkpsvFPO2UH6zxN2kLdXg5J1kYGi3WPuSlEb2QvxlHxXcOlhejjC16UqOLjf7\nTLlXoCkv0IaUypROjCtJ1c0qje8tsYc+fOkPyAZJKUjElNfNf91v1Zy+SFB/\nY0dT7TObtJk9wxE/CZjczscCNbD4LcM0Zdvnkbqqqbp7Ou4u4KkQ1gI/7P2R\ns4r9mfpX2fbZ+sOT3QW4MKG7CNt5/VQ22JskPKy30SIEiyLUiggpz176AAkB\ngaroLs5ibZatjCAdkm7XoN65RkfiGXJlrWLdKNNuh1hUW4KBzzRnEDdNWi59\nu7ms3CxoRQ7Hs8YEXrSv08btfoYcZPuLwuIAIezFxah9KPjR98Wj5Ziko5Pn\nNc7FNER9QDQzdyc2+q039IrdHvm9o4yKvRnmMO5xDIfDfGJkQLo59xtfqqjR\njR/Z61+jvgOWP5a8GeyB2xLCRnbekFi6+w8QKKDpwow69uQv4MTyMqi2A2Ce\nR4d+UUfXN0VrRMlcSrY9YABfk5S8tKRk7MGsvXK83gWfqHn2IUZmkmk1oPI/\noVQw0Zken+ErxioRSVCi055K4fFf3e+sTSWEeaAnSBMi/O/Li9RsqYBS5wWu\nMqPA\r\n=hS0W\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","husky":{"hooks":{"pre-commit":"lint-staged"}},"types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"be125befae167e98901ea1efd7aa7c2f7fb2a739","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint --typescript lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=shellcheck,@types/jest","test":"npm run doc && catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc","check":"./scripts/check-filenames.sh && ./scripts/check-licenses.sh && ./scripts/check-deployable-lib.sh && shellcheck ./scripts/*.sh","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --typescript --fix lib test","postinstall":"if [ -z \"$CI\" ] && [ -d \".git\" ]; then husky install; fi"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --typescript --fix","npm run doc"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.20","semver":"^7.3.4","skhema":"^5.3.3","json-schema":"^0.3.0","@balena/jellyfish-logger":"^1.0.6"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^26.6.3","husky":"^5.0.6","sinon":"^9.2.3","deplint":"^1.1.3","ts-jest":"^26.4.4","typedoc":"^0.20.14","depcheck":"^1.3.1","shellcheck":"^0.4.4","typescript":"^4.1.3","@types/jest":"^26.0.20","lint-staged":"^10.5.3","@balena/lint":"^5.3.0","@types/sinon":"^9.0.10","@types/semver":"^7.3.4","catch-uncommitted":"^1.6.2"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_1.1.2-bump-logger-be125befae167e98901ea1efd7aa7c2f7fb2a739_1612688209629_0.016841055190031762","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"1.1.2-renovate-balena-jellyfish-logger-1-x-9e232cc086169b220903beeb52d9b2efe5c7c2c9":{"name":"@balena/jellyfish-plugin-base","version":"1.1.2-renovate-balena-jellyfish-logger-1-x-9e232cc086169b220903beeb52d9b2efe5c7c2c9","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@1.1.2-renovate-balena-jellyfish-logger-1-x-9e232cc086169b220903beeb52d9b2efe5c7c2c9","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"7db0ddcce95f02249e5f091994109471ed0caf70","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-1.1.2-renovate-balena-jellyfish-logger-1-x-9e232cc086169b220903beeb52d9b2efe5c7c2c9.tgz","fileCount":18,"integrity":"sha512-SXN/rOWK4+zs+UlXnSLdPVViWYjym9VhiGPGIxXCJHb7RA0R1lN4FJmqE2HDF4BSVu5s333ygrVv1gRredCvPA==","signatures":[{"sig":"MEYCIQD3d5/vvjjq6JfezcpNmJ55pIonYiGUe40Cn5kGICbx6wIhAJFCJeR5MZFY19+NtEZx1FGK9Gh/zONUTgizOYrNJP4n","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":25608,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgH6uGCRA9TVsSAnZWagAAbxsP/A7/ubiv9Wu4Ef0gTv92\nA79A1gGpfM4dvLUmq18IS3BsQ9Krf1kpGMTbHlEmOxqU2yT9zvl/f1/iCF3g\nU1PBBuc1L3HjlUWpn0IR/weX9A4DUweVUm6S5qsPQRxBc+UHtPyITnR1dtP7\n6WZatAnk0RjgYdu8G6JxDUqMRbVaqtPhCe+TiQuCNDO/P6aQj2a25h3T48Fm\nLQW1r90MtmpqFmW0O07A5qaKidfC/eWHbdS2nHhxPqUmilzxkeRfQ0b2YKjM\nowjD3qfaWcr2aDh5ZGBztDfiTDKkoDIbVkfb+iDdZhlGqgQYtOZC57sYp+FA\nkTxDEKq3gFsldRXOYDHLdH0dUUfCdqp1/JuIjuKZaclFClkC4fd3V/OVvb2O\ndoM7wrYqGXJcDToiX9j4G1+KGHRnDhJQj6IV1Qufa8pKzlk9hjmSitN6aBVy\n03RSiCC63xlWT0GLB5mVojHCBg/Uv7ynYtKcKFH8KR+Pq47kph95EwjpudwS\nitA2Q5i/D4Lc5naaOH5TsPgNdmUFEdZi+3SdWHTkGZL3cfqcWTbjV4X19Vbb\nc8cn0e2WbxfKr4TlewaoBS6RPEl+vm6eKNv7uJt8noJL4WfOzMflXshF/XX9\n8pM24vM2bOcKhzWLUD1rWmQvOhRjDMWP+MQoPwInLkAvUGcgNj78HZ8GyN8r\nVLze\r\n=GjTo\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","husky":{"hooks":{"pre-commit":"lint-staged"}},"types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"9e232cc086169b220903beeb52d9b2efe5c7c2c9","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint --typescript lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=shellcheck,@types/jest","test":"npm run doc && catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc","check":"./scripts/check-filenames.sh && ./scripts/check-licenses.sh && ./scripts/check-deployable-lib.sh && shellcheck ./scripts/*.sh","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --typescript --fix lib test","postinstall":"if [ -z \"$CI\" ] && [ -d \".git\" ]; then husky install; fi"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --typescript --fix","npm run doc"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.20","semver":"^7.3.4","skhema":"^5.3.3","json-schema":"^0.3.0","@balena/jellyfish-logger":"^1.0.6"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^26.6.3","husky":"^5.0.6","sinon":"^9.2.3","deplint":"^1.1.3","ts-jest":"^26.4.4","typedoc":"^0.20.14","depcheck":"^1.3.1","shellcheck":"^0.4.4","typescript":"^4.1.3","@types/jest":"^26.0.20","lint-staged":"^10.5.3","@balena/lint":"^5.3.0","@types/sinon":"^9.0.10","@types/semver":"^7.3.4","catch-uncommitted":"^1.6.2"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_1.1.2-renovate-balena-jellyfish-logger-1-x-9e232cc086169b220903beeb52d9b2efe5c7c2c9_1612688262219_0.5762441628060235","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"1.1.2-renovate-balena-jellyfish-logger-1-x-a21ae9a2cf3fbccd32f61616c42d0fd83a9926f1":{"name":"@balena/jellyfish-plugin-base","version":"1.1.2-renovate-balena-jellyfish-logger-1-x-a21ae9a2cf3fbccd32f61616c42d0fd83a9926f1","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@1.1.2-renovate-balena-jellyfish-logger-1-x-a21ae9a2cf3fbccd32f61616c42d0fd83a9926f1","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"305f5d0ff8103f79198cde8839471328256474b1","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-1.1.2-renovate-balena-jellyfish-logger-1-x-a21ae9a2cf3fbccd32f61616c42d0fd83a9926f1.tgz","fileCount":18,"integrity":"sha512-E/BEbKQD6CPsgWF1w/iBrLJo1YJ+YOWqGJjwGn715rvx4vJ4i0bGSnTLsL/soSYPAA1aZvZTfqAIud2YL2y5/w==","signatures":[{"sig":"MEUCIQCwbYROQMjepLejWQ9FNukRo9ZzuMmUnumLfzFMsNEPpQIgCnmC95mzQlcgrA7jlQ2H2A1VqCESmzNy0XekTwUZfwU=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":25608,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgH6xBCRA9TVsSAnZWagAA8uwP/iDsIlcrN0RRLmQ/rg7B\nNqE7yLrREUdXZ2vRxWFbZiEGhXX/Ct7CVs57AV48f52fooNyuW1nJ/fZcvCP\nkiIeKlttpUnQIEeKiyZd8NeNKbeY7shjMeJUTuw/QUjyjgHrf6t+jCfSiEjI\nYHYPklRSXuHhnTTpskKJw8fCUebUk2OCZL8J4zjRitHXURgNs6NuGv+5gORu\nuW7x9dctfV6/8Hnn9vrMqYhqPnKYn4OqclXc+l4LQN8+SMadhsJNS5j7QfrR\nEq/xm3lRE2G45BkIObVdsyIbAL5UUoZFa7EIy710JkfdzxP8CmAlFn0RNd4G\nSE2yRlgFuX9gkDgXaZb7Tu9/871SCSr5iCBGcmvWCKvWojpDu8EvkgQvXV2i\nReJGCzxa0fGdQXFUowKC1xkfpwCF544KQTSSYK2gcV3UnGu73oJd1bDObV3t\nGJxIPp1BQECese6B6rlAwSH0kpbHUDEfQZDtWdyXrxy+UvJpuVCpQXOxGv3Q\nNx5w1qCDQPN5Vx9hn3+WGPdoJZXoaVbIkGTijO5A4JYq7+Bapvi6qOXsIarM\n5h8KY/nGaBPfwiA7DbEnGkuoazqae4+NiimUaX0jR9Ns2fzCvLwMmaClSqdG\nXgpS4VAAbf1BUwKd+3X+rS4hfVwHUs5rrDFDXMAJkVZM00l2K0YVKipmZglW\nWt2c\r\n=uQqG\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","husky":{"hooks":{"pre-commit":"lint-staged"}},"types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"a21ae9a2cf3fbccd32f61616c42d0fd83a9926f1","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint --typescript lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=shellcheck,@types/jest","test":"npm run doc && catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc","check":"./scripts/check-filenames.sh && ./scripts/check-licenses.sh && ./scripts/check-deployable-lib.sh && shellcheck ./scripts/*.sh","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --typescript --fix lib test","postinstall":"if [ -z \"$CI\" ] && [ -d \".git\" ]; then husky install; fi"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --typescript --fix","npm run doc"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.20","semver":"^7.3.4","skhema":"^5.3.3","json-schema":"^0.3.0","@balena/jellyfish-logger":"^1.0.7"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^26.6.3","husky":"^5.0.6","sinon":"^9.2.3","deplint":"^1.1.3","ts-jest":"^26.4.4","typedoc":"^0.20.14","depcheck":"^1.3.1","shellcheck":"^0.4.4","typescript":"^4.1.3","@types/jest":"^26.0.20","lint-staged":"^10.5.3","@balena/lint":"^5.3.0","@types/sinon":"^9.0.10","@types/semver":"^7.3.4","catch-uncommitted":"^1.6.2"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_1.1.2-renovate-balena-jellyfish-logger-1-x-a21ae9a2cf3fbccd32f61616c42d0fd83a9926f1_1612688449449_0.7605790952938118","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"1.1.2":{"name":"@balena/jellyfish-plugin-base","version":"1.1.2","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@1.1.2","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"d309e1b8ae804547cb2424d9059fb15c53b02ad0","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-1.1.2.tgz","fileCount":18,"integrity":"sha512-kmzQvKAYY6YPYDd+PNNChf8u7+hq1/Tdj6eF4yYKEFEr0qBJxa9ft06bl0kMf3seAwdB9ozeJX0fmzyG+dlOZw==","signatures":[{"sig":"MEUCIQD8klb+NWqaOGsTBqMZBTNDe3CDAfIZOQ035JlZXFMr0AIgOslyM0Rk461ulT2i4q+HyZYKp8T1eXmQ0QKU77KeL5o=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":25530,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgH60SCRA9TVsSAnZWagAAlRIP/jFeuxgNiI6vxKKpefNn\neY/PGTJbG/TTwL/VIymoKhGUU47Yj/meW/E2QibZkRUBe/lrk/0lGdVIbzUZ\nNGq6lmma1+105s+GPEi4vMOgqvBAf/o6rb1TugCPlJAzxJwekeHNiFeV1ts1\nMfLCyEY+MkOh+oYnuQTMOqCHTt1uw69GfQhVnVc3pzvDm4T21RfyFTenR8RK\nG7fUT0HpYNPjAMq7heNzWU7miv67Muei4bpaQD81Ib5zaYlKfSSTU/26xK00\nDt7yhZsFZEGE7ohgkaZRY1MWoT2xCPI07znJKeBFPOqHgBs9okGmmXtW/V+5\n8asVVAvbp2d6ie3y3gbmAuMaw8Bt1erOssf25vlQC/BuVOjpb9Ped0qY8pjo\nmFF/2Ai1eba+/BoetWEkuoO69Eladkohv0OZ2k16HaEQDrRCZgavAC8i3Mx4\nvznAFNb3ZkEt6WGtqRu8hU7PXaVPSgDVCKrOEkvLkQaRLlTHsIYp9fkQLdcN\nE9f12b9RdwOwoH98bevqk1VloMjoXli3V7VgMkz0po4QimaZtMhpu9HhwhZT\nOGJLQALubUqNaC5kHSL2s+4JLxLv64d/u8KX9W9wGrfRgAFeYSefGKTOYPNi\nUTnCD8soN+uXUIx4Klhp4Df3OtH1fMxXJ0Row5s9YFdqfHI3Qeb5irWHgnYd\nE0L2\r\n=uDBw\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","husky":{"hooks":{"pre-commit":"lint-staged"}},"types":"build/index.d.ts","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"083e2b7c4af1c604826455b6628c210830fc101d","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint --typescript lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=shellcheck,@types/jest","test":"npm run doc && catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc","check":"./scripts/check-filenames.sh && ./scripts/check-licenses.sh && ./scripts/check-deployable-lib.sh && shellcheck ./scripts/*.sh","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --typescript --fix lib test","postinstall":"if [ -z \"$CI\" ] && [ -d \".git\" ]; then husky install; fi"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --typescript --fix","npm run doc"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.20","semver":"^7.3.4","skhema":"^5.3.3","json-schema":"^0.3.0","@balena/jellyfish-logger":"^1.0.7"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^26.6.3","husky":"^5.0.6","sinon":"^9.2.3","deplint":"^1.1.3","ts-jest":"^26.4.4","typedoc":"^0.20.14","depcheck":"^1.3.1","shellcheck":"^0.4.4","typescript":"^4.1.3","@types/jest":"^26.0.20","lint-staged":"^10.5.3","@balena/lint":"^5.3.0","@types/sinon":"^9.0.10","@types/semver":"^7.3.4","catch-uncommitted":"^1.6.2"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_1.1.2_1612688658153_0.41561690383788985","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"1.1.3-renovate-non-major-85e54e02799b13e8fc7565933c6e4cd0f839df4a":{"name":"@balena/jellyfish-plugin-base","version":"1.1.3-renovate-non-major-85e54e02799b13e8fc7565933c6e4cd0f839df4a","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@1.1.3-renovate-non-major-85e54e02799b13e8fc7565933c6e4cd0f839df4a","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"12d2bc494ba380048688aee9756d4b4f7bd91e00","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-1.1.3-renovate-non-major-85e54e02799b13e8fc7565933c6e4cd0f839df4a.tgz","fileCount":18,"integrity":"sha512-0rjHisOFTcU9hEECrN0CmHhxXiXbLq/JswhOcRnRtfVgUKwbxLnQ473X5c/P1XhrvhnLKaJkHyqtNfPA5MBi3Q==","signatures":[{"sig":"MEYCIQDDQ7iCmhtd0AAXSuQFluED8V9qCXYsro3kPNrm4ZP+uwIhAPNJDBLW3SLxezioZMT6B1tpeE95t04qE+S6U6Y6reXZ","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":25658,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgH63lCRA9TVsSAnZWagAA6p0P/jEr/TF+CPuDiQDdU94A\n1NiGExnQ2uCzNgz6Ym0WC1LDwlhbKugXsbK1wIpUA2U9kLd0LgIDcZE4fm7n\nT6wowVv6OUcro76Hq4Iqr3ORlv6SU/Srrl3EnjFa01QH8qhI4Vjv1nxPr6zd\nZfQEW0aQdLIaMjJDpuLj025Tb05N+g5rEuED0N5i73MVeXJLyNNGPBcxmF3N\ngz5Jojb/639J8n2N4pWzvCnDY/NDYqUvcM7fI06Z6HYnGHT4IaICTseG9B/8\nWPB4bRdsKUJrymOmm86qmQxjHbVRfPMNt/TRj02RqP7xHeFZ/K/jJutCxag2\nzpkH2rDgo72QsDsPbD61bh8Q0hrG8f4CFJGJRKdYFLPZ7VOG8a4i/U/Nfr65\n0RjRVAj/4OD+Gouw274KQWN21ybHTcA8V1hydc8Va+lH3uoAgsWN569KFaQt\nfCeKiiRETC2Hw8bMlIn0+ELYas5iZa78JUxnxCEGT7Jk/eMsUi1ghajyefuL\nr5brmAuzX1AJy3uvvCWicg33vevn3YJq3r/NnVmxfQsvPhg84idDDJvT9gdT\nfqGjJp3VIzvq6N4UfBYXqc+5atRDwP5nDIosQ7wTCe1QsjjKFuclCdOmkwGW\nIH2XrnP7sNNo1XZuwn2M4J9m4E1orKvz2k7a5/gbZJ+uH2oYDUV/Z0TB6kbq\nBXk0\r\n=MlIK\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","husky":{"hooks":{"pre-commit":"lint-staged"}},"types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"85e54e02799b13e8fc7565933c6e4cd0f839df4a","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint --typescript lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=shellcheck,@types/jest","test":"npm run doc && catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc","check":"./scripts/check-filenames.sh && ./scripts/check-licenses.sh && ./scripts/check-deployable-lib.sh && shellcheck ./scripts/*.sh","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --typescript --fix lib test","postinstall":"if [ -z \"$CI\" ] && [ -d \".git\" ]; then husky install; fi"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --typescript --fix","npm run doc"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.20","semver":"^7.3.4","skhema":"^5.3.3","json-schema":"^0.3.0","@balena/jellyfish-logger":"^1.0.7"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^26.6.3","husky":"^5.0.8","sinon":"^9.2.4","deplint":"^1.1.3","ts-jest":"^26.5.0","typedoc":"^0.20.23","depcheck":"^1.3.1","shellcheck":"^0.4.4","typescript":"^4.1.3","@types/jest":"^26.0.20","lint-staged":"^10.5.4","@balena/lint":"^5.4.0","@types/sinon":"^9.0.10","@types/semver":"^7.3.4","catch-uncommitted":"^1.6.2"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_1.1.3-renovate-non-major-85e54e02799b13e8fc7565933c6e4cd0f839df4a_1612688868903_0.6315827627380881","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"1.1.3-renovate-non-major-a6ebe2306dd92affd4027a2daff639b7075b8369":{"name":"@balena/jellyfish-plugin-base","version":"1.1.3-renovate-non-major-a6ebe2306dd92affd4027a2daff639b7075b8369","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@1.1.3-renovate-non-major-a6ebe2306dd92affd4027a2daff639b7075b8369","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"3ad7b784886f85d44f0ad0651553e4b9c71fca58","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-1.1.3-renovate-non-major-a6ebe2306dd92affd4027a2daff639b7075b8369.tgz","fileCount":18,"integrity":"sha512-K2NfDneFHkS2RFQlpRKEKPOlxFR3TEiyjzUEC29jicSjnY34QDqLbnTK8Ew3ONxUZc7GU8wfnwt8zBYoZyOVmA==","signatures":[{"sig":"MEYCIQCoj4AWUVFOSgr+xqybCOqZdFfCQuqr5cdG9GwvpERnQgIhAPUegiTJ5bTySl66uSQiC0S1RLZG4KSPzfM04+qtyKq6","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":25658,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgH+KsCRA9TVsSAnZWagAApDkQAKAOmT16EMrNp94rBV0Z\ndIaJY6oOzTLr0fKrzEh4SlrrJHZ2sOYWbSrLgFgt5gPrAhVuePFks7a6oEAE\nRrLznkwASX4K/6JqbKXCX/BwQPAwA4ZrnbqbFFblwKNXyXL0IApJEpTWkkXG\nDKhppw+sQ0nQe97ZJqk/Kz9R8glWUpSoMOMnCzItKMUm3MY/kPm7C+9WR5DX\nVrpr0Qdg+OYcqKYu/Lnb080NDhIb127G4QdZUYieWBlsxC6McZCdSXDfYZiM\nIpIixQwUqftcq3eER9Ix/mcprJmlV8sZ0TqJ2tFuLFhVk2xWcJoUzP8QKd/n\nes9Nd7TL2ZNuShyymjU6eONEIy7wd3ypT73YTWdqKwMXiLbkUMNyT9pRedty\nPvXtpN+QaEDpl9dEwNsVjSSYlchUwUPp36Z3XDPK9/YD5iE8TGwflSlDj+H2\noKEo6QLHHxPEq7dNTgz3Xd07UZcnEUCgQ0hORsYqw2YercZWd3kdwc+S75KB\nchWWrRMajP1EAqWI5T8FtphCMDIoAr931TNaVFcTWNV/pBevZnOhNC5/drN5\nymcblZqY/MnJ6nzf5VJVRNgJC0BBeMflJdJ3JpCk8XEgESC161jZZCGoWEZj\nMSOIZqmMJ9xiSqDgZJt0mut8otU9xaViHIOJImbDzy03/asEIOaoXO5Pee1E\nKvUF\r\n=FA7c\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","husky":{"hooks":{"pre-commit":"lint-staged"}},"types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"a6ebe2306dd92affd4027a2daff639b7075b8369","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint --typescript lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=shellcheck,@types/jest","test":"npm run doc && catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc","check":"./scripts/check-filenames.sh && ./scripts/check-licenses.sh && ./scripts/check-deployable-lib.sh && shellcheck ./scripts/*.sh","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --typescript --fix lib test","postinstall":"if [ -z \"$CI\" ] && [ -d \".git\" ]; then husky install; fi"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --typescript --fix","npm run doc"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.20","semver":"^7.3.4","skhema":"^5.3.3","json-schema":"^0.3.0","@balena/jellyfish-logger":"^1.0.8"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^26.6.3","husky":"^5.0.8","sinon":"^9.2.4","deplint":"^1.1.3","ts-jest":"^26.5.0","typedoc":"^0.20.23","depcheck":"^1.3.1","shellcheck":"^0.4.4","typescript":"^4.1.3","@types/jest":"^26.0.20","lint-staged":"^10.5.4","@balena/lint":"^5.4.0","@types/sinon":"^9.0.10","@types/semver":"^7.3.4","catch-uncommitted":"^1.6.2"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_1.1.3-renovate-non-major-a6ebe2306dd92affd4027a2daff639b7075b8369_1612702380016_0.7274104150518075","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"1.1.3-renovate-non-major-d982a3707056fb3a029ff991a37b4cf15d6e877d":{"name":"@balena/jellyfish-plugin-base","version":"1.1.3-renovate-non-major-d982a3707056fb3a029ff991a37b4cf15d6e877d","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@1.1.3-renovate-non-major-d982a3707056fb3a029ff991a37b4cf15d6e877d","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"c2d3fad69303a724ae544b918f76108bfe4e3323","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-1.1.3-renovate-non-major-d982a3707056fb3a029ff991a37b4cf15d6e877d.tgz","fileCount":18,"integrity":"sha512-Emlg/2gB7ry7gyAKbnGfkeNx/MS6/7OeZN26PLZyfJVecTfX7G+O5dcZl67JUKUX7w20gtjTLlP5RyUvTzNx2A==","signatures":[{"sig":"MEYCIQDtN9N53d0xyCrQb7z44fryfGsTJBs9ydW3qd7kON6EcAIhAO3+R9MhrOvCx6CUkx5SlKPA8ol28TJjrChGROR8DOUD","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":25658,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgIUEzCRA9TVsSAnZWagAA/54QAIgG4MnwEt58NB/q8pV+\nYCkHdVMfD6g0k2cVOGVimDd5kKxLlU/v6CnTcl/0THtgfKC88vn+nOEZYSC4\njeA4EegXK8Wn7zSLodRWV2UEro+J0aSljBIUsw+h0i7D2gHt2XyvJlvZWei7\nYZq4qRxMg4qdZO3ky8gv4725QGAuwVL55qcspS5qVgLe+pOQH1CzSuB7wbmt\nPEngAvtbgaEDaAkOjDWCM+1Pfn/BPB9WKRFgEYYc94ErVoV8ZCQUKQhpXHIO\nDEPilUZ+x8FgoXQpJxx8qEIbQ9lX4Lpd8bakX7i/Xyx1bMHadsoCtSF+Yryz\ntbgNXts8gUuGEFSNghO9bsXfRDV7I/aw3hXztWlo5JH5XsL5S8u7dUeaqkY3\n3VSu5tTAt+a1IyN2rmRDmvncWO7mHA/l0Ix749G6ep8EhoBke+/5u1u87ton\nJv66JsHd8sVSk+/pHDWWEj7xtlcaLh63AR9gro/IXwh1QKtgL6vbWjBKmOoP\nKhO03QAbGbsJhPpb8fEtbhqGRQGaotH80bWTDrUIE4ULe9MV4OZ29BAw/Cyg\nwzKlCwUfzg5pFl+x9pjUIoTp+ZwcFkobzYy2DxQPCKdTmWLd3D4j5naADEUV\nWWWPMnUbgC9B8oz8hrr4Yy3fS3BNjlpUh5S5fx3Pk3hj0nXk5oSNuBey+SVx\nx/69\r\n=9wRb\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","husky":{"hooks":{"pre-commit":"lint-staged"}},"types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"d982a3707056fb3a029ff991a37b4cf15d6e877d","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint --typescript lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=shellcheck,@types/jest","test":"npm run doc && catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc","check":"./scripts/check-filenames.sh && ./scripts/check-licenses.sh && ./scripts/check-deployable-lib.sh && shellcheck ./scripts/*.sh","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --typescript --fix lib test","postinstall":"if [ -z \"$CI\" ] && [ -d \".git\" ]; then husky install; fi"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --typescript --fix","npm run doc"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.20","semver":"^7.3.4","skhema":"^5.3.3","json-schema":"^0.3.0","@balena/jellyfish-logger":"^1.0.8"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^26.6.3","husky":"^5.0.8","sinon":"^9.2.4","deplint":"^1.1.3","ts-jest":"^26.5.0","typedoc":"^0.20.23","depcheck":"^1.3.1","shellcheck":"^0.4.4","typescript":"^4.1.3","@types/jest":"^26.0.20","lint-staged":"^10.5.4","@balena/lint":"^5.4.1","@types/sinon":"^9.0.10","@types/semver":"^7.3.4","catch-uncommitted":"^1.6.2"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_1.1.3-renovate-non-major-d982a3707056fb3a029ff991a37b4cf15d6e877d_1612792114698_0.7266250736827511","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"1.1.3-renovate-non-major-9eb55a5f1486b8c3ee4aeb4817e7bbff90133d0b":{"name":"@balena/jellyfish-plugin-base","version":"1.1.3-renovate-non-major-9eb55a5f1486b8c3ee4aeb4817e7bbff90133d0b","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@1.1.3-renovate-non-major-9eb55a5f1486b8c3ee4aeb4817e7bbff90133d0b","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"162e1804659bc63e603ab3e02e23b16cbbab6380","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-1.1.3-renovate-non-major-9eb55a5f1486b8c3ee4aeb4817e7bbff90133d0b.tgz","fileCount":18,"integrity":"sha512-rXfyG5qOneLqsfn8B+AHtYvuuov1WLeshLk2bNK8GFeR1bsMtSyabq3RUC8d7VQdn+AJ8x88I4F50RAAtS3z8A==","signatures":[{"sig":"MEUCIBuG8ZlBUcmb1OFDeGEbRg8wiri3H/RK+2npgm/70t/TAiEAqJtMgOB6SDsecy8k9cyzfc+wUNYpVzdOOs7TqgUW5mM=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":25658,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgIX0sCRA9TVsSAnZWagAAegAP/15lgGFUvLF/5UzXdMik\n5fPp7JZOMWY0ErqxUsvU2UOf4xGzC4rEf25KvMpcZ7Q9pPo9ppgrsd3x61Ij\nTDd8b3Hn0eiev/dececVWdaUaDIH81Qb+ub6qyRqt/NtqMzuiTZdxR8GrX45\ns+8amlDVlHeuzWOiYuDMYmK+InXbweDslAhAC+259UYZaB1M5gFvriVcd00u\nG4/rKTIM6Ms7yAD27iooK8ea/dssQk28AQwdDzUnO6eJ6nc3lNk3ruG3r9gU\n/nbaMKZ0HlKMnZnoJbmDvVcW2s/wHJGyk9ZiFw6Xk93Ye7aG1VOuaA1n/56W\njKA8pPv8lII9s5Y1D2NU6RqnEyko59rtjiSI8sLJ/67AR7KPLyrkZ+t4yeeM\naoxZV0NGtgbwGtqUCS4SPPPOTgbc/ZzCJStCa5TiM2fRUHT3qk0gw3HaOeWo\nRgZB07Fm600aGMQver8+62GgYkktBEH5FsM+5LzsHmMW3aYiHpCiE/bcQ/3S\n/+giD9k4fo6v9w5Gl3ZkOlOzwE1p4F2d2S/wILh5db9aihH++L1tLFX9F5OI\nHh1fKdP/cljWgveTDtWpWD3qbtRA+0X0Fz8etT/8qg7dSm3mKqqrEOEEbGtP\nM8Ybxrh8sZkUc7poZAubyV4CpdqA9zh1nD6+ncQNptaAQ7x1pUutBtaqOaUd\nv3pt\r\n=7oDx\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","husky":{"hooks":{"pre-commit":"lint-staged"}},"types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"9eb55a5f1486b8c3ee4aeb4817e7bbff90133d0b","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint --typescript lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=shellcheck,@types/jest","test":"npm run doc && catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc","check":"./scripts/check-filenames.sh && ./scripts/check-licenses.sh && ./scripts/check-deployable-lib.sh && shellcheck ./scripts/*.sh","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --typescript --fix lib test","postinstall":"if [ -z \"$CI\" ] && [ -d \".git\" ]; then husky install; fi"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --typescript --fix","npm run doc"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.20","semver":"^7.3.4","skhema":"^5.3.3","json-schema":"^0.3.0","@balena/jellyfish-logger":"^1.0.8"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^26.6.3","husky":"^5.0.9","sinon":"^9.2.4","deplint":"^1.1.3","ts-jest":"^26.5.0","typedoc":"^0.20.23","depcheck":"^1.3.1","shellcheck":"^0.4.4","typescript":"^4.1.3","@types/jest":"^26.0.20","lint-staged":"^10.5.4","@balena/lint":"^5.4.1","@types/sinon":"^9.0.10","@types/semver":"^7.3.4","catch-uncommitted":"^1.6.2"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_1.1.3-renovate-non-major-9eb55a5f1486b8c3ee4aeb4817e7bbff90133d0b_1612807467627_0.35017983574469924","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"1.1.3-renovate-non-major-ab7585a85bef6f5a4f8caaffce0b6b2c80bf822f":{"name":"@balena/jellyfish-plugin-base","version":"1.1.3-renovate-non-major-ab7585a85bef6f5a4f8caaffce0b6b2c80bf822f","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@1.1.3-renovate-non-major-ab7585a85bef6f5a4f8caaffce0b6b2c80bf822f","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"09136a93f832b140c64ac846cd92625c1b84f773","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-1.1.3-renovate-non-major-ab7585a85bef6f5a4f8caaffce0b6b2c80bf822f.tgz","fileCount":18,"integrity":"sha512-/pjbxqVMSob07/yQ9BTOeelSUd785KEuwdpozTC8BwBPwGHm4k7r8c2Q+wIVQEEn8Aw926sWOkEx1kxWZxKPAA==","signatures":[{"sig":"MEUCIQDzK4AIn5aYOCYDcdOiOziO+XKeKe59SHck87sORA6llQIgbbRR9AsJt9ZcDNGACEIsXBCby+jdgLnkO+3yINrgGLg=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":25658,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgIZodCRA9TVsSAnZWagAAH3kP/3vUkM8oIfMxS2VohZzl\nt5XY9ZMjaA5vNh3PWAKa/82Y+sT/Z2DdGuHqWi6HVNvwcw+N4C8lv2XrDV+E\nElW0o/VsyL21G5UagCvoAvsXn2ey8gpoR6xNhqN8pA3b1UaL+nJSi+qJjRe/\n+VUAa9FJg95gky3O8gwT+PrlJnJIflnQzawDcl1/3cFEWr29tyFC6Djzf42z\nfuVeT51QI8Wfzsr+CnxCSc0/lRcM2368yuRtyDaZ8tDUsIUKi1bn3NpIHHJe\nzEBxnPvqvsFHw5cYI/jx7clUB97i1Op6l8p784ppX1bmlbRa9qMcLHkECioI\nv7iLDozBx2OlQ1PlLTq847479rG6xKlXeQjmXNJzx4D0BzZrsG7m4KGvC+ia\nZaYx/RGhyXrcGLLyARypSnLjA7y6SelvyfdxHqOhHQ9t5tf37k+vCzJCi6W+\n5E3o/iJ0i22Vv+6fHuNHid4weWDHDbHT2huYSna6hVMz1/25VT37xMTU4KM4\nncK5bK7ikAePSjqYElw8XclJsZ7AWOEMraXyDW5UIdF+9T/kyuICFIfYG9uk\n33fg9KK7G0Apfz7mYTFm688PM+cD+VybOgGYkg1SpG8Q8n05vet3XsaxEJW1\noN8+BH+hPpODn+12pI+1p7EF6lWqs64/es9X1QZwZT99D6S6PtVcQ2PUCzUf\neMUZ\r\n=Q3D+\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","husky":{"hooks":{"pre-commit":"lint-staged"}},"types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"ab7585a85bef6f5a4f8caaffce0b6b2c80bf822f","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint --typescript lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=shellcheck,@types/jest","test":"npm run doc && catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc","check":"./scripts/check-filenames.sh && ./scripts/check-licenses.sh && ./scripts/check-deployable-lib.sh && shellcheck ./scripts/*.sh","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --typescript --fix lib test","postinstall":"if [ -z \"$CI\" ] && [ -d \".git\" ]; then husky install; fi"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --typescript --fix","npm run doc"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.20","semver":"^7.3.4","skhema":"^5.3.3","json-schema":"^0.3.0","@balena/jellyfish-logger":"^1.0.9"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^26.6.3","husky":"^5.0.9","sinon":"^9.2.4","deplint":"^1.1.3","ts-jest":"^26.5.0","typedoc":"^0.20.23","depcheck":"^1.3.1","shellcheck":"^0.4.4","typescript":"^4.1.3","@types/jest":"^26.0.20","lint-staged":"^10.5.4","@balena/lint":"^5.4.1","@types/sinon":"^9.0.10","@types/semver":"^7.3.4","catch-uncommitted":"^1.6.2"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_1.1.3-renovate-non-major-ab7585a85bef6f5a4f8caaffce0b6b2c80bf822f_1612814876549_0.5483852163895755","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"1.1.3-renovate-non-major-af5c03839a62df401b015460200c1907bd77170d":{"name":"@balena/jellyfish-plugin-base","version":"1.1.3-renovate-non-major-af5c03839a62df401b015460200c1907bd77170d","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@1.1.3-renovate-non-major-af5c03839a62df401b015460200c1907bd77170d","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"2af306ba99bb6a10f2516d4fe86b794599a48b74","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-1.1.3-renovate-non-major-af5c03839a62df401b015460200c1907bd77170d.tgz","fileCount":18,"integrity":"sha512-I+1Gr6I0LY7YbcITzOzZ1Cwiu7yjuD5lzJgg3AHydXlA6nkdxUBnu3R+ATt1MncGnsJYgWdaeAqqyPi9iHxzDg==","signatures":[{"sig":"MEUCIQDP9OVaGERzFV6qebU1pE2qDLUUq1X43UieIWjQNH9QDQIgDwKLSY1vVevXHNyabspmCgqVuYXZkDAaJTivcAVil4Y=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":25659,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgIa9aCRA9TVsSAnZWagAAjxMQAJ/8aRy0Bxm1HKsPoOag\nmuTLvOKWhAbqyxjSydCANXC9zG1cJMSs7fISD6T6nIOmhZT9UZy08kr7pZkQ\n7RrkR693FeGDEv2Z3kwG4YHFoUdx2KbQ94ATDoUtQEv9H6V9qeR2NciEIbRQ\nlLzPmOJ/sSaeq8OqpuNQ3kdeJLI2oHET1YO0qTRTdQh8VG1+XDndlf4PvsVJ\nNtHpHpsJWaRx3zvEfGf0WXnqO5PkovRwkwlEdbtgm1BpAlKBLO0Z4m0YHinF\nzotgADS6g/64I9HasrhpscaLbuwNMeqAa3VvNcabMffx3KuVosUgaowio2qx\nQMrmJEJWad74WSgwJB9NDpzF/rXkyrJ4W/L2H61XXhxWp4FBGaus+XbqmpmO\n+DP5uiMIX7umOlLQxlGmUJm05cJBNazcq5cA+Ye4ls+Erhz+vT10jfrcXX8z\nT/NReOT1yD7dT78YycYtWYMrwDP/3NCfMd0liiBaQm3w74eHMJaMPI91UuDu\n5i0uNFycdwmZzVKNhWW4EyBQBjBKELUytSg2VMrpLxhVPF6Aikr5u4+Yy0Fc\nijRx/wYMMIMiuyTnpBRTnlElnaieIBVR66RNAq6g/QgilBp2yX+rooJQddKQ\n4cNUqomvgaHPeBt3qEJxZT+FN0BRu99/Fn71N209u31rr9d7ldc18ehK4dTg\nbtmf\r\n=Ytm0\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","husky":{"hooks":{"pre-commit":"lint-staged"}},"types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"af5c03839a62df401b015460200c1907bd77170d","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint --typescript lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=shellcheck,@types/jest","test":"npm run doc && catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc","check":"./scripts/check-filenames.sh && ./scripts/check-licenses.sh && ./scripts/check-deployable-lib.sh && shellcheck ./scripts/*.sh","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --typescript --fix lib test","postinstall":"if [ -z \"$CI\" ] && [ -d \".git\" ]; then husky install; fi"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --typescript --fix","npm run doc"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.20","semver":"^7.3.4","skhema":"^5.3.3","json-schema":"^0.3.0","@balena/jellyfish-logger":"^1.0.10"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^26.6.3","husky":"^5.0.9","sinon":"^9.2.4","deplint":"^1.1.3","ts-jest":"^26.5.0","typedoc":"^0.20.23","depcheck":"^1.3.1","shellcheck":"^0.4.4","typescript":"^4.1.3","@types/jest":"^26.0.20","lint-staged":"^10.5.4","@balena/lint":"^5.4.1","@types/sinon":"^9.0.10","@types/semver":"^7.3.4","catch-uncommitted":"^1.6.2"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_1.1.3-renovate-non-major-af5c03839a62df401b015460200c1907bd77170d_1612820314393_0.4903769119453638","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"1.1.3-bump-balena-lint-29da01180300d020a7e2f8f4ca22a4e538eedfad":{"name":"@balena/jellyfish-plugin-base","version":"1.1.3-bump-balena-lint-29da01180300d020a7e2f8f4ca22a4e538eedfad","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@1.1.3-bump-balena-lint-29da01180300d020a7e2f8f4ca22a4e538eedfad","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"c997158105aabc339db4a11623d2cbc1ff04949b","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-1.1.3-bump-balena-lint-29da01180300d020a7e2f8f4ca22a4e538eedfad.tgz","fileCount":18,"integrity":"sha512-5sc1aT8Uecme94hYiyvuW9BmXJYScgTWk/qw6zu2uP3DXmdrJNnQjSMcUGi1q/AHuJ6XzlRuhVgJ8R6fsKgtWg==","signatures":[{"sig":"MEQCICRDTOxmvubJS6QEh4yZs9NmdG03vbVsZ6Jx8io4uIkkAiAJK20MTTNTc3wKE+96ft/xZ/6qPr5+j+qBvxCoKst4DA==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":25658,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgIdqSCRA9TVsSAnZWagAA/boQAJXofW4ET76EeXqQlKBm\nvgF5ZFVZo2IdMeBdPj1bQV98XCXtTFodsNhJYfQQZ/EPNuldksuGxef5fILq\nVhs2RDhVzeKul8WnnnxOJA9zPubrJF/9Dw0Tg5JxSkcJBi606/PpoOyaww12\nFA7zpA9ZOjgnCgPPY/iKKtKFatX6di8m4hT7ho0QbKzEu+akWQv6JueyL/Q9\nWfLKiATYCmnzzjNgoXyvVaIvHGpZGecPexqAc7TF1hLNtBZgYgG14HGeNMgz\nXJJ3BYOsmN2coepL4mc1MEJw3l1h6PiP6vgoCqO/Ju2W7J89YApgrUGvCVad\nIXS3DnnEM018YZB4giWmUPMntPath3lwND4LhLuTrYfzPte418M7Manl6QgU\nBMfpk5lhAmZ5zRm59Pui0QAndpMCwYv2voczBa87dsclAlE9QzTd7E7TpqHj\nkp2wNarL4IrdXBAkrr6DjpUxYnn/GzM1PFMprYXlsnOJRt6I7M6Tmfu51ZNV\n9mQyTmnUZR+4gKMiAL+xT7+8WnRNi0zPPhRV1UVADr8YNCxi5eP6gP4jVtc7\n+c5BMmg52puhIsFJWBuC3xmFnNjVS+B+jRAtMvE3NaUIOdTNiRhI3jmaqx1l\nSKky8w2HevShQnGCJXiUZDSf23ghloqB7XWRDZ6hICNTI8YIGiEwx3jUi5Lk\nKRkR\r\n=LTsY\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","husky":{"hooks":{"pre-commit":"lint-staged"}},"types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"29da01180300d020a7e2f8f4ca22a4e538eedfad","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint --typescript lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=shellcheck,@types/jest","test":"npm run doc && catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc","check":"./scripts/check-filenames.sh && ./scripts/check-licenses.sh && ./scripts/check-deployable-lib.sh && shellcheck ./scripts/*.sh","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --typescript --fix lib test","postinstall":"if [ -z \"$CI\" ] && [ -d \".git\" ]; then husky install; fi"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --typescript --fix","npm run doc"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.20","semver":"^7.3.4","skhema":"^5.3.3","json-schema":"^0.3.0","@balena/jellyfish-logger":"^1.0.7"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^26.6.3","husky":"^5.0.6","sinon":"^9.2.3","deplint":"^1.1.3","ts-jest":"^26.4.4","typedoc":"^0.20.14","depcheck":"^1.3.1","shellcheck":"^0.4.4","typescript":"^4.1.3","@types/jest":"^26.0.20","lint-staged":"^10.5.3","@balena/lint":"^5.4.1","@types/sinon":"^9.0.10","@types/semver":"^7.3.4","catch-uncommitted":"^1.6.2"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_1.1.3-bump-balena-lint-29da01180300d020a7e2f8f4ca22a4e538eedfad_1612831377867_0.15576733795260878","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"1.1.3-renovate-non-major-c76fc6c289fbf782d38928179372f4fb78f5eb37":{"name":"@balena/jellyfish-plugin-base","version":"1.1.3-renovate-non-major-c76fc6c289fbf782d38928179372f4fb78f5eb37","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@1.1.3-renovate-non-major-c76fc6c289fbf782d38928179372f4fb78f5eb37","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"677888c8d2a972b8853dc7246f18398b08b4954d","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-1.1.3-renovate-non-major-c76fc6c289fbf782d38928179372f4fb78f5eb37.tgz","fileCount":18,"integrity":"sha512-zp2xeoeioEa/M61OAbxkaNtH003MNsg+8g+tdu2GiTCWnU+hTp7vSneOskBSLc2aB4V7ceYS3RHW/l5wiVBKFA==","signatures":[{"sig":"MEYCIQCjd0U+uJQP82380iJK82iV5STa71ocYwVspGBkr5SwmwIhAPdkAhGnai99BLVbvz7L7IVhd2HAFOXXwupfpEHbisPP","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":25688,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgIdtGCRA9TVsSAnZWagAA++oP/3Irx3mEVqa6U6GsAecK\nG50H+R6faBM/G/vMWjOTuvQAMEYdx9r/pQznGy9ium5zGX435vgOcqSDhUCl\nAMRbkzjCHoJieaHrRzejbCJaZA9adsqmPK2a2Ngt6hLT0HuNjYkx1DeOabLj\n48S4Zi0b+4y2bBX9PbcezVcY3Df/TPkNnNKvecnbeKGqCHhiBV23Pe/8f4+E\niVqhfs/TXVR1cTpm5Fw62gJvjfcwRYoUPgslkDlQzHeS5b5lsI9c3ZMEfYbr\nVwYpkuFC1KoIjb9SXQ5KXfFNFDPaY6JVqcjSuPMXaRQqyadYwB8xlgQ+qpsb\nlDb8rEDOdEygFVL0m8HvEd9D5Q9sVD+IDj/Ic4tys6VNhhqrX7EmO7CoVq/h\n5t1AZLSK0mRF3udN42WI+2F6eT/kjz+ecm1nhMOg2ovBL9/AWlEkDz8ZMdDy\nDfy/HkBxenUfjO0MAtg6eoQMFqi/1x2yPC1Oy2SjrmebeEYJz+EUFNxUT1qf\nrTDOw4oCMlyywfywqckYu7ywTW+CgfOmcc3YyLO9KmT5ysq9XJyYYPiv5afa\nm52qVn4yzk49gmWNcXeVewHTvLTmRx4LGykcgN40HvW9fWemWzeABykvSL5Q\nspEBo8gIXCh8bcjn4F+Mh48tpqj4sD+UZchBLJ21aGirwqvSdspWhLk3uP30\np+Fe\r\n=zK8b\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","husky":{"hooks":{"pre-commit":"lint-staged"}},"types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"c76fc6c289fbf782d38928179372f4fb78f5eb37","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint --typescript lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=shellcheck,@types/jest","test":"npm run doc && catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc","check":"./scripts/check-filenames.sh && ./scripts/check-licenses.sh && ./scripts/check-deployable-lib.sh && shellcheck ./scripts/*.sh","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --typescript --fix lib test","postinstall":"if [ -z \"$CI\" ] && [ -d \".git\" ]; then husky install; fi"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --typescript --fix","npm run doc"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.20","semver":"^7.3.4","skhema":"^5.3.3","json-schema":"^0.3.0","@balena/jellyfish-logger":"^1.0.10"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^26.6.3","husky":"^5.0.9","sinon":"^9.2.4","deplint":"^1.1.3","ts-jest":"^26.5.0","typedoc":"^0.20.23","depcheck":"^1.3.1","shellcheck":"^0.4.4","typescript":"^4.1.3","@types/jest":"^26.0.20","lint-staged":"^10.5.4","@balena/lint":"^5.4.1","@types/sinon":"^9.0.10","@types/semver":"^7.3.4","catch-uncommitted":"^1.6.2"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_1.1.3-renovate-non-major-c76fc6c289fbf782d38928179372f4fb78f5eb37_1612831557776_0.3752766632773059","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"1.1.3":{"name":"@balena/jellyfish-plugin-base","version":"1.1.3","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@1.1.3","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"a403c4d486f8c9dd8cab85f40e4bba2b236711fe","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-1.1.3.tgz","fileCount":18,"integrity":"sha512-8pwiF9VWHanmTIJaI2IBQNOEggdVmj+4fD5i13IBIzNEl4IPU4VPG4yx+pZvKSAAY62hxaIfofGiCApccWPM/Q==","signatures":[{"sig":"MEUCIQDa0bNrjmVy20pnIqOeqPs76XVnUJOVWSW/nqOL+a4mygIgecK9g5Lp0FnfZm+GsSS/4HEoCYNtYlU1CxK+ClgPHqw=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":25600,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgIduHCRA9TVsSAnZWagAAQHoP/3dljm7Lt3L9mVA/zbt5\nv3D/3Md15lZmrdsFsOsqNg7Yb3GTsYxTgkTRCCVzMsS00DemgcKIYQijhYHd\nHcoltEmyE9xiklrLuD4oH7xVCAdz/nEFQREPZrBH7J4ow6yMykPpxjOrR+zd\n2mbLOGh+OIbA7mq5b4TujZaE3TWhj0x/2W4sYeEcqoDI8bFrfEhziDmlzG21\nVfeNcZUp4jF0b/lS8UMQzkcSBbLWg6zMLS2leR9iYDZnHF/lJ69XvnxssAVV\nzZE4kSUF9bT7v2WDUm5WaaMUugrINaB0My3ywc/LZQjUd6xeOfhNhxWfRslJ\nvYrAfaXVxa5mUBw8n99nuf5GRkSuQhLNeIik9SE4Xuv5MQOlPSomH7hXXY1J\nkq5Nmvbbs6skQK94MyOHmMzkM+vvcSFgq/aghoTzFMGD3sPq/uMkNVL3o8mn\n/ETflxfrITRgCyrCeOFR4+S3T03JBUHbwXmQdycAt3qixl5YMtUDHlvLwS3O\nDj4uiuwffuRl0zgm4RMk7FElh32hpMHKSxWUTevbDSAI3YGuGRj1rX85Oxfe\nMAnqRvdeuA53+gbTSuDs1EAf9QAi89ggowO7ZB5ufDzzllvEqwabFdTtc+Z/\ndXorWQf6PXl/Zv4FgpKovxyurCpFk1ZUeDvkNqGulyhR7Qik3f7hwXSOhNqn\nsjUe\r\n=smDU\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","husky":{"hooks":{"pre-commit":"lint-staged"}},"types":"build/index.d.ts","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"1b2a4fc8e747ce964776b0469fbedf884f53b7ee","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint --typescript lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=shellcheck,@types/jest","test":"npm run doc && catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc","check":"./scripts/check-filenames.sh && ./scripts/check-licenses.sh && ./scripts/check-deployable-lib.sh && shellcheck ./scripts/*.sh","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --typescript --fix lib test","postinstall":"if [ -z \"$CI\" ] && [ -d \".git\" ]; then husky install; fi"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --typescript --fix","npm run doc"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.20","semver":"^7.3.4","skhema":"^5.3.3","json-schema":"^0.3.0","@balena/jellyfish-logger":"^1.0.7"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^26.6.3","husky":"^5.0.6","sinon":"^9.2.3","deplint":"^1.1.3","ts-jest":"^26.4.4","typedoc":"^0.20.14","depcheck":"^1.3.1","shellcheck":"^0.4.4","typescript":"^4.1.3","@types/jest":"^26.0.20","lint-staged":"^10.5.3","@balena/lint":"^5.4.1","@types/sinon":"^9.0.10","@types/semver":"^7.3.4","catch-uncommitted":"^1.6.2"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_1.1.3_1612831623203_0.25398217398262957","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"1.1.4-renovate-non-major-ecc82f8ebba5597a093657b61c2746d9b7882e92":{"name":"@balena/jellyfish-plugin-base","version":"1.1.4-renovate-non-major-ecc82f8ebba5597a093657b61c2746d9b7882e92","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@1.1.4-renovate-non-major-ecc82f8ebba5597a093657b61c2746d9b7882e92","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"eb4e7ca58ee1a7556a5890ad4923c85533869366","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-1.1.4-renovate-non-major-ecc82f8ebba5597a093657b61c2746d9b7882e92.tgz","fileCount":18,"integrity":"sha512-+1Kc9W+tRqw+BB392hP2saAx4T9/M1kKQG7NB8kSHZAZ86mxEtuJ/QZlGUl+GPXBOWs9IPBOISDZt2oORZKUSw==","signatures":[{"sig":"MEQCIBhpKOkp1Aoh7rdER1f2/uZqeX4V7xGtS5K+uG3jYUGnAiAnfc/V3q5DHP3jUsCKovy7cjbxQlkBu/boXPoOObzjiQ==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":25758,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgIdycCRA9TVsSAnZWagAALOEQAJ3o/9FwolEofC9LV9TX\neZcpRTz1N3b2crd99bWACUJVgSyVRUNY2hYVa5XG6rQP6Unm1YRHsT5uichU\n4VMXUlsVx+LFqNeBXaWbt4B2gR7VC0mqejE6sqheHyxgqr5kBNo4X3NWCrtv\nig5BH8td2Uqq9vSWLye58pNyDEmTDgxm0R83oGhKJ8vWwDtIQ5wOB2YsCzS2\nKX9NWuQ48BdyzFqI0HPj2b4zyxEFev1ATTOgfIt9cawh/3xQ9mryfgRyS5JK\nomypoasdgN63dZGsyg+Ke/ZwM0RDfJwbUHc5yi2Jx8wc9hqiw++/FupWuuFy\n6wnHIM+5jJFmsMfp0B5kQfh51ghXYUe14N1vLd9PzCOYeQx9EytZjLY5Joww\nNoyLGJ5bStCMmh3OCCz4RTHfQlVcU8aYwrRWYEiB5ZCon2fVlrI3DRenOVn5\ndR4FiV2ruWGgrrsU1hQO3g8tuttkoWIXaI6WbiVqnyJRer4ed1vUdX6bfLt+\njgPj8Y4clHXcO7dTEaBC2KCyiG/utEeAloAbqs623W0gkSYKC30WtOJr+rW1\nE6Z03RjOaufPOOvl6zuwaxzGiFAQuadK1X15gGntz0e2/scgxpfQimVNb0pZ\nK+HGaFGtuJiNnFu8TcwCYnie4KbHktBQd2Tlyzq+5cpNe+MSdXwd/aeMjb/R\nUgEb\r\n=eV5b\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","husky":{"hooks":{"pre-commit":"lint-staged"}},"types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"ecc82f8ebba5597a093657b61c2746d9b7882e92","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint --typescript lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=shellcheck,@types/jest","test":"npm run doc && catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc","check":"./scripts/check-filenames.sh && ./scripts/check-licenses.sh && ./scripts/check-deployable-lib.sh && shellcheck ./scripts/*.sh","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --typescript --fix lib test","postinstall":"if [ -z \"$CI\" ] && [ -d \".git\" ]; then husky install; fi"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --typescript --fix","npm run doc"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.20","semver":"^7.3.4","skhema":"^5.3.3","json-schema":"^0.3.0","@balena/jellyfish-logger":"^1.0.10"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^26.6.3","husky":"^5.0.9","sinon":"^9.2.4","deplint":"^1.1.3","ts-jest":"^26.5.0","typedoc":"^0.20.23","depcheck":"^1.3.1","shellcheck":"^0.4.4","typescript":"^4.1.3","@types/jest":"^26.0.20","lint-staged":"^10.5.4","@balena/lint":"^5.4.1","@types/sinon":"^9.0.10","@types/semver":"^7.3.4","catch-uncommitted":"^1.6.2"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_1.1.4-renovate-non-major-ecc82f8ebba5597a093657b61c2746d9b7882e92_1612831900107_0.0791948102540101","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"1.1.4":{"name":"@balena/jellyfish-plugin-base","version":"1.1.4","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@1.1.4","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"f2134cd810fb8efc738b6b723979e2db825d0039","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-1.1.4.tgz","fileCount":18,"integrity":"sha512-DSgufqp40VISkgU4UqFfvdd9DSSz3X5wtJSEONtue/H0yAt2a8d06RVizbo5bHCr1BXXPj6rLUhW10Pjh+64Pg==","signatures":[{"sig":"MEQCIDlahJTT1ht8L387HQt90WROGUw+1seGIcsOgqcg4Mj2AiBLLrY6Ndy1yv6FfMfcwGgJrUsC3XsOq1H9cZtJ62HnHg==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":25698,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgId1eCRA9TVsSAnZWagAAK44P/0f5m28BF1qUmsJus59m\nFq68MFuAnj0cpx0uMw7IaHqqumMBbvUCBx624sqLNboSMNcLvFN08IcJ5c//\nn8oOJuihBPW5BSa0tJt5ijn1X7RnheE7AJ5m+1OvmBFcBsWeGFPvkVNeyg8z\nLy+3j10+Zqh/LSxTFMMQfj5TLuKcCFvlkUDc2PEDATjYZKAvksJ4nz6NAYVf\nClQhY9vXa+GUIFEveK04cmJydOYc34grTO1dyIuG7s7FO9TMszXU4n8x/OHy\niRPgrPnyuKPeY4TEjQBqfLHNb/8xRIXjihTc4bCEKLnyGZhsgdlS1Xebgbq1\nQVYdgya7iqqy/wKcEdx4dvVgAeGBPSjFD/sdTnrrY+XAOpcU8TxnUdyyoMGJ\n0bwN9rUehfnHPVZBNGf/rcjXNYODPmnOoneoYqSoTvgdM+54358lSgZ1xaL6\nHhR07TMj91li987PV+yNFbtucLZ0zlyOmagyIavsjHwwk8koXyvSlGy05WMF\nF5g1NVc79xms+qUaDCEp/gRwt13jLYlBhES8oNhnWcA6YUx/A1524GtyM5R6\nUryOvfghoiqNcKjg8K6F5IRSqF49zwy6qxFVqssb3H/Huq/yPDxVgCS5/Fr7\npEwmG7rg7rTDalQ0Lp51wCZ8VHVtng+7fUiaHR+axxTK5zsPBTcSYX8YR8g+\nC3B0\r\n=Df8O\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","husky":{"hooks":{"pre-commit":"lint-staged"}},"types":"build/index.d.ts","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"765a32f91fc68083712ec71549a5be8594ab3105","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint --typescript lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=shellcheck,@types/jest","test":"npm run doc && catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc","check":"./scripts/check-filenames.sh && ./scripts/check-licenses.sh && ./scripts/check-deployable-lib.sh && shellcheck ./scripts/*.sh","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --typescript --fix lib test","postinstall":"if [ -z \"$CI\" ] && [ -d \".git\" ]; then husky install; fi"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --typescript --fix","npm run doc"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.20","semver":"^7.3.4","skhema":"^5.3.3","json-schema":"^0.3.0","@balena/jellyfish-logger":"^1.0.10"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^26.6.3","husky":"^5.0.9","sinon":"^9.2.4","deplint":"^1.1.3","ts-jest":"^26.5.0","typedoc":"^0.20.23","depcheck":"^1.3.1","shellcheck":"^0.4.4","typescript":"^4.1.3","@types/jest":"^26.0.20","lint-staged":"^10.5.4","@balena/lint":"^5.4.1","@types/sinon":"^9.0.10","@types/semver":"^7.3.4","catch-uncommitted":"^1.6.2"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_1.1.4_1612832093602_0.975911375643544","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"1.1.5-renovate-non-major-bb891781f81f77a75545dd3ef6f66277ede30d92":{"name":"@balena/jellyfish-plugin-base","version":"1.1.5-renovate-non-major-bb891781f81f77a75545dd3ef6f66277ede30d92","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@1.1.5-renovate-non-major-bb891781f81f77a75545dd3ef6f66277ede30d92","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"c04213a729673526bb1800aeb1174ea732bc7e14","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-1.1.5-renovate-non-major-bb891781f81f77a75545dd3ef6f66277ede30d92.tgz","fileCount":18,"integrity":"sha512-6y6TEn2RdRAo0T+9SuvRRd1pPaUNzYrmZt3HpoXoAuvfSBFoOToylX/HcN1+0PtUYVy2b9xd30Nl3Un9AkZoVw==","signatures":[{"sig":"MEYCIQDmQYW2GPlxVZP8CbjTSQNNkCBv1WAItdOfLRvmnQQ6ggIhAP5u1tcMmwTt0bZ1lBj9/fq9QsQwj6eervhVw6YsX/uc","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":25863,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgIeujCRA9TVsSAnZWagAA+/MP/3OCtuHtgum07AHOsFfy\nWa25622G+hSeb+dVPNODfCP15kAuqYcOjVjkOcdREnMC4TZqGoFLGtKmhxz7\nrd2u+4uG8xbUnrXNvLcUjmqRBMNv6lGPpPxGqK1tqfDIgEYvRgbRr9QpysMR\nheuN7w9pawbxbkd9sIMjHZytqHijYu3RnJ3Gi2DYfcLkhdjSyMTYNXkm5hlT\n9bAZwkmkUWUkUCVJKxtWEGaOpfMxMYRKjyHref5NPfiLpf2I/Qy43HRpk4X9\nOgMZRWWEbTGp6fw9m0RFr1tbqZ6P3TbMO5J9rJvxPoSGG39oubxKcX0LTzFI\nUVuk2xyz5PFiSyIayhUaRwzkQ8ZR141SzdVWb4q/BAlg0utDHSf96n6IV0wm\n2wUwU4J5WHRGSUhUoHKruntd6iSUbPGwi0cy5YkoyX1OzDcw4MEaNnQbd9ah\n8CUXNiosucklItJX3xYP6PKKs5hedas78hE8oCze7f2EmaUprCoCZ7yxQedT\n7oMw8PuHLCTAKAizWuVwkINgpr0RvtMJWW5mGOnkrkDCRLAH5Yx7bbucxcGW\nIYvB76I+tBcxEIMsYSt5Q6dB0UKVRaW+LUT+nJm/oDHF4T5FDhPQ7QRKlbZ8\n+BwIOr4sOoUi3PwwBlE3qFKpc6rqE35KbSI8DZaeD7ixFhXP1RPbzpbx1e8S\nUHs6\r\n=v81Z\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","husky":{"hooks":{"pre-commit":"lint-staged"}},"types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"bb891781f81f77a75545dd3ef6f66277ede30d92","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint --typescript lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=shellcheck,@types/jest","test":"npm run doc && catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc","check":"./scripts/check-filenames.sh && ./scripts/check-licenses.sh && ./scripts/check-deployable-lib.sh && shellcheck ./scripts/*.sh","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --typescript --fix lib test","postinstall":"if [ -z \"$CI\" ] && [ -d \".git\" ]; then husky install; fi"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --typescript --fix","npm run doc"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.20","semver":"^7.3.4","skhema":"^5.3.3","json-schema":"^0.3.0","@balena/jellyfish-logger":"^1.0.11"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^26.6.3","husky":"^5.0.9","sinon":"^9.2.4","deplint":"^1.1.3","ts-jest":"^26.5.0","typedoc":"^0.20.23","depcheck":"^1.3.1","shellcheck":"^0.4.4","typescript":"^4.1.3","@types/jest":"^26.0.20","lint-staged":"^10.5.4","@balena/lint":"^5.4.1","@types/sinon":"^9.0.10","@types/semver":"^7.3.4","catch-uncommitted":"^1.6.2"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_1.1.5-renovate-non-major-bb891781f81f77a75545dd3ef6f66277ede30d92_1612835746508_0.22711065238323314","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"1.1.5":{"name":"@balena/jellyfish-plugin-base","version":"1.1.5","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@1.1.5","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"2557e02b4e560a47b82912616656b194235c5aaa","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-1.1.5.tgz","fileCount":18,"integrity":"sha512-ojwkOY5Z2eHNvlL90v7Mm4w25xQ46F2VtBUp3hZTJSrskx4ii/sA2IDzwoqVXp7P4yPrpBPFWI1V1st19YIY4A==","signatures":[{"sig":"MEQCIBuexnZMdxogdj19sCipFI83iQX5KnM2EetjSHWOl3RwAiAXeUikstlusXjgFv+BgBvK7BBfejW/sqRpcHN4pqHjyA==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":25803,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgIeydCRA9TVsSAnZWagAAYlwQAJt4ajKzxGXifSufEZ8a\nzvCoWUVyfFseUD7zyfzHWfQdOA/T0j5SrJYura+nfBY5VRi3FKgr1FJW8AEg\nmNTH4boZjCwagI6XlMxKzix9gjRoKDZPBbKA1uxotswjFliDwIEB/6PwoA/f\nFjLVmyzU3LckClMwjMcqgJnkvSt20crTwkVNHVNZPjlmeKiHVWyhRdoIsP4z\nUBDDOZObbI8IY5r4+2RbpEGwls5rjCiZQu22lPddlSORNmdWZ4eA5HiKoZRT\nL/CMEIJst9B0cadbHBYm+8CmibmBHgvSLwjB7c154F9QtpQGQVCX0Wh4//AS\n460+lucl8HC7k5f/Jdoc0CuJJm42bg4/Ruyw0S9fkblDpkWd9fy0DsHWppFH\n38Boc5d2wkIOwxqiEuAPsS80C5KVxdlERlRlZXHz9ioqkagVtJkhm0TRnoNm\n7NdmOLGvX0hUHaQdooyQTCm5+0CLn4W/h/0IxkdVNYjxT6AiIEyAkb7KBZv9\nyvlzgsLoE83dxmYXwD8ByjTat9nrElOOtezp0L7ILaqPiYhPyv363yGsPSS8\npqbzqB/87G6DpdpkpZRAnitz4rnQF9J7FLu9JevJdG+hS/lvV/AfDWs24SCV\n1KXboWgvWmmiAPwVJKdbf5FpdkDvl5P+r6gF3BeVVxCvBFB4mXOlkXrTdzn2\nX2Q3\r\n=27ua\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","husky":{"hooks":{"pre-commit":"lint-staged"}},"types":"build/index.d.ts","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"a0c6fd8cfb1b84959c28dfd6b31c258b8323abe8","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint --typescript lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=shellcheck,@types/jest","test":"npm run doc && catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc","check":"./scripts/check-filenames.sh && ./scripts/check-licenses.sh && ./scripts/check-deployable-lib.sh && shellcheck ./scripts/*.sh","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --typescript --fix lib test","postinstall":"if [ -z \"$CI\" ] && [ -d \".git\" ]; then husky install; fi"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --typescript --fix","npm run doc"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.20","semver":"^7.3.4","skhema":"^5.3.3","json-schema":"^0.3.0","@balena/jellyfish-logger":"^1.0.11"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^26.6.3","husky":"^5.0.9","sinon":"^9.2.4","deplint":"^1.1.3","ts-jest":"^26.5.0","typedoc":"^0.20.23","depcheck":"^1.3.1","shellcheck":"^0.4.4","typescript":"^4.1.3","@types/jest":"^26.0.20","lint-staged":"^10.5.4","@balena/lint":"^5.4.1","@types/sinon":"^9.0.10","@types/semver":"^7.3.4","catch-uncommitted":"^1.6.2"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_1.1.5_1612835997444_0.6797068945291704","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"1.1.6-fix-card-types-2096d125c7329ec5a57eafe2a852fe5948441e13":{"name":"@balena/jellyfish-plugin-base","version":"1.1.6-fix-card-types-2096d125c7329ec5a57eafe2a852fe5948441e13","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@1.1.6-fix-card-types-2096d125c7329ec5a57eafe2a852fe5948441e13","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"70b72ec7dc341c257144308d651d28b2536eba9e","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-1.1.6-fix-card-types-2096d125c7329ec5a57eafe2a852fe5948441e13.tgz","fileCount":18,"integrity":"sha512-F6LGz3RnD20VE86Ki4RKmG+i48j/lS3LbaIo3tCfU8PvZk21rTharqXvPFY29wS+40qU6nse+VWRBchGumDTvw==","signatures":[{"sig":"MEUCID6MEmIXqlf47RYIGvYmL7LdP7sjdgIwQVamBX4EXQKLAiEAgKyUuUs55Gj8a/ZWfAGq3wSkTBotlAL1mWbcuchd8VQ=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":26013,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgIiRzCRA9TVsSAnZWagAAajYP/j6cx2FVNlgOr2O4Tf5h\nb9pLFTUf6Z+917qeEH95n68CcqtE9qM7jLQOLge01TgpAv9BJZdsfwBbDex9\nPSXKC2GFTh9lqpaOj8zCZHXCUUmEpqlO/Y9rXG3VsmNBSCxnmqp4ENeJgKf9\nH7y5MEyeTgn8//mXC2XTH00kUF/ELwTJqX9ccImzyEgO8FowrayqgS7lXj+X\n1oLdrRL6a+6AB2FYogturLcvRufnMVsekSro64cL2dM0x7UbA1m4PwV9/GGH\nNkNsEWvcT6JBAMhWf4+uMCd1hsf9zyhx1pnDPwrqXF9XM0WZi/8B6jwepEVC\nZHn+VBoxE1Qt8THj9xn5MYXUAyLGQANSjIEmFNIdglvrl91R80DvFpOiRKt9\ncldNeMg0t0AhllCQcBv53PvkbNPCrskuuku8Sq4hZm0RW4IrYiCk9BUOR6ns\nUKywnP6Rb/3NwNTQqE0qgHnVmw/xY4WRAcKzlO5q/JHd5c1nAIbcBmhTwZQ7\ndKgerU2C9NkidEi3DbOPeSHtLOzVoyFSc5thk8H+Ltof+xSgsm8jMLKY8KEO\nv/Oxg5h0f3J6o3f1pCnC64NCyPlAMoplThaNJxC18Z9rEoQTeZf3QW2CvPLn\nthucRuj1edgB6KbMoSS9Zf8EY+apXg9n9WlTta2s8bqt10Tqf6EhodXS3av5\nS0+c\r\n=Xwv1\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","husky":{"hooks":{"pre-commit":"lint-staged"}},"types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"2096d125c7329ec5a57eafe2a852fe5948441e13","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint --typescript lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=shellcheck,@types/jest","test":"npm run doc && catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc","check":"./scripts/check-filenames.sh && ./scripts/check-licenses.sh && ./scripts/check-deployable-lib.sh && shellcheck ./scripts/*.sh","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --typescript --fix lib test","postinstall":"if [ -z \"$CI\" ] && [ -d \".git\" ]; then husky install; fi"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --typescript --fix","npm run doc"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.20","semver":"^7.3.4","skhema":"^5.3.3","json-schema":"^0.3.0","@balena/jellyfish-logger":"^1.0.11"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^26.6.3","husky":"^5.0.9","sinon":"^9.2.4","deplint":"^1.1.3","ts-jest":"^26.5.0","typedoc":"^0.20.23","depcheck":"^1.3.1","shellcheck":"^0.4.4","typescript":"^4.1.3","@types/jest":"^26.0.20","lint-staged":"^10.5.4","@balena/lint":"^5.4.1","@types/sinon":"^9.0.10","@types/semver":"^7.3.4","catch-uncommitted":"^1.6.2"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_1.1.6-fix-card-types-2096d125c7329ec5a57eafe2a852fe5948441e13_1612850290422_0.13542300685065967","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"1.1.6-fix-card-types-9ba6e8404e67b9f0d6469876bc868b1f35dd0782":{"name":"@balena/jellyfish-plugin-base","version":"1.1.6-fix-card-types-9ba6e8404e67b9f0d6469876bc868b1f35dd0782","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@1.1.6-fix-card-types-9ba6e8404e67b9f0d6469876bc868b1f35dd0782","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"066beebb7b2480af244532411343fd41a1951245","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-1.1.6-fix-card-types-9ba6e8404e67b9f0d6469876bc868b1f35dd0782.tgz","fileCount":18,"integrity":"sha512-0p+Eh/eY+tAOVgzdYiQYecQQvPBwr49o6nbmf8wytgfAfXJSmy88thfdNwlcELhB7VdUdiT+rrpY6Y6/Ky7q4g==","signatures":[{"sig":"MEQCIBlJN0Z57sz6kFPeRM+jVV2cBzgy+4MvEQFDlO6KsgPFAiBMQoe0ftFNj2TRuvkNn4vQwCssmlegXPWAEN4JXlO8Sw==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":26046,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgIiXfCRA9TVsSAnZWagAADPoQAJ3cKaecxNgFLg2qfP2h\nLzX8+prYwTzcIYnkSiSMnYbFDhdB8QPpZGkTwn7a/uiKfNhapgq2iinH8O8S\nlRPx2mtre0fVyZXoR59HVV6vuyDhBIzSHlM41oIaqC4vbPw0DXWYZ8EFD5Vs\nze/38+GP/LB+fVqHochIw+pNoy+t/tmqyGthLg/elf9u0y8EXUIxNUjTokBq\nNCb4OWMxpB1FM1GoCdY4mwaumqSfXm/TlvjYvapCNo0kH8YPh3AxUCJ9CXqW\n1gEs9F1g3gugXXeZx1zK5Qc0xz78NprH2Q2oOf8Rp2Oiox68PTvpRjnvKk/k\n8/bzLa+5nFY+Z5ssQ5HCKf6k+c0sJ6pZo7NwImFs7xo0EZlDEfcmjK6IaFIA\nVNQsXg/gT4LJa/Bu6ScY0n9MzxIujoS1Ip+ATrqr159NOjByfNXkPbm+9kSb\ni/zTQB5q9DPikIuY6/EItBQtWb+b8+xa9uZLeCbvElmAK8XyijQNnQR1ZZzM\nqbtO5iS+o/DdzepJQS9uaHUCAumlYoN4OFQsaQs4GNCkFLQpPXxQIo3sKSFc\n5g8sOpUEjQ2UmMvkyN5q4wuZYnpIhINajKyoZzuSIFg22s7AWFom0Ba95PjM\nJCd2KxVT5dKMV6HaxO/yMnFrQhOiNVhmtlCC2eAsx0WJvM77bwuqIOnNcIYd\nercu\r\n=m/dd\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","husky":{"hooks":{"pre-commit":"lint-staged"}},"types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"9ba6e8404e67b9f0d6469876bc868b1f35dd0782","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint --typescript lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=shellcheck,@types/jest","test":"npm run doc && catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc","check":"./scripts/check-filenames.sh && ./scripts/check-licenses.sh && ./scripts/check-deployable-lib.sh && shellcheck ./scripts/*.sh","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --typescript --fix lib test","postinstall":"if [ -z \"$CI\" ] && [ -d \".git\" ]; then husky install; fi"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --typescript --fix","npm run doc"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.20","semver":"^7.3.4","skhema":"^5.3.3","json-schema":"^0.3.0","@balena/jellyfish-logger":"^1.0.11"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^26.6.3","husky":"^5.0.9","sinon":"^9.2.4","deplint":"^1.1.3","ts-jest":"^26.5.0","typedoc":"^0.20.23","depcheck":"^1.3.1","shellcheck":"^0.4.4","typescript":"^4.1.3","@types/jest":"^26.0.20","lint-staged":"^10.5.4","@balena/lint":"^5.4.1","@types/sinon":"^9.0.10","@types/semver":"^7.3.4","catch-uncommitted":"^1.6.2"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_1.1.6-fix-card-types-9ba6e8404e67b9f0d6469876bc868b1f35dd0782_1612850655233_0.20082989637888504","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"1.1.6-fix-card-types-6623d1d18c8a283216a5d7966051ca149c9aaae8":{"name":"@balena/jellyfish-plugin-base","version":"1.1.6-fix-card-types-6623d1d18c8a283216a5d7966051ca149c9aaae8","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@1.1.6-fix-card-types-6623d1d18c8a283216a5d7966051ca149c9aaae8","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"b7635109af4f732ddb4d9b803bc261fb62c8c535","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-1.1.6-fix-card-types-6623d1d18c8a283216a5d7966051ca149c9aaae8.tgz","fileCount":18,"integrity":"sha512-Q6yzz4aYRCfO6RrHqt93rGCl/JJv8IqBY4vl5hzf56gH702ymAT4ztudSMpDHwioTrK5Cv9CAaxMdo1OM0zlyA==","signatures":[{"sig":"MEUCIQC1kkj5A4VcnsVamY/QIJMYD7/ksAWdy0fkE7tClgkrLAIgO6Tj+ZePlX1n5zwaTuTn5uRW/2HiK9tqTrveB4rHRDk=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":26046,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgIix6CRA9TVsSAnZWagAAsiAQAJMwI97uoPps/a1aet95\n/5CXoRhKcWNsetu+6AXd9U/7HHJzJnUQ7lmKBA1N1KKhp+HrPhcxzFsddPdw\nyz1Cbhbp9WBpc1MB594Q4Rt5ZciTzkdbvE6Ld7QEDEC9KP1hLMFp1LBoBEdW\ndqfDVOfho/3FgQBGl81fIUAoIu4rDJKkc80cxGLQVVGYA03vp+NE4+F4Fc82\nq6MhXHDVm7vsoKBfFGwvvDePom5vZpCFUNxl9ck1E6/NGkLv6P50sOg+4Up3\nRpl2wax6FjJhq203GhMV5SmX8dOmTHTii8LUbCmnorJ45QoDrHElCERo0H97\nt1IIESz9oF20iwaKMbxOju/aRivSvAUUeB03nz+i6HBgQKh9Bkfa9BvRjQTt\nH6XU0DNvYc0cxHg7uAcQB9FFRY7vFHuZakykdwL8TOCcSmadKlm9I8rArO6o\nodatn/c4e8Fr3ureUMs0COwnvUIVscm0sDtgv1u6LLDArIhiqCREYy1eNGfE\nwC4Hl87ROUYX/J8aIDte3sN3G4SYJ0h954tkHF7Oy6/V2obd4kpsB49x0HkQ\nKC4ClUeX7v3VJElHPao2m0VNWwk27AvOAyq2rHLrQFj2ihe5/CrOeEPjFRMf\n1QRPC9Y1VB7KJN/bW5BfYR1OEuKy5vcSq7lKEhO9BLJaBkc9CqP+nIBUpqIb\nonrw\r\n=Cf6J\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","husky":{"hooks":{"pre-commit":"lint-staged"}},"types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"6623d1d18c8a283216a5d7966051ca149c9aaae8","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint --typescript lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=shellcheck,@types/jest","test":"npm run doc && catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc","check":"./scripts/check-filenames.sh && ./scripts/check-licenses.sh && ./scripts/check-deployable-lib.sh && shellcheck ./scripts/*.sh","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --typescript --fix lib test","postinstall":"if [ -z \"$CI\" ] && [ -d \".git\" ]; then husky install; fi"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --typescript --fix","npm run doc"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.20","semver":"^7.3.4","skhema":"^5.3.3","json-schema":"^0.3.0","@balena/jellyfish-logger":"^1.0.11"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^26.6.3","husky":"^5.0.9","sinon":"^9.2.4","deplint":"^1.1.3","ts-jest":"^26.5.0","typedoc":"^0.20.23","depcheck":"^1.3.1","shellcheck":"^0.4.4","typescript":"^4.1.3","@types/jest":"^26.0.20","lint-staged":"^10.5.4","@balena/lint":"^5.4.1","@types/sinon":"^9.0.10","@types/semver":"^7.3.4","catch-uncommitted":"^1.6.2"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_1.1.6-fix-card-types-6623d1d18c8a283216a5d7966051ca149c9aaae8_1612852345950_0.42021703977027625","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"1.1.6-fix-card-types-8c521e7c02b14c356f1dd6d52eb9e5263d2df519":{"name":"@balena/jellyfish-plugin-base","version":"1.1.6-fix-card-types-8c521e7c02b14c356f1dd6d52eb9e5263d2df519","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@1.1.6-fix-card-types-8c521e7c02b14c356f1dd6d52eb9e5263d2df519","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"10f7f9640d0fc7364c7562312eaa23d231f538b2","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-1.1.6-fix-card-types-8c521e7c02b14c356f1dd6d52eb9e5263d2df519.tgz","fileCount":18,"integrity":"sha512-e3moEtASGFL4r4VXAg5nG0i7hJi+j8veoB0H5LeqsfLTYLkJ7DGA78RXA+MDKer/tu4sP43V3fXK/WJQKSWJCQ==","signatures":[{"sig":"MEUCIERHl2Vd2ib3sYY3cQq4yt/KLlT647f12tOvGEET7DH5AiEAiKDxo8rS8zvU+ztWQfW9FWST/Ei7Xug9NrCR6lMFLIk=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":26120,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgIi89CRA9TVsSAnZWagAAEgcP/0/TKHNEZNrVcXRq4WKB\nAB6gB/SK6ojbHtmT9K6mjWzBpGiyeZC1uIVNsFZe8lennzQ8DkQoN+uZR5Kp\nu5oViJH2ff9lk7VNAWB43sxfa7cuMzwnkVyO9kw7nAXDYB9xNbP/Gm9qw98r\nctl0hlidbrTSKSRqo/Q+neovU6kn5XJgNlA1Vy6lbLYo6J7SLkGfv7p4Y+Ii\nFsObtvGNmjR6N3nExUTvP6/+gC8JUK0G1r3RotU7yGVCb0NmIdK2g1TCAPSe\n/5sjjGgxjjREdDUWfa642WknanPzLSIwtDgTSXEoLrZfxaLekOntORlHY4eH\nXk2aOkGxaOss+y97TdEoABhmK15p4t4gS6CE8WO3wZJ7vDA8sh1ZwaodiGQd\n5E6XiLuaaQ0K7DS//EjZPrVuF+iRu827v1z2qsazy3IAMpoQkHV7Z+ScC7FV\nqS0q4oT4VvN7cOcmtIULLYDtJC70M1NsoJBkA7JALVwkgkHO3wnyYllhdl8A\n1HWefDfvBAIwu81EWFphS3w//oLWDHpn+XNGQORj3qjhLc+qT3WmDxoujFkj\n1iSTX4skv3jvPq9IrzXRu/zZFxXlC9oqV+c8rxvJL5wtD7LAKwK70AXnqVld\nGnnBnY1jlF7Wmx9MnNskpoJzL74Udkuq0O7PRkovQfPw44bj6fg6iT8Gvitg\n8qrJ\r\n=BIJ6\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","husky":{"hooks":{"pre-commit":"lint-staged"}},"types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"8c521e7c02b14c356f1dd6d52eb9e5263d2df519","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint --typescript lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=shellcheck,@types/jest","test":"npm run doc && catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc","check":"./scripts/check-filenames.sh && ./scripts/check-licenses.sh && ./scripts/check-deployable-lib.sh && shellcheck ./scripts/*.sh","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --typescript --fix lib test","postinstall":"if [ -z \"$CI\" ] && [ -d \".git\" ]; then husky install; fi"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --typescript --fix","npm run doc"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.20","semver":"^7.3.4","skhema":"^5.3.3","json-schema":"^0.3.0","@balena/jellyfish-logger":"^1.0.11"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^26.6.3","husky":"^5.0.9","sinon":"^9.2.4","deplint":"^1.1.3","ts-jest":"^26.5.0","typedoc":"^0.20.23","depcheck":"^1.3.1","shellcheck":"^0.4.4","typescript":"^4.1.3","@types/jest":"^26.0.20","lint-staged":"^10.5.4","@balena/lint":"^5.4.1","@types/sinon":"^9.0.10","@types/semver":"^7.3.4","catch-uncommitted":"^1.6.2"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_1.1.6-fix-card-types-8c521e7c02b14c356f1dd6d52eb9e5263d2df519_1612853052685_0.031081260522517695","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"1.1.6":{"name":"@balena/jellyfish-plugin-base","version":"1.1.6","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@1.1.6","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"c57bd5e3a9536efa5f5f2268df4e9df55f5f666c","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-1.1.6.tgz","fileCount":18,"integrity":"sha512-ISQ1V64ieIPFtKYd7PskdIrn2rbI+K8motZDoQsXbwKoFmioSmsOyt82B4g6WtzoRh/xkXh6vl4I90WXkO2l6A==","signatures":[{"sig":"MEUCIGokI1xgZivw6OaYwoVLQg2hk+/BoFME7Pfkj42+Fur2AiEAhfbqWgOKN+qEdp3czxIwCElqN22F3SD0apqVIHH4fds=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":26064,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgIi/7CRA9TVsSAnZWagAAuAAP/0eE4GKAP9cjl3iVQVEO\nvUr82dKZ4ZgyLhpDK7I+3/MR8Jve86y+Joz60gki4JDJAXyt9Hhsb0DPX6cw\nf2IVtE2rBs5mWbLn+Kdrk6jm4kF+lrMCDp/mRXXPdIkDbXxpHzWybB4H6T0w\nVx2QNFXZyM/2EV28E4F9khv7AHJCCQ8Se9zGonKufS2DMeUA5GsuKlKqOXPW\nGzDqCWx+t1hsEyYYaqDRdnsL1A+53ic/PRKffIZYxPQ0kIFoAHEn8cXO6mLj\nz7nG013TSnI7KAI7FxctVgu/oTX5vsJAnddgOietVFm8fHe3/a2osNc4XWtY\nu5ngJIhSTY+xEnaEXJ0ehkDaHAkfTZe3y2quJ7r99feGWR7rnOdLKO7jtlr2\n188LCY0jpg68RSVrSO7oYbUDv+Hzdo/wtVrAY4GHWKKGRmvRemA+H3cmKib2\n8CmAEC1SYnfN6a9pLUTAJVPQLyHhODpnq5H+hg8vQS3F/Q1tqLdymeUE8Cwn\nLTKsQ8P3XeCkFo8g9Uuej7a1wo8VdRUXEzt2zOnLMAqUlhhurdrRuRmvWc2C\ns5eeNvDsAF/XeAEZAT8p7LQK6m1jFUHL3UAZ8NjVnn2ZTQgoL8ZgkVPY31+O\nsjXbJYhoAbA3qPd8j36QVH8zf2DMmlc7SuvLQ27slT44kS7ltnZ14GHZfnw/\nNZhs\r\n=wG1K\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","husky":{"hooks":{"pre-commit":"lint-staged"}},"types":"build/index.d.ts","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"23743db2f6fb1e1db4f345cd6c9d4029e163ceaf","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint --typescript lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=shellcheck,@types/jest","test":"npm run doc && catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc","check":"./scripts/check-filenames.sh && ./scripts/check-licenses.sh && ./scripts/check-deployable-lib.sh && shellcheck ./scripts/*.sh","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --typescript --fix lib test","postinstall":"if [ -z \"$CI\" ] && [ -d \".git\" ]; then husky install; fi"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --typescript --fix","npm run doc"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.20","semver":"^7.3.4","skhema":"^5.3.3","json-schema":"^0.3.0","@balena/jellyfish-logger":"^1.0.11"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^26.6.3","husky":"^5.0.9","sinon":"^9.2.4","deplint":"^1.1.3","ts-jest":"^26.5.0","typedoc":"^0.20.23","depcheck":"^1.3.1","shellcheck":"^0.4.4","typescript":"^4.1.3","@types/jest":"^26.0.20","lint-staged":"^10.5.4","@balena/lint":"^5.4.1","@types/sinon":"^9.0.10","@types/semver":"^7.3.4","catch-uncommitted":"^1.6.2"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_1.1.6_1612853242775_0.9946208936094523","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"1.1.7-renovate-non-major-2fb12b7e51bda359283a3e28a12e816c9c71470e":{"name":"@balena/jellyfish-plugin-base","version":"1.1.7-renovate-non-major-2fb12b7e51bda359283a3e28a12e816c9c71470e","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@1.1.7-renovate-non-major-2fb12b7e51bda359283a3e28a12e816c9c71470e","maintainers":[{"name":"lucianbuzzo","email":"lucian.buzzo@gmail.com"},{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"1ad43713e5f889dea6bbedd87d6638b3690b195c","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-1.1.7-renovate-non-major-2fb12b7e51bda359283a3e28a12e816c9c71470e.tgz","fileCount":18,"integrity":"sha512-M0gnbvtQac693tplUMruZbeaIcuhFAy73ODntY2tbUkjScqb1gpdRgaeoJU54NE/678e6EfSXbhu0nJJNgnSag==","signatures":[{"sig":"MEYCIQC26skY1yy7IbfmFUz+umtvmhdZYvpNMoma2lOqiyQ2DAIhAL9LMtK6OtnYp8Dou+9M5a/EPg7i+a/57/SyinFijedc","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":26212,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgIo/uCRA9TVsSAnZWagAAZLgP/0fciFJLDWewscsnEEEF\n9fR7vyr4sVcZHFm9WHlV2WoBW8Rl3t87OQPhv9JepLL2NU/wheuS3Z7UPGmF\nM6cVpcjeh195jV196jlaW6/yOukO1iBVqSC/Rrsh4QBe787IAIlFve7654Rq\nNGjDElsw+OYyM5v4EAE8Cd/T3ioIDH3FnqkKAQV8bZ1CKugBHWnNip2q4OE0\ntI/lnxfQa8AVegUVtjtH8nMCezgf4jO6TGR+7Y11UvGfLGJh8mmexN7JQcPu\nJ23Ea4UTzuY71W1NcmhjTJqQk3Kd7Tz0LuFuX4cw1k1x7lC07A1v8sKASiae\n/Wcqk1pvp8f84zsQBS2HfDAfCMl15GDSa+G6+xdtPhdu0/bOXFaDq9YYJf4K\nL/2h8OCJ2421eyYrAcgUEN3O7/MnhmxnJqtekCQntz83ueG3zHvAlcaAhG4c\niRW+IfPB/j1QqqBUHOMpoym/pgLpxjmpupjcyBrVrSVoobJRCuIAoDBHZiAa\nqYt3gWwRFS2fxRxgTdglqMXPuhXmhqlHys6WE8aOWrj1Jm98Xkqa8yaY5bs9\nhCjs2D5ACXZJ1+rc7G3mVkHKvTKVXe84+IxwRRgGU1+D/mbwrIcfgbOPWpAd\n9i2IxuwvlYPDhmHwuc8oVSZpvJiC8QU0L0mODFXDlA8dTH6f8YXxf3EzwgVD\nD+ba\r\n=Q9RW\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","husky":{"hooks":{"pre-commit":"lint-staged"}},"types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"2fb12b7e51bda359283a3e28a12e816c9c71470e","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint --typescript lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=shellcheck,@types/jest","test":"npm run doc && catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc","check":"./scripts/check-filenames.sh && ./scripts/check-licenses.sh && ./scripts/check-deployable-lib.sh && shellcheck ./scripts/*.sh","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --typescript --fix lib test","postinstall":"if [ -z \"$CI\" ] && [ -d \".git\" ]; then husky install; fi"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --typescript --fix","npm run doc"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.20","semver":"^7.3.4","skhema":"^5.3.3","json-schema":"^0.3.0","@balena/jellyfish-logger":"^1.0.11"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^26.6.3","husky":"^5.0.9","sinon":"^9.2.4","deplint":"^1.1.3","ts-jest":"^26.5.1","typedoc":"^0.20.23","depcheck":"^1.3.1","shellcheck":"^0.4.4","typescript":"^4.1.3","@types/jest":"^26.0.20","lint-staged":"^10.5.4","@balena/lint":"^5.4.1","@types/sinon":"^9.0.10","@types/semver":"^7.3.4","catch-uncommitted":"^1.6.2"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_1.1.7-renovate-non-major-2fb12b7e51bda359283a3e28a12e816c9c71470e_1612877806053_0.005837783715366696","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"1.1.7":{"name":"@balena/jellyfish-plugin-base","version":"1.1.7","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@1.1.7","maintainers":[{"name":"lucianbuzzo","email":"lucian.buzzo@gmail.com"},{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"83488013a21eadf8e3ef93fc8fece330204cabf7","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-1.1.7.tgz","fileCount":18,"integrity":"sha512-Vn+MFyxovynUzQloEr2PedLRz5WTftLoWtqZIPBy/hpkabWqKdn8N5K1plgSBb25qyslbhuKUmNIBahq+cjvgA==","signatures":[{"sig":"MEYCIQCs1HZU1olGWnitO5an57RRwG5KnOvpfaS8pNv1yPnTfgIhANcFctrJW2icX+YTcX1CF1aAYuH23OyUsOFULS+erxtI","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":26152,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgIpC2CRA9TVsSAnZWagAAkOwP/01r/pNk1B747wjasbM5\nKoBCSkJ2qCpwg30625oIUw/xJxVuetROUnNt6kJ8/dbaYb9xrSP653V829/k\nBTdKbMwdHOtSue1rCKoLPCiqz9+YYJ5M3g7B8VNG72vKABnKcN5MdivGyfL0\niSsneFIJJRJaM7wA19VWw+FqYaP1T/kFdf7f5nSJU3mA8A1Hso25trloStja\nFPFjIUNCfHombe49mceJF8xGWysgSCN0lEBeWefve2YCWSux8rCZ1HnuMpqX\nphpm8y0qIAY1rD0ecbGFQBiygXtlRnqyRlQPOHD8ujE+Jc5InYlvEMFzzCjS\nHFcLWvCy7XfHKd0bVa8cJZdGNz45j0f4ugo0DT6dCWZtilKQZ7hgGkU78DRg\nyW/i8M7TpzHqXmkl2Vh1MzYoOmgo4kHcrsoJWs2mbhqxqvl+J62dM33n1tRW\n3w/QYlAwCojbY9KopWrSxJwZ5y0Amww6p0qQermrKoXLSApBvJsM7B9s54oD\ntiO0NRb4eFq/q/ffHZSlj0MsojrVjNvFkzyqf8OpdYb321Eb7g9E9woGdlkL\n0XJ3eJH9yPyDuuShYL97JZcuMJKpGZxfrR+UlRoueKQ3k5CCME38Kr5sX0eZ\nQBmwvKuL9QYe6Pyua/skEE31VaZkz1llsRCIqMFzxzvYci2jHzW+RNQ5n148\nsFyQ\r\n=tsWb\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","husky":{"hooks":{"pre-commit":"lint-staged"}},"types":"build/index.d.ts","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"edb7fc3dd034016350458e992f6960b0ae5d60cc","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint --typescript lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=shellcheck,@types/jest","test":"npm run doc && catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc","check":"./scripts/check-filenames.sh && ./scripts/check-licenses.sh && ./scripts/check-deployable-lib.sh && shellcheck ./scripts/*.sh","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --typescript --fix lib test","postinstall":"if [ -z \"$CI\" ] && [ -d \".git\" ]; then husky install; fi"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --typescript --fix","npm run doc"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.20","semver":"^7.3.4","skhema":"^5.3.3","json-schema":"^0.3.0","@balena/jellyfish-logger":"^1.0.11"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^26.6.3","husky":"^5.0.9","sinon":"^9.2.4","deplint":"^1.1.3","ts-jest":"^26.5.1","typedoc":"^0.20.23","depcheck":"^1.3.1","shellcheck":"^0.4.4","typescript":"^4.1.3","@types/jest":"^26.0.20","lint-staged":"^10.5.4","@balena/lint":"^5.4.1","@types/sinon":"^9.0.10","@types/semver":"^7.3.4","catch-uncommitted":"^1.6.2"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_1.1.7_1612878005742_0.8986235543740309","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"1.1.8-renovate-non-major-259b8786b7da6fb71f7c5bc3220834cf94881a03":{"name":"@balena/jellyfish-plugin-base","version":"1.1.8-renovate-non-major-259b8786b7da6fb71f7c5bc3220834cf94881a03","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@1.1.8-renovate-non-major-259b8786b7da6fb71f7c5bc3220834cf94881a03","maintainers":[{"name":"lucianbuzzo","email":"lucian.buzzo@gmail.com"},{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"36090c2095df119229ae3340fdc647de218d4fc6","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-1.1.8-renovate-non-major-259b8786b7da6fb71f7c5bc3220834cf94881a03.tgz","fileCount":18,"integrity":"sha512-BRayMK27nlyKCjM0Jk3g9ihd3/0PvGIjEuNofIcYnfsQzYOw9iY9bKKCAPXFRjGnH1FR4hzMMweOD2oamU+Y4g==","signatures":[{"sig":"MEQCIGiOGbgpzqBh7hqZUIS2lMRqJEEh2ayZY6JeA9UrnZhAAiA1XeQFX6bTsaaaGx5XMh9PepM4ymmsjtTa1T0StDhu9w==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":26302,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgIuteCRA9TVsSAnZWagAAmbcP/ipxK5y7x83G1qt+NMdS\nnVQjJA04F5oYxUX2DmnJeLvT6fGqxG2WU9hd1AFjTE0UKN3mGI/sFrIzhvdz\nyHuUiPiibHUaPyb1DBzZbYvePE1pcFan/MSdMu0dXzi9zTbfeUpwc0djdtmD\npTHt+pYLpKAegzKSV3LI4TE0EVOr6KKGKVMNTvfQGGnkDoJ9rQYbZi3d3E31\n1z7tB+hg6hVWxIClpFc3QZrJRJmhDcCMa+Pn54h7oylycr72qSDMWymh0ZnC\nAX461CzzJL2TXOHZxU5FnmRORcx+HJ2XnrPKUhTiXyJPKERDTPNX2vvMKC1+\nPwgN3oTLSU2SuFURRgNvPTmfvnWDXfqye9J4AcYqObm+wS27d/NkcjJF6Ru+\nDTikThzBKdn4lTpbwctqY6aFR8sFtSlgjZQUz+dwDgJNS0a7XVbAJuHEd0b6\noZ0JunTCUZpgm8Con6CGE2pmNGpiLP7wBI0jHBRCx9vOXYOg4uiRzmxyNuDr\nxozctyZjWRlCPBvwx8kEzJxUxA/gAUrteO/q0R5CsTKa7Iuw7vy54cAFp3l6\np96FMuhb+c5PcDKucRePVmWc/kR5moBfdCYqhJiFx6AjmELCZSKc5TAA2SlM\nNNdsEDSd1xlLCrmV9BmZY2tI6a6JxZXiafmdnRmqq6ScQKx/xp4TjB64rDCb\nUN49\r\n=zyH7\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","husky":{"hooks":{"pre-commit":"lint-staged"}},"types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"259b8786b7da6fb71f7c5bc3220834cf94881a03","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint --typescript lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=shellcheck,@types/jest","test":"npm run doc && catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc","check":"./scripts/check-filenames.sh && ./scripts/check-licenses.sh && ./scripts/check-deployable-lib.sh && shellcheck ./scripts/*.sh","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --typescript --fix lib test","postinstall":"if [ -z \"$CI\" ] && [ -d \".git\" ]; then husky install; fi"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --typescript --fix","npm run doc"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.20","semver":"^7.3.4","skhema":"^5.3.3","json-schema":"^0.3.0","@balena/jellyfish-logger":"^1.0.11"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^26.6.3","husky":"^5.0.9","sinon":"^9.2.4","deplint":"^1.1.3","ts-jest":"^26.5.1","typedoc":"^0.20.23","depcheck":"^1.3.1","shellcheck":"^0.4.4","typescript":"^4.1.4","@types/jest":"^26.0.20","lint-staged":"^10.5.4","@balena/lint":"^5.4.1","@types/sinon":"^9.0.10","@types/semver":"^7.3.4","catch-uncommitted":"^1.6.2"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_1.1.8-renovate-non-major-259b8786b7da6fb71f7c5bc3220834cf94881a03_1612901214313_0.5739191728443556","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"1.1.8":{"name":"@balena/jellyfish-plugin-base","version":"1.1.8","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@1.1.8","maintainers":[{"name":"lucianbuzzo","email":"lucian.buzzo@gmail.com"},{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"00c40c2292f472a9bb342c2522a4b9e4f9fcb8a3","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-1.1.8.tgz","fileCount":18,"integrity":"sha512-2FCSVpy4erwRuap0v8kGkyvPwhA36YVCVahmUS/nGM9HGaF4d3kzigNR3CWUblxqgMh9Jnljaoyb5iAOaR2nAA==","signatures":[{"sig":"MEUCIQD3KD3ZhVQMIWotS0QTZ5d22qZwP+NsPsMyezj+BVBfMAIgNavoJKCHUhjA3GdxeMLjqGwbnb/NVFCocoVOk4/lAhU=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":26242,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgIuwlCRA9TVsSAnZWagAApMwP/26TJlPovWkselizZZfE\nWUDtrUvJO87NVU1EixY+jInFGPWw/O3TwojHXDt9xidKTF59ragdLP+SEcAt\no86fTuUu2NE2aZ+5vVjdTW2GJbNfqwMu034wjotZArKxag2emLu0QvWUM+q+\n3iJxwP8M45sLsoO63pjYhDzRNRyLRyQ58+qMPfncpcvRV11w3jqWWi2Qjuco\nViipKizEXk5cY1FEnGX9PNo852oED2pBU1mHGowwa8lXqqXA8utGX+w6+maU\noSqkOzRzijEsj1A0Caplt3swjj8FdtRStQRYUF7sn64DwkSRobpkYcojUz85\nLbi1IfFD8I1aLDAshdO+Ezs5CiWiYB2P9DMZpQ7pecOONOyGDh1KsWEjwIZY\nbAK60DotbKR/PZZHr8IKpI1kV9n+R+D8+VXhQ5b8BZbfoJ5/btGCh8O/t/Y0\nbZC3DTG4k3Z4249KOrgY9Y0gpZ0oe9KzrQ1LT0M/SCynwHDMPruSO2lsozMo\n1VD17zgjvRxYHoDpjjMHHI1kAYd4lXEhCVIAHevbFMfCBR7+ksgHQkPavXMJ\nlcdBt+8K9T1b5zp1TsmjB9oo3j8ve/I0W+YtDmqCEPC9c7Q1yEC5eHvcCPLZ\nOTYyJu/nLprI4YwVR+RYRhqQQHK6V/qg9IBLGz8egQiAruGsRPh98qkagLdO\nO62J\r\n=0NlR\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","husky":{"hooks":{"pre-commit":"lint-staged"}},"types":"build/index.d.ts","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"cf2826d9c0636db71f7089fb97dad540df2f536d","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint --typescript lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=shellcheck,@types/jest","test":"npm run doc && catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc","check":"./scripts/check-filenames.sh && ./scripts/check-licenses.sh && ./scripts/check-deployable-lib.sh && shellcheck ./scripts/*.sh","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --typescript --fix lib test","postinstall":"if [ -z \"$CI\" ] && [ -d \".git\" ]; then husky install; fi"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --typescript --fix","npm run doc"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.20","semver":"^7.3.4","skhema":"^5.3.3","json-schema":"^0.3.0","@balena/jellyfish-logger":"^1.0.11"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^26.6.3","husky":"^5.0.9","sinon":"^9.2.4","deplint":"^1.1.3","ts-jest":"^26.5.1","typedoc":"^0.20.23","depcheck":"^1.3.1","shellcheck":"^0.4.4","typescript":"^4.1.4","@types/jest":"^26.0.20","lint-staged":"^10.5.4","@balena/lint":"^5.4.1","@types/sinon":"^9.0.10","@types/semver":"^7.3.4","catch-uncommitted":"^1.6.2"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_1.1.8_1612901412989_0.026658466821597893","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"1.1.9-renovate-non-major-c2c2bebf6d18fa28c85cdf4d98e0d64187afc57e":{"name":"@balena/jellyfish-plugin-base","version":"1.1.9-renovate-non-major-c2c2bebf6d18fa28c85cdf4d98e0d64187afc57e","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@1.1.9-renovate-non-major-c2c2bebf6d18fa28c85cdf4d98e0d64187afc57e","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"9df2c90a2f606ef7215b9882a490fce2dcdafb59","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-1.1.9-renovate-non-major-c2c2bebf6d18fa28c85cdf4d98e0d64187afc57e.tgz","fileCount":18,"integrity":"sha512-8vac6pc/NMNUFtKp3hG6UgngbQjR3r/pEY3tLjt7YqFkLj9QHMUrGmKkDq4j1w7tzlyGvQg6eAcDuXghyLj5Mg==","signatures":[{"sig":"MEUCIE/HoudZkAcwcBOAVPfrLOvL1xZgHl1rWw7Zj7AtaJriAiEAqklDGzJkITI6ad4qHv/0jFus7xYEeNaZf3gElVRu+B0=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":26392,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgJFQmCRA9TVsSAnZWagAAgOMP/3KubQPN3CzjYmtpR6rx\neOYl5cLT0oNAfGKCxOfznYaffS4HFsT8FxJSleeqmW5UhQffoaFwaFIF7IKc\nQYbwUnOMMT45Eneky63thIg/YHUf90YcMGYennQqR9tJVHIeTBVyqjSFD8Cx\npBJiWXsB7k0GyMCFBxBEAk/8OwmoLz1S/Uos8ATWaow6cjGNAUV8EYB5OsEq\n7V+G7uExetpWE/uVrosnJHRZNYQEXDqcEW27AwnX9lX7SOTLxm9pQS66KwIm\n8s7N+zqlweRaZk0PiEaYRQZy3qrJddJ9GBPJ+lQbMY9nptvmWwsVVns4Hhxy\nZuVtC3fzEoVPNCAzsn8VeaRzmJINGHXyeCRYhv4dd1adO3AEmU4SJra621mx\nap/qS+9+cJ61AdW1yLfd7V2VQQV0gMwUVTm+cPCnVVNSWFapdzHpl7hMvjNa\nNQEYS9Yk+2xBHuwg3u59HDSllzCrDrsUH7JxhnjfWExUeiTIdbiBbnOAkz+U\nBnxqPg5kPexTdmr2oHecYVCIE4Rzb0rckTXMwOW87ODBpcXR22yrS0cotkRI\n+6zRxbYK4YEU354srwQBP3Z7g1wjzeADXIYQKvim6VfBiXHaR4Z5KXXC8MaO\nNIYrgG57kKqj+WLphAwLtISdANUEXWFsXh3jY9/ANFzIxpNJdSHUDVAGWMi4\neoHU\r\n=dPkE\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","husky":{"hooks":{"pre-commit":"lint-staged"}},"types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"c2c2bebf6d18fa28c85cdf4d98e0d64187afc57e","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint --typescript lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=shellcheck,@types/jest","test":"npm run doc && catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc","check":"./scripts/check-filenames.sh && ./scripts/check-licenses.sh && ./scripts/check-deployable-lib.sh && shellcheck ./scripts/*.sh","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --typescript --fix lib test","postinstall":"if [ -z \"$CI\" ] && [ -d \".git\" ]; then husky install; fi"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --typescript --fix","npm run doc"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.20","semver":"^7.3.4","skhema":"^5.3.3","json-schema":"^0.3.0","@balena/jellyfish-logger":"^1.0.11"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^26.6.3","husky":"^5.0.9","sinon":"^9.2.4","deplint":"^1.1.3","ts-jest":"^26.5.1","typedoc":"^0.20.23","depcheck":"^1.3.1","shellcheck":"^0.4.4","typescript":"^4.1.5","@types/jest":"^26.0.20","lint-staged":"^10.5.4","@balena/lint":"^5.4.1","@types/sinon":"^9.0.10","@types/semver":"^7.3.4","catch-uncommitted":"^1.6.2"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_1.1.9-renovate-non-major-c2c2bebf6d18fa28c85cdf4d98e0d64187afc57e_1612993573954_0.4188810860569421","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"1.1.9":{"name":"@balena/jellyfish-plugin-base","version":"1.1.9","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@1.1.9","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"ec90df58813f853e21ce9d746f8fcbdd65667cc6","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-1.1.9.tgz","fileCount":18,"integrity":"sha512-0ubbN5THmdBf15VuG5sG2ncYh/W32E7jErH3bpW8PsZD2AsXjtS9pBe9uU96cef1X2Vorhk83odqUTYoHQzUIA==","signatures":[{"sig":"MEQCIBxjX32ADpNUddaRh7sBhNFVw9zqq60mzECJuT1c+K65AiAFIi4zaRQSE05UhzEC/4cO+7TuPyrt+pNjTpiF9DTWOw==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":26332,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgJFUZCRA9TVsSAnZWagAAfiUP/igwlhFkEX1BIcDSAs7z\n0giI6Ey35ynCo7BwkOqXfrJd79wTIx7as+6Zee5UFYggMsgj5lbD472eBmkD\nVW8tmDCNTw9pDWpfKZHqRov2hv6EN+8DdtcJtTtrow4nRRurfys90YO4zGHW\nL1x6E/hSnm1d55rKTuI7FgrE5KmLg6AUB3OmpdG2UEzyXBeqmiw8sGkr9UFS\njEqW0DyiO26sGCBNTwe+wPWVgpxo+CboJ8OXAJnQsEOlIvxnnjWezX2str4Y\n506VP1Q1ckhgV9NeDYzqcsEHLo+uyjpWMo1BSMRiazBB5WLQaIIkBWmAxSL/\nyJYT/Jx3dFPyuQjZmW6BWMu5jxp2X4+01uzv1ovnoUMFoA//a5O5Z9c1NlBw\npqox5HGW0ilR4nV/nRKbskm57bl+nLtgfPpgzZrGnT980zoehA3B3R6Cp3Tr\n71Q16IkEXjB4BLkAC8GfQdxyRjz6yD/aw/sGfUGvtLszdgeCEwC3gFlo1o1N\nUhqv2BXdMavMQJgIe2t5eLr+cnPPdohIHZjo6jpVXNl8Aw3OZQpZlcl6+xn8\nWfU5cSP7lkDhOck476AygRM4RR6LOJaQ3RYw/24DwAT+IyjM+tFaaG1Ak0Fo\nfjPxkVumf+eF9fNEC1KgCFGDz7mcU7ic5iPx4K49joJFVLh91cYRcjAkmpnH\nMB8h\r\n=mt0K\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","husky":{"hooks":{"pre-commit":"lint-staged"}},"types":"build/index.d.ts","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"42298d54cede2f83098502e29ff0418e3f14c46c","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint --typescript lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=shellcheck,@types/jest","test":"npm run doc && catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc","check":"./scripts/check-filenames.sh && ./scripts/check-licenses.sh && ./scripts/check-deployable-lib.sh && shellcheck ./scripts/*.sh","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --typescript --fix lib test","postinstall":"if [ -z \"$CI\" ] && [ -d \".git\" ]; then husky install; fi"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --typescript --fix","npm run doc"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.20","semver":"^7.3.4","skhema":"^5.3.3","json-schema":"^0.3.0","@balena/jellyfish-logger":"^1.0.11"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^26.6.3","husky":"^5.0.9","sinon":"^9.2.4","deplint":"^1.1.3","ts-jest":"^26.5.1","typedoc":"^0.20.23","depcheck":"^1.3.1","shellcheck":"^0.4.4","typescript":"^4.1.5","@types/jest":"^26.0.20","lint-staged":"^10.5.4","@balena/lint":"^5.4.1","@types/sinon":"^9.0.10","@types/semver":"^7.3.4","catch-uncommitted":"^1.6.2"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_1.1.9_1612993817246_0.47128556246495257","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"1.1.10-renovate-non-major-0a24c8b638b2b5eec9866c7665b56ca0830a6bdf":{"name":"@balena/jellyfish-plugin-base","version":"1.1.10-renovate-non-major-0a24c8b638b2b5eec9866c7665b56ca0830a6bdf","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@1.1.10-renovate-non-major-0a24c8b638b2b5eec9866c7665b56ca0830a6bdf","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"d7b9321c546c1f3d4cf565cfa3b02811061082d4","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-1.1.10-renovate-non-major-0a24c8b638b2b5eec9866c7665b56ca0830a6bdf.tgz","fileCount":18,"integrity":"sha512-cgo7kEfHU32ZgKsBgqE8DhVT/cSt5iuLsFyTx41avQOYAGcdS/e1TLwlN6B/CEWgKTbaMlEpudiLgcqD98Pb4w==","signatures":[{"sig":"MEUCID9S/giilQRm8PGXTWCNqo6PFZCdaGUmEgp9gOFo0kgvAiEAuw2+bMyYVtNIRKC3vk5gp+9/KR7maNj7ZcWrZIqpw9Y=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":26483,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgJLAdCRA9TVsSAnZWagAAlyUP/1CY/AAXQQOG5+VKn4nQ\np/+L5NmaiqB4LoZ+RX6CZRR2dsxeXvk3BgceG+worH7h3t71NJfUyufmDjPC\nUnJz8V0idmIEvhFPgjzRSImxV/9qGlJQoOFCT+ZI0o5fOYjIdPUK8Uc44Qd2\nn5C2nccDUgQb5ruT7BSKpcwJJDmRI5EazzgEOFeknjevhE6pXDTOKlOrNfLC\nv3ACiF/J8P7+ExIYlDUg0PBWIl9I3EfdsOVyeGSu0xcmZTRqSiPHvHlpL9+p\nejunNMsy7y6EMNAJIj2vS33eS7Y/eKX3ZYxXaxzhfCgYHsoLfbUJ+kQgeQWR\nAbaKZDE6XNuZn4r+xu7HnvbEo/G6VstSLL5MLJzJlWGl3iMer8UtQ1K2JZi4\ni1mwfFahpR0QZG1sKDlBELBWWIQ1lYy3vw8mGZ1D5xYao02PNNJPY6s+RYDl\n5itu/R46US6rSTTUYpZ24sNOU/ObD+gS1ObLXN9aHNON5KDnva2TRhGM+W9i\nN/6fabYP90vcsh5k3e6vjNCb1qeYdU/iqCfkjB7oEqiSv7oygkd8gEnlYsRq\nuyYH+rjDJLY8rld1gVoiXLoLTdnB3KC63Eg7B+4rQPrcI4zSVTIb7VVGnrfK\nS81IksCMjsrp/a39Bp/j0362pXI8ryta/k97xUFmmc+Byr8dwC8BeN/lNbV7\n7eJJ\r\n=Mg4h\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","husky":{"hooks":{"pre-commit":"lint-staged"}},"types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"0a24c8b638b2b5eec9866c7665b56ca0830a6bdf","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint --typescript lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=shellcheck,@types/jest","test":"npm run doc && catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc","check":"./scripts/check-filenames.sh && ./scripts/check-licenses.sh && ./scripts/check-deployable-lib.sh && shellcheck ./scripts/*.sh","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --typescript --fix lib test","postinstall":"if [ -z \"$CI\" ] && [ -d \".git\" ]; then husky install; fi"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --typescript --fix","npm run doc"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.20","semver":"^7.3.4","skhema":"^5.3.3","json-schema":"^0.3.0","@balena/jellyfish-logger":"^1.0.11"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^26.6.3","husky":"^5.0.9","sinon":"^9.2.4","deplint":"^1.1.3","ts-jest":"^26.5.1","typedoc":"^0.20.24","depcheck":"^1.3.1","shellcheck":"^0.4.4","typescript":"^4.1.5","@types/jest":"^26.0.20","lint-staged":"^10.5.4","@balena/lint":"^5.4.1","@types/sinon":"^9.0.10","@types/semver":"^7.3.4","catch-uncommitted":"^1.6.2"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_1.1.10-renovate-non-major-0a24c8b638b2b5eec9866c7665b56ca0830a6bdf_1613017115910_0.11430416801680332","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"1.1.10":{"name":"@balena/jellyfish-plugin-base","version":"1.1.10","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@1.1.10","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"8aebae449db20e7da81449df222fdafe16f88e80","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-1.1.10.tgz","fileCount":18,"integrity":"sha512-vvew0BKnYTcSNYiqekmBWtaEhbQLov8388UCsXesTORGlOrqATGkINCGWfN8gi4itf06Z95/iDX7fCXgc0Jdlg==","signatures":[{"sig":"MEQCIEf2Ty7eCUNCEAqAp3wnInMUipfP5yf+842Mwx4zWacNAiB+xya5obKWusQRBvKvVIzoLAOZN8sLfCfGMxyPoLAs8A==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":26423,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgJLDeCRA9TVsSAnZWagAAmVIP/iAX02QEOYjFV9HQIkro\n/ZRBQBpc+tG1M7vrBQ5ASy+KTAmSU0M5ILAaSfNSrmu0JcPhEoxQrfLPDxin\nYZI0aksoWGh7YEXXuHcdwRxB/fV5e5PiwDDBR/IP6+eC1/01ifCC62um1mAB\nr+NnP6W/LQhRM1FgYLPxUzp4pwbvMXVE/FEVH7sp5mOR0Qq9o6/xQvcLJrb2\nKFphm3Dm7wsqYo79meAMUFtFAgtQP83kSsEC6rI90l3XFxFagPCceqK7FO6G\nlf3KPzITCyhQUaJgOXevC1XKG/TCjaPhWCx0svds47T1LQdovH+TRzjLPdtD\n37dcBOuNR4OW5OrLtXI9TxxroQfIJy7oJs384gAbhhqKt5nUbmBNYDt5xMLM\nryF/7HlrTiwXLRLzFNHGaOvSGrZu3rLkB6AgsUNHBe802d2OAr+RG3vhKjaz\nzUH28tYc+Sya8nxuagWPW7/WVuJMjthzg6oSQiHrHp9lA8U52MpCj4fMn2vV\niaiGWG7CEUOHQN30lINzpwUTGhAyfjyx/X5Uel01/yq+50RHpUUp+2kuC3s6\nGp/iWa5i5o1edOYNnqicliiKq5XSF4UQbNtnStnbB9mU5hjw105cLA/0cy25\njJg0q43ZSYO3Z4Es9Hsiyyds31phokNi+dgUknWLikazE9CAVqJroATUnBWc\n1cob\r\n=4Th9\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","husky":{"hooks":{"pre-commit":"lint-staged"}},"types":"build/index.d.ts","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"93d252d2a444966abd1f86826fb98775a81c7fc0","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint --typescript lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=shellcheck,@types/jest","test":"npm run doc && catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc","check":"./scripts/check-filenames.sh && ./scripts/check-licenses.sh && ./scripts/check-deployable-lib.sh && shellcheck ./scripts/*.sh","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --typescript --fix lib test","postinstall":"if [ -z \"$CI\" ] && [ -d \".git\" ]; then husky install; fi"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --typescript --fix","npm run doc"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.20","semver":"^7.3.4","skhema":"^5.3.3","json-schema":"^0.3.0","@balena/jellyfish-logger":"^1.0.11"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^26.6.3","husky":"^5.0.9","sinon":"^9.2.4","deplint":"^1.1.3","ts-jest":"^26.5.1","typedoc":"^0.20.24","depcheck":"^1.3.1","shellcheck":"^0.4.4","typescript":"^4.1.5","@types/jest":"^26.0.20","lint-staged":"^10.5.4","@balena/lint":"^5.4.1","@types/sinon":"^9.0.10","@types/semver":"^7.3.4","catch-uncommitted":"^1.6.2"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_1.1.10_1613017309991_0.8142334536547824","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"1.1.11-renovate-non-major-bc7691e1ca8e61b82091e21e1b5f21d3d85ffc97":{"name":"@balena/jellyfish-plugin-base","version":"1.1.11-renovate-non-major-bc7691e1ca8e61b82091e21e1b5f21d3d85ffc97","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@1.1.11-renovate-non-major-bc7691e1ca8e61b82091e21e1b5f21d3d85ffc97","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"e6df9f1f62461d20eeeb8816b7152c594a0283d1","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-1.1.11-renovate-non-major-bc7691e1ca8e61b82091e21e1b5f21d3d85ffc97.tgz","fileCount":18,"integrity":"sha512-XaaQUSdVhubzkOSYMFmyrYEF+6dEkROcleMbJ1n6jZazcMcpQOIA63IUKLLwRowD3C2I/94ag7O/TwtjajMvMw==","signatures":[{"sig":"MEYCIQC/Ljd8unYgZ0j4Ec1wg61HyyidAr2QTioAlyOHNgX1UwIhANHvEldR0FAP5gX9T07Mnx/lYmZY6dvntLTumsZoa/5G","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":26589,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgJPNOCRA9TVsSAnZWagAAMwoP/17ECv8uPmdvkWFdtvfF\nb0L+hCyaAaxw7ue4ANZRaY+2hFneJJXkAdHfNSC66jkQqABPrSli78kL/4kS\nG/4fGsyY1pl3OIxQBKLR72uCyjAbSRA/cYY4fQrT1n3eQPZrZCJKpRvI5a3O\npQtiSl1Hg8xD2j7QiURa9KWlwuD+8J7mXmYqsb2QFWAE86h4cRP7Mj3b+rkj\nBxO5zsnbZtk+ZoKk++nqVRGaVrtA7M6RD+ZIcdJ2ypChwoJKDeaGGaDgWSjA\n3TX2DDtQF0P/wc8I9WDjQhgReQjdk8DZdmFrzfLet8AWZjOkYxtdvFFXZSPn\nwx6VCjJHxs0/HzDD7NaHevj+RhA51rpllcHGHg7c3dSKKtQV7+4i8ML0i7lm\n8cKoT5MYL5KfmMK3ODlDE3ZCXqJ/pd3RSGMePNw5k9cxzRwtlml959Bp+PAw\nsIwVqc9lhHI/JffZ0FNdZKtnDTSB27/68+qDBn5HhXfSc4wH8vymW3o8TSjf\nga2hOV0OoSZBZGgKKkp+M0TOcfKqYzIgZVzMVmOLCCbqNvigpc5gBvLOm82H\n1hyJUExyrKy8pF0+R5lJvPF1qNG9Azs49GOpO7p/zKc5jINgD+ze+P9WMfxt\nGlqA9rK7joYaJNUi4RP47p/vFS3BqIYiSyjKxqh6+bKMEowhkzQYpv9/Z7bC\n7BVB\r\n=+6dK\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","husky":{"hooks":{"pre-commit":"lint-staged"}},"types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"bc7691e1ca8e61b82091e21e1b5f21d3d85ffc97","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint --typescript lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=shellcheck,@types/jest","test":"npm run doc && catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc","check":"./scripts/check-filenames.sh && ./scripts/check-licenses.sh && ./scripts/check-deployable-lib.sh && shellcheck ./scripts/*.sh","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --typescript --fix lib test","postinstall":"if [ -z \"$CI\" ] && [ -d \".git\" ]; then husky install; fi"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --typescript --fix","npm run doc"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.20","semver":"^7.3.4","skhema":"^5.3.3","json-schema":"^0.3.0","@balena/jellyfish-logger":"^1.0.12"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^26.6.3","husky":"^5.0.9","sinon":"^9.2.4","deplint":"^1.1.3","ts-jest":"^26.5.1","typedoc":"^0.20.24","depcheck":"^1.3.1","shellcheck":"^0.4.4","typescript":"^4.1.5","@types/jest":"^26.0.20","lint-staged":"^10.5.4","@balena/lint":"^5.4.1","@types/sinon":"^9.0.10","@types/semver":"^7.3.4","catch-uncommitted":"^1.6.2"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_1.1.11-renovate-non-major-bc7691e1ca8e61b82091e21e1b5f21d3d85ffc97_1613034317782_0.7039593456087272","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"1.1.11":{"name":"@balena/jellyfish-plugin-base","version":"1.1.11","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@1.1.11","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"4f6fbd51e1e04c1bb13623a357167fed9023074d","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-1.1.11.tgz","fileCount":18,"integrity":"sha512-1Elwped0zF79Y0u/hF3dq1xojxwF7Fp88khBrCEeakYAMWIgxfeQD0dHgiNaC7yC4A+O52GvVqawZRzc8Dz/eA==","signatures":[{"sig":"MEUCIQDFD5fuySstclhUbONEwxYebfW0/9lwcoq8IoGNZwYpdgIgNIqcRhuqlhG6skG4EtQ0i0IqJGDvA+tWPkyxGpImms4=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":26529,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgJPP9CRA9TVsSAnZWagAAT5MP/19fx7ZiwfsMtQaMkV03\nQ4lcCuA4E2cCdSW9wh+7Y3Knl/tN7MdD3gMdfOoW90AQunXbAPIFyHcUCElj\nUY8VQ0looFQ7TNTSKAAHLNZ9wow2pO6dHZRv0Y/O2OczwhrUvKSpQxVYM9No\nvO5rr0EwfnhhE5a1hS0cfnJPVaWkGMDM2byuRwvVriyBO6EaCZZvs7YsC5Ys\n9tdU7CfSN4fVS+WIgfcK/bgc/S0vX9F7cqZ9sUoM23YdZjjrzvB0/TM7M30f\nTcHihnU26PbBRA4QSPv0wbpTE9O2egkHT3Q1m7Bdp+cuUlrjiKyCd/cYAx9f\nvzi8kfQoyDPRxHUtemqy4zeS7lXGIbtM7//hdXOyH3rXVOjfBrX0QlbkkijQ\nHhr+SYx62V43SLND5DZ7pbfGhXMyTTbaeKgxtHt9k4z3df759xkLE4xE/IKW\nF6N+iv3UQr3mDLaodf8xqHc0jQSwrIT2BwbTEcL36IwRyBPxKCCsEGcrwKfL\nDsT26Ydpmss3uNovbXyuW9UQPjFXDr1X6t29PWF8kZesaaGFqhb+rmG7Ejo0\nhUGJwOQ1igBwTqFg5sm8NkcsSIjFEq0BV7r36z19AJV8zqrSoQq9g8zjWIn6\nbkddeEmsB585xf/BsJis0JN7lkM7+yFH+EpYw3j3dD8dej4eqcNetOxv9J+d\n4ETU\r\n=Pg1Q\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","husky":{"hooks":{"pre-commit":"lint-staged"}},"types":"build/index.d.ts","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"1fd8f776aa504ca7ac98d7cad2bffb5d5f7001d7","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint --typescript lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=shellcheck,@types/jest","test":"npm run doc && catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc","check":"./scripts/check-filenames.sh && ./scripts/check-licenses.sh && ./scripts/check-deployable-lib.sh && shellcheck ./scripts/*.sh","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --typescript --fix lib test","postinstall":"if [ -z \"$CI\" ] && [ -d \".git\" ]; then husky install; fi"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --typescript --fix","npm run doc"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.20","semver":"^7.3.4","skhema":"^5.3.3","json-schema":"^0.3.0","@balena/jellyfish-logger":"^1.0.12"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^26.6.3","husky":"^5.0.9","sinon":"^9.2.4","deplint":"^1.1.3","ts-jest":"^26.5.1","typedoc":"^0.20.24","depcheck":"^1.3.1","shellcheck":"^0.4.4","typescript":"^4.1.5","@types/jest":"^26.0.20","lint-staged":"^10.5.4","@balena/lint":"^5.4.1","@types/sinon":"^9.0.10","@types/semver":"^7.3.4","catch-uncommitted":"^1.6.2"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_1.1.11_1613034493524_0.7265072760124691","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"1.1.12-renovate-non-major-49af97d14cce8a418cfd79dc276454c0d7588792":{"name":"@balena/jellyfish-plugin-base","version":"1.1.12-renovate-non-major-49af97d14cce8a418cfd79dc276454c0d7588792","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@1.1.12-renovate-non-major-49af97d14cce8a418cfd79dc276454c0d7588792","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"c014f40c6d73d416454bf157a8248365f336e8ed","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-1.1.12-renovate-non-major-49af97d14cce8a418cfd79dc276454c0d7588792.tgz","fileCount":18,"integrity":"sha512-78yVPBQ6mYHqL4iLKkJebGSBm9XtgRGIz6pOEpXNYlKT/lEdC2othSNzOi7w8YGnKzZjnx8iEZERIz4PD0ltgw==","signatures":[{"sig":"MEUCIFXgXsz1HotPEsvnzK6k2bBQgoLOu2tjf+t0WrDJiT+GAiEAoPXST7fFgn7jpvZjq9dJ23OJAUlShFck2S0j+UAP+6c=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":26695,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgJyWjCRA9TVsSAnZWagAAvhoP/1gecJKQmSLNi3Uox601\nuqCPAD1CH8xZWCmTvl2/JIIC5b90vibGeLY59TBaJHof4f+eA0gWWt9CY0Jl\nQ434HooLZ6GSkj4/REjAKxXRIDTBi6N0mOnC5hMOTKy/5cvc19dYKHvoVHMN\nY32QbeJ2Zhaqt3ul93qmzb7mWzRT4Abu3Z+Fgi2wARZjhUIAUfbFkQI4utYB\nWEm7yDCFcXN7h1NGpnzNP0bWS2rizR0sEhqUDgEyPeTYVxt6IE11qNeTKrSW\nlF01oOvxQtrHdA3MuiQacP11mcTgRJAFnxPfvggX+jAYKiFtaEo3iPx9P/78\nssk5aPDFD6wv+SgiLxQ3dBPVfu+7SUg5sj7ze64OIhFH0T7diCDFkwiUlt7H\nBelQftfAeDZgu+2YS0nrwgM+lRouPacFcNQSf3IWSo9VmRdGKxQWmDDIE0O4\nmj04jM9JEvS4924OwKmpMr9xxxpkk/zRxZI8MFqcb0413fU9lltck8N+Ht7Y\nmg+Hila2HlgVNZtCthBwMG1OndQrc2Wj7HgLlbpnIj0VQTNIrv8Z2DUwSk+c\noYz+g5FxvLsixlAonE6yiCoSAyizx9bvvfAmZlMLxXb26uUzh7vhqCjZFybU\n5e6VKNGYURYchtY9aD04lLSui/ixelUNX7wLCKIfpM7UwqufO47h3RSnblqd\nmwgB\r\n=Spg3\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","husky":{"hooks":{"pre-commit":"lint-staged"}},"types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"49af97d14cce8a418cfd79dc276454c0d7588792","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint --typescript lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=shellcheck,@types/jest","test":"npm run doc && catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc","check":"./scripts/check-filenames.sh && ./scripts/check-licenses.sh && ./scripts/check-deployable-lib.sh && shellcheck ./scripts/*.sh","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --typescript --fix lib test","postinstall":"if [ -z \"$CI\" ] && [ -d \".git\" ]; then husky install; fi"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --typescript --fix","npm run doc"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.20","semver":"^7.3.4","skhema":"^5.3.3","json-schema":"^0.3.0","@balena/jellyfish-logger":"^1.0.13"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^26.6.3","husky":"^5.0.9","sinon":"^9.2.4","deplint":"^1.1.3","ts-jest":"^26.5.1","typedoc":"^0.20.24","depcheck":"^1.3.1","shellcheck":"^0.4.4","typescript":"^4.1.5","@types/jest":"^26.0.20","lint-staged":"^10.5.4","@balena/lint":"^5.4.1","@types/sinon":"^9.0.10","@types/semver":"^7.3.4","catch-uncommitted":"^1.6.2"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_1.1.12-renovate-non-major-49af97d14cce8a418cfd79dc276454c0d7588792_1613178274534_0.08301133657926951","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"1.1.12":{"name":"@balena/jellyfish-plugin-base","version":"1.1.12","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@1.1.12","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"e8859b9e020ae7efb13b694a66f492f1bee2efc4","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-1.1.12.tgz","fileCount":18,"integrity":"sha512-3BZNK3ByP/Rg55g359BHiUhOpTxPRiBwHpI4reFC+I3aNgWIzXaZJ1KHGFy04lrUybJW18JCiUpOvTUWV3jcPA==","signatures":[{"sig":"MEUCICHDnAX9ak3kMB8s5XGAEzK2gSwGO0GA5ijKZMul02GtAiEAg28wtqS3jAIVwgCUxYpcOYN4Sp8KOpJwHpKbuyiyNb4=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":26635,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgJyZvCRA9TVsSAnZWagAA8AkP+wbBfdze1T9AeVcl8trW\n2RXo040k1IvNlBY8QcCW09vfgQkgIhrsCDPfIhLc3DLDgdo5foe9X6KW99GV\nChPT1Hg/+PWJUd15cTJ14mkewmsAUrhPiVO3MXrGBonTPKJOFgbXEt5/bEXN\nVAEucytcN3gY6qI0/bkDV52edxT3Hi99PDBeXAC6jseeYXO3KXnL/2i/NuTK\nLfwrXQGgXZb54qZHs/EQzVNBpRJodrzmU0h0IiKwZ9xF6Z7ub0JXy3GSrlwI\n/WbYlzsJ6svQ6XqZksyf4LDSJRskrxfAKG5cCS2ki0k34q04D7P/WV2DlzgZ\nIaVHpenMRWswOKMqhyRduW1K5RV970CIJK1IuqMeRU72H7BAAUSZC6hnXNEP\n57hAkzmPnU4OC7nljsBMt9GZ4QEWLvhmz0PKJ6KbhpCQKfc16987ZLETm9N8\ndA7UPfUEkQmWxnSLfT64VDoLXSjYM1pfytwXb23UYYQ5Teroo7s4+WTt9cIF\ndm3it4W2yNK3iPOYTnAMdAVWnkOc0pK4rhy7bgSR817lXS6tqXfyXDHM1Kk7\ns/JBMFSKjO1z4v8hXHNac+/Wgmwuo1RM2CL/yipSsvpa1DKYJqPlUF/ZHOOB\nXbY2KPYFW7UCRj3GQtWfeto8tgK5R7Zk9IKTw/ZYg4XtiUR/XdpZC6Td3nZ9\n+Puf\r\n=gWBl\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","husky":{"hooks":{"pre-commit":"lint-staged"}},"types":"build/index.d.ts","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"a1a7ce313021ba51d24b52e129a459443178f2d8","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint --typescript lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=shellcheck,@types/jest","test":"npm run doc && catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc","check":"./scripts/check-filenames.sh && ./scripts/check-licenses.sh && ./scripts/check-deployable-lib.sh && shellcheck ./scripts/*.sh","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --typescript --fix lib test","postinstall":"if [ -z \"$CI\" ] && [ -d \".git\" ]; then husky install; fi"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --typescript --fix","npm run doc"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.20","semver":"^7.3.4","skhema":"^5.3.3","json-schema":"^0.3.0","@balena/jellyfish-logger":"^1.0.13"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^26.6.3","husky":"^5.0.9","sinon":"^9.2.4","deplint":"^1.1.3","ts-jest":"^26.5.1","typedoc":"^0.20.24","depcheck":"^1.3.1","shellcheck":"^0.4.4","typescript":"^4.1.5","@types/jest":"^26.0.20","lint-staged":"^10.5.4","@balena/lint":"^5.4.1","@types/sinon":"^9.0.10","@types/semver":"^7.3.4","catch-uncommitted":"^1.6.2"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_1.1.12_1613178479235_0.8873103958878386","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"1.1.13-renovate-non-major-f34abf799315f3ea62b21c730c004a64045e9704":{"name":"@balena/jellyfish-plugin-base","version":"1.1.13-renovate-non-major-f34abf799315f3ea62b21c730c004a64045e9704","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@1.1.13-renovate-non-major-f34abf799315f3ea62b21c730c004a64045e9704","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"515b25530f59edd54af7949cc53927b5cbe8bb17","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-1.1.13-renovate-non-major-f34abf799315f3ea62b21c730c004a64045e9704.tgz","fileCount":18,"integrity":"sha512-C50VdWFLsEBOsOipCwkZkzS2eDe25HR0fhXEP3DJu+dQmQKRqCJAeIDK4/q5FMHaWKy7yQpMmgq37LleUZAEtA==","signatures":[{"sig":"MEUCIBAtt24gFidxw7ud+dNHd+VV2mYktVH0VW9XY32+2TadAiEA3hy1K4bOkFhz9dLTiRUyJNUyQwdovdOqiDiKq0EXjrA=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":26801,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgJ1vrCRA9TVsSAnZWagAApeMP/0sHYJJ+zQXyjykxQHa2\n7tMqvCs6v1+laT0DyZI1nxKPEcZgsMxadbnN5XKf74kU8nWJFbdlWYCnOD/D\n6SNXKxE0wuDRBI4/N1i3haDngZd7nx22YhRpEbHnsVl/YB1qRI9QJAS9rPjG\ni+bJa4K+FMYNUZLu3/PMu0Xo2X97val6qgPqHtnx7cXx+HRLgFTMRK9pvGe9\n9HU9Vfem0LPjNK2UyQ60fxSMKyI+/Bo428Qnuy6xGnnYhct8QGUPRZM1hMLZ\n2I2XBphJoobEHPlogSA4C+IDBgE85lzrxCVP07XU21828ZQ90xtaniRSGgM4\n6QNphA1Rkw/t5mfeMSEhecSgJaU7Hy2oaBQl+0nA6QlTDmYwFeAI47bILx/F\nLsTLbx9eD1qGqzsOJaizyHvfh4w2+yXI408VQY5nZ4ibs8uRLPVlsRM2X3Sm\nnWB5sdOARjd2Ueddgb3pMeKlS3wL8zsvddersMKGJR8fGW9BB91npcHzgyPI\nKIvmRU+jfkDgnPtB4tPvQ/7PpWRJXn5NTra+KTGjrnKMSpMw2JUA+9OfKmw6\nkawc5GSxd3yXKavf15AQVXQtNxCfCO0nnCQv0UvhGIusX7Mk9nO+oP+C+MOI\nwSinshzNFOPrWNcfsGEGS9lj6j7cNHJqCw1VOsRtH83GHeWFX0aPxBBD2LEI\n3Vxf\r\n=Bmgv\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","husky":{"hooks":{"pre-commit":"lint-staged"}},"types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"f34abf799315f3ea62b21c730c004a64045e9704","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint --typescript lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=shellcheck,@types/jest","test":"npm run doc && catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc","check":"./scripts/check-filenames.sh && ./scripts/check-licenses.sh && ./scripts/check-deployable-lib.sh && shellcheck ./scripts/*.sh","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --typescript --fix lib test","postinstall":"if [ -z \"$CI\" ] && [ -d \".git\" ]; then husky install; fi"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --typescript --fix","npm run doc"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.20","semver":"^7.3.4","skhema":"^5.3.3","json-schema":"^0.3.0","@balena/jellyfish-logger":"^1.0.14"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^26.6.3","husky":"^5.0.9","sinon":"^9.2.4","deplint":"^1.1.3","ts-jest":"^26.5.1","typedoc":"^0.20.24","depcheck":"^1.3.1","shellcheck":"^0.4.4","typescript":"^4.1.5","@types/jest":"^26.0.20","lint-staged":"^10.5.4","@balena/lint":"^5.4.1","@types/sinon":"^9.0.10","@types/semver":"^7.3.4","catch-uncommitted":"^1.6.2"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_1.1.13-renovate-non-major-f34abf799315f3ea62b21c730c004a64045e9704_1613192170737_0.12233852064842199","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"1.1.13":{"name":"@balena/jellyfish-plugin-base","version":"1.1.13","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@1.1.13","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"aa57c9986d9b7c6c1cab2b2d46c7e30e9ac32866","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-1.1.13.tgz","fileCount":18,"integrity":"sha512-wSTddM7WOvDB0DhnWOBfEWOwoAVfA0zvJ6FePVq+a981rWPpy/MLwxW9yqdEl3ILdQSFIf6jz4GzhNQWtY/HZQ==","signatures":[{"sig":"MEQCICAKd8HSdMo6IRHUtENGUjTCajZbE03HKuu8gYAKXAUhAiAJQ8kiPv20ip4ekY42von6Ft4ThpECgqXaETyucH8Rkw==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":26741,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgJ1ygCRA9TVsSAnZWagAAjmAP/0eu9lxO0g+T1Z9yJvx0\nTwuTZ5vI4A2rUrirGM0MxpZ76nlqSf/6ovDE3QHKGWBmSYsflqczZ1q5V+Ua\nl6PvtHLosXgcZ+hp1lc8v5Bcq6+I41FkZOMFfBCTcYqV+C12L2ClwatQt/L4\nGq2cndHQbhE8QQbAX2pA6OLJURNjrjp9pepcJkdCOa0VqHUEahctuO1n0oG6\nlx/ULm7pNkg+jPsbn3FIN3kEBISPdBxxwocvWvS6t0Qn1uor+L2Ce6YQzLAQ\nKfoo5xnEe63JrqUfm79M1CzNfWq9MftX/Jqg9K5Td1dK143bUjURMjQ9q6pr\nosuw+tW/u7Qm60xPCPrKUbU3anYc9LXTq4QBl4GMNYe+AlxJweH4fwC4LVkC\neLItPxcEXN1ABt15kbVuwVs68Gi5VH2+d4rGTT1+WGAyQmZLT4QNC7sOHY1u\ntaK2+QsXYvGL/gEr+c4+HmvRNvTDVuC0gZNDkK83z1a29p49QYIJdQv1Dbv2\nqV+noZajXdUll2w2RpYaQo1RMyUFc9aILDhNBZW0XWVKYZsQNDIcmm+ek/QY\nHdwKYecDL56suPnWqUm4313LDePvlT8csYAcgm0rv/dPvhhxto+LGj6Vc5/p\nrp1xl3LLT3OA/IDEfvoVFDzcRKeIr0h57BTv3EI/fpXXS4brDhSNU2zwVifd\nKfS4\r\n=XjuM\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","husky":{"hooks":{"pre-commit":"lint-staged"}},"types":"build/index.d.ts","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"01b98c9e03f82693b5ea279ad144bed8e7e61424","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint --typescript lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=shellcheck,@types/jest","test":"npm run doc && catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc","check":"./scripts/check-filenames.sh && ./scripts/check-licenses.sh && ./scripts/check-deployable-lib.sh && shellcheck ./scripts/*.sh","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --typescript --fix lib test","postinstall":"if [ -z \"$CI\" ] && [ -d \".git\" ]; then husky install; fi"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --typescript --fix","npm run doc"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.20","semver":"^7.3.4","skhema":"^5.3.3","json-schema":"^0.3.0","@balena/jellyfish-logger":"^1.0.14"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^26.6.3","husky":"^5.0.9","sinon":"^9.2.4","deplint":"^1.1.3","ts-jest":"^26.5.1","typedoc":"^0.20.24","depcheck":"^1.3.1","shellcheck":"^0.4.4","typescript":"^4.1.5","@types/jest":"^26.0.20","lint-staged":"^10.5.4","@balena/lint":"^5.4.1","@types/sinon":"^9.0.10","@types/semver":"^7.3.4","catch-uncommitted":"^1.6.2"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_1.1.13_1613192351655_0.8796892131327412","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"1.1.14-renovate-non-major-4fc6ef5dec81361f9bf072a5ab622ce19b6f6a02":{"name":"@balena/jellyfish-plugin-base","version":"1.1.14-renovate-non-major-4fc6ef5dec81361f9bf072a5ab622ce19b6f6a02","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@1.1.14-renovate-non-major-4fc6ef5dec81361f9bf072a5ab622ce19b6f6a02","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"1b847bd1d435e98d8c0041df1b184eca923240d0","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-1.1.14-renovate-non-major-4fc6ef5dec81361f9bf072a5ab622ce19b6f6a02.tgz","fileCount":18,"integrity":"sha512-hZxd7K807JfYxhPztRnX+GV+0Uf0IdW4VesJPSxRCIXf5ka6HY4+kmcVMZbEeaJlcAiljDWLO6J/pPJ2GhoTFQ==","signatures":[{"sig":"MEQCIG7mLRmTrwBTZhpNhJr4z93KUgg+9CzwewsxkAVEaBNrAiB0XoeEG46ki4mDxB7HYOJn/4XACYeKtZLaewhad7+dfQ==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":26891,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgKfThCRA9TVsSAnZWagAAd68QAIp465F3KPZhL1gOlLvd\nKzqcvXz46ieg/iX/5ez3Yl5yRcEQApx45HmBkQ97LMjSq2OE5BzVceVbvW/w\nKEZNkb6Z1HFOYlhTbFJy1LO6fUA8lQ42LdU5xHW7YriQo98iceHoUU/fYrUm\nDdgK3aqFKB3mWHmHSubNiVHhR4alCSXFqHTvwgClB9F58EiFltO4H6VhaIeA\nEWxzlUzXvKzuXzU36T2YpWeNd3XGXtxutqn0NkFD0IZG4uoPErlAenmevmmC\nHOYxxkhmp4tIaLCtx99tEKlz5Vg4Th+GwSEASGDFLQAdB4/Dm6TWLGoYjrI4\nWPeShk6mFrXWezV4OAUdfiDQ3YyTAneENwqYKzx2Id7iTw90/O7Rda1UsT6t\nV6PUt0NXpzyWf0dGBKikdHIj1dYTTTHoyd2v1/VFxPt/pIeEz5KTUSe38OVw\nckz/O8v+9xCmtP6KstE9uV4DAVKi1+iAZtvwgJuAoZGwQnHEK8GbVpks0a4D\nTZ5paLNicejVAUzTskjwIAyBPMSlAnu8fcNHRCj8U7oHVou6Zr55GzrfyVUN\n9q5yUiFS20Ylkl0zPc37Fs7Ns8YSERxGD3syVdYmK2HnjYsNnCkv7fvPAjjk\nIzS+YQd1TePYCBapZmWR7Az/n/qy7xg4zj/C4btm/UuOzc3FeupICZIg2xMx\nLfBS\r\n=SjlJ\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","husky":{"hooks":{"pre-commit":"lint-staged"}},"types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"4fc6ef5dec81361f9bf072a5ab622ce19b6f6a02","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint --typescript lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=shellcheck,@types/jest","test":"npm run doc && catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc","check":"./scripts/check-filenames.sh && ./scripts/check-licenses.sh && ./scripts/check-deployable-lib.sh && shellcheck ./scripts/*.sh","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --typescript --fix lib test","postinstall":"if [ -z \"$CI\" ] && [ -d \".git\" ]; then husky install; fi"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --typescript --fix","npm run doc"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.20","semver":"^7.3.4","skhema":"^5.3.3","json-schema":"^0.3.0","@balena/jellyfish-logger":"^1.0.14"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^26.6.3","husky":"^5.0.9","sinon":"^9.2.4","deplint":"^1.1.3","ts-jest":"^26.5.1","typedoc":"^0.20.25","depcheck":"^1.3.1","shellcheck":"^0.4.4","typescript":"^4.1.5","@types/jest":"^26.0.20","lint-staged":"^10.5.4","@balena/lint":"^5.4.1","@types/sinon":"^9.0.10","@types/semver":"^7.3.4","catch-uncommitted":"^1.6.2"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_1.1.14-renovate-non-major-4fc6ef5dec81361f9bf072a5ab622ce19b6f6a02_1613362400439_0.5713505935351308","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"1.1.14":{"name":"@balena/jellyfish-plugin-base","version":"1.1.14","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@1.1.14","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"2c194a90d9b252a047bdc31e3bfeee73d90cdf13","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-1.1.14.tgz","fileCount":18,"integrity":"sha512-JsBw0HDwD7jKdGRr7sgbWNgoEbUZ/41n7grsJr1/qn6wh6Bf51ESkZF+EJ1sd8dD6VrEeFDLfiTKF7hSCB6+BA==","signatures":[{"sig":"MEQCIBKyJ2kKvOSQvkFDhsox/GEh2nj83rBoFBrpIamvOYe3AiAkYTJSPDZ7BPun1W8zW6qJsjo/ZO3iIgdTnuM19eFZeg==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":26831,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgKfWdCRA9TVsSAnZWagAAAkYP/Am5OnENu6lzGYyr+62c\nPjDH7osbaPC4bhwkDV4xT/j/eK0G7t0Wph6+GxNp5Vfnrm3BlKaj2Zvk3XMO\n97u8kBfqjJ9zu2CQqJmGm4KSJAt3rxqN9Gge3QVcoUW0H94YDJQpDWMt85M0\nuXpvPkJOHUcNVT8ChqxIOMgSwUP5G0UG/gyWC29kLawc0FsIzVqE0uIEYjo4\nV8VGkzr4U0pPc2K8WkJ3PxFEtIrDsFho49CZqPBn3tt2veEZYd6/qDvH4iun\n9w1JeuAOem3c3NcXGJo5ysou2RXYW+JsRMVXGWZSSMWebCNF55o18B/JOgqr\nmpzMO+BvpKCXyvsGpCFx7ry5OnFv9ls6LQ1zkHm2780fihlgIhv4ofC35ZxK\nqOqpRrbfdoRN0FB/Z3QoXeNSvpiYdtiMAd72GGP8nQGAiVy7MqcVGH2v/L5z\n5O7RFsP5OSfYUH/AYEDpXwrUkqx39BkZ28bo5NHRxEMfjxb5gutZlSafghto\nBfJW8u2DNE7Xk03UW9br9ChIYSdFbNzAcGqHbJAzgFG8Z7QFTO2o2SktxjJb\nOgEHhEOBdmvHUata/TllXIxM5UB4LBPqGo1hPE26PT4hdJ1Qy/Ky0jSbRQKE\n8hrspuCuOFKLFMR+90iST5TeCc1vwiSC6ftGYev/6/ru63Nh2BN5Fmw2BJ9M\nIlwP\r\n=j5gQ\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","husky":{"hooks":{"pre-commit":"lint-staged"}},"types":"build/index.d.ts","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"8a2e35ea0b653a0d922055104f1a66beec6cfdcc","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint --typescript lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=shellcheck,@types/jest","test":"npm run doc && catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc","check":"./scripts/check-filenames.sh && ./scripts/check-licenses.sh && ./scripts/check-deployable-lib.sh && shellcheck ./scripts/*.sh","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --typescript --fix lib test","postinstall":"if [ -z \"$CI\" ] && [ -d \".git\" ]; then husky install; fi"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --typescript --fix","npm run doc"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.20","semver":"^7.3.4","skhema":"^5.3.3","json-schema":"^0.3.0","@balena/jellyfish-logger":"^1.0.14"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^26.6.3","husky":"^5.0.9","sinon":"^9.2.4","deplint":"^1.1.3","ts-jest":"^26.5.1","typedoc":"^0.20.25","depcheck":"^1.3.1","shellcheck":"^0.4.4","typescript":"^4.1.5","@types/jest":"^26.0.20","lint-staged":"^10.5.4","@balena/lint":"^5.4.1","@types/sinon":"^9.0.10","@types/semver":"^7.3.4","catch-uncommitted":"^1.6.2"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_1.1.14_1613362588769_0.8669722987575785","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"1.1.15-renovate-non-major-c3f37d9154c47b99d0f26fce5ce2ef4f627c2e52":{"name":"@balena/jellyfish-plugin-base","version":"1.1.15-renovate-non-major-c3f37d9154c47b99d0f26fce5ce2ef4f627c2e52","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@1.1.15-renovate-non-major-c3f37d9154c47b99d0f26fce5ce2ef4f627c2e52","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"1bbab9c6d68a9103e428a0b4b4a562a7382a99a7","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-1.1.15-renovate-non-major-c3f37d9154c47b99d0f26fce5ce2ef4f627c2e52.tgz","fileCount":18,"integrity":"sha512-iJvv+BwiyrJ+gFYXedK+6O+uH+Y2ojdILBzkOugJ8YsiR83f9nzV0n2JEyBBQ1GXrTF6jHNp/U7MXnmBH6DnIQ==","signatures":[{"sig":"MEQCIGYJpmWE6g0pdJz6aVI3OcNJ9rz7wtnY7hZPlKbyyvafAiByzBnRkziV8OXgHYfgGFvIAu/5m6Wug1g+gSSekE/B1A==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":26997,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgKg+BCRA9TVsSAnZWagAAAVwP+gLUzmC3VzQ3v5F7LiYu\nih71K1tQX7ICwI7IE/Al/l++njmwIQHtARyMuifDK37Bed66aQzk+kwg2CJj\nBd6Sj1HWV10VfVMQgxwS+Q23JNPBDu5HnOK/vVSwabExZt7gZPj1Dlzf3RWl\naRuX6Y14IaAqWsc5F1eJBw4IdUE+S+6eP650hgLabJmaOJEIYds1ktr5bQrs\nMpKVmVIBqTOE95I+ki21pJ/glEjw2t59A8ZM7NrAbHIzpjgZ5f4jxdUIxAvS\nZe3T/BYPdSASF8kTZ6f7OisnIvE59Vk06OdsY9yFzPTFAgTpvS+33a6rkwmY\nppu2JtHvMn5E4NC9JtYffwlj7+lSgtl0V+8SHsbkQgTY68VOXTN1kir5AohH\niqNXeoJ22on7Wt1mLQp8vtFuFn529B0tuDLaTiQFMTR53bjg0Eq4nr7sv48k\nCSRcOJuD4PUK16zcVCE7Ti7LcHFetbF62AueVOdDZ3W2skRQVZUuzp+wOjso\nAr3phjkTWfiaVZjaiwP0dB2AT1oMG7BX40/0k8fHJ16fez0Tkc/llKPZwkXt\nM6YhEXDd+MuHoZGNy2otYJYYaHdHhtL/ZdKHsSNPJiESg+Q5zvYaHWo2G3a1\nHmyZ8ge3PKezZPQTqZKajC2oYLUxrw/TEUh6zLY2Dbk/QJopCOscNs70IUo0\nAvaz\r\n=P/9K\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","husky":{"hooks":{"pre-commit":"lint-staged"}},"types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"c3f37d9154c47b99d0f26fce5ce2ef4f627c2e52","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint --typescript lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=shellcheck,@types/jest","test":"npm run doc && catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc","check":"./scripts/check-filenames.sh && ./scripts/check-licenses.sh && ./scripts/check-deployable-lib.sh && shellcheck ./scripts/*.sh","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --typescript --fix lib test","postinstall":"if [ -z \"$CI\" ] && [ -d \".git\" ]; then husky install; fi"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --typescript --fix","npm run doc"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.20","semver":"^7.3.4","skhema":"^5.3.3","json-schema":"^0.3.0","@balena/jellyfish-logger":"^1.0.15"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^26.6.3","husky":"^5.0.9","sinon":"^9.2.4","deplint":"^1.1.3","ts-jest":"^26.5.1","typedoc":"^0.20.25","depcheck":"^1.3.1","shellcheck":"^0.4.4","typescript":"^4.1.5","@types/jest":"^26.0.20","lint-staged":"^10.5.4","@balena/lint":"^5.4.1","@types/sinon":"^9.0.10","@types/semver":"^7.3.4","catch-uncommitted":"^1.6.2"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_1.1.15-renovate-non-major-c3f37d9154c47b99d0f26fce5ce2ef4f627c2e52_1613369216655_0.7671162439058667","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"1.1.15":{"name":"@balena/jellyfish-plugin-base","version":"1.1.15","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@1.1.15","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"3f19203b126266e5cb636451c181f1b307a34e8f","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-1.1.15.tgz","fileCount":18,"integrity":"sha512-HTW2LMkxsLhyGiptPq5sJPrx6n+TXEDUU+f3l6yuj5//3X7B4Yi0s9fi8CM8Rc+LiPMGa9uhkj3zXFTkhqFkiw==","signatures":[{"sig":"MEUCIFU3cf2r0tyn7Qo+6mqDGcvFYolicn7Je1+5L6dCYkIVAiEAjl59EjoSW1T5Fms/pb8ym6jUxff5UY0GTiuRdRriWJI=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":26937,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgKhBACRA9TVsSAnZWagAAzdMQAJjjdvsS0I1K7NhMULHa\nly/4x1wv4Iq3HkY07l2U+Du6TwbatRj1y5x+RL8tkdaah1IELBO8tYtf6i9i\nha/ZKCvi0irB0oPrxHrt9ardDwuEN2MKiyo4Yd57M0ZODrM4ouUS0gQRcMyv\n4p1DIWVwnww0LEMtz88Q+0zo8ajEDBsxeMtXPk/OQa8KDD95zwjeQ5qa2t6V\nnLasD5YMs/gab7Vyc4+NOMi4u5ZxqNcJqT/Gr7bxruX7yTheSFNKfOBQsqG2\n7CsnulmB3U3zm1OiOh5GQuXvR3D1h4sABZknRWP/Mnu2yO1OTtKd68CnGTqK\nQFwUJB0kWPeiQ0YqSyCeykmwq9BF/pT4CqWB4ERaniW/RfKRJRZKvtstXXIt\nNauex9s0KeIZ3nCvNl07Exnr7biGLffMI/TYbSc7DT+wFfVucvfhgBXjs0Hs\nv0Mdg1Stl0mAzPdJ+zbvC6/Wgdj8CAwEDl6PtW+qXg1fkL2/geCEy3QPwqQB\nrNvWBH4qOujuFvsRkeEmThRPlxnEe1kvSe1DVJ2VOvJx4Y1q2BdvWxaawkLG\nuy9e37KIddrtMlnCTVapjj85rEeFNDhrumRjMTNkfJN/sD1ni9kLjKiHz2tC\nPUh5Qo8B7fVs7SQsjpjGFN/WJRXk7aAlPHeuMJIf0IazrzBmtWiuY3C0K6Cq\nzcDa\r\n=6LFJ\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","husky":{"hooks":{"pre-commit":"lint-staged"}},"types":"build/index.d.ts","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"7239c932ba871e34f76dd4f2ddefa21167b57648","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint --typescript lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=shellcheck,@types/jest","test":"npm run doc && catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc","check":"./scripts/check-filenames.sh && ./scripts/check-licenses.sh && ./scripts/check-deployable-lib.sh && shellcheck ./scripts/*.sh","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --typescript --fix lib test","postinstall":"if [ -z \"$CI\" ] && [ -d \".git\" ]; then husky install; fi"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --typescript --fix","npm run doc"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.20","semver":"^7.3.4","skhema":"^5.3.3","json-schema":"^0.3.0","@balena/jellyfish-logger":"^1.0.15"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^26.6.3","husky":"^5.0.9","sinon":"^9.2.4","deplint":"^1.1.3","ts-jest":"^26.5.1","typedoc":"^0.20.25","depcheck":"^1.3.1","shellcheck":"^0.4.4","typescript":"^4.1.5","@types/jest":"^26.0.20","lint-staged":"^10.5.4","@balena/lint":"^5.4.1","@types/sinon":"^9.0.10","@types/semver":"^7.3.4","catch-uncommitted":"^1.6.2"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_1.1.15_1613369408427_0.8791782920571376","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"1.1.16-renovate-non-major-ca5756520eb8a3ae03dfd05392194af486b37638":{"name":"@balena/jellyfish-plugin-base","version":"1.1.16-renovate-non-major-ca5756520eb8a3ae03dfd05392194af486b37638","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@1.1.16-renovate-non-major-ca5756520eb8a3ae03dfd05392194af486b37638","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"3de1fecf030011536d4abaf8f10d46385549d660","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-1.1.16-renovate-non-major-ca5756520eb8a3ae03dfd05392194af486b37638.tgz","fileCount":18,"integrity":"sha512-LIUBKp8wZjnAmRDQLY8T4RvgnIHr1IstnWqYN5RRPBch+uqGZDAazmjtRXishAggmzUTL2lu+3hnN33IMZko+Q==","signatures":[{"sig":"MEUCIQCTa5l/xAgl6NCr5i0AX9DK1TSxBENk35GfXD4GeKfgkwIgJLglL0hU0IS3VMx8Jb0uIBPUfoRQGWx0iNPU5bx2gHw=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":27103,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgKiZzCRA9TVsSAnZWagAAIXsP/0/TPEdvffAibf23rLsc\n09cC4e0kCHovaUeIKolPEtbtalwT/qZMHBsFyFMKPPf10ycmX8FWC7FZ01Rw\nMJaC3sHUaoGJJuFqAQ1r990wAUbDCjM5JDlCPRgHL0um/qF5T3TnexUkzmRC\nkhR3Vde60YwDe4ALOg1XswIIO1NahEpMNAKqh2tOVQgzEq2Ty8FaF51itFFu\n9yNt8LyLJch8kKdr6w+7c9TK5kxPfJJ8VrwEwEqzB9xxIJXsHLpobhcH6/sR\nVTme8+/dR/AAiRenpOqr2wBFRM2vNX/O0WA5udXV2mVPpCYa+WDzrKeWnv0V\n1r86tdcHtDJ2Lp1WUri8IeRdxaplhmDjP5RAAfBSjeu9jhOgGOVayARMp/Qm\nzSLkbBW2YBZk4e3OkRISP3rOq7SYDk5ifp0v5/huE1NeBmc2W2QR6os9NsR2\nLrF9ZL9WM23Ar6Bys4qNK1RnjDK+Thec8Pz5wmofWJh2TXPHl2RVgvZ/6vMu\nkf2PL3RY9xRqJCZ87VCakANSYK3CX7hFpiadGL5i0F2LjssgUv9brS45tj4E\nvM9fYlAO3Hz6YxUgHGXrR4y+p/VBkvr323Oxcd7F+MFSaCDdf0XY8Z/jyZqu\nO4f2ZZU6xP4HWWr6O0dhHE/keJ4N8wCxTJM9XltVa1nlz75vr63UEiAwVYIG\ntE2R\r\n=Vj9I\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","husky":{"hooks":{"pre-commit":"lint-staged"}},"types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"ca5756520eb8a3ae03dfd05392194af486b37638","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint --typescript lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=shellcheck,@types/jest","test":"npm run doc && catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc","check":"./scripts/check-filenames.sh && ./scripts/check-licenses.sh && ./scripts/check-deployable-lib.sh && shellcheck ./scripts/*.sh","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --typescript --fix lib test","postinstall":"if [ -z \"$CI\" ] && [ -d \".git\" ]; then husky install; fi"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --typescript --fix","npm run doc"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.20","semver":"^7.3.4","skhema":"^5.3.3","json-schema":"^0.3.0","@balena/jellyfish-logger":"^1.0.16"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^26.6.3","husky":"^5.0.9","sinon":"^9.2.4","deplint":"^1.1.3","ts-jest":"^26.5.1","typedoc":"^0.20.25","depcheck":"^1.3.1","shellcheck":"^0.4.4","typescript":"^4.1.5","@types/jest":"^26.0.20","lint-staged":"^10.5.4","@balena/lint":"^5.4.1","@types/sinon":"^9.0.10","@types/semver":"^7.3.4","catch-uncommitted":"^1.6.2"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_1.1.16-renovate-non-major-ca5756520eb8a3ae03dfd05392194af486b37638_1613375090868_0.8767646533840157","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"1.1.16-renovate-non-major-22d8acb85b6c5814c419844cc57fe3e14d4a4e66":{"name":"@balena/jellyfish-plugin-base","version":"1.1.16-renovate-non-major-22d8acb85b6c5814c419844cc57fe3e14d4a4e66","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@1.1.16-renovate-non-major-22d8acb85b6c5814c419844cc57fe3e14d4a4e66","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"b5199592a3811d4dc530d743517ee66fa5770f38","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-1.1.16-renovate-non-major-22d8acb85b6c5814c419844cc57fe3e14d4a4e66.tgz","fileCount":18,"integrity":"sha512-3539HhZuY5vB7omAyvMsqnOuULJIRT28cyxAldYMTQSCzA7zQwbMBB7UdrvAey01DtYtTfr+vKjY7I/p5VXNLA==","signatures":[{"sig":"MEYCIQCg/w6carQfdwtBsPccdkjGY82EA990/1u7D5AjpNtvkAIhANWIPanoFD2jA7KxGjT5vCxk+9LbIkd3Zc/5c+XUC3mq","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":27103,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgKkMcCRA9TVsSAnZWagAAjqwP+wQyrc6ExVonLppY3huj\nP1tMQYZyj6rdIRp/8tPmhJW3qbsB8CKlzG6h254vLOUVXAoyWnift3XPJxFA\nshrXyvNXBEMtZTcCQp4npp7DhBMOQSYR0/smt8gDmR8eUDqunrO9lilxTo0k\ne2kS2+zDqDAlNBv74CDfbT4DxjzH39zDw09oQp7TbbI5uyE0i6o1YyZ8WULV\n+mnR+CNjRGluLkXIxb+dvofwatM0NlylGv1J7Id95mSayiMXYD5MeVfVDQ5f\nDv8o8Ag8exfO0EDnp5c48hz0khR7wjSHyxZXfcjvgwqWIlRQtVm7Q8dEnTyp\nyDmLFn7bohHYF+xqTQ5gwL1jv2nc/z3GIfMWERkysf37rXucD6wI3PdhgIyO\nxrWotfiuuxPmD+qJJNflESRFxkUkPZA/ezosZ+0e6oYCH9wc8YG4qbWwQaYm\nOC/X4dlRKLj2dY/yq5xjf6kIiAk1LAwjxLw4MmLK+9MUDMYENvX1Nwas45vD\n5C/5hepPplXl3zPZrq99tx08KtuTFppS+oYNVqu4qDmWO3/Nq6EZ3sUFgnyA\nekL4h/RH9dofQEAVwPqkyBarq3BcGt0y4/yd6bvDIf6SdDtvMFBd4+ZP2njw\nXuvhKlTH9aTxDyS6REQykh0QOujnM1+mX6N9KvU7g4CFaNfO/p8+JmiYHQO7\nsaAc\r\n=+GJu\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","husky":{"hooks":{"pre-commit":"lint-staged"}},"types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"22d8acb85b6c5814c419844cc57fe3e14d4a4e66","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint --typescript lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=shellcheck,@types/jest","test":"npm run doc && catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc","check":"./scripts/check-filenames.sh && ./scripts/check-licenses.sh && ./scripts/check-deployable-lib.sh && shellcheck ./scripts/*.sh","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --typescript --fix lib test","postinstall":"if [ -z \"$CI\" ] && [ -d \".git\" ]; then husky install; fi"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --typescript --fix","npm run doc"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.20","semver":"^7.3.4","skhema":"^5.3.3","json-schema":"^0.3.0","@balena/jellyfish-logger":"^1.0.17"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^26.6.3","husky":"^5.0.9","sinon":"^9.2.4","deplint":"^1.1.3","ts-jest":"^26.5.1","typedoc":"^0.20.25","depcheck":"^1.3.1","shellcheck":"^0.4.4","typescript":"^4.1.5","@types/jest":"^26.0.20","lint-staged":"^10.5.4","@balena/lint":"^5.4.1","@types/sinon":"^9.0.10","@types/semver":"^7.3.4","catch-uncommitted":"^1.6.2"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_1.1.16-renovate-non-major-22d8acb85b6c5814c419844cc57fe3e14d4a4e66_1613382428366_0.9626738634749334","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"1.1.16":{"name":"@balena/jellyfish-plugin-base","version":"1.1.16","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@1.1.16","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"7b95ef006e1fb8864207a6493485715401de0b3e","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-1.1.16.tgz","fileCount":18,"integrity":"sha512-QQxuBIDvW1/MytjWiq8ybVuSUWF/etkC2nLmWHwkJgbH+iiK2nHtl4NCbx44AkDLXXW7u6d5HOsGSZRd+2ZlMA==","signatures":[{"sig":"MEUCIDTV0dTabtacfllxyLVarCaBX0jee1weqm48ZJZ4I577AiEAvKu6L2q8XQsrioXlvxtwTqR6pm8ntCh2bh2/YPYhl1Q=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":27043,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgKkPfCRA9TVsSAnZWagAAtCAQAJJz7SwYBdOWjmUD6v5Z\nKe2j/KI+CfqHFw91vyVaWD0d0ef1nTLewn9oNS7HudTGvWFKabDI9vsxRcGe\n3vIecI3L/Djw2CPiIsUKx6j2MSnqsCyksqfPzFt47lZK2xOWw7jU48iBGduY\nkebXk06BbJ6o6hmYIgVWNhUYDF8z9JK6f/KAYEt0YJg34ftMBwyE12V2OF77\nqoxI4CXlhuS1Y3G/x1gwheVKS6R7Nw9Rwg89IVC6PuIOKP7u5r5aWjzYxM2l\nL/YYiAvIEoqaVbWKbwwibllivD9mmmAILW+Vq48AWWA8lcvZfOgFNcePYQlF\nlOwls11B6R84vZzHspPkC0450EBCVWgnwn7wLkaOmdv0EFxToowsURiXGjFK\nyGlWXndDhZb3Oo5yehO2SINIzHnZPUqt9jt3TkvSFhyjtx6q+m9P9UiUj6ha\nHqTq/Oe2RLNP/Qkj/rEz00FU8Y176np7MShTXrHBcOV5pT3e7Uv6rprG9LNn\nch2IpG4qv6EWfLLN17U7nRRWgPkvFqc55MeYQaqgRNqIKfLpC1wMPRKPlL1S\nI+9zAzBoyKLbpo7Xy4AIs5nROs3PsOsUzP8bDBetZ89bu/lOzlRmjuGkmeW1\nWFHYf9PrykL24HHkExr6yJifBRFJDWTese92s2Iiqv0Klrax0RG/ktcYlxpW\nBeHg\r\n=EfbX\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","husky":{"hooks":{"pre-commit":"lint-staged"}},"types":"build/index.d.ts","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"d7d88d967bb0bb64f77a3679ba92bd192b9947b2","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint --typescript lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=shellcheck,@types/jest","test":"npm run doc && catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc","check":"./scripts/check-filenames.sh && ./scripts/check-licenses.sh && ./scripts/check-deployable-lib.sh && shellcheck ./scripts/*.sh","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --typescript --fix lib test","postinstall":"if [ -z \"$CI\" ] && [ -d \".git\" ]; then husky install; fi"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --typescript --fix","npm run doc"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.20","semver":"^7.3.4","skhema":"^5.3.3","json-schema":"^0.3.0","@balena/jellyfish-logger":"^1.0.17"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^26.6.3","husky":"^5.0.9","sinon":"^9.2.4","deplint":"^1.1.3","ts-jest":"^26.5.1","typedoc":"^0.20.25","depcheck":"^1.3.1","shellcheck":"^0.4.4","typescript":"^4.1.5","@types/jest":"^26.0.20","lint-staged":"^10.5.4","@balena/lint":"^5.4.1","@types/sinon":"^9.0.10","@types/semver":"^7.3.4","catch-uncommitted":"^1.6.2"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_1.1.16_1613382622864_0.847270642156642","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"1.2.0-update-types-d249869ae26573f812fabadbd20e2da76490df06":{"name":"@balena/jellyfish-plugin-base","version":"1.2.0-update-types-d249869ae26573f812fabadbd20e2da76490df06","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@1.2.0-update-types-d249869ae26573f812fabadbd20e2da76490df06","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"8674404dbe6d11e114d0048cdc62603c0dc4513a","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-1.2.0-update-types-d249869ae26573f812fabadbd20e2da76490df06.tgz","fileCount":18,"integrity":"sha512-qtU1R5QOJP6VJjsjhFIDSuBoOCbZHEBp/izX4SvYNbrOWwlEtBJrXJRMYAnRGbmKTSt3RPUVelSf8B6Dbsy06A==","signatures":[{"sig":"MEYCIQDGs2q/hVjNnuhvDe2a3+zqlwGuDwE373imYCri2U5nlwIhAOrV+ookwGOFF+RsPte+tcf0tKLfiuAEWAy9kXtk90WX","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":27217,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgKzSmCRA9TVsSAnZWagAAPf8P/AlcrmBpJuEznW5sK4kA\npaODOtR952l5ufgQtmSkM/jpOYtkx7AqL+mQsKBvAI1HHWwbYDeOY3DNNHT4\naFuJRKkU8PtlxSIVCc4DyGiJ8gCo/U8GQ4/sBQDDJl0YXhWjC8b+PUv73g0A\n+7Vwpk2TNTHC+W/4lGEbEf09DHyRt6lnRPVUBjpH32ABm6sjpa19s0JyL8jy\npjIiFu2Tx+kEqeTCmeKYbzE/ZtTWCz8nIngaKRks5vkMcPBQBTWm1cdbkXoP\nyeDcDmKipwlok3JzCqBfl2pwgW5ljDHfhQg8TeFfhascLWZfn/FaRo+7QHrR\nIQg6nDWyvBXVCOysD70c+jPP54pEvsT6WZxQ79HwKvjbYxMGIiRMkIDVA9OM\nersWmaTXXkCQsZqYSobb0W2oYCXvXijEsTYZLaZ+yKqziE5WCcoiwt0OXR10\ngoLSomoW2EUNuOnzQo6ATjggckDITfAvBKHaeg+6brdyQ8mU3goPmoXDidD1\ndqMexXtWGmK8D20f27rmlXTHo/e99kxfnEpqeEIi2xZ33+qhNrdxjNeh6GV7\nOY+Ne/UxKkKV2hjElqDblLjZYdiACuCC//IGRQXZQV1X8ckCM4g8VHaM0fl8\nChnr26Qm22yAAb0l+yVwEVMVPa/JCRN6JnCJg7wl554mTWM11mux/oGouAwh\nw3uC\r\n=+yxQ\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","husky":{"hooks":{"pre-commit":"lint-staged"}},"types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"d249869ae26573f812fabadbd20e2da76490df06","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint --typescript lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=shellcheck,@types/jest","test":"npm run doc && catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc","check":"./scripts/check-filenames.sh && ./scripts/check-licenses.sh && ./scripts/check-deployable-lib.sh && shellcheck ./scripts/*.sh","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --typescript --fix lib test","postinstall":"if [ -z \"$CI\" ] && [ -d \".git\" ]; then husky install; fi"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --typescript --fix","npm run doc"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.20","semver":"^7.3.4","skhema":"^5.3.3","json-schema":"^0.3.0","@balena/jellyfish-logger":"^1.0.17"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^26.6.3","husky":"^5.0.9","sinon":"^9.2.4","deplint":"^1.1.3","ts-jest":"^26.5.1","typedoc":"^0.20.25","depcheck":"^1.3.1","shellcheck":"^0.4.4","typescript":"^4.1.5","@types/jest":"^26.0.20","lint-staged":"^10.5.4","@balena/lint":"^5.4.1","@types/sinon":"^9.0.10","@types/semver":"^7.3.4","catch-uncommitted":"^1.6.2"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_1.2.0-update-types-d249869ae26573f812fabadbd20e2da76490df06_1613444262114_0.5491027782082818","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"1.2.0":{"name":"@balena/jellyfish-plugin-base","version":"1.2.0","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@1.2.0","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"c0acd6a1ef4be97bed434c26ff223272f2c50f4c","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-1.2.0.tgz","fileCount":18,"integrity":"sha512-x5oGN9tFi/vSFt9s6q5m6cOEoACSQ5JngaJTaYxTHdbO2QceowZ7yrZiPmsTtv3OX4zX5jqQwGNqFfIPfk9wLw==","signatures":[{"sig":"MEUCIBE5NskKZcAbyf8tpeMexYBtDczPMpuuVTswK4tP1zuDAiEAz+AsoySG0/33u+S/hYa6F/uW+VeLEQSJc1cJ5esolOg=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":27163,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgK0I1CRA9TVsSAnZWagAAujcP/i86U0WNVRtFnjc2yI6C\nwDdPtsHAzrbiOAnnBrpPeQgd7DFcleM3fehXEb4OM3dCbMZ/RDdeIf5aVI1T\ntalnbyXch7/FERTiddRHKi1SIPRUuQ4DuVvyjf5z6x0BENRaHrZnQADK1GNE\nXi/TFznezbc4s5kMUEsQI6EtjuwimykeCF9a43ATuN29zwpg/HJ3n6FINTuT\nA9tMQO6i1jfRXNLNo3mQmuhRgC/Zw+/0dS5IgUmY9bw7lGIXp+hThjZod74v\n30SFzUnCGrEwXjXmjiNenPsr93FEH8vYPvtQbDM9xAUmbj6fnzGgxuXlAaIh\nWofXwbEGkB/PRusvOuGjLDUs6rMVuvrsiIoZpm4evd5i84ciwUqrQdxUdLa5\no6RWz7QBciG+MZwMNC7ovYVFwKry4KEtxpvu4Sp5RYupzFMlvGi+7v5fjfLI\n2TZDgn/xKLjcgFQGWMsCjCCqoAR1PxyxeMeboY+FEWlSVXqb5rKqHsyXdlz0\nfrAQ+akPhYsXyhAGUBRWpAE4PBorI9mspYFe9v2PXZEOtQqpXWdAuYBxJyzq\nWvm014E+GMrwTgrpQamkKRlfhwCdL9pwPuVvilmPLadH54oRyV9ArYUkWtIp\nbWHexaNDMkub1Ft4ll/BK1Xg+UhjEoPQqVOw/ylGGs+0e/aauFjmgdfjx0bJ\ngPgf\r\n=efis\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","husky":{"hooks":{"pre-commit":"lint-staged"}},"types":"build/index.d.ts","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"f51b46e75ac6ce0ed2e4f0a9194b588b56d3195f","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint --typescript lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=shellcheck,@types/jest","test":"npm run doc && catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc","check":"./scripts/check-filenames.sh && ./scripts/check-licenses.sh && ./scripts/check-deployable-lib.sh && shellcheck ./scripts/*.sh","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --typescript --fix lib test","postinstall":"if [ -z \"$CI\" ] && [ -d \".git\" ]; then husky install; fi"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --typescript --fix","npm run doc"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.20","semver":"^7.3.4","skhema":"^5.3.3","json-schema":"^0.3.0","@balena/jellyfish-logger":"^1.0.17"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^26.6.3","husky":"^5.0.9","sinon":"^9.2.4","deplint":"^1.1.3","ts-jest":"^26.5.1","typedoc":"^0.20.25","depcheck":"^1.3.1","shellcheck":"^0.4.4","typescript":"^4.1.5","@types/jest":"^26.0.20","lint-staged":"^10.5.4","@balena/lint":"^5.4.1","@types/sinon":"^9.0.10","@types/semver":"^7.3.4","catch-uncommitted":"^1.6.2"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_1.2.0_1613447732699_0.25094803066968563","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"1.2.1-renovate-non-major-fa70a544456a6617311bba3a3ea50ab05cf02b40":{"name":"@balena/jellyfish-plugin-base","version":"1.2.1-renovate-non-major-fa70a544456a6617311bba3a3ea50ab05cf02b40","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@1.2.1-renovate-non-major-fa70a544456a6617311bba3a3ea50ab05cf02b40","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"22da85d15709882fdb1f942215e31272a4c3df9a","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-1.2.1-renovate-non-major-fa70a544456a6617311bba3a3ea50ab05cf02b40.tgz","fileCount":18,"integrity":"sha512-SILquFuQM3nlyVD+dyFoL2u/NHbvhdA4NTG7eaMA8jgky4Uxo6Or2x+EBAOJ1xkXa1GQSomzlWmBjwajtyHyfw==","signatures":[{"sig":"MEQCIGbmW2cnGBh/Fn/Pb72/0dHzRF5DC5UA5MBJpk5/jTYPAiAmH3p5Ql9XXo0AVfY19ym3pCqJjXbiQi++NTOGMzmT2Q==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":27328,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgK2XqCRA9TVsSAnZWagAABIIP/0quJNcDyU/SC93Zp7Mq\nEC7dH/NELpei+UGu8e6gQgR8wc4LnqyppxE8+VxQeuCqh2bOTktohyjkZ95L\nuCiWEEFmmpZDL82Uz74rB3rSxThB+JW+1oYCGHsTZtbZ9J8Q5rsS0zYJh1np\naIXl0j1nzcu67vhwEIV4TdPDDXuptuSYcy2SxApbvePOzG+/D9UZS7dlSWj2\nAPQKGaKMbn7xwNS977YJl4dX+hA/MuN1Yz7uzR9lCefQEF6wSl+Q+x0IzRVn\nQyVqYIGMmBiwf208TJc6blzdz7835yPPPKDZsFj63jINvm/Pa+G6SOLsB8Ov\nQ4B22bSDEsS+WNOFhF7p3KolRslVraHoozzRpbPO+dragELyft+Z23/bpdwX\nVz8dKql0VnBve3jM3CQtp/NfhClmTeej0o4s8tCV9HGvOHBU7Bu844nFwy2Q\nwW+hArtTu9XO6wEbsoSb4TMlsJrhuEMjoJk0VJIAbriaC2rPqIsWWiPLXgts\nTaM9k1PEwRwCk2dCveVRc+yCy9qxJYSbwGBxbXbmyTxUYz9tVVJYnu02/n7+\nQmrVW3s1wTxIeBxOZXQByucO96K8L2YvVmkdM0bx3WOZIs9dSYsC6rvTgo+H\nSdeSqATS4oAD2gxfrixKjhYR2Wy0Yxz7ZMWd6FHLZot/vIbhqFxgoBcywa+R\n9KYx\r\n=ANY+\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","husky":{"hooks":{"pre-commit":"lint-staged"}},"types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"fa70a544456a6617311bba3a3ea50ab05cf02b40","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint --typescript lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=shellcheck,@types/jest","test":"npm run doc && catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc","check":"./scripts/check-filenames.sh && ./scripts/check-licenses.sh && ./scripts/check-deployable-lib.sh && shellcheck ./scripts/*.sh","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --typescript --fix lib test","postinstall":"if [ -z \"$CI\" ] && [ -d \".git\" ]; then husky install; fi"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --typescript --fix","npm run doc"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.20","semver":"^7.3.4","skhema":"^5.3.3","json-schema":"^0.3.0","@balena/jellyfish-logger":"^1.0.18"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^26.6.3","husky":"^5.0.9","sinon":"^9.2.4","deplint":"^1.1.3","ts-jest":"^26.5.1","typedoc":"^0.20.25","depcheck":"^1.3.1","shellcheck":"^0.4.4","typescript":"^4.1.5","@types/jest":"^26.0.20","lint-staged":"^10.5.4","@balena/lint":"^5.4.1","@types/sinon":"^9.0.10","@types/semver":"^7.3.4","catch-uncommitted":"^1.6.2"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_1.2.1-renovate-non-major-fa70a544456a6617311bba3a3ea50ab05cf02b40_1613456874258_0.1272668469056819","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"1.2.1":{"name":"@balena/jellyfish-plugin-base","version":"1.2.1","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@1.2.1","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"8ea882abbb90cb6ce3bb9eeba57ee4450d40b8ea","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-1.2.1.tgz","fileCount":18,"integrity":"sha512-H4xyWL8tc/4uh7EkWiVLrl4XDE/i+bHUtbUzOKGfsWG8AoEj3w/yjukjRyXw0pFLRAzulTswXRDQbyqdjfGUKw==","signatures":[{"sig":"MEQCIQCwiENvoOLwXhSGexOBDc5Q+wX9wQE2mA9xrmI4HvcoYQIfQcm8Jjv0KYeJCl/yPybg4ydBv7PExt0zUQw3R0XKOw==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":27268,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgK2blCRA9TVsSAnZWagAARsAP/3pprL6+hw561Suereem\nlkHw5Jw3OSIc03+K+4Rlbq4qaxWKJkmNTIgmfIMljRZLp4xnPKMdjmKxP7mr\nANchfoAV7FhR3YiYDO4I6xtzVMouQfxN14P/DvnA7q0n5YaKPX70V6dQ1oVu\n84GeVNQkI5QF4xk1Se8tuEbv6kDeIvcTWcckvqOdExPGpVW1Iyhx96+Ds7wJ\nYj9KyGUhUUUd8T2yBe90nDEaNyadn8U2ol9DjThhGBaHD465Y53Ki7xn1PID\niXn6LaQvZB5ItjBlWoxprMZLsf2v6Lgw/bZAGkY8+PxKjBnGKDhuypSDNOY6\nSI1b41BtYW9qxqzqxpzldAhSGbRfaSGB2SQFsegOvBn1q0q1qqiCOrQ9ZDD3\nLkzNzTbmpLHBhZcXrQl+Jlv/oVmSX5dk+My821Dk2GnCtjsWFNeLVyUeqhyc\nlbVRfyPocRX2ELWz1BzeHJUIZ4XH2Ouyt4iY/kyaQAOGuqdHCaNJDb5khTzt\n1waG/Za482o7GOy0JawU04y1zfqZApS9TWzKZMZAvelE0iohppFUSWX3LE3C\nHUC3PON3arA3Xq55bXJ7d5ExxaGdo4/wJ3Y2G3qmLSCwMWYJOQLA5P1tSb18\n3CHr6INrWAgpqGSYlcI0qjqc5dXomSn/q8ikB49TtsnpacfXnszirxe2g8iA\ne7l7\r\n=Qmya\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","husky":{"hooks":{"pre-commit":"lint-staged"}},"types":"build/index.d.ts","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"92434376f8a370a48ac86aaa0830fbd755baddfd","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint --typescript lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=shellcheck,@types/jest","test":"npm run doc && catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc","check":"./scripts/check-filenames.sh && ./scripts/check-licenses.sh && ./scripts/check-deployable-lib.sh && shellcheck ./scripts/*.sh","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --typescript --fix lib test","postinstall":"if [ -z \"$CI\" ] && [ -d \".git\" ]; then husky install; fi"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --typescript --fix","npm run doc"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.20","semver":"^7.3.4","skhema":"^5.3.3","json-schema":"^0.3.0","@balena/jellyfish-logger":"^1.0.18"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^26.6.3","husky":"^5.0.9","sinon":"^9.2.4","deplint":"^1.1.3","ts-jest":"^26.5.1","typedoc":"^0.20.25","depcheck":"^1.3.1","shellcheck":"^0.4.4","typescript":"^4.1.5","@types/jest":"^26.0.20","lint-staged":"^10.5.4","@balena/lint":"^5.4.1","@types/sinon":"^9.0.10","@types/semver":"^7.3.4","catch-uncommitted":"^1.6.2"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_1.2.1_1613457125097_0.42021869123666167","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"1.2.2-renovate-non-major-f5ff1a35cc3461b6f35a2815528aa250d1fd23f0":{"name":"@balena/jellyfish-plugin-base","version":"1.2.2-renovate-non-major-f5ff1a35cc3461b6f35a2815528aa250d1fd23f0","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@1.2.2-renovate-non-major-f5ff1a35cc3461b6f35a2815528aa250d1fd23f0","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"17cc3d7ffde483feb2cee603be1bac3ea407345e","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-1.2.2-renovate-non-major-f5ff1a35cc3461b6f35a2815528aa250d1fd23f0.tgz","fileCount":18,"integrity":"sha512-A/1KMzWGYCG67Rvo/55goL2kn8/UB06UW3CrSx6SeJ7L6+WpeYyQ6Bb5e/VBniPRJn/C5W2APrO6cSjjj56lPA==","signatures":[{"sig":"MEYCIQCp46H2Aam9bHwxkRyK+naHyajf4z/Wg+jEXTkSd+sU6wIhAKFzSYAS1A+AiInVuVXey6RIjDy6xqoMmRSboIo4bcry","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":27433,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgK7YqCRA9TVsSAnZWagAALAAP/AswisIb+MzTHWn9b8NF\ncFzztRZoUBIbFHMfsp7jrErAIKPp25pV3J77FnEp4Dhp31RcBY7gvEojrIUa\nlC0q8zvLXt9awBTH00S2h5UZNCKpMLEVUprTkVi1Nfosxvt4i8eMMLcAdyRL\njHbofrTzF/gqaBYqmwnGY77x3S/NuXn2e4bSqIe6fFVQEjnWiY7VS7NftPhz\nDBtAjT/xOHHk+vWgDxJTJdF6hdQKZhK0pA0ksA6cIzn9Er2lJh4RISDitBBO\n3cT/NC+4fS3w/8cjKEiAEU45lFG8i2gEsiPTEkM+meP3ItF+Ddp6NOaLOxqe\nEo2HV0yNYzy8r8GP541b/UHKD9W4NfFqgctj87yYn5yu48j8NigBZ0mRVVp2\njgY0eJk23m8RMKr3dCHPjUM1dw1Xrt17RYxG1a5bgNJujPVJzvFaUzJJtZcZ\nMlxhe6fjAX4KwXE3XiFz9hUiHHjQq0z1i0w5fX0+u4mR8nwGS8Y8FMNeNng8\nYL6sTv7KUKysmV+TUvZtzYrJLeZFMcmJQKnvqlxPtdeZ6QoIuJkbQkGAAAwU\n8l6BomA7KRYbmmcJatcyCbBQrBk8xYGAtx81IfKyF4phE/kA6RyDkAckqPW5\nKxLBnhV48ev8hVTgm6nYcn19iZ/S1dCgvs9TNPs4IaJ01fYkPq4Bju+F8dE0\nh8fo\r\n=bCJr\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","husky":{"hooks":{"pre-commit":"lint-staged"}},"types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"f5ff1a35cc3461b6f35a2815528aa250d1fd23f0","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint --typescript lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=shellcheck,@types/jest","test":"npm run doc && catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc","check":"./scripts/check-filenames.sh && ./scripts/check-licenses.sh && ./scripts/check-deployable-lib.sh && shellcheck ./scripts/*.sh","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --typescript --fix lib test","postinstall":"if [ -z \"$CI\" ] && [ -d \".git\" ]; then husky install; fi"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --typescript --fix","npm run doc"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.20","semver":"^7.3.4","skhema":"^5.3.3","json-schema":"^0.3.0","@balena/jellyfish-logger":"^1.0.19"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^26.6.3","husky":"^5.0.9","sinon":"^9.2.4","deplint":"^1.1.3","ts-jest":"^26.5.1","typedoc":"^0.20.25","depcheck":"^1.3.1","shellcheck":"^0.4.4","typescript":"^4.1.5","@types/jest":"^26.0.20","lint-staged":"^10.5.4","@balena/lint":"^5.4.1","@types/sinon":"^9.0.10","@types/semver":"^7.3.4","catch-uncommitted":"^1.6.2"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_1.2.2-renovate-non-major-f5ff1a35cc3461b6f35a2815528aa250d1fd23f0_1613477418107_0.18879206150298078","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"1.2.2":{"name":"@balena/jellyfish-plugin-base","version":"1.2.2","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@1.2.2","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"ceeedba62d2f69981aaf18b090d5dde083179667","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-1.2.2.tgz","fileCount":18,"integrity":"sha512-uGXhxc+Xg6aIEBdDF0kP6rD/Y7BaZtgcW9/PWXgU1GLXKhjE7U0XWHOZMz5c+uIyqr5fPnlCs9+jI6zNk8C6Og==","signatures":[{"sig":"MEUCIQCoTpdE2AvvWAkeVtXhzRUAxUxqpFEaImpUn6gIqJFfKwIgMrJm939O8QI+5pSgs5vB34FpIUK1f2yRgWOqMREZmOs=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":27373,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgK7bSCRA9TVsSAnZWagAALWMP+QAAIp4OFCVGiL6527Sl\nHOGiXXQ1cxISNc9fEcXwaCTtm1wp5JFb7nOoM5Hdp3Ejbv+EdwW0xvd4NSfJ\nMbDtQ6VX79Lp/bkFHeWxxQLZ4xNwLazdJSea80SuRTRZA3yshxuIR/O87WoF\nKdrJGbYRs77wznqCQzbI9F4LdjnF4ZEr716+07UVez1NdfgDE30RcKhS7a6e\nsN8MqTcONR/SJ192gSPTsaDC5fQ+Q7DJmam0+AVKvvy/E19oXLT1xPu/lRzD\n5YGSxgBHwskQWp6U3do1opZ4PL91qNXKSVsgLeK4IL1G1Z+O9xzjp0KGJWYx\nvdPwSf83GSMEOqTEAp9iBhACOpDldKfkZmqCwcc4Qb/ktMvTzuPUmosJ0txT\ngtEsrjNkESTweUEtOFbkZxUKqXbbo3ZsqiCclohdc53EGsZFTL8oIPUFKiJ8\nICH+R+fBzQNC9UoaFAYT1tEItW7vG3VTuoQpanmiSSb3s8MQGSgoLKyVfP26\nEVgFPhcQdHDSPZyXSRtacMH3auj+rP3Emx6v25Ju7cWRjJMlZrTepfj71Cq0\nSCvY9ssEACr4tRPIpgRQnLlTgwMPKgpC6qCeZlkZU+j3+7UAetMbC/EQ9kAW\ni1N8IZLtxBvhwyV7Zwf879wv1YEAca9JBV4sJ6AckgNQSt39TZqAmxSBt/YR\ntaME\r\n=BaOM\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","husky":{"hooks":{"pre-commit":"lint-staged"}},"types":"build/index.d.ts","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"c1b217ff445583e858016453ca3b4310f77d9821","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint --typescript lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=shellcheck,@types/jest","test":"npm run doc && catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc","check":"./scripts/check-filenames.sh && ./scripts/check-licenses.sh && ./scripts/check-deployable-lib.sh && shellcheck ./scripts/*.sh","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --typescript --fix lib test","postinstall":"if [ -z \"$CI\" ] && [ -d \".git\" ]; then husky install; fi"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --typescript --fix","npm run doc"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.20","semver":"^7.3.4","skhema":"^5.3.3","json-schema":"^0.3.0","@balena/jellyfish-logger":"^1.0.19"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^26.6.3","husky":"^5.0.9","sinon":"^9.2.4","deplint":"^1.1.3","ts-jest":"^26.5.1","typedoc":"^0.20.25","depcheck":"^1.3.1","shellcheck":"^0.4.4","typescript":"^4.1.5","@types/jest":"^26.0.20","lint-staged":"^10.5.4","@balena/lint":"^5.4.1","@types/sinon":"^9.0.10","@types/semver":"^7.3.4","catch-uncommitted":"^1.6.2"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_1.2.2_1613477586150_0.8394409353327079","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"1.2.3-renovate-non-major-e011be0bd7158b8712daca53c77b7ef24143defa":{"name":"@balena/jellyfish-plugin-base","version":"1.2.3-renovate-non-major-e011be0bd7158b8712daca53c77b7ef24143defa","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@1.2.3-renovate-non-major-e011be0bd7158b8712daca53c77b7ef24143defa","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"2e0904b839b7ad937c296b97164952f30e480d28","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-1.2.3-renovate-non-major-e011be0bd7158b8712daca53c77b7ef24143defa.tgz","fileCount":18,"integrity":"sha512-pncxmsUOftcODD6/12/lo6mCZIdYbU69x3aX1Xg5J62JqG0wYSBp2dCIL1jKEhkHnvO9GEDqZ0uFD+W3zXqfwQ==","signatures":[{"sig":"MEQCIDTWj+dqe3Kz9GsgCDFyNMszxwEF2QTKa80UKmAZc3n3AiBSE+mW8egiKGTOic6vmNvCroOK/rtT4OYy5IVBL8w18g==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":27501,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgK/ZFCRA9TVsSAnZWagAA1c4QAICtQP+cNIFVw6nwx07f\nn8HH1TgLlh0b6etXM0c+bIbx+8bRMT/CoZJ9l15kCZbI4vA6Sa/x7Xabw0b8\niP804gv6z7FXRQPWv16ZTqJgTyYFUuOjtskT4JCL7T9EbQbCqcDUYq8FiF/i\nYdpv/d/uYAfG4+HnqRwDkCupSNG6ENcz4PlGOHmKNJDoypGVW8Lf5TxC3Ex1\npeGf5iAnoQ9ov5TFvrX3S5w21yDXvHQRvc7nqODtSXnPRe1Kg5sQsYw69vSk\nhXWAWoTk/zhVFrcmROhAlkzzAVgAl0HsYJ5IDlkXDt/CDUsD39rQBTWT5v4e\n6yhUI0ljORSVQkC7Bqnmld9SLDvIjmUYqLcw9aq9JeqiDa+pHaJ2gS6fUYT8\nQN3JK9L1gMOGhOI5dxO3LB2SkvsMesEjj4c40qN2KwFWMCokkFMIgnIrNysP\ntPVsx7NShrr50zWHGVjzcTb1gAeYXi+2Ldo6pR92npuI6w+prcTAqCgXuAR3\ngphS4bNczUO5qqhx+mmc9ZGmJ2sQ4q8r2Zv1RVASXdfjcAnmqDwAoq/kFrVg\nnXDjwgRlGyaJdT3MpnY4vxWcVjliz6D8K2LvC0T47uT+ZxKRNvaJsbNG1HUK\nHTEEZPZQYKGrT75q1g9kBy16BysfdzWB1mISME5INQK688e845ANdaOffJg5\nMII+\r\n=4HWK\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","husky":{"hooks":{"pre-commit":"lint-staged"}},"types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"e011be0bd7158b8712daca53c77b7ef24143defa","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint --typescript lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=shellcheck,@types/jest","test":"npm run doc && catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc","check":"./scripts/check-filenames.sh && ./scripts/check-licenses.sh && ./scripts/check-deployable-lib.sh && shellcheck ./scripts/*.sh","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --typescript --fix lib test","postinstall":"if [ -z \"$CI\" ] && [ -d \".git\" ]; then husky install; fi"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --typescript --fix","npm run doc"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.20","semver":"^7.3.4","skhema":"^5.3.3","json-schema":"^0.3.0","@balena/jellyfish-logger":"^1.0.20"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^26.6.3","husky":"^5.0.9","sinon":"^9.2.4","deplint":"^1.1.3","ts-jest":"^26.5.1","typedoc":"^0.20.25","depcheck":"^1.4.0","shellcheck":"^0.4.4","typescript":"^4.1.5","@types/jest":"^26.0.20","lint-staged":"^10.5.4","@balena/lint":"^5.4.1","@types/sinon":"^9.0.10","@types/semver":"^7.3.4","catch-uncommitted":"^1.6.2"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_1.2.3-renovate-non-major-e011be0bd7158b8712daca53c77b7ef24143defa_1613493828634_0.2620210847101081","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"1.2.3":{"name":"@balena/jellyfish-plugin-base","version":"1.2.3","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@1.2.3","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"8a5859be61e0f317933d895fbdf8a609c2f5af3d","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-1.2.3.tgz","fileCount":18,"integrity":"sha512-e1Zc8uNMm7PGAkDaNa4DLM0KmaGSxR80AwKnEpIYMTxgqklmG7AuqbTlI51/eg4cGDmGUT2AJjHBpn9KG5Zs0w==","signatures":[{"sig":"MEYCIQD9V22BfeL2M8mDIy3ISWAjF1OOEglggJh7fXnbG4s0kwIhAMlPULHmNxIAnYqBg/kPFDzWmUwYw4q8kH6trOEfHabw","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":27441,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgK/cbCRA9TVsSAnZWagAAmxIP/3QofR0FIf0mgG9LCJPw\nS8cRgwKBHnaNlxXbd50G+m4RQnvAk0Hswjgac005U6ytEsvk1dXG82WyLoTn\nYdm9g00OBNxJILAC8D8SaQRJ67flGmJrwUfpF7bySYUguk2NQd4JkwTzGpY7\n6E4WTLULRux50xEzTD/x2oRJrHoJ8tuS1gWkTBRfURjGpfgs53uPP9hFwnm4\nJSVblRcHD1j/y9HrPyCOQWlyKJHxoH5xBEiWJuAEElNM6AzGnLWacMzQho45\ndmDQJR3dMSDMUhnLcfO7xpUWM2RBS6GMtMuMRiB7oQh9q1Fj8FnSMWluVaZ0\ntkOa8NL10Ov5BtCknhnlsjFMpHe14Z6DsI8sQc0Z4qAvhmylSfc/6YR+/voX\nBWEVK9h/FebGeWxMT1XM+Dj37JZAWqj03+2qehAvbMVAMblaTtz/snLWFcJv\n7Lk49eL9X+Rhu6GDXiAOfDDTSCqziJZGOpv92dBsd2uprUsL5AHiv/m0ggVy\niXZozyzpbegNBqFLHjSybsiXr+tkaeZmMWHVgnOkUcCp53t52/21fsQ7s50B\nmuuYuVXVeExAXdvBFprZhN6Qik9F6vnYhx0zD7c8QNV9fpXJCZ2c3+Xd7Hdu\nKyN2LoWxkzdyydo5jqn07+FA2vGtFgM28jOi36uGkpBcW2I7K9gNjjzidezn\ny8yC\r\n=zCLw\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","husky":{"hooks":{"pre-commit":"lint-staged"}},"types":"build/index.d.ts","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"acd35bee6d301fd59a1a9c22b200042ebcbffca4","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint --typescript lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=shellcheck,@types/jest","test":"npm run doc && catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc","check":"./scripts/check-filenames.sh && ./scripts/check-licenses.sh && ./scripts/check-deployable-lib.sh && shellcheck ./scripts/*.sh","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --typescript --fix lib test","postinstall":"if [ -z \"$CI\" ] && [ -d \".git\" ]; then husky install; fi"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --typescript --fix","npm run doc"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.20","semver":"^7.3.4","skhema":"^5.3.3","json-schema":"^0.3.0","@balena/jellyfish-logger":"^1.0.20"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^26.6.3","husky":"^5.0.9","sinon":"^9.2.4","deplint":"^1.1.3","ts-jest":"^26.5.1","typedoc":"^0.20.25","depcheck":"^1.4.0","shellcheck":"^0.4.4","typescript":"^4.1.5","@types/jest":"^26.0.20","lint-staged":"^10.5.4","@balena/lint":"^5.4.1","@types/sinon":"^9.0.10","@types/semver":"^7.3.4","catch-uncommitted":"^1.6.2"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_1.2.3_1613494043410_0.21080591927457437","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"1.2.4-renovate-non-major-f3cabff8dba2a605b8d0bec993a9b651f9f17250":{"name":"@balena/jellyfish-plugin-base","version":"1.2.4-renovate-non-major-f3cabff8dba2a605b8d0bec993a9b651f9f17250","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@1.2.4-renovate-non-major-f3cabff8dba2a605b8d0bec993a9b651f9f17250","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"145d1a266b53fbe1f63480fa52ae109d18075590","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-1.2.4-renovate-non-major-f3cabff8dba2a605b8d0bec993a9b651f9f17250.tgz","fileCount":18,"integrity":"sha512-rmvJT+zNW6JP+xc/RBASYr+MNe5dwOPeSBaH+YuGXafuY5YcR9X4b8rxIDwVXQqqk0FC2gm8iWZEu6ODWww37A==","signatures":[{"sig":"MEQCIE1FsuASNyYpFTrhM/KEyUk2OOkJXXUtVX7Zf0rTcrGKAiAKoErUSKgeSpcD219f7InDgEi6xFoRz7bjJKcXw5Jt4A==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":27606,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgLCqTCRA9TVsSAnZWagAA1C0QAISVslDtFAvteJaCeeNZ\n6xqu/mdnaLlIQXK3RK0Y0F7RHD4uIE3Zolb1UUAzMyCsJRreL4M4S6X7PVDn\n9bGT/f7c42O9Ai1+0AFbcDI8e0GayJbGlInrStv0lb6r+K3zJNF7crJjjNwk\nUOjShFeILlwP2nZhAsqguXkodmu4snIzXiHCzzU5y10pdi06yE8JbE6YJlCy\nTEOF7DQAjDSAQyx+aOH/lYtum1nxzc5yZb3RgQgeB9HYE2WF1FyV1xoxpXJ+\nBHEcBu4dEOfhnMfbQ0vQiV06ZbvyjCG7Uw4nCDru437dkwbUfDcDVlc6OtuS\n832JiRNZZcb9aOhckyhY3P2UAVGE1fNFmk4gY+a2E/4tmDRlOVbDMAyDGe+O\nYvkb/NtVTNTYWUoGIi79jyE0wzupM2T002yMRs/6V1mcU2s/4e9fWRKA29kc\nXIhdLTzNH0/TMjG/21jHY5zOdmhWW1rViM3EszeTk3nHJMm/sF3oNIYLYBpB\naDaNLSMzxENYGUh/3r5pIsGIWbARZuEv4DkPTy5YdGTv4+ygqe4oO3GKS8tS\nm5EzfJQcZa7sk9ShACVvv8QHrVBGJcNw6LcuV2XdEo7Qhua2QS0xsv4yjlo+\npZbq6tV8UOYpnZmHBdQeofd/63qsdxGtM/miYkEDkxoc8mShkaxd7ns5OmEF\nwf/t\r\n=mYu+\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","husky":{"hooks":{"pre-commit":"lint-staged"}},"types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"f3cabff8dba2a605b8d0bec993a9b651f9f17250","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint --typescript lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=shellcheck,@types/jest","test":"npm run doc && catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc","check":"./scripts/check-filenames.sh && ./scripts/check-licenses.sh && ./scripts/check-deployable-lib.sh && shellcheck ./scripts/*.sh","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --typescript --fix lib test","postinstall":"if [ -z \"$CI\" ] && [ -d \".git\" ]; then husky install; fi"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --typescript --fix","npm run doc"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.20","semver":"^7.3.4","skhema":"^5.3.3","json-schema":"^0.3.0","@balena/jellyfish-logger":"^1.0.21"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^26.6.3","husky":"^5.0.9","sinon":"^9.2.4","deplint":"^1.1.3","ts-jest":"^26.5.1","typedoc":"^0.20.25","depcheck":"^1.4.0","shellcheck":"^0.4.4","typescript":"^4.1.5","@types/jest":"^26.0.20","lint-staged":"^10.5.4","@balena/lint":"^5.4.1","@types/sinon":"^9.0.10","@types/semver":"^7.3.4","catch-uncommitted":"^1.6.2"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_1.2.4-renovate-non-major-f3cabff8dba2a605b8d0bec993a9b651f9f17250_1613507219205_0.772701795131443","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"1.2.4":{"name":"@balena/jellyfish-plugin-base","version":"1.2.4","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@1.2.4","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"4ba505351e666df16cb43ae08d0ae49248cdff7a","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-1.2.4.tgz","fileCount":18,"integrity":"sha512-zpigy+3seRizqW8JvNiqi2/0N2UqsLkoZo4R/KcgykVEwrQoV482bK96pcGn+ao06WFwBA4x655KsosjFX3UCQ==","signatures":[{"sig":"MEUCIQDHgEYl642BfdQBEFyecD//8YmtyN2RTaozam3fFt2mJAIgEzEglvDkQwTWvJAb+aJeg5J9D/iEOhthZDh46H4hvoU=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":27546,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgLCtXCRA9TVsSAnZWagAA5QQP/12+8B4nnUqWUf4R3x5E\nLbaiVxRjIgxEb0q5pU5OViyfmtaCgXruDdkWVIQoVNmgs8oyPvIpJdcVuWWZ\nddKhSldRH0YBXAtuVBNWnAgPeu5H1X8XzlCKndR/cA8YX3cfCJj3u9A6Hmf7\nrJcYdNPUidet9tEZsZIQY+DG+s4xP6EgHfWS3WPk8QcYDUNYzVcmf0Y+ppvW\nvLJkcEez5O+elq8CjcCrVEEI0oUNBM1lHXEEV0R2woRWRp2pdMSKXMgLJ2M7\nWLb+oLmjh1dqc/xoNn71NQSsMHsgS15fB2hsvbQ+0yFkV3lYUYZ7LsQSaLFv\nC1VWn/b2EsD+apW/acEdNiq9AxSahW/CbVqKBsecyuMsbn4eBvn//noD0NZ0\nbd4zGj1IC+flihOwyXtDDsTZZ822oJWfbq/50mS4hhizP7UC+54aUV3C/8Y6\n92oXVULC1WeHx2FHerw4S+TT4jxEzEBV0kMre/qq/XGcJN83e/1rZxkixvk8\nPAEZ3Kf07eM1s8enZ2l8HCnC66JYP7PgglHV3nUvArP0DMQoPS/ED6NwmGEV\nZfI4wasgWSRsXa5bPrKo2XUQM8KEjMbU+0P0FHYp6D6Yj2jhcbWvMowWWtlE\njbKje8+h4OQY6se6pm1fIQ1unBXoJ1CwQg4SZ3PrUMejSgLVPZ+TRz+xK5d4\nYuih\r\n=AQFs\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","husky":{"hooks":{"pre-commit":"lint-staged"}},"types":"build/index.d.ts","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"4cac3b1096feea56c9214abea17aca36eebf723a","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint --typescript lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=shellcheck,@types/jest","test":"npm run doc && catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc","check":"./scripts/check-filenames.sh && ./scripts/check-licenses.sh && ./scripts/check-deployable-lib.sh && shellcheck ./scripts/*.sh","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --typescript --fix lib test","postinstall":"if [ -z \"$CI\" ] && [ -d \".git\" ]; then husky install; fi"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --typescript --fix","npm run doc"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.20","semver":"^7.3.4","skhema":"^5.3.3","json-schema":"^0.3.0","@balena/jellyfish-logger":"^1.0.21"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^26.6.3","husky":"^5.0.9","sinon":"^9.2.4","deplint":"^1.1.3","ts-jest":"^26.5.1","typedoc":"^0.20.25","depcheck":"^1.4.0","shellcheck":"^0.4.4","typescript":"^4.1.5","@types/jest":"^26.0.20","lint-staged":"^10.5.4","@balena/lint":"^5.4.1","@types/sinon":"^9.0.10","@types/semver":"^7.3.4","catch-uncommitted":"^1.6.2"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_1.2.4_1613507415097_0.5957035642672359","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"1.2.5-renovate-non-major-c1ad2166c8385e91130ff90a6798085781c07a7d":{"name":"@balena/jellyfish-plugin-base","version":"1.2.5-renovate-non-major-c1ad2166c8385e91130ff90a6798085781c07a7d","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@1.2.5-renovate-non-major-c1ad2166c8385e91130ff90a6798085781c07a7d","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"8843fa5047b52e03bd7d17f82f0a874a6d7f9a32","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-1.2.5-renovate-non-major-c1ad2166c8385e91130ff90a6798085781c07a7d.tgz","fileCount":18,"integrity":"sha512-bxSxfMUoUxMSeMGvM1wKSHeDOIebAnHKqbi68ZNgjoc/o7eEyJJYnx+UA4IH8eG2eMLBmiJIX34GHv20LfM8lg==","signatures":[{"sig":"MEUCIEpeH3loLvMda0s5ui9VeKhw/0D4smpd0zP5RWJb1NXYAiEAphC2f67EtP3bMahbsw5pwiPdvWctjnjPazwwpjrGcL0=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":27711,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgLGE3CRA9TVsSAnZWagAAIb8P/067pPz65djucfXr/85H\nIWKW5T5c690EWy0OBCTSgFPrY3LFJqOkG0NHX5XftqKwGWmXzJ1d3Oz+1sg+\nW5iEqxbk0bZG03KC5jxjcEsaYy6NE5sM5rUTnXwt3pfHALXevrjtYINLB2KO\nxRA7yq4r8ZsmAgfN4FxaStK86b8ZhP1WDv5/d7vozD3l5eSpxO3ZSjhpiyu1\nTdv63gla5R8iHzXyACd2QFr7LAhDPWIB/Xyk08IOtGH8EZBf2E5TPkd1WStG\nzUJB0PUSEiI6e62Osk5qbC7xYpbUzdTFuc3p0D9SYgLuxbBVYsabytvUcPcI\nPFFuTG3kG1g4x8+HG5J9+rHmDjjIAK0BUKiwGNLy1GyFt8ifDHty8wIYFLt7\nIsD26KjgYhPoLh0EXF5ukqlIIEdFL91+/44zNdpzyOO8aG/x/cL/nczK50fU\n3+hXQY+GEo++rdRPoF21dq5EICZviVJ4DcIKg33Ne/fM5oFC31VKYa5E0ME5\nyzduVlN1UZ+sElNHnqVzBzSR2NBk9Qm2zPiNMWmGDbQqKgQLdgz5QDZ8K7Ja\nrp5dlvtN5fApGFJxKZEKiWw9hNak6dwGzaP+49XeeTSb4qvmJir7idc/eaov\nxEVALc4BJMiNF4jTesyOJ0k2OL9cPa5LxuEvtjg0kf4rzWsn/WXFRGaybDAC\nr9cJ\r\n=TWPJ\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","husky":{"hooks":{"pre-commit":"lint-staged"}},"types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"c1ad2166c8385e91130ff90a6798085781c07a7d","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint --typescript lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=shellcheck,@types/jest","test":"npm run doc && catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc","check":"./scripts/check-filenames.sh && ./scripts/check-licenses.sh && ./scripts/check-deployable-lib.sh && shellcheck ./scripts/*.sh","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --typescript --fix lib test","postinstall":"if [ -z \"$CI\" ] && [ -d \".git\" ]; then husky install; fi"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --typescript --fix","npm run doc"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.20","semver":"^7.3.4","skhema":"^5.3.3","json-schema":"^0.3.0","@balena/jellyfish-logger":"^1.0.22"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^26.6.3","husky":"^5.0.9","sinon":"^9.2.4","deplint":"^1.1.3","ts-jest":"^26.5.1","typedoc":"^0.20.25","depcheck":"^1.4.0","shellcheck":"^0.4.4","typescript":"^4.1.5","@types/jest":"^26.0.20","lint-staged":"^10.5.4","@balena/lint":"^5.4.1","@types/sinon":"^9.0.10","@types/semver":"^7.3.4","catch-uncommitted":"^1.6.2"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_1.2.5-renovate-non-major-c1ad2166c8385e91130ff90a6798085781c07a7d_1613521206685_0.34643400383419154","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"1.2.5":{"name":"@balena/jellyfish-plugin-base","version":"1.2.5","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@1.2.5","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"ee48b289e45a2710435a22c37e5de0a1017dfc11","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-1.2.5.tgz","fileCount":18,"integrity":"sha512-rLF+Ck9vy+bpASUG/kA1BYBLoDhuocTxyinNRg8gSW12OLSxRD5AENNF1TQBoT2ZlE0E8TrU5ook152Ns3/b2w==","signatures":[{"sig":"MEYCIQCZ9HYzF2LSWAA42IIlG2Ou4EMMx76jyunUxbxSOYM9IAIhALjMDFDYzJBYabs5oA19K+pOw3zF9I341oTdcd10e80y","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":27651,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgLGH4CRA9TVsSAnZWagAAS2AP/1QXPVWasFgPec0J/jrH\nvmjkXjPV16UoyJiNlXSiOZu12P73icQcyf9M6WxfxIAqc66XEIlMsG0IK/rs\n3C/EJ4wqczPcUE65UPU7KnAt6V9a4sACkC3cm2UGto5ev3TCbU4edcozadQh\nTtfBCfMeKDiPfkx0KnBeVyUGx6t8oX4dEFLOHVtc1+DH6PPsxz2rzxJ4AbIJ\nLbSkcJFFRPE67rRVByUK2lVbyQbhJ0D3+uv59KFirXXB/nsJ7yRAomDQIJQs\n+aSni3CyHU6pWbWk+GNMo5mybcQtit02uuUoHo4VtpI/Q7AFfNposGtEEtX8\nehGbPAQaiUYUOmAtlD3+MBPGtUJDmuCr/NUg6ZfFDlVrsZdruAT8VUgGfAEG\n5EMXjkICAMPusQso4QYyf3R+DFOjoK/RgRkZfDsUpD1A2NNTM/QneNWe9axI\nCUnoqKfpq+Gvswh13daLGZRMeJI+Mq+XNkR8dp5xOImk2BYREwDNciWhjG6y\n+BEN+zF3812lH3NMDStILbhY/BTztD3vvBDbH1RkZHzaiNaFkpW0OqeeE0Bb\nQTiWJEr9LrebGXqrD91FZkbzQnJmhlBWJh1jr6JWAJ1cAt08uf6GYE/huZR9\nKGotJc0crb2Hu0Cq/odF6AgIAWuT6wd9nectqorJTTA0r7SsdwVGA0z2Ymxu\nbNNm\r\n=MH5n\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","husky":{"hooks":{"pre-commit":"lint-staged"}},"types":"build/index.d.ts","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"08e5a69997ef1e39c7baba1617303f982e6e78e3","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint --typescript lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=shellcheck,@types/jest","test":"npm run doc && catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc","check":"./scripts/check-filenames.sh && ./scripts/check-licenses.sh && ./scripts/check-deployable-lib.sh && shellcheck ./scripts/*.sh","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --typescript --fix lib test","postinstall":"if [ -z \"$CI\" ] && [ -d \".git\" ]; then husky install; fi"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --typescript --fix","npm run doc"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.20","semver":"^7.3.4","skhema":"^5.3.3","json-schema":"^0.3.0","@balena/jellyfish-logger":"^1.0.22"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^26.6.3","husky":"^5.0.9","sinon":"^9.2.4","deplint":"^1.1.3","ts-jest":"^26.5.1","typedoc":"^0.20.25","depcheck":"^1.4.0","shellcheck":"^0.4.4","typescript":"^4.1.5","@types/jest":"^26.0.20","lint-staged":"^10.5.4","@balena/lint":"^5.4.1","@types/sinon":"^9.0.10","@types/semver":"^7.3.4","catch-uncommitted":"^1.6.2"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_1.2.5_1613521400060_0.831952272140247","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"1.2.6-renovate-non-major-00e65cfafce0cd4426409786998fdc0904d17696":{"name":"@balena/jellyfish-plugin-base","version":"1.2.6-renovate-non-major-00e65cfafce0cd4426409786998fdc0904d17696","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@1.2.6-renovate-non-major-00e65cfafce0cd4426409786998fdc0904d17696","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"b8b0b2abbb2e49bae2b1eafc08f4cccd60158cbc","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-1.2.6-renovate-non-major-00e65cfafce0cd4426409786998fdc0904d17696.tgz","fileCount":18,"integrity":"sha512-cRkgPyyKryZ/T4fGirVqOUceCCf9ZdpanBi9zTen4i3Xbp+laFe5kabP55eY2L3+kfd2c53FCfy0lZXCOxDDLA==","signatures":[{"sig":"MEUCIEEeYEFmOxEDcLCWSNc0axd0Y2fSBa3TJ07uUsl/ANyWAiEApRY4V08xOUvfc5ObeuwlXd21gPVs5OwEroz0+HC4p3w=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":27816,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgLlvnCRA9TVsSAnZWagAAVk0P/0Kj0FdNAo/wxYs3wfF8\nLVCpYL+cB2NT58t9uPGCzOUnDrAzGFFNMNbfzM+4AABCibs3Y1baxhA51slS\nuzaKa1iVBH5c3fzHaK6GDsAWUvQ9sJR7/G2eimeI7rOYJ0JfCoWHAvRwBj2Q\nwZ/CyhJ4xE2vYssHULf6JYyrjjfGObfM7GArtucGgtdvJ6gMPDf7+EGc7KKh\nBvrGi7a3ZvtGW2q42reRwRl5B6Ehz3hpMQ0JzTKTAeCBK7wnm7R2bVfWW8G9\n21+TKQcPbuHG9pYB5O3mmSKkzIP+lKjcCQAJU+W9Lg7PkL+8DhR+jvZl4hwi\nXUa2g3VKMsp1jVc8hWXH4LiyoEqlTEEV5+HiXJYpDH04BRbtkvyEJAuQWe3T\nTJAVzlcPuyvwNLYhK5oxg+xBiwSEMFCxJVH83Wc9FEN0+4k3URhzKs8n8P0e\nA9udgp9irc+gzhV1HMVjkjGTr6UjUnru5u8oHqMEMesVGNBYCCNRXSlneDz9\nO+w1FUppuf/+2Ronu8EAZbj8Ml6jqLWMoKeXkCgsZ8ra+k/bk6PLT2k09Odn\n7RvrI0SCIwuUIP3z6VGQTCh8fzdvptbr0P2SXMUh0uZw/Du0xGQw1AyViYpm\nQLdNTDBfEi+rt1fRO4APOO1LYBlH7UQAoNt2HZD5kvJsF68fBixbJETErwYP\nEfFT\r\n=165Z\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","husky":{"hooks":{"pre-commit":"lint-staged"}},"types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"00e65cfafce0cd4426409786998fdc0904d17696","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint --typescript lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=shellcheck,@types/jest","test":"npm run doc && catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc","check":"./scripts/check-filenames.sh && ./scripts/check-licenses.sh && ./scripts/check-deployable-lib.sh && shellcheck ./scripts/*.sh","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --typescript --fix lib test","postinstall":"if [ -z \"$CI\" ] && [ -d \".git\" ]; then husky install; fi"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --typescript --fix","npm run doc"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.20","semver":"^7.3.4","skhema":"^5.3.3","json-schema":"^0.3.0","@balena/jellyfish-logger":"^1.0.23"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^26.6.3","husky":"^5.0.9","sinon":"^9.2.4","deplint":"^1.1.3","ts-jest":"^26.5.1","typedoc":"^0.20.25","depcheck":"^1.4.0","shellcheck":"^0.4.4","typescript":"^4.1.5","@types/jest":"^26.0.20","lint-staged":"^10.5.4","@balena/lint":"^5.4.1","@types/sinon":"^9.0.10","@types/semver":"^7.3.4","catch-uncommitted":"^1.6.2"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_1.2.6-renovate-non-major-00e65cfafce0cd4426409786998fdc0904d17696_1613650918610_0.9983107682888239","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"1.2.6":{"name":"@balena/jellyfish-plugin-base","version":"1.2.6","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@1.2.6","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"089709b52e69bdff0457e35fb461e74a3b0ff712","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-1.2.6.tgz","fileCount":18,"integrity":"sha512-W2HArFg/WnTfW9HqLSdIk3fC0rP8TZ6emsE+Cv/S4Ewf1GLd0XaU8F0KZw2cmdB7/IjhS9/DTX5EZX4bXAiD2A==","signatures":[{"sig":"MEQCIBTvXKUF3XDctJ/zQvIlzzdpqMEGYyco5q9xoR2aLj91AiBk3lru06xhHjRbZ8gayDPRi8TCmtB+Ik5QnJsm1UJPWQ==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":27756,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgLlypCRA9TVsSAnZWagAAxCkP/iGpcMPHRLTTJYdeh456\nAqfmnOl1tTK4dqA9NjtwZPRe7u5rn6kmf6j/gY3mM5zyvUkPTCDGHud8b+E6\n4FMM9t6JBF6cSZI0z3Ndem+epGMs6z0ATtorxNXgap+cFGLD8tMbxWjJ8JBx\npGd068nQ77kPvSheIVa7tb87Yi+gE1zN0rO0JD5JwkKAAgePMHlX0SBITySF\ndIkv2SHYLIFiZIw0Rm4DipY/q7tZqWblalV2YAyuLLP0M+gpSPS1zITXgQc7\nBpGR7JXIfz6HSGnjUdNlow45qJV0tRYcKCXwKJgT4HcugVIkTvB9lhoyyyXn\n+XQbXR65pr6RsLYjhhdqjVWX+q/W88n/A4UW1tPkH09uBPA8Ou6AjOKDUgQ3\n0E/02zec2b0EwKxxFp+DTrh6Srs81Gd2TU3cGi390wE9PF1gCvInEzaMRPkT\nbOkQjOr57+iEJ4cfOb/JYTy3oL57bGOcHBDfelLW2l/gqpeH2xIjivDdgKbB\ngQ48Rndxygn22gSwwwgXHbxcFTpwNDooK25B/4jmlkeJ60nDBy5D4sYgkzOJ\n9F7X8jfFNd7YpFpLhTdEXdFEuLnWq8OP9SNSVlAJ3jlF1Al4XYZKFk8MJxFc\n2WAbWFBRJCWJYvPMkCLF0ZYVLhiFq3SZ+TFkkwVgdBqGW1B8P7Ph0Z8QeSS8\napcX\r\n=axJO\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","husky":{"hooks":{"pre-commit":"lint-staged"}},"types":"build/index.d.ts","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"cc1239db71309177fec781ca47630e2a509e624c","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint --typescript lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=shellcheck,@types/jest","test":"npm run doc && catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc","check":"./scripts/check-filenames.sh && ./scripts/check-licenses.sh && ./scripts/check-deployable-lib.sh && shellcheck ./scripts/*.sh","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --typescript --fix lib test","postinstall":"if [ -z \"$CI\" ] && [ -d \".git\" ]; then husky install; fi"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --typescript --fix","npm run doc"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.20","semver":"^7.3.4","skhema":"^5.3.3","json-schema":"^0.3.0","@balena/jellyfish-logger":"^1.0.23"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^26.6.3","husky":"^5.0.9","sinon":"^9.2.4","deplint":"^1.1.3","ts-jest":"^26.5.1","typedoc":"^0.20.25","depcheck":"^1.4.0","shellcheck":"^0.4.4","typescript":"^4.1.5","@types/jest":"^26.0.20","lint-staged":"^10.5.4","@balena/lint":"^5.4.1","@types/sinon":"^9.0.10","@types/semver":"^7.3.4","catch-uncommitted":"^1.6.2"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_1.2.6_1613651113086_0.8832777730928454","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"1.2.7-renovate-non-major-c55c8876980385c5e883aa66b896f7132cf02f03":{"name":"@balena/jellyfish-plugin-base","version":"1.2.7-renovate-non-major-c55c8876980385c5e883aa66b896f7132cf02f03","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@1.2.7-renovate-non-major-c55c8876980385c5e883aa66b896f7132cf02f03","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"8dd0bb107a633f209b0ca65be846b677fee26ea3","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-1.2.7-renovate-non-major-c55c8876980385c5e883aa66b896f7132cf02f03.tgz","fileCount":18,"integrity":"sha512-cCEgQ7gX0nwoVrEVTWLQDRxLs55NOIuVdeJ5ZMRekydnb3H0TEGAcx30iODEFzGMunbhuXtT5MAuqGOJKbjwcw==","signatures":[{"sig":"MEUCIDf8sBTchNVFlltp1pMstCZlu4k268VP+fdccb1FVtu+AiEAnj9jsyMSRViOcn0RJKEfE+oH6iy8cEnhHt98pQ8Dt3E=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":27905,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgMJPHCRA9TVsSAnZWagAAhY4P/iVZuBpyVLpjXKK7XoqB\ntFDZiSuYLi1QmUpcctE5l78HS91xiw9mE94FqMQ697QxNEPZdHQwHlP0AEvl\nP95Z9fuf0wz6Wda4ZEbIdhzznmPmDgKIUa9fZ2+SVN7ydR3P+mkjEgigdqbr\nRUGcawE6ImmGw3QjOPM3JUH70OqLEY9Y1LY1YnhPvt2MDFrem15nx3b5Apud\noj/y6CnrZWqXFhmZhsv6RS/pkzCZB/7sAIouuCXpeusD/GFrkgvmkLhQR5bM\ndnhzvnd2FOwcZqVAMSgkzgWukJ4++2gsYwO5H14qsf5cTxt9bcHLijmMNE5Q\nUg47weGCcFeo1WtZ1SBYHUW2mMhpDHVdl9hLW79ZOngOHO39aYINbfQ3YTXz\nlhnVLU6rcr089BpbX1P8FJ2StuxHCJ24CHB/c86nXGmgltqVmKWDn/etRrAl\nqfHLgFSuVIY67seCF9y9q8cdw5hteNgve2mr9IaW4Fa7c5J83mu1LT5RN+eA\nPXKYAYNjeh6PFLSDbF7mbfui2HIAdDVWCi+6Vd9hCTmKMjJmy54QwCfqLKfq\nMTEL1+f/8H2dr9ffrfgsg2heKYWvSz+04gas+uAlNlPMo4IscJeFEaBaffAT\nCUul+L/49MOfNpp7S8YsmTy7X/9qGCaQpoIjmEK1IIXY0hMdjh0fThuBBpfk\nZqin\r\n=xRhh\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","husky":{"hooks":{"pre-commit":"lint-staged"}},"types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"c55c8876980385c5e883aa66b896f7132cf02f03","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint --typescript lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=shellcheck,@types/jest","test":"npm run doc && catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc","check":"./scripts/check-filenames.sh && ./scripts/check-licenses.sh && ./scripts/check-deployable-lib.sh && shellcheck ./scripts/*.sh","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --typescript --fix lib test","postinstall":"if [ -z \"$CI\" ] && [ -d \".git\" ]; then husky install; fi"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --typescript --fix","npm run doc"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.20","semver":"^7.3.4","skhema":"^5.3.3","json-schema":"^0.3.0","@balena/jellyfish-logger":"^1.0.23"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^26.6.3","husky":"^5.0.9","sinon":"^9.2.4","deplint":"^1.1.3","ts-jest":"^26.5.1","typedoc":"^0.20.26","depcheck":"^1.4.0","shellcheck":"^0.4.4","typescript":"^4.1.5","@types/jest":"^26.0.20","lint-staged":"^10.5.4","@balena/lint":"^5.4.1","@types/sinon":"^9.0.10","@types/semver":"^7.3.4","catch-uncommitted":"^1.6.2"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_1.2.7-renovate-non-major-c55c8876980385c5e883aa66b896f7132cf02f03_1613796294634_0.36730910643336223","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"1.2.7":{"name":"@balena/jellyfish-plugin-base","version":"1.2.7","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@1.2.7","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"50b63a593ce67ee692651ad5868eee224c23624b","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-1.2.7.tgz","fileCount":18,"integrity":"sha512-aCIaBBkDkloJ57lUqEbi8n0R7V6d2jXWb+G9mhsr9XCYziV87oLIj/3wLf3VjPTYCXA1VoR6GQrKuqblYgHspQ==","signatures":[{"sig":"MEQCIA0o2AsYMeMSKwb3fo8wYKV2eZdET0eljoRv5UQxzK15AiAMz20SLF4kRxeyz3ROqEQKtdYbmZXwOl950NJFmZQSiw==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":27845,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgMJSRCRA9TVsSAnZWagAAnXwP/ifrlQO9zc/A8651pmEl\n4c8EsSQRjzrwmOgS9tYis10ZGKR4/bK7gCEvw81oOR0KYScnRVZ5nRt0QQoy\nTdqbIfsqvdsJ9WcSTUFeSu/OTlQH/rj4ufAdiWXRCahmPdiTJuLWgRy+VXwv\nvSL+NR3XjT6k6HKOsj/5vF1gQvIjtnSMCajy3/GC27rNGVZCZN24qv+3tXiB\nvFrxZCMoZNK/YaV6cSs/8t2iiwFlqnD33O1jCx8X4aFJQ4ClMcCMsQG+43do\naxbeObEA9+Unyl9EvQLt65NOfxuMODgnBplOF4zcf1ih7bnVHNdbn4ERODzQ\nZ6JrAgFWmTsFUd8y7Zuz/q6ZktNew2fA9hGeVEA8S+KnCx/qfoJwkdZxA1rE\nQOa3+dEhCUzQ6lqulwnQLLDM3r3QuG5BbbohqRPfF89TmQ4WnepU0h4B928P\nJM64yKDUb1GzVPx6XyqZy+EUhAfdZHY25Wv5g3Qt7Q6w8O10GeMhMw6cbClh\nh6IKp0tInmymqqC3tGstQUGlS4E1amI8eA+9xZsWqgPkbXHB0TvQwM8DVsjv\nH8HAAjx+q9tS2Byb7QZEvPbLVjMTSJRfU1wrfCgRig66Rp6ERnDvKselv7Qn\nlvM5tuDZAG7JNIHQvE9tx1J01xGuq/WmHOJZ8iCwyKzZt8ElolDMilX48x0D\nVASj\r\n=BcEW\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","husky":{"hooks":{"pre-commit":"lint-staged"}},"types":"build/index.d.ts","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"2506c61b07f37983a10711f4416738e999ac3da9","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint --typescript lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=shellcheck,@types/jest","test":"npm run doc && catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc","check":"./scripts/check-filenames.sh && ./scripts/check-licenses.sh && ./scripts/check-deployable-lib.sh && shellcheck ./scripts/*.sh","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --typescript --fix lib test","postinstall":"if [ -z \"$CI\" ] && [ -d \".git\" ]; then husky install; fi"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --typescript --fix","npm run doc"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.20","semver":"^7.3.4","skhema":"^5.3.3","json-schema":"^0.3.0","@balena/jellyfish-logger":"^1.0.23"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^26.6.3","husky":"^5.0.9","sinon":"^9.2.4","deplint":"^1.1.3","ts-jest":"^26.5.1","typedoc":"^0.20.26","depcheck":"^1.4.0","shellcheck":"^0.4.4","typescript":"^4.1.5","@types/jest":"^26.0.20","lint-staged":"^10.5.4","@balena/lint":"^5.4.1","@types/sinon":"^9.0.10","@types/semver":"^7.3.4","catch-uncommitted":"^1.6.2"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_1.2.7_1613796496815_0.4605714713394502","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"1.2.8-add-changelog-yml-8720ee2d3f8e0a6a323c9d643f430b22ea1de4ad":{"name":"@balena/jellyfish-plugin-base","version":"1.2.8-add-changelog-yml-8720ee2d3f8e0a6a323c9d643f430b22ea1de4ad","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@1.2.8-add-changelog-yml-8720ee2d3f8e0a6a323c9d643f430b22ea1de4ad","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"67ee942e38e97cbb19f166def9e13fdf1b2f08fd","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-1.2.8-add-changelog-yml-8720ee2d3f8e0a6a323c9d643f430b22ea1de4ad.tgz","fileCount":18,"integrity":"sha512-mUoXpCWDA8xFoi25CwqNGokOdpX7KtCnKftIpCPpxWTjJRoqLijeQ87YMZxO6viLT6+p+SBC5Dd8kR6yVDN33w==","signatures":[{"sig":"MEQCIBOKFHJjjinuYxQMz0Z+wHxMIHAt1yfX9K0qvjhjkbraAiAu62k8Wmty4iLm9Wx+U6aHOoeHXB8OJk2KPoTl5DRaKA==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":27974,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgMNl6CRA9TVsSAnZWagAA1hsP/0Nbz2hlkYguy9D0lx8f\n2DbIuRv8sivNk9Xct7ZhbDdoDc1BPDtNw3t8tTJiL4XBiy/WuUTlkux9Abgn\nMjZwkVISO8QyKwLjsqrlXfBLRP8RM9wD35XczF1S6cXkW0E/IAlTy2K5CdO+\nrhly4oi6Ik/5nff4+HHJNWtqrSOGovxZFpWnFEQT2FlH8TQEyqgsqUWy/KNW\npnr7F60/uG8QM0TZ07pIkAfFWVMReop2HlVRGLzhTAXFJvU7ZqQLpyc01TZg\n+ymlMsoDR+FILRgANuLL4WQ+c7SriQwIvpZpEMFx44tJaofQJZ1hvRFkIqlz\nBLO3eMR9Xp8Re7114jaOOOjLqx8qDNLflmxzAWnQvxmxvNDMQOSZPVmgs/N5\n3RuBleNgnFRTSvwBoRtH45LnQcrqlsjwrnMp/eEdsH5A3xDYoz1Wzb3y82ZH\n3QeOJR4HJB+eHGGOjeB908ncvvhwubE11Oa4VYmTexYt/lqxjGHP/BpwVQqU\nXjqoqgRnxWYRVjfyn/8ZKyzGtRQ2+Tmf6d4AZZQz1rj757Zg7/e0yPJ5RgzU\nqRzluZ1qLnEWt4jdvDbC7bu/Vi4SnkA1X9PxIcN7u7lvZS0s6ambEHF/5L65\nmZndwBkrCL19FSVYNuuQPriKVF76INnNiub3xpNCUlWpzMcc7mbKK3YxroDr\nRsmO\r\n=O9JY\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","husky":{"hooks":{"pre-commit":"lint-staged"}},"types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"8720ee2d3f8e0a6a323c9d643f430b22ea1de4ad","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint --typescript lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=shellcheck,@types/jest","test":"npm run doc && catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc","check":"./scripts/check-filenames.sh && ./scripts/check-licenses.sh && ./scripts/check-deployable-lib.sh && shellcheck ./scripts/*.sh","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --typescript --fix lib test","postinstall":"if [ -z \"$CI\" ] && [ -d \".git\" ]; then husky install; fi"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --typescript --fix","npm run doc"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.20","semver":"^7.3.4","skhema":"^5.3.3","json-schema":"^0.3.0","@balena/jellyfish-logger":"^1.0.23"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^26.6.3","husky":"^5.0.9","sinon":"^9.2.4","deplint":"^1.1.3","ts-jest":"^26.5.1","typedoc":"^0.20.26","depcheck":"^1.4.0","shellcheck":"^0.4.4","typescript":"^4.1.5","@types/jest":"^26.0.20","lint-staged":"^10.5.4","@balena/lint":"^5.4.1","@types/sinon":"^9.0.10","@types/semver":"^7.3.4","catch-uncommitted":"^1.6.2"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_1.2.8-add-changelog-yml-8720ee2d3f8e0a6a323c9d643f430b22ea1de4ad_1613814138542_0.506703400483816","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"1.2.8":{"name":"@balena/jellyfish-plugin-base","version":"1.2.8","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@1.2.8","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"0a8193cf46d0e2fc4d128851ce07aa7c20976158","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-1.2.8.tgz","fileCount":18,"integrity":"sha512-6AxhKP3oj1GdTMHr3G57J6AKc2QAVzAbzGi+yBjO/m9mesuGLoWJAb5v/9BCsqZb1Kk3Ji4c2Iv8BjD5YN2ofw==","signatures":[{"sig":"MEQCIF4TN8IqAmxXToT5wA8/8K9Z4tgY1OLVSY7NV9l4W/RiAiBA4LFTtax155K9plpn+Cjn+hnx+lSPD8bgOaJ4u+8TOA==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":27915,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgMNo6CRA9TVsSAnZWagAA3zoP/0RQkZTjAv+c1s64KDoz\nDFcrfU8NY+6GGSvt/TCq6Mw+LyKyyrKvtGIVaOQfp6FSAJH90V7Tsra0pEWJ\nEytTYRfIAZ+t+C5x5hDXk2H7kw+8x6WpYVr/jgWsYaBu8mMyA2ZnFSm7NG1R\nvToc4G4GKSfE0/JPnkPWXqBnJVpGlF33Z2q2qePB6+Z/nb81A3AhFZHcy/VN\ncj5c/NtrQBYZbx2Tnf/NoVtz/KB27Ntna/uEYiHiA/8QH6xnnJ7Q7N1eShZy\nLfi6gUqjfl1k5URJtPcpeEdSn9Hiq39zT5zE9fK77FDuNPp98ieXGKr/f5zR\ndZAkRosy3J67hazGKo92CS6P4uLHVa43bGiM44lcld9uOompA/3FFDNCSnQS\n+iEIsR67xedfxEe8ZSfA8CrHOrLdpG7lje7KcQ8iOKK80pfXehCoBvOSQxeY\nwb8RlLmKbn6GtItPaYZD/mTThoEpKvgvalDW9acUjSfjbWrF9cyhodBX6QoJ\ncaJzqd9TpsTk9PAuP8Vzwzn6zlt0KF7HBRMgFKrhZQKjIdW0UbNwN1X3deq1\nQTcLpNpnf9z/+uWM+ysG516yg4+GriJ2F+TUu4ZCTaRQTIJ3JehyzeafgGHZ\ng0usy6Lva48TU86tSTCtlPVwPxw05a0nzAmeV6t2HxvubwRwbNTWsBXFUUa9\nBixs\r\n=3Oed\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","husky":{"hooks":{"pre-commit":"lint-staged"}},"types":"build/index.d.ts","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"4663320df7c34800c9a8e2a843f9f247e9809477","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint --typescript lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=shellcheck,@types/jest","test":"npm run doc && catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc","check":"./scripts/check-filenames.sh && ./scripts/check-licenses.sh && ./scripts/check-deployable-lib.sh && shellcheck ./scripts/*.sh","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --typescript --fix lib test","postinstall":"if [ -z \"$CI\" ] && [ -d \".git\" ]; then husky install; fi"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --typescript --fix","npm run doc"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.20","semver":"^7.3.4","skhema":"^5.3.3","json-schema":"^0.3.0","@balena/jellyfish-logger":"^1.0.23"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^26.6.3","husky":"^5.0.9","sinon":"^9.2.4","deplint":"^1.1.3","ts-jest":"^26.5.1","typedoc":"^0.20.26","depcheck":"^1.4.0","shellcheck":"^0.4.4","typescript":"^4.1.5","@types/jest":"^26.0.20","lint-staged":"^10.5.4","@balena/lint":"^5.4.1","@types/sinon":"^9.0.10","@types/semver":"^7.3.4","catch-uncommitted":"^1.6.2"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_1.2.8_1613814329796_0.6779856272791787","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"1.2.9-renovate-non-major-b8e75555e8e17e563d248d0b2c932ab7e82f83f6":{"name":"@balena/jellyfish-plugin-base","version":"1.2.9-renovate-non-major-b8e75555e8e17e563d248d0b2c932ab7e82f83f6","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@1.2.9-renovate-non-major-b8e75555e8e17e563d248d0b2c932ab7e82f83f6","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"78daa3951fc3e27a420df114b2640ff95a913c3d","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-1.2.9-renovate-non-major-b8e75555e8e17e563d248d0b2c932ab7e82f83f6.tgz","fileCount":18,"integrity":"sha512-b4nUq5qxUaqVsuBtirL8SDbFik+mLw370cuCjkcM+NnqcPpyk9YSr5a194Wmm2q96lYzG033WcMcpOireX/zgg==","signatures":[{"sig":"MEYCIQCbM6TXwWkvu9ueOndw6kdUcsAq/QBPBnF3MdegrG8eQQIhAM+HrL/nbuNIHqMA98X9rIbXMK8vilAP9KXa8zg//4Tj","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":28077,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgMNtzCRA9TVsSAnZWagAAJ0MQAIO6sFvd7D5YD+P4ygkE\nOSwhrtzF+6YRycRtTmel34OVMjsraFXFMo3CuuzWLeCa2N35CziFJr5TvbMy\nmP4XfqYFCMvYRU+fRHsiXeWzJxNIUtKZybpFaLLjxfvr5svS0h6f5Caj2/Jj\n608urOIjn5tsVEWRE/FvU3kn8k/+ZmEpn4MlaNwETl/fDQ8jNuzenyA5hNkL\nt+bfYPlK9SaL0TAB3/MybJ/aT4MqGh3ew4hhSSpARyTKSdy9nEBwwBg2En8K\nx4vJJZRGJtdhdmnFPjuO5S9/LlkbEJHn/GXetjpMV2SxsQLwPk654iuyz+dz\n9W+lhkCSUUjy4KjCviIFADd3c6POpTSoU57o18SloQWbyyE4VUqVIZqwELej\naA2qGNTzrKfmPqkZXv3xRYjEC70oTHG3dgC2WOEU/wdbah+Yp9c2UduGPxsD\nUFgTLDNVQDchKT6467ZYvRATV2zXOHCdSZlUpk2p3mKBra0XTZOJeC+H9crq\nRH901kpsKBVde9a+99QX9ioe09u/sRKPDE9IfvqJf0o7FtIWD7DNFj4/emdk\n96315+Gtr5MBEqtkxUhMbIJHfa5eeWUDgMXC66d3wpjUJXusQwmLjP0LyEcO\n8sMmEh2qEtN/VpwN2BTBRquj06/OqZu/9RyreRsxDDfUwzh0vHxp+NA6mfsf\ntmjU\r\n=bLCb\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","husky":{"hooks":{"pre-commit":"lint-staged"}},"types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"b8e75555e8e17e563d248d0b2c932ab7e82f83f6","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint --typescript lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=shellcheck,@types/jest","test":"npm run doc && catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc","check":"./scripts/check-filenames.sh && ./scripts/check-licenses.sh && ./scripts/check-deployable-lib.sh && shellcheck ./scripts/*.sh","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --typescript --fix lib test","postinstall":"if [ -z \"$CI\" ] && [ -d \".git\" ]; then husky install; fi"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --typescript --fix","npm run doc"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.20","semver":"^7.3.4","skhema":"^5.3.3","json-schema":"^0.3.0","@balena/jellyfish-logger":"^1.0.25"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^26.6.3","husky":"^5.0.9","sinon":"^9.2.4","deplint":"^1.1.3","ts-jest":"^26.5.1","typedoc":"^0.20.26","depcheck":"^1.4.0","shellcheck":"^0.4.4","typescript":"^4.1.5","@types/jest":"^26.0.20","lint-staged":"^10.5.4","@balena/lint":"^5.4.1","@types/sinon":"^9.0.10","@types/semver":"^7.3.4","catch-uncommitted":"^1.6.2"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_1.2.9-renovate-non-major-b8e75555e8e17e563d248d0b2c932ab7e82f83f6_1613814643215_0.49627315616833667","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"1.2.9":{"name":"@balena/jellyfish-plugin-base","version":"1.2.9","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@1.2.9","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"c7a34cb15e5df522c81edf2a231998806cdaeb3c","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-1.2.9.tgz","fileCount":18,"integrity":"sha512-77yKm6HqV7mShFrnN6gXIt5nBpFmhdPeqTdhUr0UQp4J9zDO6FUdZi+vctuwCPUWO/4Z7suXpRSPlQgFaR/Yaw==","signatures":[{"sig":"MEQCIHkrJGQg5Vf274qJI7eyRKt++5eZy+x+heShEu5ups2bAiBjAhXgSJ59UkiK3S55xVZE9aaOdW6hU/iG4cnyQ+B/XA==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":28017,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgMNwrCRA9TVsSAnZWagAA+kwP/iDROHPsNR39LanPFTZM\nh0lr/ABl50ufhWj5bUi3nLFlh/QDV6aKkEH1zZ+cRHG+o2ydt0fROC7g6WTG\nIGXx5CD7pQ0k8tWck/ZEvlCR1zi4HYhriUpWXc5e1QBsrS7zTqeH+0pXHwus\ngslp0tfk0LpxoF8kRDnDhbvy+U5cNHkr6EZ7rfCsQ8EJzqJsKiJgn6JfVyi2\nH5CeahLTE29E72xeZNP5IYXXuqSsqcrceTli/JAOHq4Ickok9r4obrga3XYu\n/WRfSbD+KGo6UhuuTSO3D7+eQUTsQkJj5hdQ3qmQGyUFLRxzdMfMPHlH+INf\niGYdjzjTnNyeESN4BztGobu2ZFpXUUh/gk5OOHXYeM94F6fF+kwYzIt1F1eb\nquD2Af7VR+zHS+0Zcr/z93HKO8S77Qwfbz36dE2subLY521LX1AcNBgIksTU\n8Dwi4/91l+TYXCHxooOwGYO/LihoKczkL+aVcjzl1skx4P8xd/Sy5OiVtYeN\nKkSB+Vi3uY/VZzpqZC7sA2tCOU5tflbLH2JWTLVR4h3GCsYSBhK1F4gXiRgA\nh0KJfIzzgl1cL110vG6jG7lTk/0Vnxr/KOdkBiRf/iphoWULb7jrcN2YttPb\nyd3aR7XqFok2WeHDG08BZEi5VCKkb8leMQgGvVUMmNBFtm1Hjo0bdxq1OWfa\n7aEt\r\n=dVFi\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","husky":{"hooks":{"pre-commit":"lint-staged"}},"types":"build/index.d.ts","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"c36ec6a5a807d2a3a45330a7402b12b6775f0f05","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint --typescript lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=shellcheck,@types/jest","test":"npm run doc && catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc","check":"./scripts/check-filenames.sh && ./scripts/check-licenses.sh && ./scripts/check-deployable-lib.sh && shellcheck ./scripts/*.sh","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --typescript --fix lib test","postinstall":"if [ -z \"$CI\" ] && [ -d \".git\" ]; then husky install; fi"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --typescript --fix","npm run doc"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.20","semver":"^7.3.4","skhema":"^5.3.3","json-schema":"^0.3.0","@balena/jellyfish-logger":"^1.0.25"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^26.6.3","husky":"^5.0.9","sinon":"^9.2.4","deplint":"^1.1.3","ts-jest":"^26.5.1","typedoc":"^0.20.26","depcheck":"^1.4.0","shellcheck":"^0.4.4","typescript":"^4.1.5","@types/jest":"^26.0.20","lint-staged":"^10.5.4","@balena/lint":"^5.4.1","@types/sinon":"^9.0.10","@types/semver":"^7.3.4","catch-uncommitted":"^1.6.2"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_1.2.9_1613814827257_0.3132116582337965","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"1.2.10-renovate-non-major-2486b4fac166b1f70fb0b18ad07339b4c1586953":{"name":"@balena/jellyfish-plugin-base","version":"1.2.10-renovate-non-major-2486b4fac166b1f70fb0b18ad07339b4c1586953","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@1.2.10-renovate-non-major-2486b4fac166b1f70fb0b18ad07339b4c1586953","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"775cdcd99dd47e1345026113de6bfb458f6a39f5","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-1.2.10-renovate-non-major-2486b4fac166b1f70fb0b18ad07339b4c1586953.tgz","fileCount":18,"integrity":"sha512-yzTlfHDxSYF5DLBU+IKM6iL04kxYN2E1SA7vUPwk/u582iQ83gcdRcZz73AVpZZEU8Hnt02tt+ez2gJWfDGQ5g==","signatures":[{"sig":"MEUCIQC/xmHQk5CWATWu75g595ocT2Vdf4P1lKv3Qg7QRh2AcgIgd1JfqNbaVRkYiiwNr50OyzMao40KdZhYKRjP8gRwl38=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":28164,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgMTdcCRA9TVsSAnZWagAAk/sP/A1Mjh0PqGERng2N5Z5R\nxGB/fxbveMaZxHyx4BGI2fw87mS+1X8fuMY9GNXkt6bWahqxOFzepPlthNHC\nFIYF1ImoZifOZjvRwSWfowCxuhKC6o09OxLaLO2L48EKr+ReEq2aWagXfvLJ\ns+2Fcotcf8AidKYmOmIsCd/FhuZg7gtBtYO0AdvLGOFv564T6qLVfphfVC4v\nvnL+x9zR9RPGnPiEXaNKu5gbC0z90QpCPe81lw6yaBL8zdmTEknOwy+H7Dp6\n6MKnjEvsteTuPjj6fmi1vTD3+ydIbW0zm1MLL6u7InaCQDv+jHaIe8vkRzML\nvrNp0HSfi1+KDf45t7/tLRN7sB81FY+vf4qFrbZVIviD3ri6F9058IlIcVib\n04Jld5g0aHrOUGwI+gt5DLdg7ftQv3CY7XM6xi3o2+iIEPp3Y9DBAw0MwoRL\n/KzTqI1u4Mho5JuLNLbFbeluMiz7oQpZKTvS3+dPFP3IMnTTMJkY+3npOGVt\ncsDaFnc9Yu6QwrUOUn3ueQzfmo3CIxUeGvV3OG+fo8cACI75fTexIKPie3xo\nEkn7v12yi/YUVk7tAy4mllcxNTSTu1InvZkArJFF7b/Rd59BoBLv4vAOupCc\n1cocCOgMT7dS184HB/ysJjyonYAUXvuJP85n2W25BQJLRTh0ldYBoekjJNbw\n3Dn2\r\n=0/H7\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","husky":{"hooks":{"pre-commit":"lint-staged"}},"types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"2486b4fac166b1f70fb0b18ad07339b4c1586953","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint --typescript lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=shellcheck,@types/jest","test":"npm run doc && catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc","check":"./scripts/check-filenames.sh && ./scripts/check-licenses.sh && ./scripts/check-deployable-lib.sh && shellcheck ./scripts/*.sh","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --typescript --fix lib test","postinstall":"if [ -z \"$CI\" ] && [ -d \".git\" ]; then husky install; fi"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --typescript --fix","npm run doc"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.4","skhema":"^5.3.3","json-schema":"^0.3.0","@balena/jellyfish-logger":"^1.0.25"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^26.6.3","husky":"^5.0.9","sinon":"^9.2.4","deplint":"^1.1.3","ts-jest":"^26.5.1","typedoc":"^0.20.26","depcheck":"^1.4.0","shellcheck":"^0.4.4","typescript":"^4.1.5","@types/jest":"^26.0.20","lint-staged":"^10.5.4","@balena/lint":"^5.4.1","@types/sinon":"^9.0.10","@types/semver":"^7.3.4","catch-uncommitted":"^1.6.2"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_1.2.10-renovate-non-major-2486b4fac166b1f70fb0b18ad07339b4c1586953_1613838172162_0.35432811927706953","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"1.2.10":{"name":"@balena/jellyfish-plugin-base","version":"1.2.10","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@1.2.10","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"2bbaee315f36af4d3dad5e52527778443e63063e","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-1.2.10.tgz","fileCount":18,"integrity":"sha512-BD5hMAA+2NP4a+cEzRJcJQ3KyrEGvYVq0CQY2Bra26A6P4TgJbQGTAGqnyVmPxQ7G1f4R2uEzhiG1AqKbMml2g==","signatures":[{"sig":"MEUCIQCkOwCPCGdHP2MzGZfQDE0CwFXRH2XS2TqvdrWzXInBUQIgc+smvN/4MT0qnQl0rb87bwGE6aocbKHsjoNgMDx6tlo=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":28104,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgMTgoCRA9TVsSAnZWagAAXKkP/jttxv5jyHR4kiEhTedd\nWgspl9EXBtEHRlmKePYzEl+6Wva5FNcDirou72BqSWyjNJHp+4GVsEUXt4gS\ny02226XRUGE7KB09DVfpPDzyP8tn/51/f9uVs7sDbQs33zwfKDecjnDc5zA+\ngOeWAILWkrBW8Q/Yu0rofsWrIv1Q9NP3mNfMk4wcyiOyy0+YigHhYvCLueag\nWvXXeeQSrun+ppyo1ETCNjNa3Ihblg5nfcElOCTeEDn7gdtaKzYCHW/LQxPz\nT8w2wP0AcMRflBukgbpDH5JXMxf1U9R2BAugqUe3HLKfkKqhKaSIOo24/WgO\nQrZtxz8/GFJmlqEAJiuCcMS3OrqHYiqLXzqnwphUYpFdCZN5JJjrWyo4nmOA\nqcP+dGXNxQlStgKDcnHLdRZ4zk0jiWDXV0XOl7eYsFlOnoVTYK6fSy5Yqne2\nVeQIT288TdJ4dQtzicrjuLCfiEsOLXYNyhUdW4etuKaFxFTXQxJ8mkRcnEma\nERu0EjaNLT30NeRXnlPSdn91tO5cFD7ck6WtD6Sd2rica4t0UR9Mhz0eCu6s\nlogQgXhmaECbDmG/WVrbflcCDQURF933rJYebPJTtS7WsdlPB6FK/6lZGFGo\n956jeJeVD0lCKwljKgZRpb1h1IFbmzIurcOUCDrac36XTU8bh8XXl3CWbOOS\nyuun\r\n=97FK\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","husky":{"hooks":{"pre-commit":"lint-staged"}},"types":"build/index.d.ts","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"568e81d01df2178a62358bce20a9efcb0311577a","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint --typescript lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=shellcheck,@types/jest","test":"npm run doc && catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc","check":"./scripts/check-filenames.sh && ./scripts/check-licenses.sh && ./scripts/check-deployable-lib.sh && shellcheck ./scripts/*.sh","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --typescript --fix lib test","postinstall":"if [ -z \"$CI\" ] && [ -d \".git\" ]; then husky install; fi"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --typescript --fix","npm run doc"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.4","skhema":"^5.3.3","json-schema":"^0.3.0","@balena/jellyfish-logger":"^1.0.25"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^26.6.3","husky":"^5.0.9","sinon":"^9.2.4","deplint":"^1.1.3","ts-jest":"^26.5.1","typedoc":"^0.20.26","depcheck":"^1.4.0","shellcheck":"^0.4.4","typescript":"^4.1.5","@types/jest":"^26.0.20","lint-staged":"^10.5.4","@balena/lint":"^5.4.1","@types/sinon":"^9.0.10","@types/semver":"^7.3.4","catch-uncommitted":"^1.6.2"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_1.2.10_1613838376009_0.7190028406373139","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"1.2.11-renovate-non-major-37729c9cfae89619d03ad352aa762cb51e9cdc21":{"name":"@balena/jellyfish-plugin-base","version":"1.2.11-renovate-non-major-37729c9cfae89619d03ad352aa762cb51e9cdc21","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@1.2.11-renovate-non-major-37729c9cfae89619d03ad352aa762cb51e9cdc21","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"9d0d6dd23f6aeee004a237e686fdc0ceac0d359a","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-1.2.11-renovate-non-major-37729c9cfae89619d03ad352aa762cb51e9cdc21.tgz","fileCount":18,"integrity":"sha512-+zFIuOxUZd3jc6ET0VJGlWwyN1OiL16lNvC0JxWQY14F3lsHpxJFU9kFax9/BYXKAz5PFnbNvnC1sGKktMwtpw==","signatures":[{"sig":"MEUCIQDm909wOALT5kUKTwLnefLwDsMnhkD++EWpw6rHGOfelgIgFmR78i9i827mxdWDWK5R//BDqLVbqq6+JSfrv/2LMII=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":28267,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgMVWnCRA9TVsSAnZWagAAHOcP/2OYEmATOeyn8844DTYf\ngvuf+S42g1U/+DZE6Wn46cVzKAovIWQBE3tbAHM/kgQ8Il2dhOjuGAK86jmy\n6lyMmyxcKPVK07ntdyS/uAowHHhUY4hvCVdLDKksJO8jsrpvMHC+Sc2zlxuI\n5vphgUPkRLTTda/Qw4OOu9yK85DvJ03AEgIJ4S9zufVeBsV9yDoPR8YMAs4j\nHDu8ohyEqcbZtNrYgiZH3mNY+KIfnNsZvVe3oIqFhTd3HzQ0u0+inIuoZcnC\nvxyNZWDnFrdjN1LuWs6TNQpjzUmvG9vtac2UF0/ZHJMyUEuuWl1VEfgLPgwy\nLJWV2MRH7d0h+KNEx6Q/pjkcadlbd2SQiklWQHZSxpgoYU25VyppX7cTKwQN\npZmqyU8acpUC8Oryib8bqfNR3ar6z8cjcWYMlu3BMWnCVtlUt62kjEo179rP\n7r3lHSQ6u0dqLMThrrDr2GojtfHp+yJAP+JeesvDoPYE0FPLnLGkxBckvLCF\nB4d9xKUVHkKnhR98c4FfVHxJY/wxne4d/khI7P/3rz4OSsEj5RR8pL6mESf5\njb9Szk2MOLC2OVdMN7DVZF22hRiT+2G6hZwnLGXuXRVKBSaWRBoYp14gQLLy\neiWJuEauaIahWHOe0BelAU0GwMwZLKeClQyNVzdRlMjlocwascCAQaUPWwXf\nnewL\r\n=Y4kq\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","husky":{"hooks":{"pre-commit":"lint-staged"}},"types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"37729c9cfae89619d03ad352aa762cb51e9cdc21","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint --typescript lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=shellcheck,@types/jest","test":"npm run doc && catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc","check":"./scripts/check-filenames.sh && ./scripts/check-licenses.sh && ./scripts/check-deployable-lib.sh && shellcheck ./scripts/*.sh","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --typescript --fix lib test","postinstall":"if [ -z \"$CI\" ] && [ -d \".git\" ]; then husky install; fi"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --typescript --fix","npm run doc"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.4","skhema":"^5.3.3","json-schema":"^0.3.0","@balena/jellyfish-logger":"^1.0.26"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^26.6.3","husky":"^5.0.9","sinon":"^9.2.4","deplint":"^1.1.3","ts-jest":"^26.5.1","typedoc":"^0.20.26","depcheck":"^1.4.0","shellcheck":"^0.4.4","typescript":"^4.1.5","@types/jest":"^26.0.20","lint-staged":"^10.5.4","@balena/lint":"^5.4.1","@types/sinon":"^9.0.10","@types/semver":"^7.3.4","catch-uncommitted":"^1.6.2"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_1.2.11-renovate-non-major-37729c9cfae89619d03ad352aa762cb51e9cdc21_1613845926437_0.9527923741232256","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"1.2.11":{"name":"@balena/jellyfish-plugin-base","version":"1.2.11","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@1.2.11","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"791f55f1c2966d951e7c845c5c0b0245fd99ea86","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-1.2.11.tgz","fileCount":18,"integrity":"sha512-bQDevEZ8zWG8pK7hTev0hEB3FBPhXjMmAhzsBHHtunMsE/xZsJyYaoUTiFS9lRmKgZHx9aVyxFp0QGd0odjIvA==","signatures":[{"sig":"MEYCIQCSX4mtU12ZHozsCrbs2Sg2ZNoouO8NPcCqCV2VVWC5HwIhALqwd8RidJYAkZKzpqinc8D0CZkTRrXWZpPrZ5t9TKvg","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":28207,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgMVZrCRA9TVsSAnZWagAAtfIQAJXpVEEU5A4xzlCY9pH6\nu2NbzB/OMOxKOjn+nzPbSYypgnDEhRuM/XIHaW0RZfpeaun5SRQMfZpcUsjH\n41npfe8NS8kQ+d9Mw7IcVk4ZWOXmjfr+fdupsvcpFXU3z97FNyK3u7r0IR8n\neHj9XWZYVj0/mJmfFY81XdKuibK5/LAXOsjaq4P9fhzM5+e9s3zgVt++Irrs\nZdJwsT6JQNuMvFt76TMKbrVtVEt9mC4W7Rp65SteiXgO5/x62RZ+fWWcOAzj\nUf/zat58r4vJkc2EeM0j/q8y5CUEXSYxtfL1B+MYggGNjTrvRN+f2wnbgtKS\nV6cZiNZeCAD3MhFIDxKoHiWBB5RCsusVG3GqKN/YZUgq1AlMHQL3RH2a0GUX\nuuQ52wnf3yC624pVjXRDwW+yC39yajNiwYFvoml0cXlESV43oa/VxVAuIrMh\n7cMa8lPlm9y8hI7UMCk6YxkGcOhUUJSx2RK14+4+VQkdXQp/5Q0AyjOE15ns\nyu56o0JCCSRHT3DWhmigkfV8r5HLStrRLwhUagyugeV/VH6jfTlqqrcS+Y4F\n/Y+PnLh9mPimuMK1lBcnOv5UpOXSBhxPMwV10rj3Sl9Y257yt8c9KqMneP4+\nkuAADs4r3yCoq310tQ/1XXCPxRAPs4gXJTlt7W97LYHJB1Fw0Z00r88GU9/M\ncMzH\r\n=Mul8\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","husky":{"hooks":{"pre-commit":"lint-staged"}},"types":"build/index.d.ts","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"589bc7eb98c7eebc14de37d746058e3238cbcbf6","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint --typescript lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=shellcheck,@types/jest","test":"npm run doc && catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc","check":"./scripts/check-filenames.sh && ./scripts/check-licenses.sh && ./scripts/check-deployable-lib.sh && shellcheck ./scripts/*.sh","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --typescript --fix lib test","postinstall":"if [ -z \"$CI\" ] && [ -d \".git\" ]; then husky install; fi"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --typescript --fix","npm run doc"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.4","skhema":"^5.3.3","json-schema":"^0.3.0","@balena/jellyfish-logger":"^1.0.26"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^26.6.3","husky":"^5.0.9","sinon":"^9.2.4","deplint":"^1.1.3","ts-jest":"^26.5.1","typedoc":"^0.20.26","depcheck":"^1.4.0","shellcheck":"^0.4.4","typescript":"^4.1.5","@types/jest":"^26.0.20","lint-staged":"^10.5.4","@balena/lint":"^5.4.1","@types/sinon":"^9.0.10","@types/semver":"^7.3.4","catch-uncommitted":"^1.6.2"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_1.2.11_1613846122772_0.0794579616125739","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"1.2.12-renovate-non-major-cd304415e15d8eb0a2f456b43fb3c750ede4d6c8":{"name":"@balena/jellyfish-plugin-base","version":"1.2.12-renovate-non-major-cd304415e15d8eb0a2f456b43fb3c750ede4d6c8","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@1.2.12-renovate-non-major-cd304415e15d8eb0a2f456b43fb3c750ede4d6c8","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"510a499e9a9e25c2f38c1d258844a905bcf00d5e","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-1.2.12-renovate-non-major-cd304415e15d8eb0a2f456b43fb3c750ede4d6c8.tgz","fileCount":18,"integrity":"sha512-x03FjBj4iPpLwh0AJdy/mNO0iObV0ArlxfYPJcXFyB+eoQ74VdIJxCXWxOt5jyU/GGmsXfmHwGbqnhYC97VSkQ==","signatures":[{"sig":"MEUCIQCju76ottj4A0oH1Kq+/EzJXxwwADcgTbHhcfBAw+GD2gIgQ5Vx6RhHLj6c6/TP+aU/wZph9uZi9wXX58+TPynh1j0=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":28354,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgMbWiCRA9TVsSAnZWagAAcTwP/idwlFo/lIuWCbKDWM13\nGiE5wJyCGQKrjtko8LpREfYtNySyiziu13GzR7EC+nt778a4eoDqkWIARu2F\no+wRhWVxXHMkFG6X1VG+cfT5Jeida2NlZ0FBCv5hgSq5GSrFSRGIATn/JYOe\nJHFkJ0W8te3amKsSXAfGBDuD/N2cs/SksrnS0aUZwHUUry6on6eg1v79i2mx\nSK6+ObHZ/sWchjwgOwaSXmbJ7TIDUqE0T5hbq3FhotuIPCdQIyfdq7BlE2BG\n/jtqKyU9uUBXZGU8wUd6CeNKzSKZkguk3TjsPAVsULJ77lOHkSulygVSxs/A\nBfyTm3EhAlmpwZ4d8RsOWCdo71qn57jwE/l/yhmBK2f4O2W0th3ZEk+ACqWF\nGLAjz2H3UffMdW5f2hbOuv522c0P9Re1yUaC/QG3GS9E/wMb1a8j61yj37Q6\nethzYjDe71vmRPjUeNVNbZppyR/GVpOD5hLUQf5mkP/2ld7mFoAyjqN6gPSD\nilgcPzBaerSEoslC7KzIcqvsgrOrfwaQS8xYP+iKs/Q1H49ECNEZDEnjaDIn\nYNwr/KSTpRHcNdd/t9AS3qNO0p+qjbYIEb1FWy7Em7FYXgegvJPQElTInl1d\nC1cT1Ar894MFNjegdciOoPdPRG9eUrn33l7xR5mc/YazVU/IDXKpuwYn5tAj\nNcuC\r\n=/bwj\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","husky":{"hooks":{"pre-commit":"lint-staged"}},"types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"cd304415e15d8eb0a2f456b43fb3c750ede4d6c8","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint --typescript lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=shellcheck,@types/jest","test":"npm run doc && catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc","check":"./scripts/check-filenames.sh && ./scripts/check-licenses.sh && ./scripts/check-deployable-lib.sh && shellcheck ./scripts/*.sh","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --typescript --fix lib test","postinstall":"if [ -z \"$CI\" ] && [ -d \".git\" ]; then husky install; fi"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --typescript --fix","npm run doc"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.4","skhema":"^5.3.3","json-schema":"^0.3.0","@balena/jellyfish-logger":"^1.0.26"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^26.6.3","husky":"^5.0.9","sinon":"^9.2.4","deplint":"^1.1.3","ts-jest":"^26.5.1","typedoc":"^0.20.27","depcheck":"^1.4.0","shellcheck":"^0.4.4","typescript":"^4.1.5","@types/jest":"^26.0.20","lint-staged":"^10.5.4","@balena/lint":"^5.4.1","@types/sinon":"^9.0.10","@types/semver":"^7.3.4","catch-uncommitted":"^1.6.2"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_1.2.12-renovate-non-major-cd304415e15d8eb0a2f456b43fb3c750ede4d6c8_1613870497193_0.7187137975912898","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"1.2.12":{"name":"@balena/jellyfish-plugin-base","version":"1.2.12","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@1.2.12","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"657fc926f8505af4b1a9bdc56686ffb73d8cfe7b","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-1.2.12.tgz","fileCount":18,"integrity":"sha512-vYaRm99aZwetTLOKHvY6KFn8HLbE6AlZIJigwnishzGiOvUtMUs3nHsLunCP+6RgJpcztg77/ZKvgXxRZgL5XQ==","signatures":[{"sig":"MEQCIAFpdv9Cs94Jrme/kcJOa1RKq/d9EkESh8ZcXOCTyTaVAiBcsZh51Oci9jtH+uI49ese2tsSEKLDQn/UZ7vZ0UaEYg==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":28294,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgMbZXCRA9TVsSAnZWagAA2fcP+wfqJM/v52mY+2cbWzvC\nPhF2nxMy0BGx7cEpVWkL9HFPFSb84mOPBH7/l5FqZEzxhHSktDMxcjdh2eCB\nfGsdhiGH2Ki7mwTUFEqEeK04VsSwehg83PxmE+y3DPd2PQbvjx/MArKWBTK+\n0zRQq9svnGUQLBje/r+DeN6bwldlBFpn+XgxpoMQ9/vN5PuZCn9VV6O+nXAe\naHd+8B2st5eH/73q21dcQYNEg+f+mBX5uh6pXZOaDgRe1VNlaXwfH2vBVH71\nIhHOnzbNiY0VviWv2gixevEoisXy86jZQsaFI9rNxZuzRacIC1HZMKdlL+pM\nvpeISt/4Yi3R/czyREe3h/rb/BQ3jYZbLgZmuKGb5Bb/8/wTK0NFF5C09gnL\nnc2m9QZbfGZnuGmQY7b9w4dXz3dzLKuPZnOpIfhfIsBcH/ztLQLTL3Cm7F+T\n8UW/de1I8vQeDzjMKwnv1FHpQ+LVmQ/sf1Sc+4az0q/PAjX0D1c+sjAPDFMG\ng+F56/d3hB0XuIDFdqQoyq5ddtlKNnl+oblAYTX0WuIzW7HzZQt1FQPM2h25\ncTwPUS7RsOPj6JK35EnC+TrNTcbeQepDA9HtnRAvYgaukDteCqKfpn2ewn7M\nRNkBO2xjq5IzV468v48yMMFgzD9ere03bqRiXgtioM01hUxuPH1+R5971nMS\nIXTd\r\n=nDZd\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","husky":{"hooks":{"pre-commit":"lint-staged"}},"types":"build/index.d.ts","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"a155078165d8d758bc4292aac8f692f0c7558af9","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint --typescript lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=shellcheck,@types/jest","test":"npm run doc && catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc","check":"./scripts/check-filenames.sh && ./scripts/check-licenses.sh && ./scripts/check-deployable-lib.sh && shellcheck ./scripts/*.sh","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --typescript --fix lib test","postinstall":"if [ -z \"$CI\" ] && [ -d \".git\" ]; then husky install; fi"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --typescript --fix","npm run doc"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.4","skhema":"^5.3.3","json-schema":"^0.3.0","@balena/jellyfish-logger":"^1.0.26"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^26.6.3","husky":"^5.0.9","sinon":"^9.2.4","deplint":"^1.1.3","ts-jest":"^26.5.1","typedoc":"^0.20.27","depcheck":"^1.4.0","shellcheck":"^0.4.4","typescript":"^4.1.5","@types/jest":"^26.0.20","lint-staged":"^10.5.4","@balena/lint":"^5.4.1","@types/sinon":"^9.0.10","@types/semver":"^7.3.4","catch-uncommitted":"^1.6.2"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_1.2.12_1613870679152_0.18510704595669702","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"1.2.13-renovate-non-major-374a079abe169e1a30fcb0818c6c85202cf4cd7a":{"name":"@balena/jellyfish-plugin-base","version":"1.2.13-renovate-non-major-374a079abe169e1a30fcb0818c6c85202cf4cd7a","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@1.2.13-renovate-non-major-374a079abe169e1a30fcb0818c6c85202cf4cd7a","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"0e0ec6062e777efbe978b101f950585ce9181ae7","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-1.2.13-renovate-non-major-374a079abe169e1a30fcb0818c6c85202cf4cd7a.tgz","fileCount":18,"integrity":"sha512-AZj7JUhe5cN+Feu6JM+BnpM6VPZ4Hf5kYQHJ/rSdpzzOf/D13Ghyrx/lVEw+YX9yE+cO18ucv+fheOr5ROp46w==","signatures":[{"sig":"MEUCIQDKwdBzwqy2Wy69rhu2KoxtX0OgX7JOMAiBhuzLALrQzAIgDINMtolKVa9A65QWISMFlgGTfHJyPQNLwfSnA4bYMgo=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":28457,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgMeiZCRA9TVsSAnZWagAA7SoP/3+cKf4a/O6+uvSoORcd\nqoEMBpoLYfdMq66vCVFq54nlqApp4CEMOsp9siLJ5ml3nUlY9RZODl2V6d6D\nbQ+hhiewAQf8LcJAovqOmpxMmEJko5sO8tHV1K87nmYCGtM86qwsV6jL9wDI\nAuuexC1kNxDwjBZl3M2dHSP6orFRU3vamnOotgOC95fVv0YteLVqNQKFOkVx\n269IxI5Wohxl10clGrdDy46HogWkQTvrMaI7SDBYu0JHoGp11zXSs9/0ZoWM\n5Tzu4XRfAxPiw1gP0SYaxgyO2+28+BBhtV+TCn4OTrkTl8XVGw6ojtl4bLQz\nDiZSpWQUSwkzKRNyG/QZ4fpMEtqk/B1owJW69VQbRDGittj9Rx1NF7IdKLg2\nUyzP1Zzk96FR1eKcE8ZBX5y1oOdcR2KatprIJOsRECldCo9QCMpcIi5MrjA3\ndk5OpFCVGlq58OXyL2bSW9q+OzB1JxpOCf9ZDm2BRv0Wv7KjjW3YAKw0DhRL\nqaGtRhTSlHMBysQyxrxyyIM7ctLBYdl05RVWJb9j5pxgxHfLiRdkpF/X2Hud\nywZU7uxmPMyDVfVPBNem3CPp5Jj+6iH7+PK5BBjmIls9xOWiif1isHe6OHbS\nvMjXSHo+D37bnwT/NfTRR5IimEflxBSHFJ/XxjDK7FLaie+MKW+YwpgdAi+E\nZcXc\r\n=OZ09\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","husky":{"hooks":{"pre-commit":"lint-staged"}},"types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"374a079abe169e1a30fcb0818c6c85202cf4cd7a","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint --typescript lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=shellcheck,@types/jest","test":"npm run doc && catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc","check":"./scripts/check-filenames.sh && ./scripts/check-licenses.sh && ./scripts/check-deployable-lib.sh && shellcheck ./scripts/*.sh","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --typescript --fix lib test","postinstall":"if [ -z \"$CI\" ] && [ -d \".git\" ]; then husky install; fi"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --typescript --fix","npm run doc"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.4","skhema":"^5.3.3","json-schema":"^0.3.0","@balena/jellyfish-logger":"^1.0.28"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^26.6.3","husky":"^5.0.9","sinon":"^9.2.4","deplint":"^1.1.3","ts-jest":"^26.5.1","typedoc":"^0.20.27","depcheck":"^1.4.0","shellcheck":"^0.4.4","typescript":"^4.1.5","@types/jest":"^26.0.20","lint-staged":"^10.5.4","@balena/lint":"^5.4.1","@types/sinon":"^9.0.10","@types/semver":"^7.3.4","catch-uncommitted":"^1.6.2"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_1.2.13-renovate-non-major-374a079abe169e1a30fcb0818c6c85202cf4cd7a_1613883544601_0.561262110175315","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"1.2.13":{"name":"@balena/jellyfish-plugin-base","version":"1.2.13","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@1.2.13","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"cc3184eec122824ef5bdd088582a4bdb9f5efd4a","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-1.2.13.tgz","fileCount":18,"integrity":"sha512-Nv5kFDcz/99INxrOGDTPp4WQ/LzmcjaqnQFvb5+2S+ZJFMqOviHKk9eQtsLfX8fET0LxqVDIT6Fy4cba9e8I2A==","signatures":[{"sig":"MEUCIC8cEG9kcajmKIXCdKAw6O476G1AlMQWEoGhGka1MA2bAiEA0ZaGPQm7PTSbcPLirkNT+7Ej8edSfuo68/CKvXxueaQ=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":28397,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgMelcCRA9TVsSAnZWagAAJoEP/18cMOtW66fx5ZGVCC3k\nidBXC5rGIOdtTyDR7MeoiqaxBtmV3U2oTdAd8UvDaoGx2iqz+dfs/U0U9JBO\nCVAXCf7NyjXXMI6Wa4/C36tUe4jUGrINuEdkgqB/0hkflRUYi83G1rjJ8Avj\n4o1USNo2E0eTByjiMaNDr4fVvPtZzbvw4KI6HCnxYmunRnxAbDc2PWEJS+IT\n42iRE2mbW9mQoDiCivCmP136HBT+5hTNAZduWJOw3x6dEt7CSBHws2IFzS7u\nbXIIHmuQV3pRASH8gHFbL9IQBJ34+j7mtft8rLTv7PWasy/ZYtuBCHjlWxEo\ncLGdZplkBdcIrX2Qlv3FvcHN9He7921uXqqmVgvm/ZqinDa9p9EjThEKniUZ\n7U7EXsXLg0NbNFCWv32RH9udobxfNzv3vSppRtH8zTjBCiqnVpzWef7b+J5F\n+RL2UiUBF/R8dFSQ/ri1xXoKRyjzCXrIkL2/aShQ/DCe49djxhDrCEi7RbyS\n2zOCyxa1LjiSFzPNnGlggoechoBUqZPdHcfwR5EpkpTN/4SDhFMia3ZooTvW\n0XQgydMuNKD8pPUCN6Q19FnF2kImCXIjQpS62rwgsRYGqVa/fDfWHaFbyejx\nQxOcIe44baQn8q2X+BR3J1QcuvP7ZFMrVivN/JoWNmd0LKKyCITlGNcSEUUp\npY2/\r\n=/i63\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","husky":{"hooks":{"pre-commit":"lint-staged"}},"types":"build/index.d.ts","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"5ac23d9e1f28c739f269177b3d60528bece78e1e","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint --typescript lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=shellcheck,@types/jest","test":"npm run doc && catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc","check":"./scripts/check-filenames.sh && ./scripts/check-licenses.sh && ./scripts/check-deployable-lib.sh && shellcheck ./scripts/*.sh","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --typescript --fix lib test","postinstall":"if [ -z \"$CI\" ] && [ -d \".git\" ]; then husky install; fi"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --typescript --fix","npm run doc"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.4","skhema":"^5.3.3","json-schema":"^0.3.0","@balena/jellyfish-logger":"^1.0.28"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^26.6.3","husky":"^5.0.9","sinon":"^9.2.4","deplint":"^1.1.3","ts-jest":"^26.5.1","typedoc":"^0.20.27","depcheck":"^1.4.0","shellcheck":"^0.4.4","typescript":"^4.1.5","@types/jest":"^26.0.20","lint-staged":"^10.5.4","@balena/lint":"^5.4.1","@types/sinon":"^9.0.10","@types/semver":"^7.3.4","catch-uncommitted":"^1.6.2"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_1.2.13_1613883739644_0.17316487118258772","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"1.2.14-renovate-non-major-d4d67e4116ef5d7730a1abd652b7483fb456e5ed":{"name":"@balena/jellyfish-plugin-base","version":"1.2.14-renovate-non-major-d4d67e4116ef5d7730a1abd652b7483fb456e5ed","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@1.2.14-renovate-non-major-d4d67e4116ef5d7730a1abd652b7483fb456e5ed","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"a13e9bab0066b3bf84978ba4149c9505c145288b","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-1.2.14-renovate-non-major-d4d67e4116ef5d7730a1abd652b7483fb456e5ed.tgz","fileCount":18,"integrity":"sha512-BFZe5UWrEQrO3dvQAbya8l8dd87X92x4nI0hDkFpAernhBNG1Hea4ki31D64dArEK1K1Y4dxCjknLkhtOo/EzQ==","signatures":[{"sig":"MEUCIQC+9PSevvOOVe5iwFT0ApbtMe+pnHXCV3iLt6BAjIziFwIgbkeXbCDft1ojlifIXG90cPGmjS925KRa/nV5joGmnqQ=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":28540,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgMuniCRA9TVsSAnZWagAAky0P/iqyHGI6HJEN11fk6tV9\n5LBOE37lckqLqXwjE6fJK2c7BnFMjo0l9YY8qOdGftnvCnL95sHjgwVswfYF\nBOc/yrmlhCjMFZHIhp9GiOOdL6bre0l/Llup1cyxkjU0IqZ4NvY+H7BI7VkP\nglPPgPsAes6qKPMZtBaiAK9DoL9QOOXvE0X0zLGcVLLkIrjwJGk8ppoE5+Lg\n+rb+T9vmq61yBuSKn6JWKu6HPsuO1aXUKItcI4zA3rpp3zuGRi4is2EB824K\nB6spkzcOhTNZn3EGBTNiIzWAzcy5pkLRKQ/m6dPqdwT4q1W/Yw95spaYPemo\nBdb1HuNP1Fq9GZ/ruJNnvNLIyhNtQnxv5WxrtxLreEzpTTEg+uVhn1Cwea01\nLxFAPTzdkk59h37tZEz+kIvOS7/P+Iyxy0g8xy2GGFHFUu+2LGeGgQOKj9Ui\nTKYJSA2mmPx/c4oxSDqT2i1v2ZMoJiQSLl2+JkLadWdQXBx0YztIwu9CvBn1\nWo3bjBqwd8YLSqHzESWtVeMx2xQmV/Qg7IHZSHbPRQyrfSJ1UM84wwAOGoxB\nCLr0l7NHQV8S1AsGKXWVjc0V1Yv2KuetE9Em+8LRgJf7c+QevQx6G1TfNkXf\n6xLRWq9deqwDqM2M0ptODeplyYBMHNmI5RgPrd3M6NcDhcEieJfOUesVjCF1\njK8j\r\n=NuTN\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","husky":{"hooks":{"pre-commit":"lint-staged"}},"types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"d4d67e4116ef5d7730a1abd652b7483fb456e5ed","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint --typescript lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=shellcheck,@types/jest","test":"npm run doc && catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc","check":"./scripts/check-filenames.sh && ./scripts/check-licenses.sh && ./scripts/check-deployable-lib.sh && shellcheck ./scripts/*.sh","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --typescript --fix lib test","postinstall":"if [ -z \"$CI\" ] && [ -d \".git\" ]; then husky install; fi"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --typescript --fix","npm run doc"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.4","skhema":"^5.3.3","json-schema":"^0.3.0","@balena/jellyfish-logger":"^1.0.28"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^26.6.3","husky":"^5.1.0","sinon":"^9.2.4","deplint":"^1.1.3","ts-jest":"^26.5.1","typedoc":"^0.20.27","depcheck":"^1.4.0","shellcheck":"^0.4.4","typescript":"^4.1.5","@types/jest":"^26.0.20","lint-staged":"^10.5.4","@balena/lint":"^5.4.1","@types/sinon":"^9.0.10","@types/semver":"^7.3.4","catch-uncommitted":"^1.6.2"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_1.2.14-renovate-non-major-d4d67e4116ef5d7730a1abd652b7483fb456e5ed_1613949409603_0.482571361308888","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"1.2.14":{"name":"@balena/jellyfish-plugin-base","version":"1.2.14","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@1.2.14","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"b3321407852e80433361c57d4a4b16ed3a3e69c4","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-1.2.14.tgz","fileCount":18,"integrity":"sha512-OarasG3JMZ/IB6YLmIvmdQtZo6hhdkLENkvulPB70z7YKb//4aSYsZNBGQrVss7V5X+t8/j2Q/vhwKmu7To9yw==","signatures":[{"sig":"MEUCIGsQN/WDmN927gBvxMhmlrO2qnku/py9OdmiVWxBYNUUAiEAmYfGAZrdbE7xEc0zrs3vS+x5wtEVMTAgFbMosYyq7jA=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":28480,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgMuqeCRA9TVsSAnZWagAAAHIP/3+ZqAH4rPBG/nOCuXz/\nchiZMWi+kaukt8rTm9QWRmQe0Wi2exyUdp8hW9dzMwZGYnu3ztGZXvBRenyH\nIxRh5CqYLJVB2QP6JOce01YQHzz9IOtVpm1rCDVswAqwxDK/Bo5reh4OhjMQ\nUyy0Kc9Y1jLCDSboRfKDt1HB0RL79JIlRYwSAlAzug2Vmr6zH9hjc69frVM7\nsPD/Nk/MUOEy/gpsXY2JigZVxaW9RKdvJ0vrPa/jgY1+8pT6naLvmumXNyxO\nN4bg5t3XzGSQxWZVMQA15oh0Cd0YApQz/8sThK7nP4jicSf1n4GzB+agF3Ep\nA9Qiy8Tj+Ln1wvyxXPKSOtm3pG3n1TuCq4J4XcQ9jnPoJMyGHx3Mgn2uoH55\njgHBeNv88dZ713DJlRUdlm1kl/pN6wnMjGfbhT9XGTI5PJa20U7xJEt4VcBf\nAiz1ZdBlOq/u9xPeYlRYQJVCyAVbGQBlx5Wh1MUKxOvIj3UUuAN30yC87D2L\ntGBSLi+s6+GWE/hqIEEU1gJOj+o+D12aC7XEqGrDi9gBSXmc0QKpOFMZUlBx\n6gCkNj3GPzniN/IHAy9vsv0oUlXyZfpLzT/xtHBwvIYdTRcNoxSpoarICv1n\nC5/sodtj/SwIDUn/7flTqLhVYNCznnn8m9eNbMZTNchNbUbYK76bvZwAx/ik\nQ6+i\r\n=4PQi\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","husky":{"hooks":{"pre-commit":"lint-staged"}},"types":"build/index.d.ts","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"4adf6a3ce79209044e7c1ce6ea1748e632776043","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint --typescript lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=shellcheck,@types/jest","test":"npm run doc && catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc","check":"./scripts/check-filenames.sh && ./scripts/check-licenses.sh && ./scripts/check-deployable-lib.sh && shellcheck ./scripts/*.sh","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --typescript --fix lib test","postinstall":"if [ -z \"$CI\" ] && [ -d \".git\" ]; then husky install; fi"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --typescript --fix","npm run doc"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.4","skhema":"^5.3.3","json-schema":"^0.3.0","@balena/jellyfish-logger":"^1.0.28"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^26.6.3","husky":"^5.1.0","sinon":"^9.2.4","deplint":"^1.1.3","ts-jest":"^26.5.1","typedoc":"^0.20.27","depcheck":"^1.4.0","shellcheck":"^0.4.4","typescript":"^4.1.5","@types/jest":"^26.0.20","lint-staged":"^10.5.4","@balena/lint":"^5.4.1","@types/sinon":"^9.0.10","@types/semver":"^7.3.4","catch-uncommitted":"^1.6.2"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_1.2.14_1613949598462_0.7271595651202685","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"1.2.15-renovate-non-major-63faee167363189d50a364ccd38352bc90648ad8":{"name":"@balena/jellyfish-plugin-base","version":"1.2.15-renovate-non-major-63faee167363189d50a364ccd38352bc90648ad8","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@1.2.15-renovate-non-major-63faee167363189d50a364ccd38352bc90648ad8","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"f4106356261e5ae61240a818f3f1213b96d3775a","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-1.2.15-renovate-non-major-63faee167363189d50a364ccd38352bc90648ad8.tgz","fileCount":18,"integrity":"sha512-RHjvvTOdqMaq1fbsm6oiddlehP3Nx/o3i4d31rJXRpmXxXhv1E9sGlL8aHiQnx7Oz16Ie6emtcHt3N9jMa7XBw==","signatures":[{"sig":"MEQCIGfOKxXJUDGZ9VGKGyWidE7tAzI9sdhMt0JLnfWceFE6AiB6dNW1EaE3Y8aX2e/a332cwgt4JQ1hXg1mhSFD8hcA8g==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":28643,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgM0O7CRA9TVsSAnZWagAASEwQAIRt8BXywFeYDn4f38GV\nvOQ8nAA2VvAQeOrdx3KyM4Hx3tlFlFnipCY6IL/oSugj4ue1QAgORXaa00EB\nOI9ARHuPI95nsHQT2X18lRp0YqliX/LJ5iBHlTsfgVTTE1qsYQcHdz83XG8j\nJVM5zF1oS7Vx4DUnaPreIeLKrm0E7tsN5g+Ym23Y2Jxfk4BMJzMp1fP0pydh\nmET7fB+J0xWwDRjtSuHaE2iVy1GHKn9eQSYCJSUeFV9jE00bsqH6RBU2HYtV\nrApESEOnLUmg5Blx6wRJ5NPJtDoiqeRc4B2W4/tpyPnnDN5Y4unD34fE6u6W\nS0sczUaUPP2r7XAXYyFCwpaWMsYmoTTTevPVeAL6pRPocq63bd7v9k0LTxFX\noDVnWcr7YU5GoZVOdh/tQfrubXlnJ8QCWeJvDYKa9gDXE0KB+5bWDD489La7\nL1Ixtx5QyISF0qyYxnNHyjYlcsYn7m/rauffcai4C5jO6I73PfgaEawvUjog\nMJTH/JFHLwqKaylO1/GkeKlOtl9ily/spRcwhzbaPR+C5+dW5HYwCMqrVggS\na0DRxlpGViDJhrutqGU2KxWCc8VZU+F+FIKhkx4+foeHBEAqeV14nSkPrxyF\nPYU+ht2Po+vvVK9enpNDMjD15TPDVEuPno8n5yZST8X3RazrDvbPFXK+GJdO\nMQFu\r\n=HOAU\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","husky":{"hooks":{"pre-commit":"lint-staged"}},"types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"63faee167363189d50a364ccd38352bc90648ad8","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint --typescript lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=shellcheck,@types/jest","test":"npm run doc && catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc","check":"./scripts/check-filenames.sh && ./scripts/check-licenses.sh && ./scripts/check-deployable-lib.sh && shellcheck ./scripts/*.sh","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --typescript --fix lib test","postinstall":"if [ -z \"$CI\" ] && [ -d \".git\" ]; then husky install; fi"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --typescript --fix","npm run doc"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.4","skhema":"^5.3.3","json-schema":"^0.3.0","@balena/jellyfish-logger":"^1.0.29"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^26.6.3","husky":"^5.1.0","sinon":"^9.2.4","deplint":"^1.1.3","ts-jest":"^26.5.1","typedoc":"^0.20.27","depcheck":"^1.4.0","shellcheck":"^0.4.4","typescript":"^4.1.5","@types/jest":"^26.0.20","lint-staged":"^10.5.4","@balena/lint":"^5.4.1","@types/sinon":"^9.0.10","@types/semver":"^7.3.4","catch-uncommitted":"^1.6.2"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_1.2.15-renovate-non-major-63faee167363189d50a364ccd38352bc90648ad8_1613972410907_0.4755346383162111","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"1.2.15":{"name":"@balena/jellyfish-plugin-base","version":"1.2.15","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@1.2.15","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"09e9cdc8c808737a14d27246979ce0173c0c171b","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-1.2.15.tgz","fileCount":18,"integrity":"sha512-UFcga6CRUEoSH5foIAMWij5+eA9/1JEoDZu3geDwQG317Tjvb0tn5mq3yzVsJWnnY5PE29rX8UKlVeQhofQAsw==","signatures":[{"sig":"MEUCIEONpX1X0BGQzkOJCVjP58Ev13jGi06lbh07ujpTWm1gAiEA7KivNqHym03Y7tedJplcZRkUVfnMnDKrzKBh/MAw+zI=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":28583,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgM0RpCRA9TVsSAnZWagAAtOUP/2BBZYI53p8sG9W7WLIX\nAdDy+Gn2v8enVTeEpbjqqDk/Xtj6Y3vB3LJqJs9mH2QYxEakazZxFbJPBjd8\ntzP8zx5Iw+mRxcrnIbgj2mmdpR20Rb1NKiZgomj+nc0c4sCz9q9+Iq+nRbk7\nWbV9pJ7V4UZsPKtBo7Hn89gPHyVQD8DOPlvqGrL8j1aZsSPEgCAfOM4rK+hN\n0SAa7VhtNZkc1M6NeDX3py5sXZJzVzN0NGF7InWwWGyEsGakwPL5v6uzCAxW\nj/mUau0Uipi3ckpSpGux3tLt/ZDyjpgr7BtkjmTOFy8nIYlf7+JaVMBw29gb\n7vfxO7e+CGnDorVTKI53HjoDC17gGE7yVXq5dhH9UWV9ysVeWUx/6Ium0+Xj\nytd16tGlZwA33HvO/jDzdxSHD27vkggY97CS1OmZI38ENQ+08639UdmS+3/x\nuNYPyPiT0jWQ8q14YpPX9AWQmza2+PSCUkx58luDJ+QaXcon/a2wCnbhnjsa\n74mOMwbkYAXHUtQmtPK5qZ29RZZJmLgva9npPr+huQuNLHUHaUw+aw3fFQ6y\nfpVv0s0F0Jj8BW8kzKa4xj/h5eXmAIq01YKip740QEVL+YJgnnqCDBiUmfck\nhJ+Vl4tc8Hnz9+8Orhkb0N0Zi2mM6XXYBMOgvsLlywVfOOpNfLz4wfMEm4Jy\njJuR\r\n=tbed\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","husky":{"hooks":{"pre-commit":"lint-staged"}},"types":"build/index.d.ts","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"32c76726558afb737727882499aa1c63bc8c72eb","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint --typescript lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=shellcheck,@types/jest","test":"npm run doc && catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc","check":"./scripts/check-filenames.sh && ./scripts/check-licenses.sh && ./scripts/check-deployable-lib.sh && shellcheck ./scripts/*.sh","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --typescript --fix lib test","postinstall":"if [ -z \"$CI\" ] && [ -d \".git\" ]; then husky install; fi"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --typescript --fix","npm run doc"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.4","skhema":"^5.3.3","json-schema":"^0.3.0","@balena/jellyfish-logger":"^1.0.29"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^26.6.3","husky":"^5.1.0","sinon":"^9.2.4","deplint":"^1.1.3","ts-jest":"^26.5.1","typedoc":"^0.20.27","depcheck":"^1.4.0","shellcheck":"^0.4.4","typescript":"^4.1.5","@types/jest":"^26.0.20","lint-staged":"^10.5.4","@balena/lint":"^5.4.1","@types/sinon":"^9.0.10","@types/semver":"^7.3.4","catch-uncommitted":"^1.6.2"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_1.2.15_1613972585157_0.7836916319511491","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"1.2.16-renovate-non-major-d04649778c00a91ef49b34905815f7e4a0b8a561":{"name":"@balena/jellyfish-plugin-base","version":"1.2.16-renovate-non-major-d04649778c00a91ef49b34905815f7e4a0b8a561","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@1.2.16-renovate-non-major-d04649778c00a91ef49b34905815f7e4a0b8a561","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"4867c8840007ad5f0d8e0b46f48b64bbfd14dd10","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-1.2.16-renovate-non-major-d04649778c00a91ef49b34905815f7e4a0b8a561.tgz","fileCount":18,"integrity":"sha512-Z1rM8GbnMd6+Je2UxjYm6Jmdl1T18edzwry6oAWsrd8sxmjAouiczrClZKAekKwsuB0cQUMgIQYQsyYmrMDabg==","signatures":[{"sig":"MEUCIQCw1d6aRb/1cURIxrA5/xaO1wfoctb24NDobKjUEiZkPwIgMkyqoFtW2ggUWSifjntNfV6qYetilxZQiV0w508XU4A=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":28726,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgM/p/CRA9TVsSAnZWagAA6JwP/2sqZZci/ma0AE2lSUox\nZISAjPrDM8AbyFRV1XdcyaID7Oikd5ahkJjCLeqbqC2lpzpKgODs5qFeXJEU\nl7kP/i63VoV7Iao3GjN+BfLbcqPoctW4xQ7DEcGeYj84WDn7DQQ2kpfJCU+u\n1JSScQ6L3e5amellPD5OQgMZMD1fxB5jXQuQA3E2sXuV0DrxHZaefkuv0qu7\nY/PIhjJTvj7IBkpox/WWUBMHGXO3muBEXP7em9ei395NzAOBrNp3/CGFufvX\nvqQsC0gUyZHi+/iJi4pxCQo74/Jl8kPJpB6aRgS3f444ap893qsvVxSQcI11\nTbEDFI2KZsGQFMo9MYWkwssMUbHt+iLfngJjUhAay57xSpukPfiBMwJOt2KC\nA3jM0lhxc1jyr6DnVvFkuuo15xGGRmhLJ7h80BvKyRIOU1XLXr2xbnlgnS9f\n5fm4/e02SU/ECac+pdnZn1OjGLsm7SB6DvICVqLXzfiZFAm3VzOttFGLbQxD\n5e/MfK4moB0uESKnf5D5nAfjWxou4zxVuFeCd+SFV1S3Eio7pwQ6X+fqT7Ky\nBId3h+P2LthMjhaHo9V1S9ZeE5WrVOB0SRbBDvZ28BOkQX1qVXfGKkzYQKgG\nd2i2TXjk72nJHM6DiS2R/5kjIUyysy7CPqiI07IM2vqlzsrWTs6elyNISf8E\nsex9\r\n=1sFK\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","husky":{"hooks":{"pre-commit":"lint-staged"}},"types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"d04649778c00a91ef49b34905815f7e4a0b8a561","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint --typescript lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=shellcheck,@types/jest","test":"npm run doc && catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc","check":"./scripts/check-filenames.sh && ./scripts/check-licenses.sh && ./scripts/check-deployable-lib.sh && shellcheck ./scripts/*.sh","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --typescript --fix lib test","postinstall":"if [ -z \"$CI\" ] && [ -d \".git\" ]; then husky install; fi"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --typescript --fix","npm run doc"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.4","skhema":"^5.3.3","json-schema":"^0.3.0","@balena/jellyfish-logger":"^1.0.29"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^26.6.3","husky":"^5.1.1","sinon":"^9.2.4","deplint":"^1.1.3","ts-jest":"^26.5.1","typedoc":"^0.20.27","depcheck":"^1.4.0","shellcheck":"^0.4.4","typescript":"^4.1.5","@types/jest":"^26.0.20","lint-staged":"^10.5.4","@balena/lint":"^5.4.1","@types/sinon":"^9.0.10","@types/semver":"^7.3.4","catch-uncommitted":"^1.6.2"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_1.2.16-renovate-non-major-d04649778c00a91ef49b34905815f7e4a0b8a561_1614019199198_0.28203815291268364","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"1.2.16":{"name":"@balena/jellyfish-plugin-base","version":"1.2.16","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@1.2.16","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"5dbbffdd45426099708f6240213bb033eed85044","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-1.2.16.tgz","fileCount":18,"integrity":"sha512-3dErmgBJBmzJj+zlfimS0B3/HvdrceT8IipRFSroEOe6g0UhyIdT90O2DqDBdPrsY6sMob/7R+Mb0MbpcS44mw==","signatures":[{"sig":"MEYCIQDIp7/RYIM8Zq1TqAE3MSaKqwkN5At2TfBKtmpZ6lw7AwIhAJ3Aw3yJZ9ruxhs4AH12BjkSX6hMiDJjkcVKxoJT+YFo","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":28666,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgM/tDCRA9TVsSAnZWagAAayAQAJGcOip8LARIkJB87Xry\nfEHy0HiHzDg60K7S2lOSmN+vmCjL4qkH6pX5Af72+7ui3WJuyXB3tkoCQ+kV\nxXIe1PvMPFVJz0CKMDt4JvrkabMCVrOlUFRxMfkcc7R/8vNiwMC8AZ3P2ztj\nvSH9zSEdnBOlcwoo533wKtAREdInKgpWIxY/CLRdxMEQmRnca9lsQJny2IFj\nipZDZh51yUp1a8VIJv579FPs3f3/+3l5t2bAsqUe7Q6L6XFtjjVVHjCaq+qG\njS1Hetx1ugSNPt5GdP009tN23Lxl7TTV4YCKGk8uwxffPUii/W4NGhMKkMze\nARzXYUiFpqAUqfGvY2SrxMPlJxhZ7uDwN3xZbxodDNK+NQhM3Es55xQPmdBa\nCxfR/eBYmcIIvzhFqMb9YiMWgEqSvytjzUDR22ZhUSPUAiGFFv3cGxyJpb3h\n0rhzIryRDQ8DT84wZkhC6YGbs4hz8TcoiIofobaYuaJ+SJYbWwuw1vbYOjBR\nzARl7QtlX92l+M4Jk2nMCE/qv4gO83BQwwR2eQPwdjB8pD6hqe2g+IJruuFV\n5V8cZKsQMPWPttSvZHn/jNh5mc1bafbknJNaUd4BnaXFcg2Nfn5XWQ+caiyT\nIwGoLP3LgEPIx58jcrgsBlUOUl/c8IZE7MgbkHxMwvjQ2Zb/HpsJYhGcLefA\n99eP\r\n=+AkS\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","husky":{"hooks":{"pre-commit":"lint-staged"}},"types":"build/index.d.ts","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"079f2131b5af51f2776351dcaf536acda3fb70a3","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint --typescript lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=shellcheck,@types/jest","test":"npm run doc && catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc","check":"./scripts/check-filenames.sh && ./scripts/check-licenses.sh && ./scripts/check-deployable-lib.sh && shellcheck ./scripts/*.sh","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --typescript --fix lib test","postinstall":"if [ -z \"$CI\" ] && [ -d \".git\" ]; then husky install; fi"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --typescript --fix","npm run doc"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.4","skhema":"^5.3.3","json-schema":"^0.3.0","@balena/jellyfish-logger":"^1.0.29"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^26.6.3","husky":"^5.1.1","sinon":"^9.2.4","deplint":"^1.1.3","ts-jest":"^26.5.1","typedoc":"^0.20.27","depcheck":"^1.4.0","shellcheck":"^0.4.4","typescript":"^4.1.5","@types/jest":"^26.0.20","lint-staged":"^10.5.4","@balena/lint":"^5.4.1","@types/sinon":"^9.0.10","@types/semver":"^7.3.4","catch-uncommitted":"^1.6.2"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_1.2.16_1614019394769_0.12848403170038303","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"1.2.17-renovate-non-major-f6d790530e140ecd0ae7272453028920b7606e57":{"name":"@balena/jellyfish-plugin-base","version":"1.2.17-renovate-non-major-f6d790530e140ecd0ae7272453028920b7606e57","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@1.2.17-renovate-non-major-f6d790530e140ecd0ae7272453028920b7606e57","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"d48d7e367e280db830291d148ae82af934de3470","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-1.2.17-renovate-non-major-f6d790530e140ecd0ae7272453028920b7606e57.tgz","fileCount":18,"integrity":"sha512-VuKKYnpMcpjBq2+oVo8G0Y24pO6EzmTRgn2NcUjv0DPtYsyn+9c2daq5NIGWYMN0ewdUFUHv0/MrepY3Gpj8qQ==","signatures":[{"sig":"MEQCIH5GJ0tJxYAKMa0T1NSRKiGfYYnKD22sBPq9S6jWK2nMAiAD92IxOsuUG3vTQTuV8Zx1sURdd66cQZUGRPx/6F9pKg==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":28829,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgNBuYCRA9TVsSAnZWagAAzYkP/3nuTxaUXQJjHm1aPakh\nRAuhDxOLqeYM3KKfZYoR33IVcXwbBYdfmyH/MC0StEFxBqKpaPzkh32voDQ3\nuARW7pKwDWODgzCXo/LN2uPW/771aGTgXrGLgD27TVFmvm9dFn87LL3r3pO5\nliQoPpYSCopxyItznyrcE0U0YAKYFQPG6esOFG9+H9d0fSFhVRN5ytYfBtIp\n49iA6GmJgwFG335+XaN0Szszt7lK5GIuJNKOOdTQ4B6c3OIqPsy9POqG3gSL\nj7xYDuEPZUYfpBL5dtK+6/xEzUCiLqb20e8JKDSb8eK9J98btFRYg7XQwDMD\nIeOLrPIxUmYfT+5fwhzWWAFdgy0MOW2kcDvn5E5FTgiyn8gsd6kZ9VUlUn+e\nUE0fMzNRaevwjBxAPHjX1I1HRAfcwYW4rJ0xgEC+BU6G3ePPPIoWUbPGIPoA\nG9njViENs8NVI7OFifE6e2BETIfIezJjDAljTLOjAQW4p7wv4SSkkBm3EXzr\nlHcOYC4bHycgkh4b1WkijiuuiCb+xjlZxhMJ1urwxHF2qBfoc/n2TIm5K8nD\nrVX4MoTcIWIfT1ep4JfdKNdfymC8gxawyqy0iy8SUw+Aa6vXGTT4dnX4oaHe\nO48MMG/z0jQvimz67DHVsGpBgad9HHYAEZsDfXZbdOcXffeUCm1gDgUvK+F2\nA8dh\r\n=sEsT\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","husky":{"hooks":{"pre-commit":"lint-staged"}},"types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"f6d790530e140ecd0ae7272453028920b7606e57","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint --typescript lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=shellcheck,@types/jest","test":"npm run doc && catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc","check":"./scripts/check-filenames.sh && ./scripts/check-licenses.sh && ./scripts/check-deployable-lib.sh && shellcheck ./scripts/*.sh","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --typescript --fix lib test","postinstall":"if [ -z \"$CI\" ] && [ -d \".git\" ]; then husky install; fi"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --typescript --fix","npm run doc"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.4","skhema":"^5.3.3","json-schema":"^0.3.0","@balena/jellyfish-logger":"^1.0.30"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^26.6.3","husky":"^5.1.1","sinon":"^9.2.4","deplint":"^1.1.3","ts-jest":"^26.5.1","typedoc":"^0.20.27","depcheck":"^1.4.0","shellcheck":"^0.4.4","typescript":"^4.1.5","@types/jest":"^26.0.20","lint-staged":"^10.5.4","@balena/lint":"^5.4.1","@types/sinon":"^9.0.10","@types/semver":"^7.3.4","catch-uncommitted":"^1.6.2"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_1.2.17-renovate-non-major-f6d790530e140ecd0ae7272453028920b7606e57_1614027672278_0.23776211555347904","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"1.2.17":{"name":"@balena/jellyfish-plugin-base","version":"1.2.17","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@1.2.17","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"3ef763312492819b89c114b837463154eef8db1a","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-1.2.17.tgz","fileCount":18,"integrity":"sha512-X+EA/gROQu0ys0mPIuIjBkNN2nRKH0a4dP+RJeGbSWzU7Dil41RNZAeCJgKlVR25PO46WUWWsMWilbADKLUFnA==","signatures":[{"sig":"MEYCIQDOJ817s7B22kjcZrWZf44LYX8InnZcaD0bb+byszm6JgIhAMWNTo+VNgVLumvUS0O9qd1m3eFQCB5oCtbd61IzuXWG","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":28769,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgNBw7CRA9TVsSAnZWagAAsgcP/Rfhw9eYpVaoY/nDV2OQ\nx0eMmD/bqKeLvJ5q8+SlxGld2FdfiovJ9rpF/la+k/9Dld+9pN6/4VzUh0J8\nXrOHCt5FVsY8UW/RZ5AGOHOghp53ZvTjJdZz0XV1Vc2XAElhrdblOPKK3whw\n/ZYgsUoMaE6zpQ9erjDa+17ho8E074rv5PGtDrgSxpVZLmMQEi4iSUf6yXie\nr4JILScwrtVJLOZPbf/X6SlplhHIzGBW7WQSAelyHxx9+Ib9effRDfBAXzCD\nN1ZAX3/m2Jefubl19bwZO2TF1CAzB+ULZBSbv/ufAld2NWemWEmLEip/o4mP\nMYSrLXjMPPFWHdMP6N7fA9WS/jUuLyQMWetSy/qxSC4YE9UazFM7myllVHJk\nhMmYuraWZyRmX/PO2pkYybMLFSt70QkvPMN/g1rQdkMvMk3Zo4WXwtAsqwW0\nQpz2txtQ/v7CVNKOcBzArGWmo3FdBvj9Iaidvrd/NsR6ecuxR4qo6D9irMUP\npKr/Ddybihno+XzGkkr8S83U/B0R7rbl9pVku/O9XciMeOfTZzPoxmRRwBoW\n4qD8cHHxY9ftKMXaOJExOtwcNQACIJ/cmgMCiOlTWufIbJSWexMvjTSjn7IJ\nJ2EJ27D2x+WxnBQLFRz3AiW8TM8+UnulS5/NICB5Ux/OLr2f6om+d+ZwRvoV\nDGjw\r\n=1pVw\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","husky":{"hooks":{"pre-commit":"lint-staged"}},"types":"build/index.d.ts","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"c2e514c882d9135b2f7f09f8c4f47236073d17fe","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint --typescript lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=shellcheck,@types/jest","test":"npm run doc && catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc","check":"./scripts/check-filenames.sh && ./scripts/check-licenses.sh && ./scripts/check-deployable-lib.sh && shellcheck ./scripts/*.sh","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --typescript --fix lib test","postinstall":"if [ -z \"$CI\" ] && [ -d \".git\" ]; then husky install; fi"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --typescript --fix","npm run doc"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.4","skhema":"^5.3.3","json-schema":"^0.3.0","@balena/jellyfish-logger":"^1.0.30"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^26.6.3","husky":"^5.1.1","sinon":"^9.2.4","deplint":"^1.1.3","ts-jest":"^26.5.1","typedoc":"^0.20.27","depcheck":"^1.4.0","shellcheck":"^0.4.4","typescript":"^4.1.5","@types/jest":"^26.0.20","lint-staged":"^10.5.4","@balena/lint":"^5.4.1","@types/sinon":"^9.0.10","@types/semver":"^7.3.4","catch-uncommitted":"^1.6.2"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_1.2.17_1614027834928_0.4763807121001391","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"1.2.18-renovate-non-major-cf2eef7cecd164fd76273a403951e200e89d992a":{"name":"@balena/jellyfish-plugin-base","version":"1.2.18-renovate-non-major-cf2eef7cecd164fd76273a403951e200e89d992a","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@1.2.18-renovate-non-major-cf2eef7cecd164fd76273a403951e200e89d992a","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"205a0e64e91cb22c5006a83a72ac7d3b307b4e50","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-1.2.18-renovate-non-major-cf2eef7cecd164fd76273a403951e200e89d992a.tgz","fileCount":18,"integrity":"sha512-HuALM66BTirzDNIdNJQFaXVYpCkpf+x8eWpYvKLzjPju/+L8SkFFHMeNsIfnPmnd20hMvLCsPxhEEn4Nob5Y5g==","signatures":[{"sig":"MEUCIC+904cn7t3jQKn1A8CAIeMQOZ7bNcmEy5+P+8PTmqlxAiEA+0YQ1ip1cR8LBgCV2IeT13DNhhCnG2gNgaFMCUCUHac=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":28895,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgNIAUCRA9TVsSAnZWagAAt1gQAKIjY/YHxKs6I2nYDQtL\nq6unvh7pUI7br83PGl7Yq3YBsmoGoXCd/wtYZ6pN1bP0fibAXXjW4xGafz6c\na/mV2q6Ygz6JOB6adr87E6NE32Vc/3a0G99PK5LGW4JZgZ4gQQIwcYtQPskg\nHtmu8JfS6+7pCFKOEoYOKrrdFPUIcEFbnKa3X3uPtGAiMpf+AzlCcygczjkj\nCa36uoHh0r6hMiKQ5pUCEHJgLTddSqXNnwUZ92MytILQgyaBIvZhcigYmxCf\nfMh0Y6yU+Dt0OiBTjAWmt6vlQnIPwkT9OY+uQRpYAf5BIpRC0rXRJOWo6LY2\nlmd8QzMMJazH/2yOz7LBO/99bQboWbFfc1aPnuu1PbwwfDAhwEu5s5O9pI+Y\njxdzMKFl5NJhNymBx6bIsdLN/nloiTHVslsqgLtoKUCq4WsC/S5QgQ8QoevX\nfV4WozD4pydpaPq+B4Y1+heFkVAAKmS2QW/qrDUclcqvO+1IZEcDS6o9kT0C\nLhrr8LJqFaLCKANsgs4N68pFt2dUAgO/b3bSVw1QWpqv/EMPWmZfrs2S/wuz\n98Sr+uvXdfVEmM/T11udlvWfTHpfXPi2eeZzmOhhRwwu4eTuYd7kcPcGG2G2\nGSv4g3AtPUdR8IY8FtYSm6vxJyGduNyhtVoVQPGI8Lj8UG2ERD0EKbnAf5KQ\nslvA\r\n=AGbc\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","husky":{"hooks":{"pre-commit":"lint-staged"}},"types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"cf2eef7cecd164fd76273a403951e200e89d992a","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint --typescript lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=shellcheck,@types/jest","test":"npm run doc && catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc","check":"./scripts/check-filenames.sh && ./scripts/check-licenses.sh && ./scripts/check-deployable-lib.sh && shellcheck ./scripts/*.sh","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --typescript --fix lib test","postinstall":"if [ -z \"$CI\" ] && [ -d \".git\" ]; then husky install; fi"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --typescript --fix","npm run doc"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.4","skhema":"^5.3.3","json-schema":"^0.3.0","@balena/jellyfish-logger":"^1.0.31"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^26.6.3","husky":"^5.1.1","sinon":"^9.2.4","deplint":"^1.1.3","ts-jest":"^26.5.1","typedoc":"^0.20.28","depcheck":"^1.4.0","shellcheck":"^0.4.4","typescript":"^4.1.5","@types/jest":"^26.0.20","lint-staged":"^10.5.4","@balena/lint":"^5.4.1","@types/sinon":"^9.0.10","@types/semver":"^7.3.4","catch-uncommitted":"^1.6.2"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_1.2.18-renovate-non-major-cf2eef7cecd164fd76273a403951e200e89d992a_1614053395409_0.14715785782565027","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"1.2.18":{"name":"@balena/jellyfish-plugin-base","version":"1.2.18","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@1.2.18","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"42b8944e5e1e4b9a10b1e50aa9ff9c8d246f8fa6","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-1.2.18.tgz","fileCount":18,"integrity":"sha512-7CVaBnf8QYc2w7AiuyXPUU0VpIvzWCu6rYUPQ5Uiiodda89Y6G01gUAnq9uv6h/bx49rR/G71/3cO5fQ2F/y4A==","signatures":[{"sig":"MEUCIQCAanGdDxPJDtpdVbn5+TXOk4LKVQ9kULox6VUc/wJDxAIgPzG3+59R7auA04LIZgdByRRGqUGVrG/LBr+4ripm2dY=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":28835,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgNIDUCRA9TVsSAnZWagAAr6wP/18z8AN1XJz1CmFCkpil\nPkSkNXTpjZXXXkCRXVHvO9SgxlOLpj3evIrX/2pPasXHBUwVnlpANiNMQ+hw\nRmLCNgKt0+bsd40v9jvozEcGyehkm/qMfE0pJR5P7fz2OHCqJJvPoV0kuivQ\nmx4c2XKrWCGHTamSXt0vIGUDU/ZvLI7hmgNBX2D/XcoIdLZc4P2FVp1LePhj\nMHFbmhMn+Rj2n0UQFuRacWIWwBRxusTyAbHPgU5bRr25fYuEVwEhdRfgX1WZ\n6siX9vmwMDxd9H2avm1bWTW2ouqK0hPPbLQgmguqAn4FsJ/k9oCGAz/3sWxG\nXUcN/zfjXcWbo/mfAE9f0s0hmxK4+tsivlrjLffvTtFnDp4+P1DD0OaUazOb\n7/yjTyTcSabzx8OzI/o4gvfJxq+vDKi/m/dBMjpLa6pjTAc6cuYakSFj/mI4\nT1p0UwZpWgUya7ThewBcIiE3bCj8mTBVtkFtj9G5PyGZ/GxB40fNnMtjeMgg\nJmtBhaXCfev6S6Xs/qGCpZcKq0TTOnos4bQ6SQ5dew4TEs+wKNW6qJMWvMIo\nJQRm7Z+eWGFsSJDC4U3MiZUqzsF+Alr6Ig0M9+BBd7HiSdUM3/UsZFsDHh9p\nrQ0dbubYMqno9h0DIoLRGSs9iwwPBOMLYECFLNU1P07gn1BYMvM2KQX5SPSk\ncgbF\r\n=s7Z1\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","husky":{"hooks":{"pre-commit":"lint-staged"}},"types":"build/index.d.ts","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"a3f4389aafae6780e203c3e3304de59a6a180a8d","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint --typescript lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=shellcheck,@types/jest","test":"npm run doc && catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc","check":"./scripts/check-filenames.sh && ./scripts/check-licenses.sh && ./scripts/check-deployable-lib.sh && shellcheck ./scripts/*.sh","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --typescript --fix lib test","postinstall":"if [ -z \"$CI\" ] && [ -d \".git\" ]; then husky install; fi"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --typescript --fix","npm run doc"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.4","skhema":"^5.3.3","json-schema":"^0.3.0","@balena/jellyfish-logger":"^1.0.31"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^26.6.3","husky":"^5.1.1","sinon":"^9.2.4","deplint":"^1.1.3","ts-jest":"^26.5.1","typedoc":"^0.20.28","depcheck":"^1.4.0","shellcheck":"^0.4.4","typescript":"^4.1.5","@types/jest":"^26.0.20","lint-staged":"^10.5.4","@balena/lint":"^5.4.1","@types/sinon":"^9.0.10","@types/semver":"^7.3.4","catch-uncommitted":"^1.6.2"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_1.2.18_1614053587685_0.8254102374511536","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"1.2.19-renovate-non-major-08f91ade875868d6db2e572e626acc91aa36e521":{"name":"@balena/jellyfish-plugin-base","version":"1.2.19-renovate-non-major-08f91ade875868d6db2e572e626acc91aa36e521","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@1.2.19-renovate-non-major-08f91ade875868d6db2e572e626acc91aa36e521","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"78b4263dd5f61b144126278ddf542e84da2c17ce","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-1.2.19-renovate-non-major-08f91ade875868d6db2e572e626acc91aa36e521.tgz","fileCount":18,"integrity":"sha512-ryjCYftEDU3ktWwpRpDZvsyxfCueWojo7UZjJ3rsT0Q6Yuqpwxo2kJeVRD2ZUW2y71AVOFTDlK2QN8iAE9I5nA==","signatures":[{"sig":"MEUCIBNcu32p/aPRqS85j+1d8xgaCf4HeqPKxOVsXorblB99AiEA0lc9FQVv4Sb8eHRDCEtx9zwGnb4evzvmuN7NZZV3tdw=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":28998,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgNOb1CRA9TVsSAnZWagAA3YwP/RcqZmxVwjB7nyB/ewT7\n6cjqtBJBYlmIwWLyRsXIuIkTqCEHSTKM40Wjm4EKj8zdE1BK9I042wUkqzef\nV3qbz1SeTqzyBCJ2IkxqoCVvKyQJzHv6b/qEFQdN3R7piVmec2M8b+A5r1m6\nrWkA0lr8o97yqrIeqYdBeuwTgAGYt/kPYuU90nqEmxwB8xKGnYFEexeuJEJK\nJj5cJ5hMfsYGY79J+xViDdwczs1+hWW8w+IdBW/EgyQT746f2+V+Bd0j7OWk\nD5EIKTs4UPFB+FCzHR1Sg0MaduHJzSofcEZrTNHo095FtDUNNgxb7+i2H2/c\nRrCpiLwT1NzCyu+zcwkzqVy0hNbZyWzvZR65oI3j5kfozRyVlyHhpPr/UhT7\nxF0wHYeDQd5Lm+WNey6KkXIjPVOqI73lWcj2qVcCvBtgSvC2uO5bKhVfnLO2\n8Ae8/erENxUIeNJV0BQkqvXw/OhxosGcJrPwn2VMxkTz5hEKg9k4C8ssSv5X\n0dtCHRDQkVVkHPiDcNHwhlhH2OJmGgUnsA+tTvwOWpikLx0McS1YiE4gBh2z\nw/tZdrsFMptYLuM6ou/9tXAENOY0a/RJtpFCralda6f1qwluXE0ulEBmBZMG\nxcHpn63Slj3W3LgtIUgwNcX6j2Hg0j6uXQQX0g3hOSgAi8GHuCtSrbS/mRIY\nmI7U\r\n=QY5n\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","husky":{"hooks":{"pre-commit":"lint-staged"}},"types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"08f91ade875868d6db2e572e626acc91aa36e521","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint --typescript lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=shellcheck,@types/jest","test":"npm run doc && catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc","check":"./scripts/check-filenames.sh && ./scripts/check-licenses.sh && ./scripts/check-deployable-lib.sh && shellcheck ./scripts/*.sh","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --typescript --fix lib test","postinstall":"if [ -z \"$CI\" ] && [ -d \".git\" ]; then husky install; fi"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --typescript --fix","npm run doc"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.4","skhema":"^5.3.3","json-schema":"^0.3.0","@balena/jellyfish-logger":"^1.0.32"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^26.6.3","husky":"^5.1.1","sinon":"^9.2.4","deplint":"^1.1.3","ts-jest":"^26.5.1","typedoc":"^0.20.28","depcheck":"^1.4.0","shellcheck":"^0.4.4","typescript":"^4.1.5","@types/jest":"^26.0.20","lint-staged":"^10.5.4","@balena/lint":"^5.4.1","@types/sinon":"^9.0.10","@types/semver":"^7.3.4","catch-uncommitted":"^1.6.2"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_1.2.19-renovate-non-major-08f91ade875868d6db2e572e626acc91aa36e521_1614079733379_0.7763211476481213","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"1.2.19":{"name":"@balena/jellyfish-plugin-base","version":"1.2.19","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@1.2.19","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"6cbdb9fa083337c3f1f543585c1bb1697ed9772f","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-1.2.19.tgz","fileCount":18,"integrity":"sha512-crin9qnK1SQ+/UJT4vWKp7oOLemYyTU9mSYHOrofYA6Cm/NecIRzOCO8u8VD/02NHjnPTNPZwPy0cZ6gw8dR+A==","signatures":[{"sig":"MEYCIQCPzRs8JvOdFrDpRXSTtjQziU/6S951WaWxfPzBpCKlkQIhAKczbkZulf5bMWHFNrZ4wIvR67pb6iPP3vnEm3vRWM3q","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":28938,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgNOe7CRA9TVsSAnZWagAAhHkP/R7w+HkOcfEO/0J26Ctc\ncNHSSMhVyo7ZtZ8oPCmbbZCNdNSCiUIRrG1i4sdNfKywt18RD3sKDJ+pkiy9\nA+CA+oUGRTgiwiUpkJ/Urbs6LsWhTii+mosRrKPdHcOhk8EQAn06XmZC2YJk\nT9iS3i+tMnnXnWx42SnZ5Tr/2/6xrodv/1NVYPg/QN5Uojmao1i+xhD+OUcf\nmnFjmnVKrZSoK4RoBIhZ5IDkaN/xVN+Yc3sbXgiyAfIBXjogsv1nJoLSHk4l\nmP2ZUUARvEr3/i7UPn+Fe+IGtaNEnZkhX9WSEhSXvD+scSdjJD/1R4jApt+7\nATzulM+1yTaYAlfKUDd0M+yCQO9F9fSiCvH1R+SROo/CcDYOeexwKFBtFhAm\ntnsxTCcdmgAS1cvxD1SZvYDODyRMFm0wRQ8aEC3OahLQlwK8SvoEJ2PmdzEF\ngvlKMr47HgHTMkoVZQPsivp3xVJVSrFzIHmfMA7BWtxg1I3nuTpeMVm3cJ4k\nrHK4bzRQD9PJ2eVoStex5EH5kmuDQTbrqiqcUvoVGZusfoy6qcA8t55WXhWt\nK2MBTm25wSTEeN6PRS0ca34SozwwcWmmH0lWUKchZO6cuQ0b1fbIzrKVhwPF\nq4GUlZa98ERtxLgxSlrP+VD9qVxBQGbjj3gZezIB3SyocfzH8XCpFdLqgzDv\nexQU\r\n=9l2P\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","husky":{"hooks":{"pre-commit":"lint-staged"}},"types":"build/index.d.ts","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"58bf66ad438e825e924f1ea94ab56d511adc8c1e","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint --typescript lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=shellcheck,@types/jest","test":"npm run doc && catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc","check":"./scripts/check-filenames.sh && ./scripts/check-licenses.sh && ./scripts/check-deployable-lib.sh && shellcheck ./scripts/*.sh","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --typescript --fix lib test","postinstall":"if [ -z \"$CI\" ] && [ -d \".git\" ]; then husky install; fi"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --typescript --fix","npm run doc"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.4","skhema":"^5.3.3","json-schema":"^0.3.0","@balena/jellyfish-logger":"^1.0.32"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^26.6.3","husky":"^5.1.1","sinon":"^9.2.4","deplint":"^1.1.3","ts-jest":"^26.5.1","typedoc":"^0.20.28","depcheck":"^1.4.0","shellcheck":"^0.4.4","typescript":"^4.1.5","@types/jest":"^26.0.20","lint-staged":"^10.5.4","@balena/lint":"^5.4.1","@types/sinon":"^9.0.10","@types/semver":"^7.3.4","catch-uncommitted":"^1.6.2"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_1.2.19_1614079931232_0.9312209788545132","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"1.2.20-renovate-non-major-6031836d5271b86e5da7962483d75ea4a3dadba8":{"name":"@balena/jellyfish-plugin-base","version":"1.2.20-renovate-non-major-6031836d5271b86e5da7962483d75ea4a3dadba8","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@1.2.20-renovate-non-major-6031836d5271b86e5da7962483d75ea4a3dadba8","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"4269390c47979d27aa4e14c8e96dbb14af288052","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-1.2.20-renovate-non-major-6031836d5271b86e5da7962483d75ea4a3dadba8.tgz","fileCount":18,"integrity":"sha512-OzJO6ls6mIZi5KhCfeDiZBURUlY+c9MbXaY7TdI8/Sg+eUHchDI9LjyuyJOmAeouNCETNJ+8cnee5+j0B7sqQg==","signatures":[{"sig":"MEYCIQDM5HJauBnEJY8Kv0NOh76vkfhUaoaW9Mf/YXN7spBrcQIhALn0ahUIKfF0Wz7qylVW4di2j74Z+DXc5m+uPTbOZLKX","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":29101,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgNRc7CRA9TVsSAnZWagAAlt0QAIPB4kpKUTDjt1iQmAdl\nCor1OFosCMlT73BFagPYeiCNUCdr5AoSauF+sxb9P69EJYduOLl2CMyvoTV9\nkMs4RBXiMFz3f+hKh9/PfW0alc/F2oHbwm/KUUycpgnjz9eQHbZgUwcxKP0A\nFUPrSYBhhnBCpZOOsDvyo4klSxyiL35ppGu13vu8X9P/flmWMAcBVWFBGKTp\n+KqGZNZqz/v0K1S3bW+PtdeXO2tOxVyCWR2xEMPTEC4fHPRfj+9oo4Z0Eg69\nFthLpYP5quFbUPX/pDm0tr8cmHvkBXyw9HhfP0MoIqzWwkX0aNUAnH/Tn2Yf\nIMT5kFhQvZIwY0AKfMLxwg5o1tFo+bTHIi7o0Tyr9XDL6Z74MXjVCV4Vq8en\nwL4c9K2iQNWr3dR8V4mO08yhY6uF+sEOIot8mwULnGkaJmXG+1wei7BUfLYp\nZIdLcubg65wxXIzeBQoou3fm/A8SKt4PORAqnVUhEgmgbllaLN5LnoY6dww8\n3HvnAZjV8W9waIspjT1KduWBbbRONrYjYaR9WB+SabXdInMfjMHowlC9RSnr\nKgrHOUNfPXABtP/ikRDRp9S5o8E0AW0pyyYUGzFXKtTz/x3eICM8Wy6V8mf8\nAVfrQdAbwjPKv9cK0QFPByFS91hPg1AMeZCGR/Fy+wTd7BeJufGZDy8jglMk\nzuYr\r\n=WGR0\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","husky":{"hooks":{"pre-commit":"lint-staged"}},"types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"6031836d5271b86e5da7962483d75ea4a3dadba8","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint --typescript lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=shellcheck,@types/jest","test":"npm run doc && catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc","check":"./scripts/check-filenames.sh && ./scripts/check-licenses.sh && ./scripts/check-deployable-lib.sh && shellcheck ./scripts/*.sh","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --typescript --fix lib test","postinstall":"if [ -z \"$CI\" ] && [ -d \".git\" ]; then husky install; fi"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --typescript --fix","npm run doc"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.4","skhema":"^5.3.3","json-schema":"^0.3.0","@balena/jellyfish-logger":"^1.0.33"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^26.6.3","husky":"^5.1.1","sinon":"^9.2.4","deplint":"^1.1.3","ts-jest":"^26.5.1","typedoc":"^0.20.28","depcheck":"^1.4.0","shellcheck":"^0.4.4","typescript":"^4.1.5","@types/jest":"^26.0.20","lint-staged":"^10.5.4","@balena/lint":"^5.4.1","@types/sinon":"^9.0.10","@types/semver":"^7.3.4","catch-uncommitted":"^1.6.2"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_1.2.20-renovate-non-major-6031836d5271b86e5da7962483d75ea4a3dadba8_1614092091085_0.5862790265395355","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"1.2.20":{"name":"@balena/jellyfish-plugin-base","version":"1.2.20","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@1.2.20","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"f91624ec428f5c3f561d8954160b61e35b6f97eb","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-1.2.20.tgz","fileCount":18,"integrity":"sha512-FT31Raq/lBXutbVP9pQJ4qQ9l6FbbQyWPwVO77IH0zkHAVrLKWo/hKRbZ9Re9PzYZ8CsFv8YUDYg7sXEby6ZLw==","signatures":[{"sig":"MEYCIQDvPJNmqJ3F+aSWENtDdkLvRTku0MthsVfW8uaoIthLXQIhAKHoMyeTPzdc612jocrlxJvUrUBKB9Vus1BlDi6uLfbG","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":29041,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgNRf2CRA9TVsSAnZWagAA8aYP/jf9W258zk4DklQu+tr/\nCYKrswLXhqNCy0mp7sIf1WWRUyp+d06hYcmtVnY3Pzt6W/LbQ+AfNcvw32/c\nuwa+UXPXT4Rgt0QR4oov8uxapAec4F/f4qFYH9PrCLv0b8DQpHZOlSuc+Jso\no/ZBMkt8oReE803uCEzeg6EOtt0KvA32PoBoOZrKVbVtDOgkZEH8CgFwMbpF\nmoHT5dwuHLeP4ed17LsBM5ks+FMO8opoXaYVkDUynCnFn7qy6HQjbpTgii+T\nB+Yc5Xyc2X/q3JVU02VSyUAK0TD23yrrQ7waYQDLbetfr6c9WyyMgyNpuSQX\nevkNrrRbKPLM0E3iBncTmhb+J6Qi5lhJqXmyjkhb0fvxG3CqnTXB/w7FcGBU\nGwg1UgDDKsp+hv/e3/ZcgZToc2XYbPfcny6DI2Y6sdEAJaS4Zv9wdrESSkgU\nilZL0VGYsJsVTajI39q+kovkZiwnKsNvtVi6alC1BJJIk/Agm9UuqJGTv+W5\nqhj4UWb9GqPu6/Nl/iMczBM5nwn1RjA4gcRBTP5i7AsZfv/gg4CWKf8BG7W2\ni8CmjmxaTI/WWrp1qyimTR6vFbQtbHd5TQTvrLcKFq8fAHqnYUnvcZKmEAkx\n6KBZCsxhMD/DwV+HgNkbK4eigfuRKKMK0As5ZACrIW6evB+HfFLUK6wS4Mba\n7FB7\r\n=f7R/\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","husky":{"hooks":{"pre-commit":"lint-staged"}},"types":"build/index.d.ts","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"72d00b28863d4a2fa47bda0caead7f204577b34b","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint --typescript lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=shellcheck,@types/jest","test":"npm run doc && catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc","check":"./scripts/check-filenames.sh && ./scripts/check-licenses.sh && ./scripts/check-deployable-lib.sh && shellcheck ./scripts/*.sh","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --typescript --fix lib test","postinstall":"if [ -z \"$CI\" ] && [ -d \".git\" ]; then husky install; fi"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --typescript --fix","npm run doc"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.4","skhema":"^5.3.3","json-schema":"^0.3.0","@balena/jellyfish-logger":"^1.0.33"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^26.6.3","husky":"^5.1.1","sinon":"^9.2.4","deplint":"^1.1.3","ts-jest":"^26.5.1","typedoc":"^0.20.28","depcheck":"^1.4.0","shellcheck":"^0.4.4","typescript":"^4.1.5","@types/jest":"^26.0.20","lint-staged":"^10.5.4","@balena/lint":"^5.4.1","@types/sinon":"^9.0.10","@types/semver":"^7.3.4","catch-uncommitted":"^1.6.2"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_1.2.20_1614092278229_0.09461356105297569","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"1.2.21-renovate-non-major-10364fb7a9b4074734380c8e4bb421f6b8c5e9f5":{"name":"@balena/jellyfish-plugin-base","version":"1.2.21-renovate-non-major-10364fb7a9b4074734380c8e4bb421f6b8c5e9f5","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@1.2.21-renovate-non-major-10364fb7a9b4074734380c8e4bb421f6b8c5e9f5","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"a18d357f2baf24c8de5e36cd24d7685b6164276c","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-1.2.21-renovate-non-major-10364fb7a9b4074734380c8e4bb421f6b8c5e9f5.tgz","fileCount":18,"integrity":"sha512-HBZBaincYNcens2b253bXoBCpGqK52M6TM8zdlmFgsj8XYB710JHs2vBk+iLwMXX5R43Hlhq0+pek8P7QKl9rg==","signatures":[{"sig":"MEQCIHMX4yHgofY/BOu8sfQw1tehvuVPLInmz+yctix6k2rbAiA6YORz1IptRnbFTV3cDbbQPQIqSiqWqyI3GyP+9//TGg==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":29167,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgNYRWCRA9TVsSAnZWagAAiTgP/3D7Y37bFuE8INKuKCHN\nBWL9zq4vBVklH0S81HFV+U5ySA2qQwjrrEvZCG5+UuHXlmF1FqCtCvp5X51T\n4FGOc2F72uv1ZHQrLQb4C1wdSp/cpTAwcfOmcXdpiCjXACMyRDcNXvSjtuS7\nAkZKPM1y3ezvfq9Rx7f7ZHaGP71gZYd93omtjNEdyB4xzyM4wckKSQjLZDlw\nszHB+tq9glIc59cPW/HpjsD8j8Y4n57EQnqTV4vHNc6bK8x7a873OQbfvtZu\nx7mgrhJ5mCBqkVS9GF6klIkNfyk+92S1x41l0S6pJZUGIGjzzVT0G/vuUoff\nJHHUceix2Kd3XFn0p4I3Bm4ImF5zaLp3SqXhsDLzFa31+B1Km2RylEQ1fOu8\nqhJfUUwmXXcxhkCDh1EPrFjLzccVQZ5AcifQctnmIP2Dmm5LgpWFf1j339Kc\nGBZCQ78FT7W9dFg06hVv5SUJgEerYFbInxPXSlifH37VnzjKX4+vOmRSNRCw\noB8iOJX6SweiLVGtbpzC8v1Jcc4An5S3Ds5Po7UgnW1UStgi1YMieGBWZUwg\ncHIuYDOM9VWL2ahOsJORifs9Pm8quUvKShyykMiXIvZWZjw7M1V8nHh7B9nA\nrk9OdjqzUI+ZbdoB5St4fUY9PBoo8vCMO4hH5pT0YhQVXQtZGLBjl538cOti\nFckR\r\n=Odw6\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","husky":{"hooks":{"pre-commit":"lint-staged"}},"types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"10364fb7a9b4074734380c8e4bb421f6b8c5e9f5","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint --typescript lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=shellcheck,@types/jest","test":"npm run doc && catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc","check":"./scripts/check-filenames.sh && ./scripts/check-licenses.sh && ./scripts/check-deployable-lib.sh && shellcheck ./scripts/*.sh","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --typescript --fix lib test","postinstall":"if [ -z \"$CI\" ] && [ -d \".git\" ]; then husky install; fi"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --typescript --fix","npm run doc"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.4","skhema":"^5.3.3","json-schema":"^0.3.0","@balena/jellyfish-logger":"^1.0.33"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^26.6.3","husky":"^5.1.1","sinon":"^9.2.4","deplint":"^1.1.3","ts-jest":"^26.5.2","typedoc":"^0.20.28","depcheck":"^1.4.0","shellcheck":"^0.4.4","typescript":"^4.2.2","@types/jest":"^26.0.20","lint-staged":"^10.5.4","@balena/lint":"^5.4.1","@types/sinon":"^9.0.10","@types/semver":"^7.3.4","catch-uncommitted":"^1.6.2"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_1.2.21-renovate-non-major-10364fb7a9b4074734380c8e4bb421f6b8c5e9f5_1614120021737_0.5117303825805051","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"1.2.21":{"name":"@balena/jellyfish-plugin-base","version":"1.2.21","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@1.2.21","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"5be12ab75e2059f22dd50d0c346f2ddfd2010f19","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-1.2.21.tgz","fileCount":18,"integrity":"sha512-Ae0ZNrmujr2MR55UNfpEptbvueGIkKbGJDblzqPBwPgyf/glBc2DzayF43sg86QV8dM2wFoEiajEqE7hVc/mzg==","signatures":[{"sig":"MEUCIApT3urBSaygjYzBDr57Sl28vjz9Yo1kqtDQmn53ZkNIAiEA128Ohrs7mLef2Y7pul1sMgIyqyIZt2aAzu6iRHzUpsQ=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":29107,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgNYUPCRA9TVsSAnZWagAA+S8P/iQ4br/gxA1M+6Vj7X6w\nLqN+7zYQOcKc2ghu5NSRlSYDrN3eyZHxksgFF6RNfsmprcOWwmR926NA/ON7\nTLquVl8DyObK8SB1yDgyEJyLcFhENQp+UoJSCGMAMdW0WNkFOXryLBBpL+xq\nfdcYzNjwy841eIRh5FiiZFWZ7QorIV9KWCR1Zorq011oQIM7WHLA2bIGzaeD\n6C9PBBQTJ8rjbzu5w7yvz31ctwbIZj3UERira7RTJpMhiV8NhuVAAXxqCS23\nwSamaJx18nsAodRGfN4a6wicYrwr6u7S32mw73l2hUj7duoQ5eV3Xs2u7rjt\nRi2VbcTxJUtwbj+c5TqlcxO0hfkkhBgT0SWHu3Q2rPTh+kY2h/tgN6pcs0TI\nUojFr9v2GKpPTNsTpwzVVT0vKiMHMDwha4ynLGsL/pN1whZBt+7Fow9/N1AH\ndZ4pNTsQEueLj19IGlNfnnXZ0/bFs+d5E04HeQNXpwnL7s4OMNWVuPst79da\novwoaJtvTUXdbpF2ivFM/6/4YXBqSnbn6H1SZaBbUHnT217jJxHVcEXMYYtK\n6FK+PeNtLWZULIlLT9dzfJ0vzg6bC+DSfLL0JGsw2f/GUoInUDiyGBGg9et+\n6QuUVY9iuGp4muhL98FvztIlg2Ne9nJNnlnYWNvBb3b7Ore8Xkq9dwyJpAar\nz17G\r\n=42oP\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","husky":{"hooks":{"pre-commit":"lint-staged"}},"types":"build/index.d.ts","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"7a0d590895c3d5ffe10fe1d507a9cdf189235a43","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint --typescript lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=shellcheck,@types/jest","test":"npm run doc && catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc","check":"./scripts/check-filenames.sh && ./scripts/check-licenses.sh && ./scripts/check-deployable-lib.sh && shellcheck ./scripts/*.sh","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --typescript --fix lib test","postinstall":"if [ -z \"$CI\" ] && [ -d \".git\" ]; then husky install; fi"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --typescript --fix","npm run doc"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.4","skhema":"^5.3.3","json-schema":"^0.3.0","@balena/jellyfish-logger":"^1.0.33"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^26.6.3","husky":"^5.1.1","sinon":"^9.2.4","deplint":"^1.1.3","ts-jest":"^26.5.2","typedoc":"^0.20.28","depcheck":"^1.4.0","shellcheck":"^0.4.4","typescript":"^4.2.2","@types/jest":"^26.0.20","lint-staged":"^10.5.4","@balena/lint":"^5.4.1","@types/sinon":"^9.0.10","@types/semver":"^7.3.4","catch-uncommitted":"^1.6.2"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_1.2.21_1614120206748_0.6154649536165322","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"1.2.22-renovate-shellcheck-1-x-ee6098e3dd57319f7c27b164057dc92bbfaebf02":{"name":"@balena/jellyfish-plugin-base","version":"1.2.22-renovate-shellcheck-1-x-ee6098e3dd57319f7c27b164057dc92bbfaebf02","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@1.2.22-renovate-shellcheck-1-x-ee6098e3dd57319f7c27b164057dc92bbfaebf02","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"853f7cd3c00557cacfa04803be98edb1e8a724a5","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-1.2.22-renovate-shellcheck-1-x-ee6098e3dd57319f7c27b164057dc92bbfaebf02.tgz","fileCount":18,"integrity":"sha512-gUHN8kOqsNJCJjrzPstf0q1dpdiaikx/rMxXToQbHZvZQiyLQcfxcmAyzXW5i08bWzlKQ8+pzvhljxRDY7CI6g==","signatures":[{"sig":"MEYCIQCzgTz9tO0Ps+5bgKshL0ct9wLjPuAljUsdl6CmqcKX6gIhAO9LwrV3XrypdU8j2m3om1PDyuxpCl4zqJlz+uV1ssbr","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":29256,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgN/KMCRA9TVsSAnZWagAAMD0P/idgLNElPOGTnZVnRyoA\niojAB6C+BB9iSptr+eqofgjBmGM+J8WW9m7jcqXDtEPZuy5Bvb5Z7LY8J9/U\nnzlkyvo7tIbACOTVWHIyD09stVz2uhxvSB7YF7G1DP89JwnSKvpCrYhOSebg\nLuSgyqe3KRnmqkv4qisLYmd8YI4SNPDh79ekwYbr3AOq3XhWxlKjvNpzz708\ntf7VzMviVt4GC3gXnZ20LQcXAejOxKli4tEPvbjwsXttsmR21bvHKu/7n7gk\n9uaoT05L1SSU7Hs2tJrNHlF4HrxjTU0YX6C0Lsex23tNPCTbJByzhbg/hut0\nX6csq0LHVy+Y0vsVmUK9WOVWSt1il7H2onaisC6lBbvsvgIl8LOuHjf59Obm\ns3CuLbUYAzf6H1Lh3DVC/MUSOKeimSeefd3vJrXXpM0XlIBXHhl+UF5aPvND\nGiOrU88k+EaLfQgaAkLPd+EjmmkN+VJ01Dt3Be5gTQXp5vjDhvpJJGNT9HAZ\nEO4aR/QPbvsXSRuC3q7hSxDgcVTrAYtzgQPVDfGTECvtZLaA4CmrHQgjR+x5\nH96K06/AFCgoaEaN95A/2YFvvyUz/Uo0NgvDSkQUfxn0Is80gtCdtrO3gOms\nf07aY8/dB00OUrSPGJxVwVcE0jbzGbuDHa4ZVjeRGzfbHfXE8waE76AAuWcz\nakdl\r\n=Z/7r\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","husky":{"hooks":{"pre-commit":"lint-staged"}},"types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"ee6098e3dd57319f7c27b164057dc92bbfaebf02","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint --typescript lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=shellcheck,@types/jest","test":"npm run doc && catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc","check":"./scripts/check-filenames.sh && ./scripts/check-licenses.sh && ./scripts/check-deployable-lib.sh && shellcheck ./scripts/*.sh","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --typescript --fix lib test","postinstall":"if [ -z \"$CI\" ] && [ -d \".git\" ]; then husky install; fi"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --typescript --fix","npm run doc"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.4","skhema":"^5.3.3","json-schema":"^0.3.0","@balena/jellyfish-logger":"^1.0.33"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^26.6.3","husky":"^5.1.1","sinon":"^9.2.4","deplint":"^1.1.3","ts-jest":"^26.5.2","typedoc":"^0.20.28","depcheck":"^1.4.0","shellcheck":"^1.0.0","typescript":"^4.2.2","@types/jest":"^26.0.20","lint-staged":"^10.5.4","@balena/lint":"^5.4.1","@types/sinon":"^9.0.10","@types/semver":"^7.3.4","catch-uncommitted":"^1.6.2"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_1.2.22-renovate-shellcheck-1-x-ee6098e3dd57319f7c27b164057dc92bbfaebf02_1614279308187_0.7392391267091876","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"1.2.22":{"name":"@balena/jellyfish-plugin-base","version":"1.2.22","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@1.2.22","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"e454050419ce7d724d414699b2240dfde011ce3e","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-1.2.22.tgz","fileCount":18,"integrity":"sha512-pPVImiYTQL68ReDA9WNlklanD5yuqAZMv5nqgZoOCgMpmD1tzRRRduzAmJ+lRgs/0EgKLMNw6VY73kAfnyfRnA==","signatures":[{"sig":"MEUCIQDtpoFuqtqJvRVQ6CyhZNRDi9hM7MknI7FQRoPUzoKf6gIgcUzCnXM8RVrcoGRBPEEF9Snap/wKVumHTqfhz6rurw8=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":29191,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgOMyFCRA9TVsSAnZWagAAEr8QAI0ljFosBUn73vRhiMxo\nu9x4eCEbD7x1d9X7VSCn9oSmvqcfe07JZVMpQsj2HW+By55bY/XUhy6htrk5\n3frMxfVUTH6+Jh62cAethIYERdR/xmKcGXCg856G1Rzd1+iVA0DSeZz4bF7E\nlz5j9VAyfKkow501oaVF2UAWnDZXsvboIzhjeL6tHBLEg5AUv0prjXGNGzsv\nogVoxMWUTALX7U/rpRaeFghNktxa/ZpFQNpyoUxOFMoZZqTg46arBA7jFG71\noI586Z+Lr4oScl25sYAw3kp8ZEPmP1r7W6TfVW7ZL6BDpruUzt0qQdyv/tPt\n875Y6XBn1jPT7jhW/GeFWW1Uu1Ouopf1+djzjm0hqUUfFT01aIFKqUuiVUWM\n3rXlQS8fiK2yFJfwZOmFF2nutDovNAouxf488Hub/PJ/n3B/54EroED2+LdK\n3+3CRPmqhOJQwjF3mtojCY9l6wKqNPw+TBei1J7Lmr81yGSZ6TssfRqMT9tE\n5/4gpyrqzukexs1H5PkWOeqGYJsF8sKu6uCmkMx2HaBdoe1ciLX0rrtY7Mhx\nTRGUJXQ/FRsEFuh7bSRPhc+edZf485OKFYMAIFQYjKmq7v11ohht9JUFL0TZ\nZE4IR5uKNT9HlrPIGc8lChgo80HAKFZdaSrMTgzhnSIurHzR2YFLApnC/BuI\nQRCW\r\n=DbO7\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","husky":{"hooks":{"pre-commit":"lint-staged"}},"types":"build/index.d.ts","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"160cd0c4d2108be242c517e8f033082c29d56d19","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint --typescript lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=shellcheck,@types/jest","test":"npm run doc && catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc","check":"./scripts/check-filenames.sh && ./scripts/check-licenses.sh && ./scripts/check-deployable-lib.sh && shellcheck ./scripts/*.sh","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --typescript --fix lib test","postinstall":"if [ -z \"$CI\" ] && [ -d \".git\" ]; then husky install; fi"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --typescript --fix","npm run doc"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.4","skhema":"^5.3.3","json-schema":"^0.3.0","@balena/jellyfish-logger":"^1.0.33"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^26.6.3","husky":"^5.1.1","sinon":"^9.2.4","deplint":"^1.1.3","ts-jest":"^26.5.2","typedoc":"^0.20.28","depcheck":"^1.4.0","shellcheck":"^1.0.0","typescript":"^4.2.2","@types/jest":"^26.0.20","lint-staged":"^10.5.4","@balena/lint":"^5.4.1","@types/sinon":"^9.0.10","@types/semver":"^7.3.4","catch-uncommitted":"^1.6.2"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_1.2.22_1614335108781_0.492888984498856","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"1.2.23-renovate-non-major-f052b78c4c342060e9ab64141c9184eff256f78e":{"name":"@balena/jellyfish-plugin-base","version":"1.2.23-renovate-non-major-f052b78c4c342060e9ab64141c9184eff256f78e","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@1.2.23-renovate-non-major-f052b78c4c342060e9ab64141c9184eff256f78e","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"32206bb9ad0c8e7baa93d5aaf0c1ade024e424d9","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-1.2.23-renovate-non-major-f052b78c4c342060e9ab64141c9184eff256f78e.tgz","fileCount":18,"integrity":"sha512-w6WpCPeoa+ndjodU322uWEP2l7vWonVkiiRxzR2b09c5dUhYLBfryOy6R1VAf81t1SBmyPm9gCTtRdMah5U/4g==","signatures":[{"sig":"MEUCIFcfrS47ykH6f8pAHDVHHPsy5sFuroQtTUttFTkSa+MLAiEAnP5AFoe2KhAiODG+iy6Hmvu3wrgxdPokvBtE6yKYR9g=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":29354,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgOOf0CRA9TVsSAnZWagAAX/YP/iZCnAzJMvaqFOmt/e4v\nXynrG+702ig+10GVrg6TELLkFksFJ1mc2KTO1pXNwNrojCLzOQFnBqlRxIkN\niadpngQr0AVFC/fCDGRIXQvHOf8JQnWrCGJUsxCQvc5vRo9d2+94cnbfUUds\nUQqS3Ma+qYOwvJ5LHiX9+s8/OH8Pvm9tD3ABdEHiuEC3X4UiSnGTMuzQIAsO\nZLHh8PAqhIKvEe08zfE8fRsokEOXMP+bekqRsmnSvLRvr0GoHrFhsJNKG5ZQ\nB1P7DpkDJDe1NHZAazu2QxHi24vcmHjvBoqQEK4wGv3VgcgG25QGA9uNFEhv\nayoQsUBTrSsIHzAeIAD7Kho70DvfeZJn0ZYY0mqvQjzmXlCf3SOenucb1GSW\nCJz1avwIZZ/4p8wx+OxVWPl15ShYSzS+KrTHtQEMxJb6zMBduRC+am+TT2xi\nAQGp3jsHRf1o5KeduV+i/kOsSROUxKShpX9EAPJH4+Ztp0bKDW525VozpH7R\n+wh/Hb1nKhyxOodFAY6TMt0yFCtc62BHiLvbLJb7Vxpi/5ROWOqjpdRFUIXR\n4ujg4IolmYle0DR51U52uyGBcFn/uZPL9YEQmUXn1q9mw4W7r0KUiSN1HUkY\nnSGZXtdfVC7aXZeLDKDzVALNAOl2kj9bSuv/k9myDoP3XhkUPfqmKZrtn4Fa\n57Qw\r\n=WNbm\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","husky":{"hooks":{"pre-commit":"lint-staged"}},"types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"f052b78c4c342060e9ab64141c9184eff256f78e","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint --typescript lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=shellcheck,@types/jest","test":"npm run doc && catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc","check":"./scripts/check-filenames.sh && ./scripts/check-licenses.sh && ./scripts/check-deployable-lib.sh && shellcheck ./scripts/*.sh","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --typescript --fix lib test","postinstall":"if [ -z \"$CI\" ] && [ -d \".git\" ]; then husky install; fi"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --typescript --fix","npm run doc"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.4","skhema":"^5.3.3","json-schema":"^0.3.0","@balena/jellyfish-logger":"^1.0.34"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^26.6.3","husky":"^5.1.1","sinon":"^9.2.4","deplint":"^1.1.3","ts-jest":"^26.5.2","typedoc":"^0.20.28","depcheck":"^1.4.0","shellcheck":"^1.0.0","typescript":"^4.2.2","@types/jest":"^26.0.20","lint-staged":"^10.5.4","@balena/lint":"^5.4.1","@types/sinon":"^9.0.10","@types/semver":"^7.3.4","catch-uncommitted":"^1.6.2"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_1.2.23-renovate-non-major-f052b78c4c342060e9ab64141c9184eff256f78e_1614342132374_0.6341802316129383","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"1.2.23":{"name":"@balena/jellyfish-plugin-base","version":"1.2.23","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@1.2.23","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"a868cde27f07ce6b2bc1c693a18a5ad29609de4b","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-1.2.23.tgz","fileCount":18,"integrity":"sha512-XMKr4gV9sA12bZdxcke0efmw62bEG33RJkwJWx6phkG6Z3A9UUbUHvBcuQqcYxjTAt8eLDzgh5cTKv5ZrjNASA==","signatures":[{"sig":"MEUCIHTaUePlTm8vuYDGDCwF2obPRXNfTETtaRpKOVucNl0cAiEA6WbutuE6bKTbt8GPXgsGS8aBovALmaIRG2i495mQ3vA=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":29294,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgOOjHCRA9TVsSAnZWagAA8BwP/iH4IcZXCncWl3G/QcZ9\nOiU7v6bJo+wTcl3yVeTiDTABWK30a7g+Y3JuDZaRRmroqwbPgqNYtGReNu1Z\nsBmC78rj+KE9M2v2cP0Fpjg3acnl7EGF/dgpF/SSkM7Kj8C/udaSske7K2vz\nC5NjbrosKLEFyEg2W6dM1aDPCll3RFSwqMF+ZhvEljKv88FLvQG3yZ8cJI1l\n3dK8K4PiL/8K6vuG/Mtm3I57/EjnUaWAQnei/mMCnjvMZQInkN8HzRk9gyRO\nhSwIDh9w2eYOWWDamX2K376DqIqS3uaRZTMIdev/Dp/9so/lR8VV2viKqcXD\nwScUBHsla8O4eprN5VVGhw/mdmopB7j1u7qlU7k9NetcPZmTcIibCpc6pkeL\n433zdoD70Jvso8hwonfDAaMLr+8XOKrHIo6YDUhW/L29XxKjnxfgOYEfdeHw\nYXuLjA7we8KJSg2wfuvqjm1uFTIih3HQyu9M4TF0T7/Gczu64r427a+GZ/Vf\ns/RbXkRTYbltm31c0L8ogW8dM6mZ8XYFeRWNeGeMo8Ho1U++SwjkA9NULUMG\nroV+/kYp8oO0h0lKAvQzA691doiIsVbDhm9me8tSrKYErV/Ukr3e6pqntvaW\nZ63mK0XrOXIb3Y2nNE7455O9kKyW4YbmutkYRpLaWe4TTd6zTGc3xBpiI8Ds\nWysA\r\n=GUn8\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","husky":{"hooks":{"pre-commit":"lint-staged"}},"types":"build/index.d.ts","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"d5bd54cedb2c49c5c7106fdcc08d9106f01190ea","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint --typescript lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=shellcheck,@types/jest","test":"npm run doc && catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc","check":"./scripts/check-filenames.sh && ./scripts/check-licenses.sh && ./scripts/check-deployable-lib.sh && shellcheck ./scripts/*.sh","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --typescript --fix lib test","postinstall":"if [ -z \"$CI\" ] && [ -d \".git\" ]; then husky install; fi"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --typescript --fix","npm run doc"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.4","skhema":"^5.3.3","json-schema":"^0.3.0","@balena/jellyfish-logger":"^1.0.34"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^26.6.3","husky":"^5.1.1","sinon":"^9.2.4","deplint":"^1.1.3","ts-jest":"^26.5.2","typedoc":"^0.20.28","depcheck":"^1.4.0","shellcheck":"^1.0.0","typescript":"^4.2.2","@types/jest":"^26.0.20","lint-staged":"^10.5.4","@balena/lint":"^5.4.1","@types/sinon":"^9.0.10","@types/semver":"^7.3.4","catch-uncommitted":"^1.6.2"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_1.2.23_1614342343349_0.30749927961474843","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"1.2.24-renovate-non-major-49c59ebc6c27ad453551bd4dbc15795e65319998":{"name":"@balena/jellyfish-plugin-base","version":"1.2.24-renovate-non-major-49c59ebc6c27ad453551bd4dbc15795e65319998","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@1.2.24-renovate-non-major-49c59ebc6c27ad453551bd4dbc15795e65319998","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"5542c2c80fe44eaef891638de587acf7bc124306","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-1.2.24-renovate-non-major-49c59ebc6c27ad453551bd4dbc15795e65319998.tgz","fileCount":18,"integrity":"sha512-CMlEPzjttWj9v+3IoJlRG92MmtN1GM2h3iY4mguZFLHNj6KUn2mZI2G8bt5rqnDViV1u09LW88kdT8o5viPXYg==","signatures":[{"sig":"MEQCIGqKJTImlmYv5l3I28OiAE/GSwM1yEnbyAyjsw3cdr40AiBdSaZaU+b0/PGX0qHSEHBiIS4poZrJ+mQQnDbJo6FHDw==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":29457,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgOuXzCRA9TVsSAnZWagAAFEIP/0LUYO97vccFaVq1XRHF\nDqsKZJsNOYS3QBlzJa00h1fsivuzfZxlw1fP4eUrnGvUAq8u23Q8hWq5e6br\nvaKNLNRJZJR23yPGiMKp2wyuAMHn65nEOCGwrBKZy4n6lybCn95MuvXwbPj6\npN0MZJ2xPOVUU3PpklFWbmY8I5lqsHxLy3l2yLkov5AXK+J9Na9fHcE5Jmuo\nWoEy2EfsUFfZR5FVWgrHx09cq+LFTtq5ri3KDF/o2bStiL84OJ5FPhFIoVNj\n9uFA4zhDac/Q5U4QDUOhqnan9pDMfR4Xy+mej7TRgYvADOGFVrNFfF2OitAv\n7+9OHo/K9nLucdFa7yqp6tb3KA4dDeSnR1Mekm807UZhC6jPPjuW5qL4iVdn\nkk24OmrIjb8uVVGO0Jag0sjXGW1iDKKHWS9Auhi2yLF4J2ErI9WLOCrmUfcJ\nTKyvtSrgyFqNPpTWvcQ0fVmMSGn7GrtEFLl655xGrCpJKUl9keeqJJgBaFCJ\nNJIEb6/5BL6uZEsgm7iDLWYgDhLczrcCXsU6x5CNP4bIOR0FrF11Uhj8CR8j\nTMVV5w+aAmpNLP2PhbR5yrRIu8eeVkU9V/vMz5DjZy9PTt8hZmzxytQa7YF4\npVlOb+bcpkHoVWC2H8OG5gb0zsk7z9oF1WXi1HL0/DKF+OZN4P5RIbFuVAlM\nVQyA\r\n=1fNy\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","husky":{"hooks":{"pre-commit":"lint-staged"}},"types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"49c59ebc6c27ad453551bd4dbc15795e65319998","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint --typescript lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=shellcheck,@types/jest","test":"npm run doc && catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc","check":"./scripts/check-filenames.sh && ./scripts/check-licenses.sh && ./scripts/check-deployable-lib.sh && shellcheck ./scripts/*.sh","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --typescript --fix lib test","postinstall":"if [ -z \"$CI\" ] && [ -d \".git\" ]; then husky install; fi"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --typescript --fix","npm run doc"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.4","skhema":"^5.3.3","json-schema":"^0.3.0","@balena/jellyfish-logger":"^1.0.36"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^26.6.3","husky":"^5.1.1","sinon":"^9.2.4","deplint":"^1.1.3","ts-jest":"^26.5.2","typedoc":"^0.20.28","depcheck":"^1.4.0","shellcheck":"^1.0.0","typescript":"^4.2.2","@types/jest":"^26.0.20","lint-staged":"^10.5.4","@balena/lint":"^5.4.1","@types/sinon":"^9.0.10","@types/semver":"^7.3.4","catch-uncommitted":"^1.6.2"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_1.2.24-renovate-non-major-49c59ebc6c27ad453551bd4dbc15795e65319998_1614472690763_0.19805788220097043","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"1.2.24":{"name":"@balena/jellyfish-plugin-base","version":"1.2.24","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@1.2.24","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"596d02d6db8a0067e75cb96802c1ed29f0fafd53","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-1.2.24.tgz","fileCount":18,"integrity":"sha512-DQuVPHnrBhoE7mizFiTBBDXcJdgtuajTMUX4rRncxdHepR2Nmw45KMlzkg0mXyujutrOBa44xOSEXp/S1p1yGQ==","signatures":[{"sig":"MEYCIQD1zgbF+m9MQmXlidgeAo4LyZpgBRIDiTdnAGptTgQC9AIhAIsXniJvOLtWffmoqmTo8BJmbt+DW+kq3+gZ/a5lsidb","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":29397,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgOua2CRA9TVsSAnZWagAAEHoQAJ3PFiwqOLA/4FI+bbBj\nc9idxV9yB0QL33KAL49Y67gTL0bp+bUPIMiqQQnLdzz87PSnfCWcvqUIdLGa\nvkwDuN6+BdUBhSOoB24WwHoDvB5LW0+cmiGzOhcCEcZuqnbwyNdxsOaagY4K\nWEg5eVMhDnUUOIry58Zidv+O+1UNur06R7UMZoUN1QxK/Ee51B2tPFhd/CW5\ndfGFG7yHzPm9ABRNixwHJFNvbO66BNgK1qN03Gc8f/mcxdQZaQdSOd2Cu07T\n7JoHkuXLAvdee9TByK/FI9LY8LjdKvORzN5J6aT/++lNGdL3cZFRs+mKsiA6\nQkSPd9lQaJqKmXzEITfp1b6JFNr+DjTsScoET6lwaBSW6a5wm6B4wNFl1l1e\nEgAlRfExziNVtwwm2wi3PbL1dQjoJLFt8HLkgvqGf29Gln1kCeQe/Qunq4vW\nYdojV6Z9OqmZ2wqLfnmiRRN3xzihARxUP76QSAUe7nSQckzhMWBBLi/AdD8t\naJdXQl9z55DsTRW+Ia2+r/GkiA8P76wWNCJGxu4b6AKExgzFFGHfT9eVO3BD\nZ171Ef46YomjYbG433fjld7h40Q32R2g+Bil5kRrhc8Gbf+dbRfUwNBMGdow\nqMpEbm+ay3Y9RkIdZwMLpPCAMFO/CF5EsI/0C9nXLXHtcrrYDP5wUF+BPuUt\n5DZQ\r\n=GWtr\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","husky":{"hooks":{"pre-commit":"lint-staged"}},"types":"build/index.d.ts","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"007e73641f2f0a86fcc12c1b549ae0da1d55d2c8","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint --typescript lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=shellcheck,@types/jest","test":"npm run doc && catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc","check":"./scripts/check-filenames.sh && ./scripts/check-licenses.sh && ./scripts/check-deployable-lib.sh && shellcheck ./scripts/*.sh","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --typescript --fix lib test","postinstall":"if [ -z \"$CI\" ] && [ -d \".git\" ]; then husky install; fi"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --typescript --fix","npm run doc"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.4","skhema":"^5.3.3","json-schema":"^0.3.0","@balena/jellyfish-logger":"^1.0.36"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^26.6.3","husky":"^5.1.1","sinon":"^9.2.4","deplint":"^1.1.3","ts-jest":"^26.5.2","typedoc":"^0.20.28","depcheck":"^1.4.0","shellcheck":"^1.0.0","typescript":"^4.2.2","@types/jest":"^26.0.20","lint-staged":"^10.5.4","@balena/lint":"^5.4.1","@types/sinon":"^9.0.10","@types/semver":"^7.3.4","catch-uncommitted":"^1.6.2"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_1.2.24_1614472885977_0.559179195517751","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"1.2.25-renovate-non-major-8ac4d3653dc228836d14ffc1e1b39641f4c612ba":{"name":"@balena/jellyfish-plugin-base","version":"1.2.25-renovate-non-major-8ac4d3653dc228836d14ffc1e1b39641f4c612ba","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@1.2.25-renovate-non-major-8ac4d3653dc228836d14ffc1e1b39641f4c612ba","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"09d4efb615fe1f5b86461af16aa8e4d657010033","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-1.2.25-renovate-non-major-8ac4d3653dc228836d14ffc1e1b39641f4c612ba.tgz","fileCount":18,"integrity":"sha512-WisnUYTM+N2MIHDaB00KdUhcH+e/FJCRkXPUxgZzk5AoioTr/iVx9hw/oG8ChamBxD7Aq0T255IurM9hyHVqqA==","signatures":[{"sig":"MEQCIBcYPYHQhonTrIScSGOEHR/MXfY1V9nLD/OpGVQUu0SnAiBS0o4+r8Mhq4AC/aVQ44rRaU/yRmzqWTZrMeHRLruyvQ==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":29560,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgOxH4CRA9TVsSAnZWagAA/rQP/0imO3X+sNGp89bgzYdw\n50Akl8a+v0wH0bpvtp7fvxyKzJ0oi8fHzLWJRGcwyole2Ya58hFrc3K6JjwE\n2SnnSgwTMwgcwXX8l2JAzFBmzMK3s7AaK9egpKZ/E1q+bJno/CCaFCGDSf+1\nncjMVYMfZXZRh0ijKgluBvefaMLNlP+G/W0a1ocgmhy/R+HUsg3aLsnNzfu1\nNT0GBnSuPAUkq7cxKZmmLmnokSQlM34EbSTsC7YXdFMgSdkXxMQ6PR/zD5WT\nsuddJbk6SHdWQ0Xyt/lQr58AjuJnelT1USUd05uHWmdL6LRbLEeB1sepbvWm\nXIlFucVE//pxoAtawDxQofJc9PEFzkH7Wlhb8P2pRtacTaxJ5UAYt+BFFUk3\nWUBnq6op4Y8A5bA48Wq2TjjmB6Ky+j8wdREoAj6Ao/OAge8uURKB8OEVw3BM\novumv08eTPidDVKNajf7/5vaffmrOfRsSlK3p31ODNfu6AyIj8CYxI8UxkDo\nRf0F8cq5utjO+gJJF9cUlvreJZDOc/BIszEANwOa3SwM9A2LmevGpvEy1xpF\nuM09wW9qBDn8RaBABXj5OabV1PLpJlxUCJkG5ZNNUVjSNZvSlqt8/JgKTR+X\nTS4JUgWl6Poza+/wF6DT2T6CKKRQ+PcB9bFjQ8l08qsBDWCgzGQ1RiilMJ3X\nDEHw\r\n=ON+s\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","husky":{"hooks":{"pre-commit":"lint-staged"}},"types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"8ac4d3653dc228836d14ffc1e1b39641f4c612ba","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint --typescript lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=shellcheck,@types/jest","test":"npm run doc && catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc","check":"./scripts/check-filenames.sh && ./scripts/check-licenses.sh && ./scripts/check-deployable-lib.sh && shellcheck ./scripts/*.sh","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --typescript --fix lib test","postinstall":"if [ -z \"$CI\" ] && [ -d \".git\" ]; then husky install; fi"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --typescript --fix","npm run doc"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.4","skhema":"^5.3.3","json-schema":"^0.3.0","@balena/jellyfish-logger":"^1.0.37"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^26.6.3","husky":"^5.1.1","sinon":"^9.2.4","deplint":"^1.1.3","ts-jest":"^26.5.2","typedoc":"^0.20.28","depcheck":"^1.4.0","shellcheck":"^1.0.0","typescript":"^4.2.2","@types/jest":"^26.0.20","lint-staged":"^10.5.4","@balena/lint":"^5.4.1","@types/sinon":"^9.0.10","@types/semver":"^7.3.4","catch-uncommitted":"^1.6.2"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_1.2.25-renovate-non-major-8ac4d3653dc228836d14ffc1e1b39641f4c612ba_1614483960158_0.8989662240357179","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"1.2.25":{"name":"@balena/jellyfish-plugin-base","version":"1.2.25","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@1.2.25","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"4c5f175042bae189dc9e93755adb54cb07277631","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-1.2.25.tgz","fileCount":18,"integrity":"sha512-oZ2F6be/RL4zsGDAeQ8WFwSCVwZQKuPoNVs38gm9+VIN9pqLix/zROE2GO+1LALALO4a/f5ZuyGzm4+U7MXi1Q==","signatures":[{"sig":"MEYCIQC7/ts1NCKyCZ2K4n+kplw/usrNxssQ+se1B6pSjRERWQIhANjGqwnDQBYFTw9F7PYaQRtXg3FUsaqPipH8CBIPQCrB","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":29500,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgOxLACRA9TVsSAnZWagAAU+UP/0WK0dLvcoT5AvchEdFJ\nRH+GQK3ChOoDWW3uicxNfJm2oTA0suYxLk548HJzvq6gippK4r3bqe2642jf\nF04gMsbDJ6CI8JrbOhHhceM+HWfLxJvDYfPLBbABLvT4t3L7cDo4/ftVAFgG\n5Sz5ZlG8dnIs53GteGCo12xjf9QA8fV7Td1VtQX6cOTjIUjLttFIpGjp+xIV\n0H37UMeHfnNgjJlcQHW1LykdyO8cWmBDUB21JB7qQwTYpxsJkeO+44OTvvOj\n/EQyKFKtgsgFSs4SQtJ7pcMi5HwDw29HDjWMUb9hM7pJDwxiE88SZwuleQ5E\nPYj55nXdHHzyD6e82uHGyMdBFSMYM+4YRjjQIJPbqRV7w7yTGt6p9dpL9hpc\nYY/PLP6/sMTdmU45Gx0Eiap52J9zqRA9F006/6nwsKqHp/tn7IFNagVL96yO\nl7lE606Ckwc/+JiQfZ5DnB2IP/nSP9eP6L8KLBFNtczipyoNIH7Sej/xKX/n\nKm54etKTpmUQuR6jf9y/uKvsBDzlItAtQnAVdM+9jPY1vYZUUox2qAYdXjbJ\nOQZJUYLQqXbaCCwI2rBHYsoInW2hq2U2TT7/LpZ8UtX8Fpl7LR1IrcKE1O/e\njxl/46DGci3HFm9SNGmYxR7Tm3jJlNXkOR7s3wIiddw96mvLwY3698F4pgD7\nSKf8\r\n=LU0M\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","husky":{"hooks":{"pre-commit":"lint-staged"}},"types":"build/index.d.ts","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"1600cf4d3d7fd5fa5f139ef88b0e0047b3434ea9","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint --typescript lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=shellcheck,@types/jest","test":"npm run doc && catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc","check":"./scripts/check-filenames.sh && ./scripts/check-licenses.sh && ./scripts/check-deployable-lib.sh && shellcheck ./scripts/*.sh","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --typescript --fix lib test","postinstall":"if [ -z \"$CI\" ] && [ -d \".git\" ]; then husky install; fi"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --typescript --fix","npm run doc"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.4","skhema":"^5.3.3","json-schema":"^0.3.0","@balena/jellyfish-logger":"^1.0.37"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^26.6.3","husky":"^5.1.1","sinon":"^9.2.4","deplint":"^1.1.3","ts-jest":"^26.5.2","typedoc":"^0.20.28","depcheck":"^1.4.0","shellcheck":"^1.0.0","typescript":"^4.2.2","@types/jest":"^26.0.20","lint-staged":"^10.5.4","@balena/lint":"^5.4.1","@types/sinon":"^9.0.10","@types/semver":"^7.3.4","catch-uncommitted":"^1.6.2"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_1.2.25_1614484160314_0.674150928426142","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"1.2.26-renovate-non-major-c5a82dc2aaa4bf796fd274586c1273203b0f6955":{"name":"@balena/jellyfish-plugin-base","version":"1.2.26-renovate-non-major-c5a82dc2aaa4bf796fd274586c1273203b0f6955","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@1.2.26-renovate-non-major-c5a82dc2aaa4bf796fd274586c1273203b0f6955","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"fd38966983e0e3b34bf9070a2213faa841d3d498","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-1.2.26-renovate-non-major-c5a82dc2aaa4bf796fd274586c1273203b0f6955.tgz","fileCount":18,"integrity":"sha512-al+6Lel/7pCO/I3wU/LwsAN+plaJFA2Tv7NOhVyLVovlAampNeRNAOc/gc8mgnnIEISEHWRVPd8ICOPK+WYxIw==","signatures":[{"sig":"MEQCIEKKCcwofj/Xj2WJgkkipPk66rwgcUBGDhNK/aS/uFpTAiAGs3o0Lv+sRjqO5r8aIsecU8lJQ93o9F5gyHlTWXNfQw==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":29663,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgO6OCCRA9TVsSAnZWagAAPVkQAIgynLjSP4jESO8JPuaV\nSLqEfd/ZwGUjUvRvACjFvHU2/US/Mg0HLSD9hoohmDAf9APiiudYIspSkwxj\nBxMuQz6MseomOip275lyVFmnx4+HOMdggXREibArf/gk0Rc/LxXI4gH376Tw\nxc1uQpH4ScFxwevdfsbWFs0mYA5BJMVYGp6qXmCIfeD4w2V+c7/lbVtbEBah\nz6N+KzZPfbAeAOIR4751Kglghl5m4S0s0JU+wIX+bmkdlsrsegJhWvUUI5He\nX6bR6gNgre2HkzFcdHcsSaMzKjeBBZ8XnQmcqqew/ny8thALMNvaDnxpl/uR\nbTBOIDqMvTN80XvoljlUCBRgE73L6+UvZl3HXTUT/vBJLox365iiFytGJFWP\nDs2EP92GLbaUGsBuNkAeydD9Zlrombm9XRQlQWNAfdJE6cn5EG+WTQ72Fz1t\nX/o38s+7B4KtjlUtC44I5MlGpjSY/uxYoIZNSkO6b83Wlcj2OHhiq29j3yl+\nb2TIYp+75sIuIO+bt+/YT1aGMFqZ3ta87l8Cn0lynx2zVrB5LvmMS7IeE+cW\ngQoN6GgPNZulHemusqrYUrSERHYYiTPgEB1HCUohkafHAPb+TbHhg0FonQqf\nuEtIvg3aqsYgWbyPMEOK6ruuucH/yO0O/NEtt1rYFJpnbK34hKhyx3mv6m5s\ntt9r\r\n=Qke3\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","husky":{"hooks":{"pre-commit":"lint-staged"}},"types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"c5a82dc2aaa4bf796fd274586c1273203b0f6955","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint --typescript lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=shellcheck,@types/jest","test":"npm run doc && catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc","check":"./scripts/check-filenames.sh && ./scripts/check-licenses.sh && ./scripts/check-deployable-lib.sh && shellcheck ./scripts/*.sh","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --typescript --fix lib test","postinstall":"if [ -z \"$CI\" ] && [ -d \".git\" ]; then husky install; fi"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --typescript --fix","npm run doc"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.4","skhema":"^5.3.3","json-schema":"^0.3.0","@balena/jellyfish-logger":"^1.0.38"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^26.6.3","husky":"^5.1.1","sinon":"^9.2.4","deplint":"^1.1.3","ts-jest":"^26.5.2","typedoc":"^0.20.28","depcheck":"^1.4.0","shellcheck":"^1.0.0","typescript":"^4.2.2","@types/jest":"^26.0.20","lint-staged":"^10.5.4","@balena/lint":"^5.4.1","@types/sinon":"^9.0.10","@types/semver":"^7.3.4","catch-uncommitted":"^1.6.2"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_1.2.26-renovate-non-major-c5a82dc2aaa4bf796fd274586c1273203b0f6955_1614521217757_0.49331351352368435","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"1.2.26":{"name":"@balena/jellyfish-plugin-base","version":"1.2.26","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@1.2.26","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"72e8c0d34a12006343f2e39f830d2461abf0905b","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-1.2.26.tgz","fileCount":18,"integrity":"sha512-lLwlSqxIlTCMQCBH0Qy7r2i0jWKs/RvXeNhnVbQ8Q4nVlthgaCuFUpigNcIGKBVhedRMaaVAPHBn7H2VLm3Pmg==","signatures":[{"sig":"MEYCIQDj9DZrSSKXvkZlrCeJpK7ydec22arMjfHIqQy5XTsfWQIhANXniXBUt8xT3dvFkU4W+UpW5xicWSMZtqZGsyawVXQJ","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":29603,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgO6R2CRA9TVsSAnZWagAAFN8P/2YDF1GF8TzobmoeWZy1\npNDvgNUf75SXRFHDZGNE31oOni1Myy4ilWO3by0wxkE9d/6BFuJ+5DFLgpP8\nwNg64Q0wKyD0beg4iAUr3mZjvueKtv/4eC7IBg+nP5T5AXzoBafMqpD/jHtk\nfj2xi344CXjeRKyi4Av0Z+x7fMU8V5aEXeBcKRsjYJIDstB2PuDx2j/0kszZ\nK9XEmJg/hNi4P0/i/wfnRUYqRLNRLKUdFocEX3+s8+C7HXvxmKz3E8uLKVny\nefbt0rmBW1T8cfzZPyLgUukIXSLWYSzogLdtIByJ98FDLKx+6N97Hs8ZN7Ii\nMgUoLLUxhexbTdBIBQZ9qBlR67i2y4ZtweH6l3XjKIY2W4UO+S2eU69UAp1a\nF2GOyktE5nLlkYbNLQbdRIHMbCe/RfRlRcZRK4QUdZWHyK+e50y+yrKkQWTi\nVQ50E6YW4/gsr4EgXo7ZoIH1MwM3UI2ABTEuwlpAoKHlrHHevm0MbbrsgG/b\nEYIshnfkTAXUzIfAnaic6th1ySDNEGBKfobGaMDEP5ONynJOZOIDhB1F15Lj\n5x8vgiE1XaCbLEq2QuRpZaIIaWhX+XMwhNkAjKG4NoOjs9WGPSI5GGpECYlv\ny9d0ZzJfrPRz8Ysg7ohT2Q3CLhGZbaCZ6uaSqfXTMRCI+SkiqS6J+dbvcpbk\nThqr\r\n=cPiA\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","husky":{"hooks":{"pre-commit":"lint-staged"}},"types":"build/index.d.ts","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"69b14820735fd93b87d20cbae6907b63d29cd285","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint --typescript lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=shellcheck,@types/jest","test":"npm run doc && catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc","check":"./scripts/check-filenames.sh && ./scripts/check-licenses.sh && ./scripts/check-deployable-lib.sh && shellcheck ./scripts/*.sh","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --typescript --fix lib test","postinstall":"if [ -z \"$CI\" ] && [ -d \".git\" ]; then husky install; fi"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --typescript --fix","npm run doc"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.4","skhema":"^5.3.3","json-schema":"^0.3.0","@balena/jellyfish-logger":"^1.0.38"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^26.6.3","husky":"^5.1.1","sinon":"^9.2.4","deplint":"^1.1.3","ts-jest":"^26.5.2","typedoc":"^0.20.28","depcheck":"^1.4.0","shellcheck":"^1.0.0","typescript":"^4.2.2","@types/jest":"^26.0.20","lint-staged":"^10.5.4","@balena/lint":"^5.4.1","@types/sinon":"^9.0.10","@types/semver":"^7.3.4","catch-uncommitted":"^1.6.2"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_1.2.26_1614521461813_0.6612627609297141","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"1.2.27-renovate-non-major-1f6a4a67af54055a81b1b0f2ad84bc2d6fccba09":{"name":"@balena/jellyfish-plugin-base","version":"1.2.27-renovate-non-major-1f6a4a67af54055a81b1b0f2ad84bc2d6fccba09","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@1.2.27-renovate-non-major-1f6a4a67af54055a81b1b0f2ad84bc2d6fccba09","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"e01813d34b35c50408e677cd4f609bf3506ac7a2","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-1.2.27-renovate-non-major-1f6a4a67af54055a81b1b0f2ad84bc2d6fccba09.tgz","fileCount":18,"integrity":"sha512-rM9e6l2GSqnLaQZM9DC2xKY5pUUllMyKQjErQqTGY7fXWLLrw0kOfjr4TlIhD1A10pDyPQPgKXsld5mkWonXmw==","signatures":[{"sig":"MEUCIQCwXvHF/Cg5h5EBnwTyhE8T4snMDLYXw+d7HHFAmraklgIgAUC9ExQdCN31nfii4n/Vl0eqUGqmCNPR0opSXJuluXk=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":29746,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgPFP+CRA9TVsSAnZWagAAjZAP/2AcmUwkxMke+bMahXTZ\niht/NbAdD5EN/n6lS37JgrUhA5esDRXIGWqez1IVekgDS0RDZc16JYbe9CdN\ne12Fe2v7O/luIViuDSQVNyDsx7EPGJj3LT5H8rwMQ7R68qL08HyPn28qlLF5\ntlJe82qGigiEK2vfFZcxOi5nY4PCiTvQXULjm/TQ9+7rLpc/SI0NW0yQ0EHR\ndjV/6pPGUBM4e0AqDMEQufJ+TdXni751Ixh6ALpLaVg45926IN6ARzo85QyE\n5HQP+Mmi/oSzb5n/YLByAMN4xXmAhsYU1qUuu31Gl8zxJf7e8fJs01jO4fTi\nwhvrN8/xHXi9XE1BoFWXLJoZjhwUMhUzX4X/BRQ4k//Eoz0JcruzoIkcLpA+\nWp1br10xCWYgI4iqguNUVDmvj3abDXSB8yotpD0ZzXhEHNoMmEkS015SFkHN\nR0FMrx8ff6hn7qNCOStK+ait4Rhxirq2diaiEEd3L++pZDx7SabcjEIF0P7b\nQ6RRaSQD071oZTeIg6jJ69cawhqXWatt3tzhOEzZUMPip26yhM5OisIfjc/s\nfcRlJJXIIjDdSJyNyGcdgVT0G1dBgTtRUdFDOZneoizPNLFh4vjzF3S/6MIU\nZAhWN4a9HHB6t6nOIddbHBcG5BBt7uikAfAWCOAzeD1Fu3QZvY4toFoGe1xQ\nO/wI\r\n=YMJB\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","husky":{"hooks":{"pre-commit":"lint-staged"}},"types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"1f6a4a67af54055a81b1b0f2ad84bc2d6fccba09","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint --typescript lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=shellcheck,@types/jest","test":"npm run doc && catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc","check":"./scripts/check-filenames.sh && ./scripts/check-licenses.sh && ./scripts/check-deployable-lib.sh && shellcheck ./scripts/*.sh","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --typescript --fix lib test","postinstall":"if [ -z \"$CI\" ] && [ -d \".git\" ]; then husky install; fi"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --typescript --fix","npm run doc"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.4","skhema":"^5.3.3","json-schema":"^0.3.0","@balena/jellyfish-logger":"^1.0.38"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^26.6.3","husky":"^5.1.2","sinon":"^9.2.4","deplint":"^1.1.3","ts-jest":"^26.5.2","typedoc":"^0.20.28","depcheck":"^1.4.0","shellcheck":"^1.0.0","typescript":"^4.2.2","@types/jest":"^26.0.20","lint-staged":"^10.5.4","@balena/lint":"^5.4.1","@types/sinon":"^9.0.10","@types/semver":"^7.3.4","catch-uncommitted":"^1.6.2"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_1.2.27-renovate-non-major-1f6a4a67af54055a81b1b0f2ad84bc2d6fccba09_1614566396509_0.13982482243197247","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"1.2.27":{"name":"@balena/jellyfish-plugin-base","version":"1.2.27","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@1.2.27","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"fb3cf7237aacd863d6bc9fe4afba860dd724eae0","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-1.2.27.tgz","fileCount":18,"integrity":"sha512-CpcJg51UNKKWENDMmstLFB7Mu6iYtMbJWzU2USihXOqfk1UVWqnao5Hsle6Jl8ALuSz5KSwlEE5q63InEraYiQ==","signatures":[{"sig":"MEUCIFrrAX4ayoWncMvXvhrbKuViPVJlS67OoJwyA/furvHJAiEA5lMnkdS81DdUg24y1+7UQ4O1QNqC1PIZCH8e6B5H9n4=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":29686,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgPFTCCRA9TVsSAnZWagAAWZgQAImr++qT3cxdOkpJChbU\nIqbiRdRQt102hW7GY86toY+V0f0j3505rmUuDKIYvvmjhSPILf0fYqds0VzQ\nThElpaupzBtDyo9YCYw3hxtcZN6ZIqm/gjcBZ6VjbKYZCsntAX8zotJf+OOc\nx4ju3Js+LQ9UHo15V5AIPyINHyRsMrsKYELGWCNyoSqGu30AYIVTcyl5uzGx\nhAzj1RwiCGb87UugqsK3cyKoZRkrHXGREW06Kjumz6jhjr+nj2BIL3a5PnXF\nA+PyUVt0thnQEwNtvQaLqdl8LFAIS7uw99fdU4pA+Ub30lZHHb+xP76EMlEJ\nhShVl3uY3XhInIoPb+tebHP/HnjI0PDJG3v4eXJnt62JWs2GsPlRwDAyvQU4\nay4Hs9geCQON30QVBDwumxS4yrUYXJNvjYTO4h30f1Dpm4BaGFt8lHibf341\ndxb5Llvq3oxUBMv7V+IyYtWDzEwuwj2FwcI957gdqLbib+MZu+DtCCammNVj\n/H/osKzCoKSo5MbMn1hq1Rki3vpnuZc7fhiKZ+EQ7qH2dgkN5BTGy5Pr7Yzp\nEel+QwSL6aGHC9sV5AatR8n7egq/lBWVkp74JeZVUHLUAhUqKgZg5L8W8k0B\nxdfUq2iMou1J+kAMlK3J7ndUe2kPR5IE2V4CeqhEnZjzRVNQaZsOIuWxnBHh\ntKgV\r\n=8ZKG\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","husky":{"hooks":{"pre-commit":"lint-staged"}},"types":"build/index.d.ts","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"5c2de483acffcb04cb89ee9c71e71132c785d35e","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint --typescript lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=shellcheck,@types/jest","test":"npm run doc && catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc","check":"./scripts/check-filenames.sh && ./scripts/check-licenses.sh && ./scripts/check-deployable-lib.sh && shellcheck ./scripts/*.sh","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --typescript --fix lib test","postinstall":"if [ -z \"$CI\" ] && [ -d \".git\" ]; then husky install; fi"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --typescript --fix","npm run doc"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.4","skhema":"^5.3.3","json-schema":"^0.3.0","@balena/jellyfish-logger":"^1.0.38"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^26.6.3","husky":"^5.1.2","sinon":"^9.2.4","deplint":"^1.1.3","ts-jest":"^26.5.2","typedoc":"^0.20.28","depcheck":"^1.4.0","shellcheck":"^1.0.0","typescript":"^4.2.2","@types/jest":"^26.0.20","lint-staged":"^10.5.4","@balena/lint":"^5.4.1","@types/sinon":"^9.0.10","@types/semver":"^7.3.4","catch-uncommitted":"^1.6.2"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_1.2.27_1614566593736_0.43579717510428573","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"1.2.28-renovate-non-major-522f21a50cbc3d73f8ba2d1730103e7f622c7709":{"name":"@balena/jellyfish-plugin-base","version":"1.2.28-renovate-non-major-522f21a50cbc3d73f8ba2d1730103e7f622c7709","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@1.2.28-renovate-non-major-522f21a50cbc3d73f8ba2d1730103e7f622c7709","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"54da2281223d715f34d5999623db377753cbff83","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-1.2.28-renovate-non-major-522f21a50cbc3d73f8ba2d1730103e7f622c7709.tgz","fileCount":18,"integrity":"sha512-+0kv8Ey0BmBpdGlX4gHDrM6LlAW5CFLI6yhZWaRFe49QdaEwg3XC9mowbKyfs1CcpzfRFHzr8jy2bEOBiWkmig==","signatures":[{"sig":"MEUCIQDBS0vyA8EU2OBzWlgfEfIpvwrp/NWw/GtA1RQBL3/OwgIgUdBNPR57XrU3hX04sf31bMh7VsysSHW5CG5DQY19FO0=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":29849,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgPGo7CRA9TVsSAnZWagAApXkQAIF4Q57lC3Tqer/J/lqI\nu5sgkIpC35mLJTZW11poOwRASbTK8BB2kkUGofOTLbisprxtNwzLG1mEjkOd\nVi0rBYPTLA1FAUFmfyjyBzyV9/Wp/DEueM5J/Gw96vNTNLk5w5eBOrVSa3fP\nZzD5QQ6fokPTT/kMQajaWAfcAZycTgkrw8G+KoF2ldEjHCFNaU9fyXkOg1nv\nTX18Sx+uWvHrmdhLrryxXXm91iUfEXZQEA2wm3xPlYgb2zGEW9l7W3iqq3tD\n73i/wgBAu7KwsUytaQmJP4vm81sUPscAamlwaQsQzD4UeH2IQSfHLkri1oyJ\nx/N2Zo9J5+QAUqMunY79PE/7hrhyxqruNPwnUM5PvDEswxwi2LPN6s4YtV1A\n7Fl3QveznHrNp7KUa2qNullCFmJQk0mQcvUcOdH/4Za9sArpg5+AmxeWdo7z\nSoUcIJIjJwKImtAE55LDRK43alPVgRqVYzSvkmE7RhKWWWjM7c7Kai9vfkHM\nc9ixdKG8pjSQvAl1qcVRErLeFtmVXSS5guTRgY/CWPKeS3OMVIDH8CiWBrQv\n4aGf/Jtf1HhqZglEcD8ze09KVc2L8I6P5Dm6zZggNvE6MH0h3gT9IQav61hw\nmnnQboq3WDpL5ugsYfzJEIKgbLNihDATDZBVKB9w0tJQqNODcZWDqTrQ3bOT\nUrEI\r\n=hfFD\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","husky":{"hooks":{"pre-commit":"lint-staged"}},"types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"522f21a50cbc3d73f8ba2d1730103e7f622c7709","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint --typescript lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=shellcheck,@types/jest","test":"npm run doc && catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc","check":"./scripts/check-filenames.sh && ./scripts/check-licenses.sh && ./scripts/check-deployable-lib.sh && shellcheck ./scripts/*.sh","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --typescript --fix lib test","postinstall":"if [ -z \"$CI\" ] && [ -d \".git\" ]; then husky install; fi"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --typescript --fix","npm run doc"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.4","skhema":"^5.3.3","json-schema":"^0.3.0","@balena/jellyfish-logger":"^1.0.39"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^26.6.3","husky":"^5.1.2","sinon":"^9.2.4","deplint":"^1.1.3","ts-jest":"^26.5.2","typedoc":"^0.20.28","depcheck":"^1.4.0","shellcheck":"^1.0.0","typescript":"^4.2.2","@types/jest":"^26.0.20","lint-staged":"^10.5.4","@balena/lint":"^5.4.1","@types/sinon":"^9.0.10","@types/semver":"^7.3.4","catch-uncommitted":"^1.6.2"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_1.2.28-renovate-non-major-522f21a50cbc3d73f8ba2d1730103e7f622c7709_1614572091427_0.4032552192442054","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"1.2.28":{"name":"@balena/jellyfish-plugin-base","version":"1.2.28","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@1.2.28","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"1e8d3f013dd04a501e04ce77e5931a97fafec379","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-1.2.28.tgz","fileCount":18,"integrity":"sha512-pmw9IztSO1Xm6D44xwgNjCi9JCZGpctP7mmo8T3WLgHPCoDqLsmFiVebkL5+SB2BZGTD3I+G9UYtrqouMC7O6Q==","signatures":[{"sig":"MEYCIQDjAO+DCRgBiOHLcSo/HLE9qoaV+uBphEh81TIh513BFAIhAOIe2MBI9SfjhQ5Jhi4xQ0jnZ5elf/BRIZoMq3BKt7Ac","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":29789,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgPGsFCRA9TVsSAnZWagAAabMP/iETuxH84zSjADSQ0gNF\nRvSCsmS78zoPvFlpz5sUpDRQQvOXYXqt4fHY7iiO1SfuF1nCH2GtY7wkwoH5\nASVCfTRFmJ8CNJPQZRE7rdzukihY0dEvYeOFiluMjsULsqcW0ioftOgGO9+P\nil5X5sJrEN92nTsUysFeSCefvpxgI8ZPCgCKbSAFI0E8uNkGBGIaE1U7dpCA\ntuCf4JbhhmiOshd3151rj8YMqIoTtXEDsj2xPtLKQDxAts+P432HyVyY+RiF\n2R066pd7cGgeIwIi5ZLCs6MKbF97srbow4YajNYMHlW1MDm5Gox0xh8WLiuy\nGOIkS35GbwDY/LBVIe+rMnXVepACdGiWb9rMdpqz95KhGU1GgB7sR6hTu1ma\nhudCk8m4w7fnsME8qou1xF2JdPpnYJsnaLVDR1r4m4Ehg4bPz5aJqGdA3428\nII3CwZisW3cO5rOzareC0nV+Jg12kSzqXzunnGnI6AazlwmlqPurFOTJYB6T\noPpdudCZjg6yxqpVIX9AUJLXd9fMdtfiXwg1BL9Lb1HMOFmjwtIIPFKLe5ub\nz2ujLVa2tQ+BIS44rIDxFXeLe6VagKS9ly31cgV/zJ0C3UR6U8UDbb5sOvLU\nMl4jmdfW0FsDSMfSXU/GP4zVYm9MQDSr+RVAUYL2gBdK+2Zr94u7UnECrXGs\nzGSy\r\n=OSQV\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","husky":{"hooks":{"pre-commit":"lint-staged"}},"types":"build/index.d.ts","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"38d37bf69b9f744bf59ab166d819cac376780294","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint --typescript lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=shellcheck,@types/jest","test":"npm run doc && catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc","check":"./scripts/check-filenames.sh && ./scripts/check-licenses.sh && ./scripts/check-deployable-lib.sh && shellcheck ./scripts/*.sh","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --typescript --fix lib test","postinstall":"if [ -z \"$CI\" ] && [ -d \".git\" ]; then husky install; fi"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --typescript --fix","npm run doc"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.4","skhema":"^5.3.3","json-schema":"^0.3.0","@balena/jellyfish-logger":"^1.0.39"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^26.6.3","husky":"^5.1.2","sinon":"^9.2.4","deplint":"^1.1.3","ts-jest":"^26.5.2","typedoc":"^0.20.28","depcheck":"^1.4.0","shellcheck":"^1.0.0","typescript":"^4.2.2","@types/jest":"^26.0.20","lint-staged":"^10.5.4","@balena/lint":"^5.4.1","@types/sinon":"^9.0.10","@types/semver":"^7.3.4","catch-uncommitted":"^1.6.2"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_1.2.28_1614572293325_0.14329237258470373","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"1.2.29-renovate-non-major-f50edd020bde12e106c3927b9ad7cb877fb6da66":{"name":"@balena/jellyfish-plugin-base","version":"1.2.29-renovate-non-major-f50edd020bde12e106c3927b9ad7cb877fb6da66","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@1.2.29-renovate-non-major-f50edd020bde12e106c3927b9ad7cb877fb6da66","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"e308bdc9854ea5928fa7cc49b313f2831335ae39","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-1.2.29-renovate-non-major-f50edd020bde12e106c3927b9ad7cb877fb6da66.tgz","fileCount":18,"integrity":"sha512-JRe4yeDO9Pyk1bOSR+XbH6OAsyEN6FfiqiENpIYxETbWVlwMjE6L/hpEcVM/yFEk9psy5FsnX08AIA+dGePkOQ==","signatures":[{"sig":"MEUCIQD5V390yUNBDA1csI8iKr5DUWcIN7YhkoZD5C/aGi1/KQIgPm+YZ6LTrrIp7FWQi2rsygmgdUDYyuyTd0hXtJaFW24=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":29952,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgPTV9CRA9TVsSAnZWagAAcJYP/jDNJKR7hkO6JrL3iPvX\ndxMGyoGlcpi89SRz3Cb6bfwXkdPVkUppiKoLJWUiortIHPDxz01pKnaQriXR\nMYtnEQEsYjhsHhvAWgXW8wJNk6Si9LrZdOMkoXhNo7aOjnHewnStWzOKkBTh\nRj1eMj0gLCj1yqnNPfuv+C25Mj0MPgE8CWIPMx9mY1dIXzMNZS8n1Y3IDDp7\nSvLkgNwMRZ+//uIe7j/3x4m/EGvvN1ZImVOJssFBGmyW7g5jlkVuQ/V1IZwv\ni7NBQm3OYpaV++DzKA9HtSSAo4eHXOyR7XOi617DUbxU4rvWcpz6haa5gGlN\ncOD8Unh/PkMx0Spgxhth9lzsmZIQwoMiQhx4qwiZcYSOQg/AaHHo3cSZCBtD\nm3J2eDi4ysQ7ktoNvR9YRkWW0CVjyQ9j9ZkT1iNrWRzgAFtqKo693VkpoGKb\nO20911kZYoccRjc/tWM4V+aj73lOtjs1J+LBQYCZn5eD1cvukm+kp6Ujr4FX\nomtZnRAqxBWLyUr8XGeA8Kf4s1L6GnHRXj8ZSsZSfQfkoVD/8FLbj/r1KEcd\nen4iRSXGI9w6pcqgYI1BhlocnGjES88guDrpRW2vrr1nn6r7/hg1uhF3Fnk7\n3d/xnzNrldQIi5LGZt8+AIhJ/6isEFLa7/ubI4ext06ZdHzH5KYl7e1+ZQ4Y\nxkZF\r\n=KD9P\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","husky":{"hooks":{"pre-commit":"lint-staged"}},"types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"f50edd020bde12e106c3927b9ad7cb877fb6da66","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint --typescript lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=shellcheck,@types/jest","test":"npm run doc && catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc","check":"./scripts/check-filenames.sh && ./scripts/check-licenses.sh && ./scripts/check-deployable-lib.sh && shellcheck ./scripts/*.sh","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --typescript --fix lib test","postinstall":"if [ -z \"$CI\" ] && [ -d \".git\" ]; then husky install; fi"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --typescript --fix","npm run doc"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.4","skhema":"^5.3.3","json-schema":"^0.3.0","@balena/jellyfish-logger":"^1.0.40"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^26.6.3","husky":"^5.1.2","sinon":"^9.2.4","deplint":"^1.1.3","ts-jest":"^26.5.2","typedoc":"^0.20.28","depcheck":"^1.4.0","shellcheck":"^1.0.0","typescript":"^4.2.2","@types/jest":"^26.0.20","lint-staged":"^10.5.4","@balena/lint":"^5.4.1","@types/sinon":"^9.0.10","@types/semver":"^7.3.4","catch-uncommitted":"^1.6.2"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_1.2.29-renovate-non-major-f50edd020bde12e106c3927b9ad7cb877fb6da66_1614624125089_0.7258868915284409","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"1.2.29":{"name":"@balena/jellyfish-plugin-base","version":"1.2.29","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@1.2.29","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"977fe5c60bca0685da7cc25113d5b61bfdae224e","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-1.2.29.tgz","fileCount":18,"integrity":"sha512-aa1A3vdgCARzjb8GBh1/ILkvEzSafAnlXrUdrOG24oPa7YPl4U8G4543Ak9OLNWabsdQBV+BIwhFv/KPCLvOcg==","signatures":[{"sig":"MEUCIHtqyn7BKmJpWCWoZTfgDN3TYuhrBS3OZov2aG4FUogmAiEA9va5DHO1sqWb9Zyn44xn1/CvYICcJ5epRNVEtnx2Wus=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":29892,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgPTZUCRA9TVsSAnZWagAAckQP/RC6jrejRE2H1UgwrcOx\n/sVpfe0rbIs0AmKog/rzTEpAwSLq0XMAFgmE3zarzvPtx7taeoagg5dhtbTF\nicOujoveD2y/BjB8+KxoR9mjZV/2lVpPey47nXcT6bSecOsRfmDKa8uJFxvV\nTd6+tMsRISw6FvZpX+EqNsfsAWGbHtw4Pls67bxr6o/iokF8sENbhsP15R1c\nu5Ah5UC1MRIb/NSnVGVdGYM1keinzM7L6dGUxqf5r09/2GO8ykxwzd9p67Un\nIvk5tumPl5MCkfR+1F+bS8sQYYb4ihJH8qrx/eiNHZX+SH/VV5Ny2y488m4k\nemCIuSy7LB0iAEga+zONAItDDudqpbsuCtLfUwAJQrZYeJpDyxsIGW46LZva\nPZ/vwYcqVG3vziAUo3WX2GzliCv2WYa5Pw6tCqUzviITzT+kSQinIO821b4j\n9LS/p7vC9IxO10u5ptZP7NrLxJWqhWXgo7RX1X2UgAuMnpkEDZif9lDJm1W+\nVMFIiLPC3huKd5GMresSev72vfzjEWKGlu1KIvixsjiQ1j/pSfgW/kSu9eBR\nAvUdyxomq3ktOdvmsYW+BzFIVAqJ/M6cvqslHvhYTRXxz465e0yUcTiIN71g\nZL7fI/94LHLWHgbnsNewo+MS5OUulRQgj3ynNqyIiHRC8LQQ3k487a6TdsN6\nxCfU\r\n=mpgD\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","husky":{"hooks":{"pre-commit":"lint-staged"}},"types":"build/index.d.ts","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"29c2172d5fb732052948a7b974cd5a06e9c645a9","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint --typescript lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=shellcheck,@types/jest","test":"npm run doc && catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc","check":"./scripts/check-filenames.sh && ./scripts/check-licenses.sh && ./scripts/check-deployable-lib.sh && shellcheck ./scripts/*.sh","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --typescript --fix lib test","postinstall":"if [ -z \"$CI\" ] && [ -d \".git\" ]; then husky install; fi"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --typescript --fix","npm run doc"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.4","skhema":"^5.3.3","json-schema":"^0.3.0","@balena/jellyfish-logger":"^1.0.40"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^26.6.3","husky":"^5.1.2","sinon":"^9.2.4","deplint":"^1.1.3","ts-jest":"^26.5.2","typedoc":"^0.20.28","depcheck":"^1.4.0","shellcheck":"^1.0.0","typescript":"^4.2.2","@types/jest":"^26.0.20","lint-staged":"^10.5.4","@balena/lint":"^5.4.1","@types/sinon":"^9.0.10","@types/semver":"^7.3.4","catch-uncommitted":"^1.6.2"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_1.2.29_1614624339897_0.4828085539374485","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"1.2.30-renovate-non-major-bf14c0eb5b203ffad227ce339b9f9fc86584cb86":{"name":"@balena/jellyfish-plugin-base","version":"1.2.30-renovate-non-major-bf14c0eb5b203ffad227ce339b9f9fc86584cb86","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@1.2.30-renovate-non-major-bf14c0eb5b203ffad227ce339b9f9fc86584cb86","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"76798e0bd27474a920e0b12fd2dff69b3c5340d4","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-1.2.30-renovate-non-major-bf14c0eb5b203ffad227ce339b9f9fc86584cb86.tgz","fileCount":18,"integrity":"sha512-c71GR7JA/B8LX1F9rkz8vtqxtH1iadNGbRokwM+ElWA+/9uFLUuYXOUvw7hR3alq9R2/6F2/VbZ31fYRIT90Iw==","signatures":[{"sig":"MEUCIGmc8o7Gme7CWfViLr0/00zZe7z3VGgCewfhAeiTXh2tAiEAxVuzt9Md5U9elBxLwCPEc5ttLX1MtYGl88nwPup1Ga4=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":30018,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgPcL3CRA9TVsSAnZWagAAl98P+gI3paAuimmO2AWTHGX8\nBwhouBDUdBD75cKO/7Y1sT3ZnM8+DFSSBnmv845bI9ec8k4nXJ/xpsics2wB\nr3OAvi8cuwBJquLbTQh6d8C2vWwtnXC/l+9EBCKsjJFmjlbWHXw2V7Yxw2Md\nTJYW9ZNale5T0GF8+qwFW07E4Qe4tMJqrzvKwnJ5FeUztYud/Iq4kDbK1hPz\n/tM8a4zb0LQEOt7Axi/cHipzjNUcBp4uN1aj+umfkUoKFv8idaIYN+dKrAFy\n6eHIWAQSlLmxIu0MLNU92i7cZ8PfqgZETHEkdh0tzPk2DJhRzhlbPTKtMqdU\n9TsUmUASpSSnDFzSfMI9MPpC5DON7TAR07pRZ8Ggu1AL6/j6C6tRWFt14Fsy\ntFUG5pKTFcF37YUMUn+lPYo6P38J7lnPVgxVr0e4VQ7MUH1sev0oJIrTIpz8\nEdvZfe74FO+vO5yb6PA6lXDFhKHwiYC7jODBoAB1f0LR+9AOXWvDFv74eRG3\nALqIkRPx65O1uE/1Ure4ixznMSC1R5ydsoKHkbZvxmJaMuaVXQ77rlRAHYbH\nkjA4AAhIDC1rpXpbvBwFOHhtsJGI1TUWHSYF2bZpfdq4ntkgtrfmkukt8LjT\nfCQc0omzLmccP/7ONZVqZ6H9DS1MN5QMyANzECEsMQ1IZV+2nM+hifHMhalY\nuTyI\r\n=545A\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","husky":{"hooks":{"pre-commit":"lint-staged"}},"types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"bf14c0eb5b203ffad227ce339b9f9fc86584cb86","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint --typescript lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=shellcheck,@types/jest","test":"npm run doc && catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc","check":"./scripts/check-filenames.sh && ./scripts/check-licenses.sh && ./scripts/check-deployable-lib.sh && shellcheck ./scripts/*.sh","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --typescript --fix lib test","postinstall":"if [ -z \"$CI\" ] && [ -d \".git\" ]; then husky install; fi"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --typescript --fix","npm run doc"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.4","skhema":"^5.3.3","json-schema":"^0.3.0","@balena/jellyfish-logger":"^1.0.42"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^26.6.3","husky":"^5.1.3","sinon":"^9.2.4","deplint":"^1.1.3","ts-jest":"^26.5.2","typedoc":"^0.20.28","depcheck":"^1.4.0","shellcheck":"^1.0.0","typescript":"^4.2.2","@types/jest":"^26.0.20","lint-staged":"^10.5.4","@balena/lint":"^5.4.1","@types/sinon":"^9.0.10","@types/semver":"^7.3.4","catch-uncommitted":"^1.6.2"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_1.2.30-renovate-non-major-bf14c0eb5b203ffad227ce339b9f9fc86584cb86_1614660343306_0.08303044788465597","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"1.2.30":{"name":"@balena/jellyfish-plugin-base","version":"1.2.30","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@1.2.30","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"14a441d688a31828795d80c72084a4c57e01480b","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-1.2.30.tgz","fileCount":18,"integrity":"sha512-jKS3vIVkiJ/zmblhTUDzejeiBBkfdDfuSpmMsVrTX2ZzuhLdK1XwRD8CYehkzX2rmoo7ugW6edSLLbZDrnPIyg==","signatures":[{"sig":"MEUCIQCN1kshwsRqDKIkU++dKn3IsxfBFhYmUHPYGJepMsXNkwIgBN9GjTM8jSkSivoGi0Qz4T6oayQMh0enD6teKahWKLU=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":29958,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgPcPACRA9TVsSAnZWagAANMsP/AouUCwwEBb62BUHcnHK\nLATYRww+UDOXYjnsbgS5vAfMa5Qckf39Kuy3JR3OnVHxBGvsDuqr2awui9fE\npqBcvb6Zcbvdm3+KZ1LNx7fZY0qZRsZnL05w+9RWn7jplfazWxERpXD2Fofh\nZO177Ha6AG9YU1gcea0ynlNsy7kML3WoV2L6kWfwMgS08t7UeSym8kQpRb3/\nfS2KSWlheg+KBlskWKOJ8s29OWmI+rbcgYLQeLB0Q/tEx5j5qyANPm41jXxe\nBI89tzfvZ8IbpVDCTzIz8HJAPRioSFQjeD5LBfs+CwhwIjnzBKDX1E29j4fJ\nQvLM2NCH+9PvJWDqR8Dx17w+MTAkIxwzB1hcw4t1uDDjfEljFKfX8WhKCXi5\nvVA7dKv/9CwA1qjqtDu+rROWyl0dmDcrRpxUgzXO7d8zOz3XYBGngVCGaJW/\n4wSNt+QZnaTP7iwSq7gFsgZrViwUO5oYe5RSn7qP1UM0s6LvGWsHo68Qf/zH\n49RvyQgezNLxl3RTkJ9rSI58RoNLNQ5lG6J5fbrJjtuTAf8xr7OPI1MkM6r5\nH/U5EuY2k2U1x5SC9FH2Sn4cJ3/Khybx7+G/iBz7vdxQT5aBrYF+PTMUAhCp\nn/gDdSH7PUVBlAEjwM1LIGP9FVWHSjzNhDeO7XMZPqHmNkdjlsRZLWnmjGOe\nsLHr\r\n=BtHH\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","husky":{"hooks":{"pre-commit":"lint-staged"}},"types":"build/index.d.ts","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"145cf6d30b59899106400175076f94c55138f4a9","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint --typescript lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=shellcheck,@types/jest","test":"npm run doc && catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc","check":"./scripts/check-filenames.sh && ./scripts/check-licenses.sh && ./scripts/check-deployable-lib.sh && shellcheck ./scripts/*.sh","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --typescript --fix lib test","postinstall":"if [ -z \"$CI\" ] && [ -d \".git\" ]; then husky install; fi"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --typescript --fix","npm run doc"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.4","skhema":"^5.3.3","json-schema":"^0.3.0","@balena/jellyfish-logger":"^1.0.42"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^26.6.3","husky":"^5.1.3","sinon":"^9.2.4","deplint":"^1.1.3","ts-jest":"^26.5.2","typedoc":"^0.20.28","depcheck":"^1.4.0","shellcheck":"^1.0.0","typescript":"^4.2.2","@types/jest":"^26.0.20","lint-staged":"^10.5.4","@balena/lint":"^5.4.1","@types/sinon":"^9.0.10","@types/semver":"^7.3.4","catch-uncommitted":"^1.6.2"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_1.2.30_1614660543665_0.06763766416512773","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"1.2.31-renovate-non-major-11cb141c90138db546ab7cd717d02990a5aed21c":{"name":"@balena/jellyfish-plugin-base","version":"1.2.31-renovate-non-major-11cb141c90138db546ab7cd717d02990a5aed21c","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@1.2.31-renovate-non-major-11cb141c90138db546ab7cd717d02990a5aed21c","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"6615f09af3d74a39ee4f416c03ccc6b6092db9a6","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-1.2.31-renovate-non-major-11cb141c90138db546ab7cd717d02990a5aed21c.tgz","fileCount":18,"integrity":"sha512-QDb0YiJ0jXSfcyuvi6UIrxGRNFF0T7TSOSAplEOj2KGwNCI31Q0oau9V5Ja1s5z+YJ4LDw3b+gZwTOXt3m0Q4Q==","signatures":[{"sig":"MEYCIQDmf33XSpFdtR5DhwrEe3CfJW+6IJKuOU0rnWxDhIg2KgIhAMEhKFWmxS1PqeQMWRxyFiaSAS5HrL/t5NxPpFO0MMAd","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":30084,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgQJNRCRA9TVsSAnZWagAAArMQAJkTQlwKvAJ7+hayEvLL\ngcni3f92dWhBEpMDMjOwGuADMDo6ohbIbsHqxBzNLLl+TjXRdxXS1jhJx3Mb\nCaHmrtBP/RmAqznm1c5rE6EztoCfRx1LhRWRx4Sj4ryQJTSMMnb6z9DLAHLC\nJ7ZaRmZv7OCn+thVC3kHtxwU94x3EQbASC8aCgiBhxIYuIhmEz9hdWmSCWRU\ngBrqurRQ8IAJ/DBvyxiLLJbusAYqz+R1ZkpMjho4XzFuh4STpGsbxO3+pd+W\nmCXLduSNE7lazz3Ej1FoyPndiBijneJkIWBSwQuppbMkuW0Zu+tHUhfl6+pE\nL0fQCZJDjSvBud1XbYayE4QC6FXviq5valy7WeyOlA6NudyOrMoQaYWoaE8g\niDI17HGc0awU7tuefjWTUYNnYzPyLEEWJ6MuxwV32nlTPbNbVT25OvUS1ab+\nqkcJ2dKgYQqPhV7PnfAOg+Jr7ipRmRCFysLz/fArCsMIvt/9dLKsm+idUmXt\nZr/h6X7ghOzZEHZUJVcH+KwocBP+XLqCg++IT4i+QeMMpI3/RktBXiVUdzis\nrb7nJ+kCdYJmtR9YeBCj/q8s0jLue/k3zXXFzkiFBNk6oOlz+QQOr70o4DNi\nObgN/SCGEIBB1A4vbCqkpAE26NkZ45jGQW83YbW9hyoVPXvuAzI6B3RATwcX\nUEAW\r\n=qqrf\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","husky":{"hooks":{"pre-commit":"lint-staged"}},"types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"11cb141c90138db546ab7cd717d02990a5aed21c","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint --typescript lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=shellcheck,@types/jest","test":"npm run doc && catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc","check":"./scripts/check-filenames.sh && ./scripts/check-licenses.sh && ./scripts/check-deployable-lib.sh && shellcheck ./scripts/*.sh","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --typescript --fix lib test","postinstall":"if [ -z \"$CI\" ] && [ -d \".git\" ]; then husky install; fi"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --typescript --fix","npm run doc"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.4","skhema":"^5.3.3","json-schema":"^0.3.0","@balena/jellyfish-logger":"^1.0.42"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^26.6.3","husky":"^5.1.3","sinon":"^9.2.4","deplint":"^1.1.3","ts-jest":"^26.5.3","typedoc":"^0.20.29","depcheck":"^1.4.0","shellcheck":"^1.0.0","typescript":"^4.2.2","@types/jest":"^26.0.20","lint-staged":"^10.5.4","@balena/lint":"^5.4.1","@types/sinon":"^9.0.10","@types/semver":"^7.3.4","catch-uncommitted":"^1.6.2"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_1.2.31-renovate-non-major-11cb141c90138db546ab7cd717d02990a5aed21c_1614844753276_0.8635379431746246","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"1.2.31-renovate-non-major-abe0d99a84a21350fd0e966b45b1f6371bce4c74":{"name":"@balena/jellyfish-plugin-base","version":"1.2.31-renovate-non-major-abe0d99a84a21350fd0e966b45b1f6371bce4c74","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@1.2.31-renovate-non-major-abe0d99a84a21350fd0e966b45b1f6371bce4c74","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"6d6575fd21c4458683181e777a8b5f70f9b30ceb","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-1.2.31-renovate-non-major-abe0d99a84a21350fd0e966b45b1f6371bce4c74.tgz","fileCount":18,"integrity":"sha512-fQrxYSXJM1XOvemCW44VEkS7m7hWeE3HZPl61HvIijC4l2kFzwnCW5GHkzz0TeZ0s3oSE7Y0H0VCPZZrdtfejA==","signatures":[{"sig":"MEYCIQCNBrqMRu6cYPDpia8yT/w5SM3bjfRAcQa4HeTFiZBOCQIhAMJSRCuaa2V0VVodfzUD6lSTYwjDhK+SMQV8zN8MyGMi","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":30084,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgQW5UCRA9TVsSAnZWagAAN/kQAJYvRMNGxSwPCtk3iRXh\n95yUovKhcLvwuSQRsHFrQ/d1UaxJwLHnv6NRcuXzz4C8JGPoPDwo48euU/DM\nxkp0h0q+mgTUfQCLIjt29jshMCZ6zsYL4YnUu7IIG0wmnqYbJBTVgXjVd3kA\n+G4euP4sb9Z9P7fOoSVednW8VUWfIjUwkRIXhxOrbQ4ESqB6Uc+j6V/EZAF2\nxdIKGEvLGwNc1S1NiRMKxU17425UDTPVKhbzMfjoZOPhAEtAXuqmXIZPq0Vh\n4BnY2FG/foa4JuD2HeXMQXMemoFX6k8oXmq6gKN8441p3rE9fULkqOOJ7oJq\nvCpVLv49StqnbkSsXO6D8jXFXUDThPBJ806xEaVw0ORUcsTpMeb62Rh5Pe+t\n92Qd6KVCZi7d7vkE1PhkD608Ftmyw9YG+uhobFneOba/BiwZzd9lGqk/rfEe\nNB8/rMj3dPxKzFjHkIaniCY5Wt3VvVQuQ8Red7pUKNfC17S6U4yF2fDvjbgd\nYFfKB3pGUMmU7/rdGI6Ti0Ao+A2V410MXIawl4zndY7wTryMDDvukqJjHijp\nDYUAZff9q8q9bq1TUVKDhsf+jP1Zp6RSBLUvT9r1Qyj7BZjES8cJWckENXQb\nOoxwohG05r4+XFFT2j1HwT0Hf75aD1NQxq0SfP+uUNpozmMCdABFVAgD+rAD\ng7a1\r\n=9TAS\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","husky":{"hooks":{"pre-commit":"lint-staged"}},"types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"abe0d99a84a21350fd0e966b45b1f6371bce4c74","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint --typescript lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=shellcheck,@types/jest","test":"npm run doc && catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc","check":"./scripts/check-filenames.sh && ./scripts/check-licenses.sh && ./scripts/check-deployable-lib.sh && shellcheck ./scripts/*.sh","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --typescript --fix lib test","postinstall":"if [ -z \"$CI\" ] && [ -d \".git\" ]; then husky install; fi"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --typescript --fix","npm run doc"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.4","skhema":"^5.3.3","json-schema":"^0.3.0","@balena/jellyfish-logger":"^1.0.42"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^26.6.3","husky":"^5.1.3","sinon":"^9.2.4","deplint":"^1.1.3","ts-jest":"^26.5.3","typedoc":"^0.20.29","depcheck":"^1.4.0","shellcheck":"^1.0.0","typescript":"^4.2.3","@types/jest":"^26.0.20","lint-staged":"^10.5.4","@balena/lint":"^5.4.1","@types/sinon":"^9.0.10","@types/semver":"^7.3.4","catch-uncommitted":"^1.6.2"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_1.2.31-renovate-non-major-abe0d99a84a21350fd0e966b45b1f6371bce4c74_1614900819833_0.8079787856695269","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"1.2.31-renovate-non-major-79912a32a3d0eb2a6a4a139af81c22a316f55c7d":{"name":"@balena/jellyfish-plugin-base","version":"1.2.31-renovate-non-major-79912a32a3d0eb2a6a4a139af81c22a316f55c7d","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@1.2.31-renovate-non-major-79912a32a3d0eb2a6a4a139af81c22a316f55c7d","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"c0e7f77258cf2af6949afc1ead8f79a41dd340ee","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-1.2.31-renovate-non-major-79912a32a3d0eb2a6a4a139af81c22a316f55c7d.tgz","fileCount":18,"integrity":"sha512-MKxrQuixizv9DSXPJAecd5oAdF4+8tWklsG7vt30Jr9N2y7v/8EqLx6wn0K2GMRF2PnYyyrolFyIgpkr8i3jQQ==","signatures":[{"sig":"MEUCICloukYv0z5wKQ1BHX7dsq/GnY6Dqv9YlC8IUZMuiQBCAiEAg1xZ8/AAxr7FVKkvu2SvKEnYIxykf6Zdwa8Nk2+K8oI=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":30084,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgQ8IdCRA9TVsSAnZWagAAs8UQAJtbXadQcC2W2cP9XyiN\nRahTHjbmsUCFLPsqZfxapPxkJ99Sj5R5w2Jqv1ga3AcQlBwC7NFG94wOPvK+\nGebSJdW+wGXFOrqmEt8oMOmBOgWJWekU9oP2zeYb18VWAuVBrqsmPqgwFKDh\nxjU4pRKDpNnu+L7o82FUAcKwEXxe8SeuDiEvGyB7Cd/aGwyoF0A1tI/qeeLy\niYsQU5xxjForywwFSNQ+67ahcjx4m3X9HfTUqINBhqy6epYcNYMYqILq/wCa\nDBbCSz6WUvCYiAY53Hp44EMUYHEu3ONxe+wZiXtc7ydvS+5glpMQAdeBAPYl\null2kaSWlp80f5X2HZDyMiQvo6lfSobas2gWEok99zn6WuY7Y9EhrQRazCb3\nD5nwUrb4cpIbldbHIMbgBjmIGBOWsIclDA0I2SMgiEpldwujIM8gBnAua6u1\n8m0hbWAZYGC2AfzL4ON8Jz0W2rpOUvj0xAQPnQAoCA+L/s+wErGXfMkwJkmS\nqzLGFEd40hrIwRKuxQW+M2GyKNr4vVotlW7JRK6e51RU1lgrHStPvfsLFqi+\nwCBTPka6tGhNDaR6aYWRJrpYEIbmkYtmT4LY5YA6CWB+/Vrk/2tQaVIVok1T\nYI/hww8VEZ9xIWYSE6nsANpIR/RJGclByeWRLC0FyDQDLkZHpSYzFBnvuHgK\nrRvZ\r\n=Cv4S\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","husky":{"hooks":{"pre-commit":"lint-staged"}},"types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"79912a32a3d0eb2a6a4a139af81c22a316f55c7d","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint --typescript lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=shellcheck,@types/jest","test":"npm run doc && catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc","check":"./scripts/check-filenames.sh && ./scripts/check-licenses.sh && ./scripts/check-deployable-lib.sh && shellcheck ./scripts/*.sh","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --typescript --fix lib test","postinstall":"if [ -z \"$CI\" ] && [ -d \".git\" ]; then husky install; fi"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --typescript --fix","npm run doc"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.4","skhema":"^5.3.3","json-schema":"^0.3.0","@balena/jellyfish-logger":"^1.0.42"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^26.6.3","husky":"^5.1.3","sinon":"^9.2.4","deplint":"^1.1.3","ts-jest":"^26.5.3","typedoc":"^0.20.30","depcheck":"^1.4.0","shellcheck":"^1.0.0","typescript":"^4.2.3","@types/jest":"^26.0.20","lint-staged":"^10.5.4","@balena/lint":"^5.4.1","@types/sinon":"^9.0.10","@types/semver":"^7.3.4","catch-uncommitted":"^1.6.2"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_1.2.31-renovate-non-major-79912a32a3d0eb2a6a4a139af81c22a316f55c7d_1615053340983_0.15467100131077482","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"1.2.31-renovate-non-major-51c05fd7a5465d85ea0b0aed41bd7837bf5938cd":{"name":"@balena/jellyfish-plugin-base","version":"1.2.31-renovate-non-major-51c05fd7a5465d85ea0b0aed41bd7837bf5938cd","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@1.2.31-renovate-non-major-51c05fd7a5465d85ea0b0aed41bd7837bf5938cd","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"3ab84c08beb19f604a134a621c65b53af551fd3f","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-1.2.31-renovate-non-major-51c05fd7a5465d85ea0b0aed41bd7837bf5938cd.tgz","fileCount":18,"integrity":"sha512-hGPyW15yvPJFlpqn2gsMNYzsVL8rEoLOkMNSM+OvNsa4TfDrPo+KsmRQk1t2TUrrHDBnPDGVsMx6WLTFnvOlBQ==","signatures":[{"sig":"MEQCID/dg/l243BcUXbnnoMG4SeGAC327Ca6Fm2z9Zshd/oVAiBSK3b5yc6WaU9evK9/CuzifAec5mAZ6tmGBe/e4vBYcA==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":30084,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgRMs1CRA9TVsSAnZWagAA7ioP+waKtGd09W9J5eG1jTHb\nsGUhFgFNCV1Zvd8hlvomF9b2h0dGlaYtVmr3t3PnJEDHxaAudrk55t0lzY+b\nCtX1Y8qNfSw8oG0PqXTGL3I401IyRncgGoP1mpIUnOzf8C+ve1eCL7Vu6FMh\n0h87bVn8rZSkqWXHRcSDq3hAwSMvY4xMve3TQdG3ktjXYXG/Se63sWVbTQqv\nOFkL7vYUTFMiV+H8kluC9NzG62EJvJT85KSSqqoFqaj4rwxg/aTV0VDeqBNZ\n2DupBs9tzTdzTG7lxYvsygH/5PY1A8/WrWm2nP+BkFok7HJ5OYCUxTK67uOs\nekOUYQYG2Pq9qmcTbKuBD9OEBOcxcSbk8HQdWBp7kajeuDXFCzH/Chp4EPYv\n8YYCr4OaZymsmglnO9t0kAiF1OENEKmjCpMdiWje8ZLDOCDjLPt3/vs7Fden\n9Q6l0jdwpFWgys9zgVtBZcCUINISn4JjPsJc1/eEhSCzPsTKknBMriZCyT9w\n50x7VeF6VJIeSCsppInmxfl5vFCKzpF8q9IhyFjfkYGFUHaTWeraDROCOFVT\nReoRSF7v3Q7vWjb4FGZtKeVsQZUq0zU5cHU/aR30x7JVkix7G9dkNIO5fxJ0\n4dSHWgMwAlLjyYH4F9V0gVyhiHYp9TzLoUyJZkpwap8Wq14NjjwVkIy14pYV\nYGGM\r\n=6sKk\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","husky":{"hooks":{"pre-commit":"lint-staged"}},"types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"51c05fd7a5465d85ea0b0aed41bd7837bf5938cd","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint --typescript lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=shellcheck,@types/jest","test":"npm run doc && catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc","check":"./scripts/check-filenames.sh && ./scripts/check-licenses.sh && ./scripts/check-deployable-lib.sh && shellcheck ./scripts/*.sh","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --typescript --fix lib test","postinstall":"if [ -z \"$CI\" ] && [ -d \".git\" ]; then husky install; fi"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --typescript --fix","npm run doc"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.4","skhema":"^5.3.3","json-schema":"^0.3.0","@balena/jellyfish-logger":"^1.0.42"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^26.6.3","husky":"^5.1.3","sinon":"^9.2.4","deplint":"^1.1.3","ts-jest":"^26.5.3","typedoc":"^0.20.30","depcheck":"^1.4.0","shellcheck":"^1.0.0","typescript":"^4.2.3","@types/jest":"^26.0.20","lint-staged":"^10.5.4","@balena/lint":"^5.4.1","@types/sinon":"^9.0.11","@types/semver":"^7.3.4","catch-uncommitted":"^1.6.2"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_1.2.31-renovate-non-major-51c05fd7a5465d85ea0b0aed41bd7837bf5938cd_1615121205121_0.8565793711679921","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"1.2.31-renovate-non-major-c83d8d74c3b350f1750d1ed530cdb5822c4b0a48":{"name":"@balena/jellyfish-plugin-base","version":"1.2.31-renovate-non-major-c83d8d74c3b350f1750d1ed530cdb5822c4b0a48","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@1.2.31-renovate-non-major-c83d8d74c3b350f1750d1ed530cdb5822c4b0a48","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"e086378c4507792aed7bd7e30e3e85859fa83255","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-1.2.31-renovate-non-major-c83d8d74c3b350f1750d1ed530cdb5822c4b0a48.tgz","fileCount":18,"integrity":"sha512-yTYb4Mad4zq7sM2nBi0dL6lnS6on8MmOY6Hnf1hrPZyB6jbcERTI1A0rIVR2EbZHa3RFE08cSubjH6rboleGcg==","signatures":[{"sig":"MEUCIFJy8PNvlEYAsLusvtzmcX3ixx3wSwXBS0CBGlUCzr8ZAiEAuSNv2O1kx+vDeeQu9lESh5CsfYR3NRMPHn1AWmu2yG4=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":30084,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgSKPlCRA9TVsSAnZWagAAx38P/A7be+uF/HR18NA3Wv4j\nmY0yX/uOZIfoJIf0zIk+YuPNo0rwm5FtJ/jKXvUqsDruZODX19M0dOsvoB8c\nXTCdog3n6XetrojulIrZj+qoOtDEqSSmiLt5Ed/bQq9ZmBk7ye8PdugqGfkH\nOyoNt5JFhgXvvn1zegFQIFgupQ8JCguRUP0ZUYDmGizU8XkrmOSvZNvsc9B9\nNnoaq7fleG83y6X9rG+3BIqfun45uxvRFDA1NILY6Q0+jfCWoqw1jeTrgVcJ\nGt+WOtMbcWVzcJ0LXgwZzbSD+AjgJrV/cfXzEF4Bn5Em//IEwU+Iii7bmVbc\nx8z+myasHlrOCmrExVlyKAv7vFYIXKvcj0NTGq2OZD3vS4bMkYLHiLSKNvCa\nm9tFgL8lnP8vO2U5+TLWlSyV0JqSDteTYUYUP4UMreUZcCLOYQFOjmkr8Q5/\ny4wDnTQHZaEVkT0yPDAGF5IqUkn/aBePnverl2ZkPuJmIZ0hT5GW2IP46LW/\nR8to4FOL5MJi14kL8PuO5NJ8O8z6g0OzwGo3YJ7PDW6Dd3rT/VP8B4YGyOYi\nSUew4QZ9nCuVmD8PMM4ewZkl+4xYNLpOXLrWO5VUsVGWv9EEipupBDrMOSbk\noPjGfhReqmneOM4OCzA01rxzkjE7q759sQYk8sr7m8WaXJjrX03p4yDr+mFv\n2ah7\r\n=LMoF\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","husky":{"hooks":{"pre-commit":"lint-staged"}},"types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"c83d8d74c3b350f1750d1ed530cdb5822c4b0a48","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint --typescript lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=shellcheck,@types/jest","test":"npm run doc && catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc","check":"./scripts/check-filenames.sh && ./scripts/check-licenses.sh && ./scripts/check-deployable-lib.sh && shellcheck ./scripts/*.sh","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --typescript --fix lib test","postinstall":"if [ -z \"$CI\" ] && [ -d \".git\" ]; then husky install; fi"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --typescript --fix","npm run doc"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.4","skhema":"^5.3.3","json-schema":"^0.3.0","@balena/jellyfish-logger":"^1.0.43"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^26.6.3","husky":"^5.1.3","sinon":"^9.2.4","deplint":"^1.1.3","ts-jest":"^26.5.3","typedoc":"^0.20.30","depcheck":"^1.4.0","shellcheck":"^1.0.0","typescript":"^4.2.3","@types/jest":"^26.0.20","lint-staged":"^10.5.4","@balena/lint":"^5.4.1","@types/sinon":"^9.0.11","@types/semver":"^7.3.4","catch-uncommitted":"^1.6.2"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_1.2.31-renovate-non-major-c83d8d74c3b350f1750d1ed530cdb5822c4b0a48_1615373284741_0.8562336328148976","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"1.2.31-renovate-non-major-ed4ec838aa8894e0640b59358be6f065231f8cf4":{"name":"@balena/jellyfish-plugin-base","version":"1.2.31-renovate-non-major-ed4ec838aa8894e0640b59358be6f065231f8cf4","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@1.2.31-renovate-non-major-ed4ec838aa8894e0640b59358be6f065231f8cf4","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"f0cccb70a043cb55ebe401b82f1a48cac8cd5bfd","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-1.2.31-renovate-non-major-ed4ec838aa8894e0640b59358be6f065231f8cf4.tgz","fileCount":18,"integrity":"sha512-OuvJd2j6JUgDej5mbmeTqJMTR2qO0qJke/o0ntvEP5uJ/TlkRA1kn/Z4aZev3ZYZzNNPaoHhR+1dPRrJFv7wKg==","signatures":[{"sig":"MEYCIQClpSKmzj/8oESFcaoHkvJXwO3m9Yu9w5tgsgAoRnCBigIhAKQnq23gr9cLU/eXNfSEBZYBjkYjGw1WW6se3CU/xvqV","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":30084,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgSW43CRA9TVsSAnZWagAAc6MQAJW8YvwbaQOp4aLXhGjC\njRHsYv9E6MvB+IHC6m2jN0p9PmACNK0hcRZhntgtfzQCCrOyg5gjmbiWEuDH\nbLFz+7ZomDkmXy3EIifFsaavp5Dww4rN0U8Sxff+rgo22c8QUjWmlf7Kpck+\nwS1aIkSvbp2GpQU8H2bYJnwKt/BIZJS0V1Anau0DTTZi7dkkKeKuuOEEzGEO\ngGcocLMbr5W8cBarqi8ze81ZShwIrvmFuUQxd8JOrU8VCetVfr6aq7vSlL5t\nmy1bV8TEn+9cp4sGpw9MDyv0/btI5wfuIMztFHZXaKxITKBQc24IGTzQjmcc\nl7YPg72EQxwFemf3KmWigfTXHnWdhQKm4eAsmUq1ZMo5/SyJOlbO4WHWGNAY\nKYRjtE46P761g0nhlC0R3LWDog11ieUPe8Zup1XbASgaps1sQvCpxY5Ry98X\nZjIvftp4X0phofkZ4pJ/92kSb6xBBBER/SF6PlGo5KCCAj8kX7a0slmYm06K\nZifwQ4/3EhWbsCC149gkViJIydnxxv5RMMxTs7DeBmn1zXHw52PnHsojptF/\nhsOnCgjucYlJQt/aXEh1toBIml4hrFO8wovH/ronHMyV2okTGXVRCLj+DJK8\n2fnG7dNP6M5RnJqyqKA3wamQ7bFr1FNjCOGX0TYr3yFdmuteo6wfRtJwktk8\nWsx+\r\n=59gM\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","husky":{"hooks":{"pre-commit":"lint-staged"}},"types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"ed4ec838aa8894e0640b59358be6f065231f8cf4","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint --typescript lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=shellcheck,@types/jest","test":"npm run doc && catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc","check":"./scripts/check-filenames.sh && ./scripts/check-licenses.sh && ./scripts/check-deployable-lib.sh && shellcheck ./scripts/*.sh","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --typescript --fix lib test","postinstall":"if [ -z \"$CI\" ] && [ -d \".git\" ]; then husky install; fi"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --typescript --fix","npm run doc"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.4","skhema":"^5.3.3","json-schema":"^0.3.0","@balena/jellyfish-logger":"^1.0.44"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^26.6.3","husky":"^5.1.3","sinon":"^9.2.4","deplint":"^1.1.3","ts-jest":"^26.5.3","typedoc":"^0.20.30","depcheck":"^1.4.0","shellcheck":"^1.0.0","typescript":"^4.2.3","@types/jest":"^26.0.20","lint-staged":"^10.5.4","@balena/lint":"^5.4.1","@types/sinon":"^9.0.11","@types/semver":"^7.3.4","catch-uncommitted":"^1.6.2"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_1.2.31-renovate-non-major-ed4ec838aa8894e0640b59358be6f065231f8cf4_1615425078925_0.5337919293130333","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"1.2.31-renovate-non-major-2efd98171616caa08e97fdd6fca12805c6ac09cf":{"name":"@balena/jellyfish-plugin-base","version":"1.2.31-renovate-non-major-2efd98171616caa08e97fdd6fca12805c6ac09cf","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@1.2.31-renovate-non-major-2efd98171616caa08e97fdd6fca12805c6ac09cf","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"3396f61dec7ff1986a17ff3ad823a8c267ae0035","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-1.2.31-renovate-non-major-2efd98171616caa08e97fdd6fca12805c6ac09cf.tgz","fileCount":18,"integrity":"sha512-93qXOsC00f4ESH778uloysfE5VNxTXyzue5P2a3P4Tn37TvLfTXroZ1isXUnqO0PEiydUJGCW6p85PZTgpSDdw==","signatures":[{"sig":"MEUCIQD1mBwt+2JbxIUsqBhOg4sde5Mpnw0o3oOsB5epPYuONgIgSf9hjxgvrGKWyF5UFGtJJ0Yq6koV8NTgExhCr3mG5wA=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":30084,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgSgNQCRA9TVsSAnZWagAAhzQQAIsHSTW/5NUK7kGgRGxE\nmjoMuZimm07J3fRV6xEpOoZYAIbrXTOjLAvUkr6hL9kaECauQNrR2yb3e4l8\nRkbzgpIRACMCTlRZlq1r6UIF3aYNPRaWYICdV+pquAvPlkPTN7ukS0jJgjQL\nZMLUfpxlLCpBTnPhmjCnBMSaxMihaDA3deFIYSwC+tbTgi/dJ2PD1l68ZCPk\nzlOp3YH6BGyNzMtEpkJkRyxR4vNyfDBQXkZd/1kIp70jpdnXTYcx0yVaBsyT\nWGufawVn2QGw03rdPjKF+5d66yI89n3zHYsYfz/ZxCDVEC8CeqzdD5TtBGbs\nx/NAxKdDgX85KjWUrIllLOuMnErJzOK1xlZk38dh/CTf6RXrOMCthrWfzZHG\nPwAI3kmK8k9X3CBOGYT0H+Uf0R1XzaM2Yat878NBmxuYrGZdq6WxkAYbUZGb\nlFKn41BCb1Xz6nruHaHaWDxvTru6Vdp2cxVPISJ9b3WpL8Us3IfkBHQ+Jl15\nkuNeEbi+N8sQ9BRgHAsROFAh9tgP2MXjxqKzwM7VbWy8HUzXczhgWUE8zqhT\nsjhmAAJtjevXZriY03w+mzor0XSTIQ1uccCS8ebkJMdsX6zWaGMxsx9J0GUp\nHP6+dRSu7f/4ZJIAIXO+uUGtzMHdl3T1FGwBKq+jVqdqMki8wPw/Y9nf7gOh\n94TC\r\n=Eytp\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","husky":{"hooks":{"pre-commit":"lint-staged"}},"types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"2efd98171616caa08e97fdd6fca12805c6ac09cf","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint --typescript lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=shellcheck,@types/jest","test":"npm run doc && catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc","check":"./scripts/check-filenames.sh && ./scripts/check-licenses.sh && ./scripts/check-deployable-lib.sh && shellcheck ./scripts/*.sh","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --typescript --fix lib test","postinstall":"if [ -z \"$CI\" ] && [ -d \".git\" ]; then husky install; fi"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --typescript --fix","npm run doc"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.4","skhema":"^5.3.3","json-schema":"^0.3.0","@balena/jellyfish-logger":"^1.0.45"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^26.6.3","husky":"^5.1.3","sinon":"^9.2.4","deplint":"^1.1.3","ts-jest":"^26.5.3","typedoc":"^0.20.30","depcheck":"^1.4.0","shellcheck":"^1.0.0","typescript":"^4.2.3","@types/jest":"^26.0.20","lint-staged":"^10.5.4","@balena/lint":"^5.4.1","@types/sinon":"^9.0.11","@types/semver":"^7.3.4","catch-uncommitted":"^1.6.2"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_1.2.31-renovate-non-major-2efd98171616caa08e97fdd6fca12805c6ac09cf_1615463247530_0.6602687752282419","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"1.2.31-renovate-non-major-529a5a2bf70b4e8604bc6369ec87d6c8840ef2c0":{"name":"@balena/jellyfish-plugin-base","version":"1.2.31-renovate-non-major-529a5a2bf70b4e8604bc6369ec87d6c8840ef2c0","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@1.2.31-renovate-non-major-529a5a2bf70b4e8604bc6369ec87d6c8840ef2c0","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"26b64fa61e08ae98b29cea81b07435a31c40a149","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-1.2.31-renovate-non-major-529a5a2bf70b4e8604bc6369ec87d6c8840ef2c0.tgz","fileCount":18,"integrity":"sha512-3450B5UaFzLFvymbdV4h3XfgDtbPMMfwTQHhwA1bt6JdlCCI7Mool9aU2Ar6hJIFb+ITPpF3hIeWwfjyhFMk9A==","signatures":[{"sig":"MEQCIAed0ILMECtC9HHB24UP0AS0vQC7XgUxeTuFx4p9nNMFAiAe/lg645K8ND58DtxxSWrc0HysUCWRP9Wo5yLKocpChA==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":30084,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgSrOzCRA9TVsSAnZWagAAbL0P/Ar3I9/onXyT3SGWHW1x\nrilvXTbOPcyP2DEHSKhhAvB4X9krx7VuoZND+FljLuX+7z82Q5yp6dyAnf4z\nA8ujxuXXye8NXRcqgw3+h8UnXi72tPX2DyqN0SxzYnEVhcEMnJAEnVmzHKAp\nax+BCG/tAfiuee9Y6/eFC5L3dQnaKIVQGQ+N1mevyAAaKfitCTeyQfE0UbO/\nZHSDdYXesVkrLWzTIej+1z8CuyDLP8smOg8JvKnBd1JyHYRke4oK7iEJxr2B\nzS7KG5awRIXp9UOkeujbiDWubk0Kg+6Lk4R3bA60oETBtbs+kzTRQ7Ycyaxf\n8Z6T7Dpcc67gZypsOW7iPkqK5r3gwTVK92RMFk8D+dI08HBYECPX2B6WV+PF\nwuebzfiRKF5VdJpTIZstSwRSdpt5t3BiK1pmFulDcNIPs1rMMRK6/fvUGz6t\n3hnnQiE9a4JrZvrnKGq3/39pQhIKypAnWjM21yIHzhFmvdcSmJizXlthX2Tm\nE6lPNkRF6VG5ZeXtD6XX3SiJbCMbe5yZ96QmeAEzkho8UhoAqr/xdjHBfKxJ\nufZmR/8+m6ko9vQyNqg5auNeQX4GVPY6eBdrXo+5Wj8nKqSDXayj7U+p6hhu\nNJ0O0IQ+pL9bDYwwkXTymZeezLgBhhhAvbGRaX/FfZbZXW+EA4U1tvtD9SSz\nw1D2\r\n=wOdC\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","husky":{"hooks":{"pre-commit":"lint-staged"}},"types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"529a5a2bf70b4e8604bc6369ec87d6c8840ef2c0","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint --typescript lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=shellcheck,@types/jest","test":"npm run doc && catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc","check":"./scripts/check-filenames.sh && ./scripts/check-licenses.sh && ./scripts/check-deployable-lib.sh && shellcheck ./scripts/*.sh","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --typescript --fix lib test","postinstall":"if [ -z \"$CI\" ] && [ -d \".git\" ]; then husky install; fi"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --typescript --fix","npm run doc"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.4","skhema":"^5.3.3","json-schema":"^0.3.0","@balena/jellyfish-logger":"^1.0.46"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^26.6.3","husky":"^5.1.3","sinon":"^9.2.4","deplint":"^1.1.3","ts-jest":"^26.5.3","typedoc":"^0.20.30","depcheck":"^1.4.0","shellcheck":"^1.0.0","typescript":"^4.2.3","@types/jest":"^26.0.20","lint-staged":"^10.5.4","@balena/lint":"^5.4.1","@types/sinon":"^9.0.11","@types/semver":"^7.3.4","catch-uncommitted":"^1.6.2"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_1.2.31-renovate-non-major-529a5a2bf70b4e8604bc6369ec87d6c8840ef2c0_1615508403023_0.07770453667408295","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"1.2.31-renovate-non-major-7cdeaaad33d74dfb5bb32d42768d279833edcbda":{"name":"@balena/jellyfish-plugin-base","version":"1.2.31-renovate-non-major-7cdeaaad33d74dfb5bb32d42768d279833edcbda","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@1.2.31-renovate-non-major-7cdeaaad33d74dfb5bb32d42768d279833edcbda","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"c66d998b2013b21e26e29270d014f0ff80e27d52","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-1.2.31-renovate-non-major-7cdeaaad33d74dfb5bb32d42768d279833edcbda.tgz","fileCount":18,"integrity":"sha512-JR2dXBEbcgn53RNCDwVajZc/DUN8uV2OHpRts5dsEcNJoDccbCyQRa6MpEjTsZaXseGe9MzmA9M5nkadyEm2/w==","signatures":[{"sig":"MEUCIAD0flkpt73SJ2wkerSyBxjM+FvDAMtt8fuZfbnwIBTjAiEA6ONZJ0zkLKctm6DCwdEqQYl/wtdxm+y//iaX59HKHL4=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":30084,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgTBYICRA9TVsSAnZWagAAZOcP/j6S2SNCL/3VDYV13XOE\nDJv9gKz9CipzcLW20uFIHR4dspH28SZl5e6PE3cVxDskZXAqyW2YnTL2wQMS\n7hSOdJbgY0Egp7W6i0ZUnWP4QnjlQuUFl5UE7dzritp1JEyScN7FupbuiXTx\n+SSJYfixX2Y/vZKpYOI6LgOHoJXFJXmc4XXzwmXY8qD3efxyYYHgI6f9t6BC\nNxxdl1kRgquFSC3ftBnGAL36Tr9V5DnfweqzdZR79d6xTc4WKhIMFcD7yYgm\nENdm9QlnEuWof3NergVsETtNokOYobFDGvrJShpfWblJFJIkx72QmSmlUGhM\npOxoWC3kEVZwBpx8biPvlEVr1d891b/I6tpZoC4A1Gdn+WiYRGkvhq32iLYD\n2dltxjgklKqtbe8CeNQUqWJv1zvwVCp+pLxwSX+OR5pmc16E/3nNPGOyV1xB\n7sW+WODC9H/Luu4GQzw63MTUJpJp5FI6OylkLWrl7qMtOucLW1YUkx7pwoIw\nT4FLplii//00aE7JfltLxtceRAXicY8PFMZRDFFDyq2EBz6q6qit4nBaLIAn\na8pikVFKr6EffysFdbphv3unWmYNboxjqc7Tk0HGtTWz5uKE1jKXdoit0/bB\nFcS0mWzCbaWSxpduKKa/AOUScQmoz30XUe0Xk2Z5nQ8k8Y1nR0SoRaDb2gtq\nuFKP\r\n=ciXt\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","husky":{"hooks":{"pre-commit":"lint-staged"}},"types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"7cdeaaad33d74dfb5bb32d42768d279833edcbda","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint --typescript lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=shellcheck,@types/jest","test":"npm run doc && catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc","check":"./scripts/check-filenames.sh && ./scripts/check-licenses.sh && ./scripts/check-deployable-lib.sh && shellcheck ./scripts/*.sh","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --typescript --fix lib test","postinstall":"if [ -z \"$CI\" ] && [ -d \".git\" ]; then husky install; fi"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --typescript --fix","npm run doc"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.4","skhema":"^5.3.3","json-schema":"^0.3.0","@balena/jellyfish-logger":"^1.0.47"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^26.6.3","husky":"^5.1.3","sinon":"^9.2.4","deplint":"^1.1.3","ts-jest":"^26.5.3","typedoc":"^0.20.30","depcheck":"^1.4.0","shellcheck":"^1.0.0","typescript":"^4.2.3","@types/jest":"^26.0.20","lint-staged":"^10.5.4","@balena/lint":"^5.4.1","@types/sinon":"^9.0.11","@types/semver":"^7.3.4","catch-uncommitted":"^1.6.2"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_1.2.31-renovate-non-major-7cdeaaad33d74dfb5bb32d42768d279833edcbda_1615599112126_0.3190049355411477","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"1.2.31-renovate-non-major-2994bdce6ed883ea7956a02a161794635ed41ad8":{"name":"@balena/jellyfish-plugin-base","version":"1.2.31-renovate-non-major-2994bdce6ed883ea7956a02a161794635ed41ad8","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@1.2.31-renovate-non-major-2994bdce6ed883ea7956a02a161794635ed41ad8","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"564c50a2719657160133ae3c4ac45074ee3e5ac4","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-1.2.31-renovate-non-major-2994bdce6ed883ea7956a02a161794635ed41ad8.tgz","fileCount":18,"integrity":"sha512-FD7jUcRLv+ayfYWHsxLpli+2ujOKVnd5cPfgAqyGZo6flILXOetIGcdviLxCsOqQEh/zqDe+78jGoNASc1EA3w==","signatures":[{"sig":"MEQCIDY373pjhUxH/x2vWb0YAo8U/eH2MHeBqbu+tSl7b0CgAiBNxr5yYfSmPrSsKwclBapiA+haGk0jnarCobpwVTdSdA==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":30084,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgTD2vCRA9TVsSAnZWagAAD1gP/ioOrvROnBwcsPYDxLKe\n0mqjOvtRbwf6tbsMaEe+KiwQKpUbg3Bx5VbpAI0cm7MO4g59AW2+RBwxDM/3\nWDF0zDCKzDbCj/4uHZtdiomaVp5zEAhl22hj+LX3cWKC0+T03Qi6FXqCxoPj\nE4tPg6JOhbBvnopyvoDwHH7vS3C1wjGj96A6LKxNQ4vl/Jx8VekSGATqE4Fn\nFYDMFW2n7bdGiZMo5Kt4KhCNSIA2WyuADz5p5lDkzqJO4mTdyoaIByvFjRFa\nw/ohPxD7hf2lMB9nDXIQs1newrkgKDe8FHdX3VOoOuWRWiMwupYwMrynfcEU\nLXRDMioZGVMqVhYyHAXwm+T+glon5vGV80aUejKxon877nmEjnlU6SHchd15\nf3nn2gynaPkYTwNM/ExZDc3VWb0rgyaK8DYOme1MJ49YZf1+mC24ff3EFrhf\n8gZTqxXZpUrLUO2Z4Ygij4npI7EN+bsz8T7LWAdZ2N5KenkCCO0PyUM2r9WQ\noKshi1Ycofn1LgYzBXcOJWSfcRhONAVgbIzXU4ZpivwqmD94nhGzdUVDcb+w\n4l2WMA+At7kxsiRT3rC55IRSrDyBxkX6SejuME25eYBS0di0euGb+faVhVho\nkjTtk7N3Z2L0yYxg1mldEt58GDbkqedObnkW2tPdIIKFMVRRS6pK6TiqByCi\n1JjF\r\n=yQnF\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","husky":{"hooks":{"pre-commit":"lint-staged"}},"types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"2994bdce6ed883ea7956a02a161794635ed41ad8","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint --typescript lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=shellcheck,@types/jest","test":"npm run doc && catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc","check":"./scripts/check-filenames.sh && ./scripts/check-licenses.sh && ./scripts/check-deployable-lib.sh && shellcheck ./scripts/*.sh","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --typescript --fix lib test","postinstall":"if [ -z \"$CI\" ] && [ -d \".git\" ]; then husky install; fi"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --typescript --fix","npm run doc"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.4","skhema":"^5.3.3","json-schema":"^0.3.0","@balena/jellyfish-logger":"^1.0.48"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^26.6.3","husky":"^5.1.3","sinon":"^9.2.4","deplint":"^1.1.3","ts-jest":"^26.5.3","typedoc":"^0.20.30","depcheck":"^1.4.0","shellcheck":"^1.0.0","typescript":"^4.2.3","@types/jest":"^26.0.20","lint-staged":"^10.5.4","@balena/lint":"^5.4.1","@types/sinon":"^9.0.11","@types/semver":"^7.3.4","catch-uncommitted":"^1.6.2"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_1.2.31-renovate-non-major-2994bdce6ed883ea7956a02a161794635ed41ad8_1615609262190_0.35561540709614614","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"1.2.31-renovate-non-major-40eaae78d073e66a008b30fd27d5700c5ebf764b":{"name":"@balena/jellyfish-plugin-base","version":"1.2.31-renovate-non-major-40eaae78d073e66a008b30fd27d5700c5ebf764b","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@1.2.31-renovate-non-major-40eaae78d073e66a008b30fd27d5700c5ebf764b","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"dbe9bc12f055bb5d876733972421f6a94bad5537","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-1.2.31-renovate-non-major-40eaae78d073e66a008b30fd27d5700c5ebf764b.tgz","fileCount":18,"integrity":"sha512-bMSCkEqO8eSFcYEIDnqjsMto3bJHz1eviWyIVH8IwZ+MPKI6F2eE7d1UCtpzr9eg4j05fS4D4VXj7yENY4KQlA==","signatures":[{"sig":"MEQCIDsrDq3NRT4vneUCuqjAq3hl9WQAjXNo4/L5mEBjTEJWAiByH73sLLoHqAm/3/+Qr9FSetqvY8vL1q+ayc7nBODYUA==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":30113,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgTNAaCRA9TVsSAnZWagAAf1EP/A9NBHzWsbm6rkYJGT0l\nyyrhoUUXSOsRpsgcpyz2BGLtYCx7PdmwCl0pNeZhH/VFQo4k6zTdxgqjFdUJ\nZIUe6mz7JXhCEbQqDUdBMx74j5St7P9PBiLMaYZrYCB07qx21dBmYu4283By\nsOY+xTyjhoftCXeumUdq3fed8QP4LrIJgZslm9wRdTbikNrg3AzVrPculgSR\nfedmcH6D/URlRLGe+VXH/IliExOKStMIXt5DEzC3GWlP9nrr6wBHechpzKnP\nPIWQGJ//AyQpPagR2PoXs5GKzttXZtE8XTS4gZTHPM4inH9Y1fwXrelR90ry\nEmOKIB/WoQbRe+6wWJC6PRfxLj2VChjEsVO2u0OrPIEypWjnl3QiLATEjLwm\nWpM5fzKhxandejw89VRyiH7eMKlwL/KDFwsX1ZZ/gFMnx7NZMV+wCNk+QQmf\nBEgfnpgNRiAAIFki3FpKtXSqaMPnOAMBk9+ZoGF94BeaDaPVblq39+Pg2PAI\n131PQNQTb6tmTFgzsAE2IJ5/wplgvK+UJUb2qznKrI6/04VS9xEYKYlq5I2D\n7pz1dx8G6H0przAh26vsYeFTlaq9JEisMw6PxDPQbU8biTlV6fEkJA8nkl1h\nfAGpVcesru8N5OcUbELp2Fkmt2gFiRV10CbJ+2oSuLao0TmFhP4WTylqlTs9\nxA/2\r\n=6YIc\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","husky":{"hooks":{"pre-commit":"lint-staged"}},"types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"40eaae78d073e66a008b30fd27d5700c5ebf764b","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint --typescript lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=shellcheck,@types/jest","test":"npm run doc && catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc","check":"./scripts/check-filenames.sh && ./scripts/check-licenses.sh && ./scripts/check-deployable-lib.sh && shellcheck ./scripts/*.sh","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --typescript --fix lib test","postinstall":"if [ -z \"$CI\" ] && [ -d \".git\" ]; then husky install; fi"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --typescript --fix","npm run doc"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.4","skhema":"^5.3.3","json-schema":"^0.3.0","@balena/jellyfish-logger":"^1.0.48"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^26.6.3","husky":"^5.1.3","sinon":"^9.2.4","deplint":"^1.1.3","ts-jest":"^26.5.3","typedoc":"^0.20.30","depcheck":"^1.4.0","shellcheck":"^1.0.0","typescript":"^4.2.3","@types/jest":"^26.0.20","lint-staged":"^10.5.4","@balena/lint":"^5.4.1","@types/sinon":"^9.0.11","@types/semver":"^7.3.4","catch-uncommitted":"^1.6.2"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_1.2.31-renovate-non-major-40eaae78d073e66a008b30fd27d5700c5ebf764b_1615646745940_0.42295835860356434","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"1.2.31":{"name":"@balena/jellyfish-plugin-base","version":"1.2.31","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@1.2.31","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"a0ba1e44d36b902c03547ef72efba7643ce564ad","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-1.2.31.tgz","fileCount":18,"integrity":"sha512-Snm082p4l9oGryM15DjelJthxZP8D3YP/wXjElapzM7GwPCY+Q+2Pb1/ic4sXB9TmpMs+brAIdoPQ8DH+cUzWQ==","signatures":[{"sig":"MEQCIBngvFiwgohnHl3FRjJchCE01K2+AA+OznTfSeKH34dbAiBx5b73IFcqW7Wo5veGfTICUlTMgirq99EnotHyiRT27A==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":30053,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgTND+CRA9TVsSAnZWagAAbd0P/RMk9F4EprmSA1piBXSZ\nPv/H3qgld0llzKGhMK0y6AwD2GOMYnL4Cweo9n0WwYp1T3rt0pBWdQHETFse\ntvf0rz/ADXQ2sKcGmPRvxF0H1flZ8plPd8oXcou8XnE/0KkqziwdLts4ySUd\nnysYNHn7c5E4Jpk7IB2rBV/WE7NvJhK3EP+/4mlZOEUCbUF01CPHj3ly6+Vl\ndAsGFwLFQUB5HKJkyamAmFbtt09BlE40xY8F4HFU8IZt/nY8vA5Za48WipQz\n5+VlTjA9v3oMVAwnsK0/+J8vcpUbl/bWLrFW5DBgk1E8UGiePpBzgskyQDYU\nlG4CivXhBKA9+J6D/F0FS3qQrDod1YbNZVBUxQ1F6cZGB+8sHYNatHhKDwYF\nh5IekrquAyZYY+Sq5nU9E7+zuKBrXhlch8RMIPKE1PQTMubHKAifv7aK2a8N\nR/pSHroh1/CZpDm9Wp3wVJP+ZF/ymUso+JXmI5gl5TM1ZgzXc3rU16fkcnRq\nUh2WjMJZeUWEIJdMmFLViN3RoEuuTHaw6E1hAHPguyDVdKnW63mgdjgjvUAX\nNTatX5Bt9cRhQ3B+TdMFKCx889+n++ukDwfQUK9UxFzi5PUQWTxenQqf0ilK\nlQ/2HyMSYYmgsRTVS0dOAl4Pm6XmX7Tv4uDVS4zDEpBcf2ePkXwshnnPncgj\nwOg4\r\n=J5Zl\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","husky":{"hooks":{"pre-commit":"lint-staged"}},"types":"build/index.d.ts","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"109de4793ab77c1993fb722f848652a7719f07bf","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint --typescript lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=shellcheck,@types/jest","test":"npm run doc && catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc","check":"./scripts/check-filenames.sh && ./scripts/check-licenses.sh && ./scripts/check-deployable-lib.sh && shellcheck ./scripts/*.sh","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --typescript --fix lib test","postinstall":"if [ -z \"$CI\" ] && [ -d \".git\" ]; then husky install; fi"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --typescript --fix","npm run doc"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.4","skhema":"^5.3.3","json-schema":"^0.3.0","@balena/jellyfish-logger":"^1.0.48"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^26.6.3","husky":"^5.1.3","sinon":"^9.2.4","deplint":"^1.1.3","ts-jest":"^26.5.3","typedoc":"^0.20.30","depcheck":"^1.4.0","shellcheck":"^1.0.0","typescript":"^4.2.3","@types/jest":"^26.0.20","lint-staged":"^10.5.4","@balena/lint":"^5.4.1","@types/sinon":"^9.0.11","@types/semver":"^7.3.4","catch-uncommitted":"^1.6.2"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_1.2.31_1615646973916_0.3628826024237304","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"1.2.32-renovate-non-major-855f000fbeb2d8cd0dbefdede1306fb3e7d02df6":{"name":"@balena/jellyfish-plugin-base","version":"1.2.32-renovate-non-major-855f000fbeb2d8cd0dbefdede1306fb3e7d02df6","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@1.2.32-renovate-non-major-855f000fbeb2d8cd0dbefdede1306fb3e7d02df6","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"6f4f7f2a09dad74f29d74593e94719491171e531","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-1.2.32-renovate-non-major-855f000fbeb2d8cd0dbefdede1306fb3e7d02df6.tgz","fileCount":18,"integrity":"sha512-n3ik2LE95SywjWqwTYLxMztMNW73mXFYjutjkhFu27Xrozb+7U9H13IiXV5ub6xUMmPxtI7uReHYYZJnpeUYuA==","signatures":[{"sig":"MEYCIQCFQj6vyJ0XRIaYW1tCL/9q6HOfQ8LBWvJCEjD+gkKyLwIhANBeaNYE3Zd3D2RTOAocYymy+O8hiKaAw/X0PZqaqeUE","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":30200,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgTYyICRA9TVsSAnZWagAAwqAP/3vcIS9+m1n3RIxZIhUY\nuGPw7kfh0ntqeRMl24EVWU85q4BwMw0ALU+MrtFwZNztWJi4FqE7H8303rcy\nUPMELkgJg2ymIsP/SBPrIr8lt7m4++/7zmt6ejZnjXxt7a2fKpm10BLgwDSR\nRnhZPn7pqjhnnMkmVnNgQJ517Z7GjYkANC4bVPSpdKoe0JZyKhqjt5RQa+Ee\nJ6ZSjOJdOpEB8VOBfNlltNxxrDgYaNMD8fh2+xsk4l00++Qsq4Z3BOaVVNem\nAX9dPOOrBpOFp2Y9mz37jo02Ynh3GZ+CCHN6chJkZxs1XBB6FyC3VfLD4TP4\nZ7w0BMrVkGUZf6eDhTfYY0FCsFv9kP1xxF0eSJzV49RSZljBBMwPlXZuWYs+\nfZDDrhBtvOt/cCQ9B8/cLkc6/hh5T89BmVx6LmX6IixRJmQwoNJ3L12oPB9y\nimLuUDG8oTCeyzM/MvwIgneHn41SQKsVeAs2t4LBLjvEHwC7UqibigZ6JnWF\nTXifjPRaK3Qt8I93cuMLTDLMHd1BW4hEHznwPXkPUJ5ADx8fTYNTxhP96cfb\nJIXJjs7PW9YliKh1lve1N/GLl2o4Eq4HmIeMhFKWnoDfNacjw1Jt1HzNgL1d\n9O3AlDTNAafLekPXNkQDSu9ha3H+zz2Y2WE9h5x9az3BPwNI7KN485T+SfNv\n2goT\r\n=KYTO\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","husky":{"hooks":{"pre-commit":"lint-staged"}},"types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"855f000fbeb2d8cd0dbefdede1306fb3e7d02df6","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint --typescript lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=shellcheck,@types/jest","test":"npm run doc && catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc","check":"./scripts/check-filenames.sh && ./scripts/check-licenses.sh && ./scripts/check-deployable-lib.sh && shellcheck ./scripts/*.sh","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --typescript --fix lib test","postinstall":"if [ -z \"$CI\" ] && [ -d \".git\" ]; then husky install; fi"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --typescript --fix","npm run doc"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.4","skhema":"^5.3.3","json-schema":"^0.3.0","@balena/jellyfish-logger":"^1.0.48"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^26.6.3","husky":"^5.1.3","sinon":"^9.2.4","deplint":"^1.1.3","ts-jest":"^26.5.3","typedoc":"^0.20.31","depcheck":"^1.4.0","shellcheck":"^1.0.0","typescript":"^4.2.3","@types/jest":"^26.0.20","lint-staged":"^10.5.4","@balena/lint":"^5.4.1","@types/sinon":"^9.0.11","@types/semver":"^7.3.4","catch-uncommitted":"^1.6.2"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_1.2.32-renovate-non-major-855f000fbeb2d8cd0dbefdede1306fb3e7d02df6_1615694984173_0.6633330570616305","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"1.2.32-renovate-non-major-9609ee255348a2693b8cf3b40ab78ff65dae98a1":{"name":"@balena/jellyfish-plugin-base","version":"1.2.32-renovate-non-major-9609ee255348a2693b8cf3b40ab78ff65dae98a1","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@1.2.32-renovate-non-major-9609ee255348a2693b8cf3b40ab78ff65dae98a1","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"1cce29499c7b3a7bcea9d489c8f7e35e543435a7","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-1.2.32-renovate-non-major-9609ee255348a2693b8cf3b40ab78ff65dae98a1.tgz","fileCount":18,"integrity":"sha512-Ht0lRpNjdrINWxIsiqqznXMnZtd4Wkj/CdZGHXKlY/QQUDT36xKyNkYf/zi/621oXYR+NsqpuiNvlFFbyoKN4Q==","signatures":[{"sig":"MEUCIQDvC8850yG9fdmHS0BbOO9PYrWDqAKJN3xDUc4lpRjZUQIgVML8bmGg4zISs83+f6M3FXBOIA8MvEfb8/58IMlrPVo=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":30200,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgToKBCRA9TVsSAnZWagAA4KgP/iMfwCCsM+0LebX2F/DQ\nnxS48XHkddF5fsiEl9n9tk7tS24rGCFqH/9pFa5MU6kjKf+yieuezhN7kVsJ\npWHgKcGkaaoSi+ojqe0psG3CD3Bl3GWGBoBUDjmt+LfiIJ+H0eJ2TOhq99yD\nPvZbfpvDRSBxQREqUZo40VB4f5YKIjvH4YgQaZpgu6CmfnPEHZF8FA4HAqBn\nEU/ez+xZmxtPtEUxrAPJNymiOkAIrj5p4AuUBVkMeVUmQGTNGZYX3cyQTl2n\nj49khH/gSfSl5hqEJGcRDrKy4nNwn1Axt0214n3koPUs3hP4Vda1SVN1s/2f\nAb/GxaVCG/igPvEdNLyN4kBsTxFGrKI8oZrxqPiIeg5JAWUeKhYltH3G2s0V\n3LQfB9PmfCWFvHqWNORZIT8JYUOt4kbDXEIiWIkZeM7DIS4N4LHHt1O7TJgH\n9uXVKiQHCN6MbXXqcdKRp1hSDJ3Cmnsv/rNoOEvqhzRy7MhDnxCdMKWn3g9A\n/5EcPQpITtl/QJ4EWY/AdKRj4d5aBJfkgdMXi9y+Zh9F+67bldXkii0wwVjt\nb0qD8ZUIces+xcTeAl7YrWQEzphDzzFl8C+YMCkqbmn25jUPxGbYzrOiZGO5\nTCzr9fNn5gClMs1DpNfmkUDb+nn9n3HLUtssu6lJid/UMY/VeJAh9wHQTu4c\na84k\r\n=xGjl\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","husky":{"hooks":{"pre-commit":"lint-staged"}},"types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"9609ee255348a2693b8cf3b40ab78ff65dae98a1","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint --typescript lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=shellcheck,@types/jest","test":"npm run doc && catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc","check":"./scripts/check-filenames.sh && ./scripts/check-licenses.sh && ./scripts/check-deployable-lib.sh && shellcheck ./scripts/*.sh","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --typescript --fix lib test","postinstall":"if [ -z \"$CI\" ] && [ -d \".git\" ]; then husky install; fi"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --typescript --fix","npm run doc"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.4","skhema":"^5.3.3","json-schema":"^0.3.0","@balena/jellyfish-logger":"^1.0.48"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^26.6.3","husky":"^5.1.3","sinon":"^9.2.4","deplint":"^1.1.3","ts-jest":"^26.5.3","typedoc":"^0.20.32","depcheck":"^1.4.0","shellcheck":"^1.0.0","typescript":"^4.2.3","@types/jest":"^26.0.20","lint-staged":"^10.5.4","@balena/lint":"^5.4.1","@types/sinon":"^9.0.11","@types/semver":"^7.3.4","catch-uncommitted":"^1.6.2"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_1.2.32-renovate-non-major-9609ee255348a2693b8cf3b40ab78ff65dae98a1_1615757952548_0.7298379528867287","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"1.2.32-use-jellycheck-27b6d0e770a7cef90f3dd8235e236c86b118cbaf":{"name":"@balena/jellyfish-plugin-base","version":"1.2.32-use-jellycheck-27b6d0e770a7cef90f3dd8235e236c86b118cbaf","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@1.2.32-use-jellycheck-27b6d0e770a7cef90f3dd8235e236c86b118cbaf","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"df1ff466b344d2fb09047c1ca8a207cd96b4eaf3","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-1.2.32-use-jellycheck-27b6d0e770a7cef90f3dd8235e236c86b118cbaf.tgz","fileCount":18,"integrity":"sha512-1Usebi49DEiJEZqe3dg3hI8nSRbZc4Lwnqgkm4+2MMXPv+sUy0zyK0VhumJZklJN8pI4VyAZqX3+199zxmrskA==","signatures":[{"sig":"MEUCIGXb+8s+4VheBh7jtOTrq+Ho7GaQs/O4sHw+Y4T7k5x3AiEAj827iiqdi83K44E8xRpJvyELqcAWyMYeoy7zC7YOY+M=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":30091,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgTzG6CRA9TVsSAnZWagAAxhwP/iSppyGFGHkNPUW+uTWf\n0o1x2I8cJfKvUSzsL4YkGYUWCgmYRrHgONxLgKTT/HJlUXHnr8a/61v3Q+8q\nCHHobfE7VnKL3RARy+TRHbFbWwquAkTh5XhoBJxJjWtbLsV4jOCoT5KWRXh7\npv63kbgbsyVccfwhqptHK+wfw+Z3fDIExZDJSsI/HNNsYXXheE9KpmGZ36iJ\n9ts4s0cQ0VtYCPUIXqiV4u3FyofTHKNvUKve3b294e3gxv8fSSf0Q61Se1QX\nodUsgzFp71W8fcOaLIiTFW8KQj2KkfdPCaRoYMpZe8h6qh4ifyyUIIkv4NdF\nFl1TbyNZ3iRq9PSCu45ZhBCadChTj+/7EYbJ70EqUacIc1/H4TYZixvSbe/l\nXBn5ov2jVk88DPgLUM6H6nRV92KK8cr09/RmuJ6DR2VCRer++g6CR3gaW24h\npnukn3P/7R0MMqsXsR1PE2foHQkr9SJF7MNpcTDuMnGmkvhWYB+VPWDKh6x4\nkRdxcmOYzlQVEY7t1zcnsm0CBEo9zuWAvBYnJiDQDLZa4g/EpY5glLuvyjF8\nEIltesBy8VSNIfbBjvQSYknbGZW3+ksbyDnv60cGTfXhIvWrC9NpGHl4OxMd\n9QiwpfjdgugJ7ETTuKM3WwZHHZl2juezZUdppdq5ODIcF0dsNOMU5X7Du3nY\nd2KA\r\n=XVQQ\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","husky":{"hooks":{"pre-commit":"lint-staged"}},"types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"27b6d0e770a7cef90f3dd8235e236c86b118cbaf","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint --typescript lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=shellcheck,@types/jest","test":"npm run doc && catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --typescript --fix lib test","postinstall":"if [ -z \"$CI\" ] && [ -d \".git\" ]; then husky install; fi"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --typescript --fix","npm run doc"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.4","skhema":"^5.3.3","json-schema":"^0.3.0","@balena/jellyfish-logger":"^1.0.48"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^26.6.3","husky":"^5.1.3","sinon":"^9.2.4","deplint":"^1.1.3","ts-jest":"^26.5.3","typedoc":"^0.20.30","depcheck":"^1.4.0","shellcheck":"^1.0.0","typescript":"^4.2.3","@types/jest":"^26.0.20","lint-staged":"^10.5.4","@balena/lint":"^5.4.1","@types/sinon":"^9.0.11","@types/semver":"^7.3.4","catch-uncommitted":"^1.6.2","@balena/jellycheck":"^0.1.1"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_1.2.32-use-jellycheck-27b6d0e770a7cef90f3dd8235e236c86b118cbaf_1615802810342_0.38012128924738664","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"1.2.32-renovate-non-major-a5bb1024478677fa6695c96a1fe2782cad197ff4":{"name":"@balena/jellyfish-plugin-base","version":"1.2.32-renovate-non-major-a5bb1024478677fa6695c96a1fe2782cad197ff4","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@1.2.32-renovate-non-major-a5bb1024478677fa6695c96a1fe2782cad197ff4","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"e01ad4e93348eff467a194c958085d2ae461cd7e","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-1.2.32-renovate-non-major-a5bb1024478677fa6695c96a1fe2782cad197ff4.tgz","fileCount":18,"integrity":"sha512-Dc1D2YgrSFakVj2knUcIiQQfeuo1QJgh1a9TAek3cqfT8n2xSr8XFKPBEz7Emm44pxtmhEt+h9TUknOG7YdmlQ==","signatures":[{"sig":"MEQCIDjYKod95LuA2J5wOdd0EadVeq5LDcJ73undOuvDKLKDAiADLWlWPDOeF4nykX9921uTmn8QI7V+lMXeC0l1zTydzg==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":30179,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgT2mOCRA9TVsSAnZWagAAp0oP/2/nnykD1KHQxgU/6KTz\nUcul0Clhg80Xpw6cFjJNiyp2vuCQ32kUNjHvEbRmtt/T72lNo76VOiHQBdZH\nTgRbBsbAMjPLSMmbnr+CjGLesUc0GHffSffshmC6JBL7mXJPyHRHRlPZsERS\nfFx/HcLDK4jIgelC958UCt82A7d27OW+kX0DZqgi9z5Vr8oKbrG54UUyTOiD\n1kl/F/gBoaQuXPJuQJ3m/e1Md2Z3yrhXOxnOlrH+xOAhcs/JNhaac6RAk5Hr\nrneS0+nN74h1aKYmi+qm9OfObxbHFAcxH3+LdjFyryDcYOgN3ohJXlUIuMUI\n9cZrQSn142R0Laeo2NppvAyDmChMEV0eaWaWCWbl31J8AunSfgPpPgP5DMQC\neSROilf3rD0BIw2oiE5eZFp2NxHl7JdBAbOnYPChUzaGfNSJhL6FPS4FljcD\nbq241HNmcAA4IXLEkoPl5bl3gsOFIeJpMAi+zFe2aE/4G2ahXlF7z1la582B\nTSwbxTUm/tqXGE3fhWs7KWmX3tnAml7IhUkqsF4ka9sD5nnjBJKB3ur+Za5L\nAGYP93nYyoiv2IMeQjzlUB+ceRg46Acd0NzvySoVt1vrBGexSRbh/R7Hv5A+\nyKKHwT32YYjDLFjLu/f2w36ouYB6emartse1Je+FGJ0abdl+STYsUYE2zikJ\nuENX\r\n=napW\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","husky":{"hooks":{"pre-commit":"lint-staged"}},"types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"a5bb1024478677fa6695c96a1fe2782cad197ff4","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint --typescript lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=shellcheck,@types/jest","test":"npm run doc && catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc","check":"./scripts/check-filenames.sh && ./scripts/check-licenses.sh && ./scripts/check-deployable-lib.sh && shellcheck ./scripts/*.sh","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --typescript --fix lib test","postinstall":"if [ -z \"$CI\" ] && [ -d \".git\" ]; then husky install; fi"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --typescript --fix","npm run doc"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.4","skhema":"^5.3.3","json-schema":"^0.3.0","@balena/jellyfish-logger":"^1.0.49"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^26.6.3","husky":"^5.1.3","sinon":"^9.2.4","deplint":"^1.1.3","ts-jest":"^26.5.3","typedoc":"^0.20.32","depcheck":"^1.4.0","shellcheck":"^1.0.0","typescript":"^4.2.3","@types/jest":"^26.0.20","lint-staged":"^10.5.4","@balena/lint":"^5.4.1","@types/sinon":"^9.0.11","@types/semver":"^7.3.4","catch-uncommitted":"^1.6.2"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_1.2.32-renovate-non-major-a5bb1024478677fa6695c96a1fe2782cad197ff4_1615817101604_0.9508192653066694","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"1.2.32-renovate-non-major-d30a2021bc9478962d45520fd38fd2c1c31e98c7":{"name":"@balena/jellyfish-plugin-base","version":"1.2.32-renovate-non-major-d30a2021bc9478962d45520fd38fd2c1c31e98c7","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@1.2.32-renovate-non-major-d30a2021bc9478962d45520fd38fd2c1c31e98c7","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"2672658feb0af01fabc0c1f0c91f80dfcc88dd81","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-1.2.32-renovate-non-major-d30a2021bc9478962d45520fd38fd2c1c31e98c7.tgz","fileCount":18,"integrity":"sha512-iUblqwLmulJ5I7WOFqs4wS/IZoAflRxSx47nErJeWgQ0H55X7p9jDnhqethru6iQ1S4HSTEMnX1s4Zc+EIO29Q==","signatures":[{"sig":"MEYCIQCLxLPyFmBGHu52k926l2e15zJWkmN3KXkMba1ZjEEeBgIhAJR8xFQgjupLCij7LKO0cbaBfSlXufkyYROzuKOpeuNc","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":30179,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgT47uCRA9TVsSAnZWagAAyFYQAJV5+kejZEW8kpmXmAUy\nXe4kbRw97rYN/6gckiKtnM3O4cEjz5l3UadNqm8+JztiKd/SWLEoyqd6yVTD\ne+l6W3oPK+CsNMxx1HXC2vButEtgTgRAZs2BgQg9gfY7k3CGLlFDMlIk0Cb6\nm5FnCrtzeTzScCjHJEukmjjBGt6d7R1cDd1CXRisqGCGpj98x3FqyHsFdPmo\nFEJ33nrKD0lw6AEYBG0V4D6oY5WHL13XXcXwI0y+gFMunc/2xrbg2R4FToZE\nnPhAEmfKiAtvCfguh6PAWlcrploG8mt6jRlDQ01VO1yeT1D2o5a1yi8X+UKY\nNPModwWpDOZYoNJCWtJ8Hh/t5pyEf/whlylABdTAWpZT45cyQ91fenSpyijm\n8SU1McGxmZqGJBB/6scOrbYORKsxy/KlHnREIzGJQHWJBQAj99urmv1jQrX7\nprJe8Q/XUZgVa7/wrNgW7zrz0wkj2yeI2IlkAo/pWuDEIHH2xBII561IjNIQ\nOk559WRhmmf9D4ZPZ+J13Zk8C1s3cSYgysgoZretIyGoZ63J6Dxru53ZOjAp\nEAMjU3oHC4OlQgPdm1C0VHXSTdvhyqhHKmVDynJne1V2EDFnwr9OBDoz9M3U\nWUdEcm80YDOwjcLD5RrruYkoSP7759kv7ZvYalfJ7Wj4YI/I4Mx5zKi2INa0\n42Co\r\n=EpNq\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","husky":{"hooks":{"pre-commit":"lint-staged"}},"types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"d30a2021bc9478962d45520fd38fd2c1c31e98c7","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint --typescript lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=shellcheck,@types/jest","test":"npm run doc && catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc","check":"./scripts/check-filenames.sh && ./scripts/check-licenses.sh && ./scripts/check-deployable-lib.sh && shellcheck ./scripts/*.sh","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --typescript --fix lib test","postinstall":"if [ -z \"$CI\" ] && [ -d \".git\" ]; then husky install; fi"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --typescript --fix","npm run doc"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.4","skhema":"^5.3.3","json-schema":"^0.3.0","@balena/jellyfish-logger":"^1.0.50"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^26.6.3","husky":"^5.1.3","sinon":"^9.2.4","deplint":"^1.1.3","ts-jest":"^26.5.3","typedoc":"^0.20.32","depcheck":"^1.4.0","shellcheck":"^1.0.0","typescript":"^4.2.3","@types/jest":"^26.0.20","lint-staged":"^10.5.4","@balena/lint":"^5.4.1","@types/sinon":"^9.0.11","@types/semver":"^7.3.4","catch-uncommitted":"^1.6.2"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_1.2.32-renovate-non-major-d30a2021bc9478962d45520fd38fd2c1c31e98c7_1615826669701_0.6872506406965262","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"1.2.32":{"name":"@balena/jellyfish-plugin-base","version":"1.2.32","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@1.2.32","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"4cfe0f038454ea7e337c5070a4e6784921e9b962","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-1.2.32.tgz","fileCount":18,"integrity":"sha512-LFZSr2muwClwDSikXyhpUZ1bRd9buyPG6/lhi0GQ7U+cwS8h+fcD2p1zK5yBt2DAlMC716aCMd3sS9m0DHzaAw==","signatures":[{"sig":"MEUCIQDu77OaJu4RB+YXhN0bGiOkahbESnweKdhGTBe74AmMJQIgRixFY+CwfsDLguEkG3L2QPzh4LhtUOXP6cQxejCI7gI=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":30035,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgUV0sCRA9TVsSAnZWagAAL4QP/i9MtB7lwlSYg5QzoOlT\n+O3IPd50FnUvjuvvc65zFp/CB4IxbH3otx7gWCXAd+ngXkXxVUyUwMmEyNkE\nFLMUMzJbHsNJH8D8ZxOpNgs2P2RGwaUyX2nKNx7Dhrw8AWixUgiIuSU/Qti0\nnD6bnvWloMFowUCmm8qWW4vchMlB//EmEvX7iqI7hgzlUdsYQ6FaTyeeVAnL\n4EUEqgDzn75fyXTXBQPtzUMGNfSiyuXx6rmC4pnIuuaKiTGTgd7NMt4OPaIY\ndSQXCdF5Q8909/z5YRAcVmgoHJofDXbVuw6wMwH2h5QRQHA+covVEGIbX2Gr\nTikLn28bEJGggftcMHjsJbZjqZ746ThCiQ022g6M9JJN+8TTt8k6O05l58co\ngP7gy4Koz0Sc40LPqY/DbRO/lhONvFmU2X031gSVCByffO6ylFPU72Rsb7dy\nClf0SifbWaWx6IcyqiqPbsSk95P0C8Rphlx4bOr8QaM11PV3HYoefoYtQqbl\n2bg0x6BFpUYbwI3iHX0vN9qcMImtgbKVEk1ondcxRjrSNfL61/3+C+ZiMGbY\npk9WpO0txuK5/z7iwOjGi+WrCCN9n5BeGBPzCb2RmCaaZgTLUj4qJCsQBOXo\ns689ZMioEVKW+mRJJdgeN4TiMEZD6QE0MQZaPMp+TTxF0z8xkoVw/dC/ZAhX\nl0Bg\r\n=4BQP\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","husky":{"hooks":{"pre-commit":"lint-staged"}},"types":"build/index.d.ts","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"4b903dbb30f9bddfda7e68a93b86b383f4375126","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint --typescript lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=shellcheck,@types/jest","test":"npm run doc && catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --typescript --fix lib test","postinstall":"if [ -z \"$CI\" ] && [ -d \".git\" ]; then husky install; fi"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --typescript --fix","npm run doc"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.4","skhema":"^5.3.3","json-schema":"^0.3.0","@balena/jellyfish-logger":"^1.0.48"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^26.6.3","husky":"^5.1.3","sinon":"^9.2.4","deplint":"^1.1.3","ts-jest":"^26.5.3","typedoc":"^0.20.30","depcheck":"^1.4.0","shellcheck":"^1.0.0","typescript":"^4.2.3","@types/jest":"^26.0.20","lint-staged":"^10.5.4","@balena/lint":"^5.4.1","@types/sinon":"^9.0.11","@types/semver":"^7.3.4","catch-uncommitted":"^1.6.2","@balena/jellycheck":"^0.1.1"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_1.2.32_1615945003908_0.9009708187027177","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"1.2.33-renovate-non-major-c007dbadc6d4fde2593a233111d1ac362a61b9fc":{"name":"@balena/jellyfish-plugin-base","version":"1.2.33-renovate-non-major-c007dbadc6d4fde2593a233111d1ac362a61b9fc","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@1.2.33-renovate-non-major-c007dbadc6d4fde2593a233111d1ac362a61b9fc","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"2618e3a8d2569cf296e5b13de6f9e6c7d47bb2be","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-1.2.33-renovate-non-major-c007dbadc6d4fde2593a233111d1ac362a61b9fc.tgz","fileCount":18,"integrity":"sha512-y9TTqR8wBcnnUfM0Fg0c43YdUucfcpVUMIO2dzH0Wr1JZjwRDGz2gFEz1Mv/q3Df1D+PBzmVMz6ZNx+mo1ARAw==","signatures":[{"sig":"MEYCIQDGTgRnF59lrgGJrCUDoYhZp7wTrWajJDrPTDQ+t4yf5QIhAPhWZ80430KUONtvW5ro0xPZGQA+qkttlh5hhs+2PJcJ","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":30161,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgUV4vCRA9TVsSAnZWagAA5YwP/jK9IcwBfDnF/AVu8PQu\nq4WXGF8YjNKeDfK90g5uGLKpvgYrlaTK+WdMZUAU4Gv3uxSaWvzVeDSeY3tM\nDLctoyGv6IccKiBvRsAvvv6tXNXHlwkxHzxUBSALKIhbDtvols/AEdCBR/rt\nIMI/zjULadWyUap+Cp5hMIE2rWap9/LoTkfIT7BXHyzks598y+2juikKA2cs\nRdtDYKyTkYGVdPTXWVn2q5dxJtdwiPOEJStQvBvKQd/EcZW3hyHUsJzUx2Zy\ntAiGU9ou18vPmecJrD3UZjVOm2mQ4dKfEddAvYHco/D3piSWbG8ijzurkUR3\nC5QbshJKQaY/lH3RApI5J6gfwLAtvoiBhf88YGvrEZ5/hrYgWc/tb9z9DZ5P\nbzxblJFs+rl+Dv/Itl34M+o6McpN11pvjy7foRopegkLFBl20iOMg74lz4u0\n75Bt80b/iNCEhv2cVzKb3lo1HaxtgAdhdcYcluMq8Dj2ZBXmm+f3CDYCHvc4\nflRUgsEy1kC/iPn8PdF/PLbPa3xH5sxLLu7oj5b7XMLZn4uVRAa0rdkJf6ba\nNYL+vmlk3rhzIOqEYWJHKdymn1MT+N4oSEVyqPnMeiLWn/qBqn10WySxXsXu\nY47RSH1mKQCjGNjZ+IqcNYvRGlEEu9NtF9iYrnoI6bBkfhn6DanvTEtbQkZz\nw/Op\r\n=MTB2\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","husky":{"hooks":{"pre-commit":"lint-staged"}},"types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"c007dbadc6d4fde2593a233111d1ac362a61b9fc","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint --typescript lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=shellcheck,@types/jest","test":"npm run doc && catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --typescript --fix lib test","postinstall":"if [ -z \"$CI\" ] && [ -d \".git\" ]; then husky install; fi"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --typescript --fix","npm run doc"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.4","skhema":"^5.3.3","json-schema":"^0.3.0","@balena/jellyfish-logger":"^1.0.50"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^26.6.3","husky":"^5.1.3","sinon":"^9.2.4","deplint":"^1.1.3","ts-jest":"^26.5.3","typedoc":"^0.20.32","depcheck":"^1.4.0","shellcheck":"^1.0.0","typescript":"^4.2.3","@types/jest":"^26.0.20","lint-staged":"^10.5.4","@balena/lint":"^5.4.1","@types/sinon":"^9.0.11","@types/semver":"^7.3.4","catch-uncommitted":"^1.6.2","@balena/jellycheck":"^0.1.1"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_1.2.33-renovate-non-major-c007dbadc6d4fde2593a233111d1ac362a61b9fc_1615945262790_0.24187514061475301","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"1.2.33-renovate-non-major-7e38a3d77ec54f8a0cadcd1246fad0f1d97f8fb5":{"name":"@balena/jellyfish-plugin-base","version":"1.2.33-renovate-non-major-7e38a3d77ec54f8a0cadcd1246fad0f1d97f8fb5","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@1.2.33-renovate-non-major-7e38a3d77ec54f8a0cadcd1246fad0f1d97f8fb5","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"5c2f4828eb186d3dbfc2895ea86099dcad919625","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-1.2.33-renovate-non-major-7e38a3d77ec54f8a0cadcd1246fad0f1d97f8fb5.tgz","fileCount":18,"integrity":"sha512-El7qMgebLNLB3jRlBxvY0A+FK2eUvOhY0eo7BjcqaXUuwarjm9/1c3FElFg+cQHZCfel3jCE9d/FZs3IOjSqjA==","signatures":[{"sig":"MEQCIF95RVbmM6bCiJgqVMrSYf0TQZozl35cpSYiKJbcA+lXAiBbSUiOMdCngTat9lDIetND0C/K1TXG9agcMEmhEJmXZg==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":30161,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgUim7CRA9TVsSAnZWagAAO60P/jRaLGgN9hwmhYz6CKoN\ntrQ/VSAmFyPYj0ji6ANxS48H7BDzKaz4b7OnIEVMk04UO0WHG1eL7Z0ikwjI\nneeug7fFGIKuE8SvgIWZ9Yb+tHiA5NqyusNvH/5fJd1qoYSNoiChnjklWWAt\nSmoJ5yNmtvOsN29FRwHvhwfayWk1hPPQFK9UdPmaVA2A25un8tpWdyCYTijS\nT6Apt8NCm86/TYdv8P7xEFkUS+dRGJC998k245ALOSFQT9DHXyGFjtIUqrGy\nt6bzS01xEo2ilp7eTvwPpIaSdzuvNNhVHTsRJahaxuGQkUgI3jZCKrmkCcsj\nolxpt1fMlm2m588Jrk7uP6zwUnLVcviFOsJHb6dWvnYAZG1E+Y61T1XIJq5g\nSZ9Fo4DgEsL6OR6z4S6MlHExeJq0QFYFVzTFBE6ft1/EN9pu4In9XPv9+tzH\nbRHz6pAdNplKGZEm8vuv4+kWQt9rg3s3pGu5haQbjxLNG0YhUJkAvorEyME1\nIHFgI2kqXwUzLGTuycpKLKIEXDCwNDNtlQg9N5yvw9/bl6JlDeK7FYPE4JBA\nfz0BXqyqhKkf+pPK0iclOrEuSH9Za7d6rdo8gpaUNMPtS0GhtkE4xxP23KHH\nnG1oQUZMM/qk3lp8ltZfIYeyiYGFu0LUnikHm3t0MWmsF7aw8Xgu7m1epuzP\nFhAa\r\n=UwB9\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","husky":{"hooks":{"pre-commit":"lint-staged"}},"types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"7e38a3d77ec54f8a0cadcd1246fad0f1d97f8fb5","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint --typescript lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=shellcheck,@types/jest","test":"npm run doc && catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --typescript --fix lib test","postinstall":"if [ -z \"$CI\" ] && [ -d \".git\" ]; then husky install; fi"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --typescript --fix","npm run doc"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.4","skhema":"^5.3.3","json-schema":"^0.3.0","@balena/jellyfish-logger":"^1.0.50"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^26.6.3","husky":"^5.1.3","sinon":"^9.2.4","deplint":"^1.1.3","ts-jest":"^26.5.4","typedoc":"^0.20.32","depcheck":"^1.4.0","shellcheck":"^1.0.0","typescript":"^4.2.3","@types/jest":"^26.0.21","lint-staged":"^10.5.4","@balena/lint":"^5.4.1","@types/sinon":"^9.0.11","@types/semver":"^7.3.4","catch-uncommitted":"^1.6.2","@balena/jellycheck":"^0.1.1"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_1.2.33-renovate-non-major-7e38a3d77ec54f8a0cadcd1246fad0f1d97f8fb5_1615997370596_0.69397503831006","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"1.2.33-renovate-non-major-7c0a0da367ed092df37c0f3e52f6b07d9159f863":{"name":"@balena/jellyfish-plugin-base","version":"1.2.33-renovate-non-major-7c0a0da367ed092df37c0f3e52f6b07d9159f863","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@1.2.33-renovate-non-major-7c0a0da367ed092df37c0f3e52f6b07d9159f863","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"e0608a08dce1178e0652599577ed9e07ccb1bad0","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-1.2.33-renovate-non-major-7c0a0da367ed092df37c0f3e52f6b07d9159f863.tgz","fileCount":18,"integrity":"sha512-ycRsXSUjic2wLlFcSThAWOK5d+Q7u+ZOIAqksPhDmsLoB1nuxBmB7Wmb2eGOL/tO1rZq+LE+gmdCc1+8MbcpOw==","signatures":[{"sig":"MEYCIQCCtQ5LcZ5Juc1EPO95syrj82bkBV23rlgMvL/spNYp+gIhAPtJhzdxeFkuxVTokeqKqjTctf936a6+k2aCBMqlIo1m","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":30190,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgUqZECRA9TVsSAnZWagAAjpAQAI0Vr66v6e24d1UY33Qm\nLYjb8SdINROaiH8rHOe3ZTwkYl0H8dGpMG+gsOavk4zGfJNFdlnigsH0Duhi\nUCxFBQjBdUTN6b7XcM7p2krwD+Zv5R+9fWnrx1EuNVM20dY6UHmb0qTW2lGI\nfOYuFQqppexc8HRM0dAcVzYChHI1NM6ImnxCiJ38PVfpUVyLQzT5xvVTY9ki\nLOXAGXErvfvKMx5dlnVFt3hCgRMLVZYlqqn8SS/yhu+5fcisRoeevjDT8EGP\ncn4LlsLy/2YekcRLQqo5pfdCrHGW6O4tllVuTgVZxq2SZUEdFi49zRgRbYgD\nluDdFz+imSK+DUzNPVyXU1CtIr80ZaR/KQB03mNZ3BxAe1XDlWaLG+hmSeCV\nTtb/Gq/8WobTndxI+P+7BDE+mUUJdzWrQn/RkR5EBYgEo1pORZaI4oQkgoqU\nACOfDqCQKn1WX9c/dYLNAZg9XWqgi9VCFpwnAyHIux4ak+UioE83v9WeKaQ7\npBJMjzjzdjYw64hgDFeS0kVHzf2zn/JFgGFVND+LV7zW0LY3Dx4iWRSHIus+\n9ic3T56ilGSqwTBPRODtKxD1pGwtURXOS/tXs6jWzH9ouxvaDWt9obMCudyS\nc8dEImxO3gVPfARuiZjw/P8snz2wP1H2VgRz0oRnkPci2M+wHMWtkMqK3NpJ\n0+r2\r\n=HE6z\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","husky":{"hooks":{"pre-commit":"lint-staged"}},"types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"7c0a0da367ed092df37c0f3e52f6b07d9159f863","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint --typescript lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=shellcheck,@types/jest","test":"npm run doc && catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --typescript --fix lib test","postinstall":"if [ -z \"$CI\" ] && [ -d \".git\" ]; then husky install; fi"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --typescript --fix","npm run doc"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.4","skhema":"^5.3.3","json-schema":"^0.3.0","@balena/jellyfish-logger":"^1.0.50"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^26.6.3","husky":"^5.1.3","sinon":"^9.2.4","deplint":"^1.1.3","ts-jest":"^26.5.4","typedoc":"^0.20.32","depcheck":"^1.4.0","shellcheck":"^1.0.0","typescript":"^4.2.3","@types/jest":"^26.0.21","lint-staged":"^10.5.4","@balena/lint":"^5.4.1","@types/sinon":"^9.0.11","@types/semver":"^7.3.4","catch-uncommitted":"^1.6.2","@balena/jellycheck":"^0.1.1"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_1.2.33-renovate-non-major-7c0a0da367ed092df37c0f3e52f6b07d9159f863_1616029251831_0.6820076002101252","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"1.2.33":{"name":"@balena/jellyfish-plugin-base","version":"1.2.33","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@1.2.33","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"f422ab63dac16255f28a1f94bb865314e94ca975","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-1.2.33.tgz","fileCount":18,"integrity":"sha512-Lf9F60rDIN8GdzP/42xXoPdHNWctGSarUMGjdm1MgBQBQG8BASOndSijdgXvtpZCOq93SlwOv0grprkSkpT/QA==","signatures":[{"sig":"MEUCIQD81+yFvOmtuASzkHWWgeqBLypolSUD4L8y1mlXUCWpzQIgJqdBQt68J/V6gYiwwWA5L2FnCA3Crk0tAWGi5rQJvVk=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":30130,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgUqcXCRA9TVsSAnZWagAAI+AP/i2P5PJQE++C0ON7emWY\nSvkOaQ/J4uwdU7aIEZYv7ecQ/N3HOQNHJE9lCi2TLQx6B9mf+NkRp2TWrDKO\ndzJFLiOzwU0yPgNZTcppmc/UvmuSpDg3XWkTSiS6R4ptKRPCBCmLgW6xO1QP\nXzf045iSTEl4ExO937Sc+fjejzGnD+V3UeQwXNbZIFXfLMTUDKRw8TgvbrU3\nABcWAmV0zAzv3VHGj7K1ElGQCJWSf8AfxWmSVxpJWFG7GFevevseEJDBh88X\nx9Vx+E3pjusAczmj/8mDQQHCwqeHDJ/148YyoxyazsQSsP6g0lokS97kcpHu\nucUpw1pUCixzJUpZO7tIua3jfwtBHaYkrB9G/YllzAaga6Cm094LC5qTgU6+\n1bU3Cg20C2Y8xMGBPCeEjvu1GlnlpcGRmxCO/jyUo+f+FlvCY+ovfrIDvU6r\nf24RXTm9VGbknTqPZA1VCbnO2njSbXgXZCIdJUUjrpCDVS1IxKpytLuiqdk4\n4TGUUliQfZDPu0Q3m+zmU3yRyAkHZWJWhqqa6BRnRvW4AoRDbPx62C+Eze2r\nTiVlqpd8Zcl+l6bLPm6MKP+tE/efYp3NuQQ5yKW6MzTeSV/r4yhfuHRoZpVA\nz2HwwwF4ZjByuXAtNTZUcEj9FjdC3PLvk4agH4QjhpR3OBsn6GJVL1FSwBsj\nuvlb\r\n=PqVX\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","husky":{"hooks":{"pre-commit":"lint-staged"}},"types":"build/index.d.ts","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"141b7678ecc8a3a15044b25973e408919f88fb79","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint --typescript lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=shellcheck,@types/jest","test":"npm run doc && catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --typescript --fix lib test","postinstall":"if [ -z \"$CI\" ] && [ -d \".git\" ]; then husky install; fi"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --typescript --fix","npm run doc"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.4","skhema":"^5.3.3","json-schema":"^0.3.0","@balena/jellyfish-logger":"^1.0.50"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^26.6.3","husky":"^5.1.3","sinon":"^9.2.4","deplint":"^1.1.3","ts-jest":"^26.5.4","typedoc":"^0.20.32","depcheck":"^1.4.0","shellcheck":"^1.0.0","typescript":"^4.2.3","@types/jest":"^26.0.21","lint-staged":"^10.5.4","@balena/lint":"^5.4.1","@types/sinon":"^9.0.11","@types/semver":"^7.3.4","catch-uncommitted":"^1.6.2","@balena/jellycheck":"^0.1.1"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_1.2.33_1616029463143_0.5606052670545636","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"1.2.34-renovate-non-major-e8d8e8e1b3c59032d731b4a3ef4d4babe2d8a069":{"name":"@balena/jellyfish-plugin-base","version":"1.2.34-renovate-non-major-e8d8e8e1b3c59032d731b4a3ef4d4babe2d8a069","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@1.2.34-renovate-non-major-e8d8e8e1b3c59032d731b4a3ef4d4babe2d8a069","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"996592dba456950626ba0bc0644b17a530dc9416","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-1.2.34-renovate-non-major-e8d8e8e1b3c59032d731b4a3ef4d4babe2d8a069.tgz","fileCount":18,"integrity":"sha512-dm2T5gEMf9xb6iGFx8sv/T8xRwCt0H4R+Vdwy5Oymm6Xyjg/u1pzZksfe5m3OW+LrmvT3+R0tpQx7Q9Z5tPNyA==","signatures":[{"sig":"MEYCIQDN0XfdtdabSmyAJujxck+PieGDsztZjb9+/179HM7fBAIhAM7MfK2PCw/qJJ/Jpe2896/hU0yJLKdkVuCIpE1aATRk","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":30293,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgUqf5CRA9TVsSAnZWagAAj54QAIeb28pow/XnDqylr0K4\n5ZSD3w1o4WDn8ujfVnCV3BjtT0/Opn6p2XT5b5msFKvYLzNR1Mp5kLfdnRV5\nk8VNcjuIlPr5J0V/V/OLUqFAGD2fBJ2Be3dy2s3XVGg5EVyxkzlnpiJV3DBe\n1KO1GdRUnRmbedaXDHnZw7hGQQjaSIEBoCLsj5GGgeIIIQNyCWuttwjzemng\n0HvNN2IJ7/OxHQRvXBqQzlUq41CHstiqsnqJW7u/uo3f2UjO/U5k/XOf3hpD\nurHHCPCQFPE0hvEsIOVkOnRxU+xEqLQBCOW8Ly7XplT/Vs1XMPVUq6ASn5yh\nNiUdSwv+Rnf0/9p1Nw1bfuoS/M4i+E6+QKlVX8BlR9p/e0CJ+0KoApN4cTvk\nQJD4dH6WW5ZnEff6IRXC+xukSE5zPH5d6e8/aEKcYOxBBumtRBw57v130gkG\nyg3VhhkTIgQxnZfy75jy1X/WWlCqhA1PKfO2TOjgHaZMZJOD74BGxIu3LbOa\n57E50BHsltRC25i0XTnPe4h7u3vyJMGLiFgAFBQg96fCIjyfuvZhUI7VgQVK\nL0k9A2OSaWqY8yaCV166tuuaRXIuxM6YKt59UmJ/rcs8BXbJ+hphhQcm0vmm\nuOIJtTsec0bz2RoMXE/ghfuY48Zb5indllGe1UY/fr3gm/oxXYfP8U2zQCri\n3mEW\r\n=6tL3\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","husky":{"hooks":{"pre-commit":"lint-staged"}},"types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"e8d8e8e1b3c59032d731b4a3ef4d4babe2d8a069","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint --typescript lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=shellcheck,@types/jest","test":"npm run doc && catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --typescript --fix lib test","postinstall":"if [ -z \"$CI\" ] && [ -d \".git\" ]; then husky install; fi"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --typescript --fix","npm run doc"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.4","skhema":"^5.3.3","json-schema":"^0.3.0","@balena/jellyfish-logger":"^1.0.51"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^26.6.3","husky":"^5.1.3","sinon":"^9.2.4","deplint":"^1.1.3","ts-jest":"^26.5.4","typedoc":"^0.20.32","depcheck":"^1.4.0","shellcheck":"^1.0.0","typescript":"^4.2.3","@types/jest":"^26.0.21","lint-staged":"^10.5.4","@balena/lint":"^5.4.1","@types/sinon":"^9.0.11","@types/semver":"^7.3.4","catch-uncommitted":"^1.6.2","@balena/jellycheck":"^0.1.1"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_1.2.34-renovate-non-major-e8d8e8e1b3c59032d731b4a3ef4d4babe2d8a069_1616029688938_0.43784901641455454","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"1.2.34-renovate-non-major-773d77641351e3942544de9ef3043002087b09d9":{"name":"@balena/jellyfish-plugin-base","version":"1.2.34-renovate-non-major-773d77641351e3942544de9ef3043002087b09d9","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@1.2.34-renovate-non-major-773d77641351e3942544de9ef3043002087b09d9","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"7a3b84f62d202d608e0b309f2f5dcade2a00d28f","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-1.2.34-renovate-non-major-773d77641351e3942544de9ef3043002087b09d9.tgz","fileCount":18,"integrity":"sha512-mXbCBgSTN9OEwVXsFvXPut0QbTkZIZnijRjw41vYAXrulhPF/jObhDXFzPNqsVkSyJzBZZ+smpxusofhsXUAnA==","signatures":[{"sig":"MEUCIBuKHdfPuq5+PmO0hZuH86uLwWdT/KI/ihm+BIzYOuNRAiEAjEATGwWumI37FIRqB4EAGA5AQ9OeJa6aCEB3PHgTL1Q=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":30293,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgUr3hCRA9TVsSAnZWagAAYaYP/iHPWfhKVhnisA3cTiUA\nDsq9xTTWh3ZfzHZ8dQ6TL0JfsPV7TWvroM0BM+SHzx31q4VTlzboW0pIOBvn\n28rxbbIYldzZj/oQQIzxDfgqq4fQ6717Y6H+oG7Cn1grwL4WKCoALurzq2bS\nu2PXYzM7I2r/qzoSPas81FTUU4QBUf4YK6LC26yBwmIva55z1Aah5Fg97i02\n1esd7ez4j0Uh+WqAHhsKMQtGxEIdOCOCePR/VsmWFEbC+u6FH/wnLnQWZfse\nOwMXW0p1GskGwd50SyTePQT+Csii3pXDofxJoRVV23bXq+wAMrn7vICuauAB\n2AN5/fCNX2oorH++sCioyMpXPRM0w/g8kRl3hXwFDPFGZU/h+0yq0NEJMJix\ngruCxs8rXygiAkuBDdBadvRAjyrqz4RRlBCi/Z7e2kJTlUu8vzj2E2OGFD9L\nddAMdlP7tcG8Ss5zZ5E6BxFg0ylHUeB/EmszSeWsSvM1XhlvMsWqrzKEtK5S\nAy/dn/nBuxLngztMFz0wHvHh6raEGv3kTpUKa3830eh5xO3HEBZAgZ7y9n8v\nB26GZfEdCAi3YEJN2ogxhyiZqxE38/PYZOu9OnO2hrz14JnI4EbFQm0DmuSg\nBTL1EB6VREPFgxY4qwyl9TGqqAw89cbrCfEsH6YxyK/ipJM+/xc4jwXZwVQW\n4weM\r\n=pMeh\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","husky":{"hooks":{"pre-commit":"lint-staged"}},"types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"773d77641351e3942544de9ef3043002087b09d9","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint --typescript lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=shellcheck,@types/jest","test":"npm run doc && catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --typescript --fix lib test","postinstall":"if [ -z \"$CI\" ] && [ -d \".git\" ]; then husky install; fi"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --typescript --fix","npm run doc"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.4","skhema":"^5.3.3","json-schema":"^0.3.0","@balena/jellyfish-logger":"^1.0.52"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^26.6.3","husky":"^5.1.3","sinon":"^9.2.4","deplint":"^1.1.3","ts-jest":"^26.5.4","typedoc":"^0.20.32","depcheck":"^1.4.0","shellcheck":"^1.0.0","typescript":"^4.2.3","@types/jest":"^26.0.21","lint-staged":"^10.5.4","@balena/lint":"^5.4.1","@types/sinon":"^9.0.11","@types/semver":"^7.3.4","catch-uncommitted":"^1.6.2","@balena/jellycheck":"^0.1.1"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_1.2.34-renovate-non-major-773d77641351e3942544de9ef3043002087b09d9_1616035296571_0.0747065243838323","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"1.2.34":{"name":"@balena/jellyfish-plugin-base","version":"1.2.34","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@1.2.34","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"9687cfaf34c056010452f18357ff4949fa8993fc","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-1.2.34.tgz","fileCount":18,"integrity":"sha512-5AEbeUomFPsI96nGJ2jPJhTXu2g57cQ2Rg756e2I+BNHC11OVk06Zno8ynF+0h5bA8LsrkCXX21+wyuApHnoIQ==","signatures":[{"sig":"MEUCIQDyUY8j7KuFMRVBJ31Tx4eHrQt9W5Xq+KJturO1AmUhtAIgW1OZWS4YiHgRvPH7Np0XJkxYUJgIbmv/NGzVvra81Zo=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":30233,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgUr7xCRA9TVsSAnZWagAAKkQP/Aw7qczosChMT+k1Erkh\nfRB4iyUiqPhnZe8l6LNuybt7SRTqL48hnHDvLVkTh78KXd5v39s9vtqD8VHT\nDygEmxC74HsRs8CakJDeOSQr4In8BE2wFBxllVKYY2pbg/ZpACVdloy8Wk6w\n/tT20ex+etK1kB9jpCHJeGVK8yYme/nQpnBO7iOpqEaEO0TCDprza4YS/JB5\n7qUemlQR8AE+hHphlL2Hhjt/gjfTewqLzLHEbgQubYLiM+6Nj/MyK57qpPbT\nOBcVoN5HrpdimBldSJeowKDhkq7Hi82UCw+y79t59EAsgrbnKZtWv97CMdho\nAMpwFfxkB41U3bc31fuSr0j83WPJKcbZ/lfRbInmi2DpU+xAhR1WB9Vqpw00\nBonwERnanib9SDzc1MsIvHemfvr5E6bI8TdZPI/BTBICbg1IASOQIXivtdBy\n6H8XuOgn6uPuPqXnQP9dQM7wEl1X45vrf65HmgvCsAKMiiwcEuKpuOMF9mKY\niAvR+EdEDYGCWZvpvU4IFLjpO87W68NkS0ENwGI5iEHMdhgj1WW6lZvup4ql\nXxXWHKDMIZ4jyZG28VcsdMKU5iFIRJe2mvRUwXINzUv7H7lmL4x2WjqI21Pq\n9/7wXIxyxIwBgHSmVJTV4qKo0ziYnJkiHx8oj27jXvsOjaxfqPwxlPBqlqzg\nqo49\r\n=W2r5\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","husky":{"hooks":{"pre-commit":"lint-staged"}},"types":"build/index.d.ts","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"37c7a3fc26c299cc819adab417662fb5831e30d9","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint --typescript lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=shellcheck,@types/jest","test":"npm run doc && catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --typescript --fix lib test","postinstall":"if [ -z \"$CI\" ] && [ -d \".git\" ]; then husky install; fi"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --typescript --fix","npm run doc"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.4","skhema":"^5.3.3","json-schema":"^0.3.0","@balena/jellyfish-logger":"^1.0.52"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^26.6.3","husky":"^5.1.3","sinon":"^9.2.4","deplint":"^1.1.3","ts-jest":"^26.5.4","typedoc":"^0.20.32","depcheck":"^1.4.0","shellcheck":"^1.0.0","typescript":"^4.2.3","@types/jest":"^26.0.21","lint-staged":"^10.5.4","@balena/lint":"^5.4.1","@types/sinon":"^9.0.11","@types/semver":"^7.3.4","catch-uncommitted":"^1.6.2","@balena/jellycheck":"^0.1.1"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_1.2.34_1616035569263_0.744090470450701","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.0.0-use-jellyfish-types-b195af1c629de8ccd5d8279349c6eed5217c280c":{"name":"@balena/jellyfish-plugin-base","version":"2.0.0-use-jellyfish-types-b195af1c629de8ccd5d8279349c6eed5217c280c","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.0.0-use-jellyfish-types-b195af1c629de8ccd5d8279349c6eed5217c280c","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"f5343ba31ab975bf726a9439ce4649443b8f87b4","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.0.0-use-jellyfish-types-b195af1c629de8ccd5d8279349c6eed5217c280c.tgz","fileCount":18,"integrity":"sha512-y6UxjJbNtJGMWt+vfy8vLfKipmcZFnTHnZswdxKPS4qqiQAXmaCv0iVAgwV4YWIOf5p6OgfQUHJiFBAgAjDijg==","signatures":[{"sig":"MEUCIBOgxaobBv9u+wy/PmktocQfGQWH7gvdhaspacn1hBVyAiEAhOPVgCrzjmzNnxWnYknu9lb6YDvveXKQ2sOeH9mSVsE=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":30469,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgVGGxCRA9TVsSAnZWagAAT+oP/jz4zn4HoSD1ZEGKu5Vq\nVtwwTAhqd70cLI0g5gVpP4kdXWd/3+26PXodBxYIRyQrZ403NHxxetopUIMp\nFABdJ7Hx1OEBDNRPlqoK2bAHOSV9HjZ98KKvGsD45bUCRzSzJ+L4r6heFtoI\npNgnscaSWDvBQksFr/NQF6d7zuJ/q+4HCvT657V74qa5kCQMNCh0lg5QGZhV\nE5JvmkzlM6l9J9ND7zX0IuLhLlR8a/LT/Z4bQ14JVbqpW38coVpHtfm/YCTW\npH4y3FToWKY/B06pbN9gRe0KjUpdePCyv0pwQebf0vEjQ1oyQsOcTtK+L3a8\nTMzsmdF2aTiLwMaZBprHZ2vNmm2SrGP2GR5xPsXBcKWUhHPbh/hngv3NG7+L\n4x1o4sHYt+dTfqoldwTL72EidOwHMbDUWtgmWE0F8kVEBih2vRZnmsUa3GPZ\nQ4JyUgNmnGfb/xICgy9GQyVXkP8VwoGgmWDRDHtqUOkKHUSBUwLjGgakw/E1\nziS9dxCvMbHY18FuzPMBD+TttPXV/IT+9Oc3vyq5ZrRWi20SRsgXOcUs7En4\nLReMbXHQg/Lemtvi9yi6C9X8rPylli0tXOIU6FQRp1dPGq7Yvu1XYPBxA/zx\nh272Pnv7H8Dfz4MAd8+qlNS9tyL9KjuPnRbEd98iAV01X6xE+l+762+jMg/r\nIcr4\r\n=wIXw\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","husky":{"hooks":{"pre-commit":"lint-staged"}},"types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"b195af1c629de8ccd5d8279349c6eed5217c280c","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint --typescript lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=shellcheck,@types/jest","test":"npm run doc && catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --typescript --fix lib test","postinstall":"if [ -z \"$CI\" ] && [ -d \".git\" ]; then husky install; fi"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --typescript --fix","npm run doc"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.4","skhema":"^5.3.3","json-schema":"^0.3.0","@balena/jellyfish-types":"0.1.0-add-contract-interface-85697b449a28e23d33e005f4e59c98e19f853c54","@balena/jellyfish-logger":"^1.0.52"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^26.6.3","husky":"^5.1.3","sinon":"^9.2.4","deplint":"^1.1.3","ts-jest":"^26.5.4","typedoc":"^0.20.32","depcheck":"^1.4.0","shellcheck":"^1.0.0","typescript":"^4.2.3","@types/jest":"^26.0.21","lint-staged":"^10.5.4","@balena/lint":"^5.4.1","@types/sinon":"^9.0.11","@types/semver":"^7.3.4","catch-uncommitted":"^1.6.2","@balena/jellycheck":"^0.1.1"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.0.0-use-jellyfish-types-b195af1c629de8ccd5d8279349c6eed5217c280c_1616142769112_0.3034708072872645","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.0.0-use-jellyfish-types-015d930ee8a4d6db2dbdc9407d1e242210db46c2":{"name":"@balena/jellyfish-plugin-base","version":"2.0.0-use-jellyfish-types-015d930ee8a4d6db2dbdc9407d1e242210db46c2","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.0.0-use-jellyfish-types-015d930ee8a4d6db2dbdc9407d1e242210db46c2","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"f63afa9a7a77c07f813ac5ee295882db58cf8e18","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.0.0-use-jellyfish-types-015d930ee8a4d6db2dbdc9407d1e242210db46c2.tgz","fileCount":18,"integrity":"sha512-+A+E1pX9PxldIbwIfdMjN2zjxVDj1KIzfgWNdSuKcHSD/hUpeHtJT3Kqnu6eg95DVo+buF9ekXiwyASGbSZSLw==","signatures":[{"sig":"MEYCIQDVkzmN25MdXInODRM99eV145tR/pZ9fz9S3tK1D+qV3QIhALWkwX+Ojb3TozeWRjhlZ65LLxCfecZmpFuD4OtOiMhJ","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":30430,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgVGTWCRA9TVsSAnZWagAAuvUQAIImlG66TCSUhrHuIt55\nvdJo/725ME5gwfuETJzSukyfaLYSInMvHV71f+dZlXT/7w3yV4BEOxVCs21z\nfjsLDMLsQusU7OzZ7fBzU1/GzaJijyzWvRcRF2mCif4/zr0JOlCSggoLLozh\nIWZNWej3qp09A+jQl0QaLfDBlMDh/9AcM5Ccp+ej8128DRCXi2n7nJroy0F0\n+W1QM22LjNdHsPprmKD7Irtf8ygpehAsn/KQwLv/3z16kwcvKuauJZ/ydi+7\nAVosyIVaFCm41CyZV+AmjaQ963UOxw9D95G5djIvz0TAUQsnBw/0OQ597shu\nBfX1StT6t1qSUDMDqxq7QSpeKnD59x2Ommit0c4P7XQXTL8DJMAm+hsSQa3S\neig02RkxygDHo2XjIG8FML/xNQcHX0aWDYlYj+75XgqDyL67AHhbZi0n+b4G\n96vLzj/F/O+loyoDdT9TfyvIfXqkEcfU+re2XZ2aI2h8AaiLrSNae9Tdp89/\nNGfjsmBho0FHoJeNR2dykpdD8davu4yKUS22QVE5aYxLQTBvnuBV+U3HzTIy\n1R5vmMec8iTTjVgvy5AU1z6tds6cFZB7X4zpEcT95L+fxMhNO0YsEaItZP3J\nCWXuVO5Je9vGerBQTZhYERD5DbpY8eBlPaLLLbH5jyQGgsHe7hytWLVUMYbW\nyvCU\r\n=l4Nh\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","husky":{"hooks":{"pre-commit":"lint-staged"}},"types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"015d930ee8a4d6db2dbdc9407d1e242210db46c2","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint --typescript lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"npm run doc && catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --typescript --fix lib test","postinstall":"if [ -z \"$CI\" ] && [ -d \".git\" ]; then husky install; fi"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --typescript --fix","npm run doc"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.4","skhema":"^5.3.3","json-schema":"^0.3.0","@balena/jellyfish-types":"0.1.0-add-contract-interface-85697b449a28e23d33e005f4e59c98e19f853c54","@balena/jellyfish-logger":"^1.0.52"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^26.6.3","husky":"^5.1.3","sinon":"^9.2.4","deplint":"^1.1.3","ts-jest":"^26.5.4","typedoc":"^0.20.32","depcheck":"^1.4.0","typescript":"^4.2.3","@types/jest":"^26.0.21","lint-staged":"^10.5.4","@balena/lint":"^5.4.1","@types/sinon":"^9.0.11","@types/semver":"^7.3.4","catch-uncommitted":"^1.6.2","@balena/jellycheck":"^0.1.1"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.0.0-use-jellyfish-types-015d930ee8a4d6db2dbdc9407d1e242210db46c2_1616143574256_0.7895225368079657","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"1.2.35-renovate-non-major-726b47f24f859efe256981b0dd0f01b5bc1e7016":{"name":"@balena/jellyfish-plugin-base","version":"1.2.35-renovate-non-major-726b47f24f859efe256981b0dd0f01b5bc1e7016","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@1.2.35-renovate-non-major-726b47f24f859efe256981b0dd0f01b5bc1e7016","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"afa751d01835ac400b91b254f21ec2c813812637","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-1.2.35-renovate-non-major-726b47f24f859efe256981b0dd0f01b5bc1e7016.tgz","fileCount":18,"integrity":"sha512-qkY4O42tf9JBCCK/RiyWm7zfpxZTIt0Rp9JVwkEhoM08qajrLLIqnn+WsGCPZCUavMZ/v5QLcnktIAhyfUWp5g==","signatures":[{"sig":"MEUCIQDo+sfSVBOQHk6ClqkIT9YHF6OypadKnR4hGfgQ7k32HgIgXY6HNmFsMrUAYXMYXVrambrlliyum5X3M5nJO6E6azc=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":30396,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgVRL/CRA9TVsSAnZWagAAHbsP/2hAygD+ABDqPWOvyXGD\nJ/edlqyQUA2FUqcTjCNKOiyiapE3ALHYA0+BXHCKE8XionZ9oMMJAMrex1Sh\nXp1LEEJMNH5taPMfQDCiMhE2dVtAHSWNWvmFto3WHzOzzl9ew2SAJ9YFkkvI\ntrwdkHOBSSJZXHYpbV1St4Y8JgwNEM09zBPb0tnmsFIfPN4RvpXkTxWj+IPD\nab6GKy5E7Tj8PxbIapspjvi7BpKjvCciQ2yEj4oJxq8OaFefUA82CYDlqT1Z\nriU5SC8qWpOhG7PWEj2yohw+qGZmvczsxRq5UbBx3b1UPzd/eDITC9x1Ohjx\nIpo9uDf1PrbzgS1yOUOcSQ6UtPPGooF9vPp4GXnt7oclCWCKShxGH7ekwgcJ\nokIwsldIQx422OBPCfOQrCwejBzxFm5pLoeXSbkB9vZ0KCChZry6NLYwSsi8\nLfvHL+N7hrffsdTtDextR/hweainkZaxKAwqHITIi7Uj6zzq0vflK62RmQ3E\nr4wDDeudHA+y24xIJwvmsVBcvLf9XKmFXAFTsOYwe7+PnqyJTTp6KZ3y289Q\nPESUI4XvBgy4nlVjpnLatiZ3JD22rzQ0DJUPfHDfq0fcq0YoGJhwJx0pjK2S\n1jSoc/N19dJ7dhS/j2QNkUK8qHOGA4iW0SmUTWU4RAEM1L7rwSvjOBgfadeW\nAvVE\r\n=yE2q\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","husky":{"hooks":{"pre-commit":"lint-staged"}},"types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"726b47f24f859efe256981b0dd0f01b5bc1e7016","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint --typescript lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=shellcheck,@types/jest","test":"npm run doc && catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --typescript --fix lib test","postinstall":"if [ -z \"$CI\" ] && [ -d \".git\" ]; then husky install; fi"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --typescript --fix","npm run doc"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.4","skhema":"^5.3.3","json-schema":"^0.3.0","@balena/jellyfish-logger":"^1.0.53"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^26.6.3","husky":"^5.1.3","sinon":"^9.2.4","deplint":"^1.1.3","ts-jest":"^26.5.4","typedoc":"^0.20.32","depcheck":"^1.4.0","shellcheck":"^1.0.0","typescript":"^4.2.3","@types/jest":"^26.0.21","lint-staged":"^10.5.4","@balena/lint":"^5.4.1","@types/sinon":"^9.0.11","@types/semver":"^7.3.4","catch-uncommitted":"^1.6.2","@balena/jellycheck":"^0.1.1"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_1.2.35-renovate-non-major-726b47f24f859efe256981b0dd0f01b5bc1e7016_1616188158897_0.07643128354978002","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"1.2.35":{"name":"@balena/jellyfish-plugin-base","version":"1.2.35","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@1.2.35","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"f363bc5aab0721b49eea8183755759dac260e1b6","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-1.2.35.tgz","fileCount":18,"integrity":"sha512-OA7kx2yUInq9FDbQpyF5zt5gDhfE/gpfC1+TO8+ho9COn4pR8ZEvaxFzHJxn4geVIuyJafUVTRsb3/au9PypMw==","signatures":[{"sig":"MEUCIQDXJgFMQ1EcduBxObcjvwT5ZwV/oS59bc3youWkhak9WQIgbZHzcLTuB1FkySPd+a+Ll+Wo3xzi+vSfiyjgH+f/ZfI=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":30336,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgVRPQCRA9TVsSAnZWagAAn0QP/RQpYxm2BStPwAAH2Na+\nwz3EtyT9UtHspkaotHyp/vCidA7id8CkUMrInAr5grP+l9ZVtt1dZYO6K+F+\nYCpEGW3tZQjWuOhda9+C4/BYDGnBOTVd6g/MGiyCmejDTrweBo3ml9UnBbgk\n2T5KoeOJInv5SwG9SGqQYFaEtm4YCvBHF/5roQ+2xmT+Z5w9Yg49osO2caLY\nMaX/qyEZnGe6Zj8/lXZmB3Nb+7v262AbghdVSXU7O8qn7UF6JB+WJC7MLxtr\nV6A9YpKnqv9Qjj9E3PxCy6q63svim3z5J9Zouh0I9FvNxGsbzYqdI90Wt/Wy\nFBQxb013AkGOGyHICBeHetrCylHvp0Pcr0L81/0pWbDCgwxg++xWErfB2PTE\nyuURCmpKZRwhj4Q82/7dx0FROn/hab9Lbehe42pUMLmcbpkMOvX0/Hd4DsPL\nrWNfFIZWeGW5/E/h8N7O2R7RfdMgm9RXGlxH2DkXcWXToDrch2Ly28Q1KTiQ\nof9hEIy0Ooi7By2cfL4xDjDlMswUHUHRYlqmueStuO0htiIZWfHnIjR/tfu0\nK/DWGVPkl3O0rIzzVDxbv6JtPsH4XhWa/3JjNpl4LOzKs5HHRKv+7hN6HhLR\n/n81QHpiO1kY4X2fEQQBt+2pDZ1nigGbyarkyetmbVdpMLuGA5g2tLhQjYz8\n8cNd\r\n=h0iT\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","husky":{"hooks":{"pre-commit":"lint-staged"}},"types":"build/index.d.ts","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"7120a8ab85a91cd2053ef81956fa42aec252be63","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint --typescript lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=shellcheck,@types/jest","test":"npm run doc && catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --typescript --fix lib test","postinstall":"if [ -z \"$CI\" ] && [ -d \".git\" ]; then husky install; fi"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --typescript --fix","npm run doc"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.4","skhema":"^5.3.3","json-schema":"^0.3.0","@balena/jellyfish-logger":"^1.0.53"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^26.6.3","husky":"^5.1.3","sinon":"^9.2.4","deplint":"^1.1.3","ts-jest":"^26.5.4","typedoc":"^0.20.32","depcheck":"^1.4.0","shellcheck":"^1.0.0","typescript":"^4.2.3","@types/jest":"^26.0.21","lint-staged":"^10.5.4","@balena/lint":"^5.4.1","@types/sinon":"^9.0.11","@types/semver":"^7.3.4","catch-uncommitted":"^1.6.2","@balena/jellycheck":"^0.1.1"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_1.2.35_1616188368243_0.7326098450094685","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.0.0-use-jellyfish-types-dab11491927b1c9ca7667fd42b56a4046e23b6bf":{"name":"@balena/jellyfish-plugin-base","version":"2.0.0-use-jellyfish-types-dab11491927b1c9ca7667fd42b56a4046e23b6bf","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.0.0-use-jellyfish-types-dab11491927b1c9ca7667fd42b56a4046e23b6bf","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"30bc278c91d1703a3675942a9197d103211728df","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.0.0-use-jellyfish-types-dab11491927b1c9ca7667fd42b56a4046e23b6bf.tgz","fileCount":18,"integrity":"sha512-AXqQlN+eOv5Nzur4MNotfMRywgLODKnzS/oB1Tt94Krl2x+mgTPOFeD/rkQRiNf3s6/OB53fH8vdqdjfGAz/LA==","signatures":[{"sig":"MEYCIQCrsN9hzqMx2X8F3S8F2EHaowYC1JCyxjcxlSpGtA6FBgIhAKkviGsuJIxBEdB7Bt90gXzzAHJgA/+Y1uP0HTRFpITC","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":30504,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgVbpdCRA9TVsSAnZWagAAzzcQAJdfnDdaxFFAEDhwF6kE\nBScZmZjtzwpKFPCNmkwiChrUMfHb/n5Vc8nG2Bt5CNi9pMk/8uE/0U6lUAIK\nDOxhI9dO7JvBN8KTZmZPmNEJfsaG/WSnj4G+/ZQ8lLOMN9W5YuWb8lM3dZiU\nk4dgct9WXZDT7FQ9RQypnoo1IR9vMCei+ATZGUBxhu7nZ+2aQVXgcwA2au2g\nuZVLD8+7Qttm+gOG4Iu/wqhREPo7ROQ884ePrj3f/P3cMorBy59GXqfjL77g\nm2OUqQQwWzRhLJScUstDdiaf/eStm3NDdunH7/qzRM6EISShJvFQmBeMJQcB\nYyPzViInXnJDfV+bkoUJTo5PizTs+YqQ94spO6i0KKpTpS2x3SSCsX0o0UGU\nVJDwZqoeByu3u3VqjCVvD2/XKYiAOF4Fw0dblB14a6YzObGRs0QvuisSn7sx\n2touYxvZPMUav+Papwl3b7i4GYmegF2WSZ6XZyFdSVWch7h6+cMqVVxV7H8a\n+T8GBHnuelXJeXZ6i8/3e7bFsuausH4RUtVJl76Wt419wQDi2PAb+h6HNkT3\nBlIWPixJZdITVcQVvX3L31rZZO26ssycMlRjyBWpwmlhOlhf0w+wFf2h4Gek\n9fhoOyKtGJfZ7zdYhYTxn2lJ4FqmXAH6SJYF6O4yVg10Sp/4ee9l++oa4rVc\njd1j\r\n=nUvh\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","husky":{"hooks":{"pre-commit":"lint-staged"}},"types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"dab11491927b1c9ca7667fd42b56a4046e23b6bf","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint --typescript lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"npm run doc && catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --typescript --fix lib test","postinstall":"if [ -z \"$CI\" ] && [ -d \".git\" ]; then husky install; fi"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --typescript --fix","npm run doc"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.4","skhema":"^5.3.3","json-schema":"^0.3.0","@balena/jellyfish-types":"0.1.0-add-contract-interface-85697b449a28e23d33e005f4e59c98e19f853c54","@balena/jellyfish-logger":"^1.0.52"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^26.6.3","husky":"^5.1.3","sinon":"^9.2.4","deplint":"^1.1.3","ts-jest":"^26.5.4","typedoc":"^0.20.32","depcheck":"^1.4.0","typescript":"^4.2.3","@types/jest":"^26.0.21","lint-staged":"^10.5.4","@balena/lint":"^5.4.1","@types/sinon":"^9.0.11","@types/semver":"^7.3.4","catch-uncommitted":"^1.6.2","@balena/jellycheck":"^0.1.1"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.0.0-use-jellyfish-types-dab11491927b1c9ca7667fd42b56a4046e23b6bf_1616230998286_0.03752958008007612","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.0.0-use-jellyfish-types-260b3fe703c214cadebf177ed4a3a1a4b0ee46db":{"name":"@balena/jellyfish-plugin-base","version":"2.0.0-use-jellyfish-types-260b3fe703c214cadebf177ed4a3a1a4b0ee46db","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.0.0-use-jellyfish-types-260b3fe703c214cadebf177ed4a3a1a4b0ee46db","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"e661000a75e7606b5b689f36734f09015ad84bad","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.0.0-use-jellyfish-types-260b3fe703c214cadebf177ed4a3a1a4b0ee46db.tgz","fileCount":18,"integrity":"sha512-zJiIavsCUxb3B/vZQJCO9jAMSyg8u3/5Pf5OqmDXE5Dw2y1cPsorIATN5hhh2sdGYu8Q1nj4tJ32AEcuYr8Yiw==","signatures":[{"sig":"MEUCIQDSuiyD+rnSxGS2CMmmSJr4yw4yLCbH/4zDx8xpM0bxvwIgMgpYKeaZQRnisoZIe/O9UhbwEu6n6mL2UCO3ONadVTE=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":30607,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgVbyPCRA9TVsSAnZWagAABXsP/0XM/vvyfXbcaQPqM2QZ\n3kIQxIy7aQAJOLRqs51XaROsYur7HmHJXW1XFaVb6LyruQ86xm+xK8oC4dz9\njjX/iT+s80PjCxfGo3LFL3DRx9iqS1CGN6gGWUKEmgW34GYEeNKSsMTnIUVj\nnEA2/IU5xn5d2MIRB/d3OJ28tqm24InPTrM+IXPjwLncc2bO9u/KAMjGP0WQ\nlaoyz92fgpHqkRNldGrdnjfqYqGkkBhVL17E7KG29ZRQ0s92ERvG2YmtFRn1\n9Sszg3N9xFB+zD9R7ed8DTdS/+Pv/t81sxeLP0nlt05Jlz/RdMz2l4v47mbV\n41Rxc932KRTBszzn0deIxlbUHSMps2sXRoIhe2gFSrW0ajV+s/Qwckkh7P1u\noE637oya1nDtc9YJaj7ndYU4O97D7ohxWKe2FV56nTd2Nm4weWggHIqZqJTQ\nCEz1kkGqT4+9a6UO2byS0CLOD+sgWuY+BZbRlNoP9lqC+C/qJlF7VldXm1uO\nD6Q69XxRe0IBLYKfMBGOMfSP1DrAYxMUqGRj2Z9LE689/em+OyxbeO+pcWut\nptD8H6s0ZnSxOVVxvPJRfeJV7A7qS0F76DqmjYWN65gzA2pbi1iaU+5pq4rb\ndOi0B7UnZNGcIvU84bztXH5+N4qvpaVtIXUS/kaZlPP40J0/uouNLulSe+Pj\nG9as\r\n=IeAl\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","husky":{"hooks":{"pre-commit":"lint-staged"}},"types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"260b3fe703c214cadebf177ed4a3a1a4b0ee46db","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint --typescript lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"npm run doc && catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --typescript --fix lib test","postinstall":"if [ -z \"$CI\" ] && [ -d \".git\" ]; then husky install; fi"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --typescript --fix","npm run doc"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.4","skhema":"^5.3.3","json-schema":"^0.3.0","@balena/jellyfish-types":"0.1.0-add-contract-interface-85697b449a28e23d33e005f4e59c98e19f853c54","@balena/jellyfish-logger":"^1.0.53"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^26.6.3","husky":"^5.1.3","sinon":"^9.2.4","deplint":"^1.1.3","ts-jest":"^26.5.4","typedoc":"^0.20.32","depcheck":"^1.4.0","typescript":"^4.2.3","@types/jest":"^26.0.21","lint-staged":"^10.5.4","@balena/lint":"^5.4.1","@types/sinon":"^9.0.11","@types/semver":"^7.3.4","catch-uncommitted":"^1.6.2","@balena/jellycheck":"^0.1.1"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.0.0-use-jellyfish-types-260b3fe703c214cadebf177ed4a3a1a4b0ee46db_1616231566645_0.8817692717739039","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.0.0-use-jellyfish-types-fb0434cf023baab2a350fd868be81c5a9f7480fd":{"name":"@balena/jellyfish-plugin-base","version":"2.0.0-use-jellyfish-types-fb0434cf023baab2a350fd868be81c5a9f7480fd","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.0.0-use-jellyfish-types-fb0434cf023baab2a350fd868be81c5a9f7480fd","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"3c23ddb20c58794764bc4f2c59da65a3def07d83","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.0.0-use-jellyfish-types-fb0434cf023baab2a350fd868be81c5a9f7480fd.tgz","fileCount":18,"integrity":"sha512-7JdKlQohdTTDLpUCFHAO0QFk4p+hpFJz15/I1JJ/GhtaNsbWX1eo0e4i2QG7A0bIa1ci3WzCUi5trVLYIIyxoA==","signatures":[{"sig":"MEYCIQC2bL+OKgvzMIekXKaofBwe3hpB4WRu0ocSQ9GBYEghpQIhAIkXuTFvrt+1LIMhEvMqEVLXedklZOkc0xDC9PorD3Cw","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":30509,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgVc61CRA9TVsSAnZWagAAe8EQAItDQvtmK+ybmmLQcfrD\nRoO2pXBHP4oCcfMoJWHxbCSvUfezpllOFG0BaVsCSn/IcvwmgRAMlG0Xe0bf\nkaSd5vSjItuHKExx3cdlLua9P/AHsNMJdw6+k4beHVOY2ss1R3vN9d6+iS84\nx3GNkaMGUxZhqTTMdNzaCHTvAJOEctcxr88oODerJ104+fZyEOGDksD1CStd\nxoIwcF+1tuG02kSS9YRIggx+V+DLIlWFQCc3gNmy6ZLtL/WlJVVnNUjiq7f4\nhXaEJ9y1UUSPHJK2xwlsNCkMsJ4fhvnC8xB+D5u/wrFs92k+L5ZZ688+eg7W\nLF+uPlPRALavL5JI9wUgX6NWju8HSXxk4/6pgfh0kBkNhkDl155gUPl30cho\nYpfmk4MTmAkRryehF2aUHAnCvUNdEGx8hYow8vW9jYL78x749xeQbXHOaWQG\nO84uSeHud5qLZfXJUBV0NpmFTB0eezABseOThXiHv0Ei7v52GYsr4sfmoi27\nZ3zUUHO4TA4f8fsbv5yqmCZSjPI6yNp/uHiy4IajW2qbcdVvMkAORg/LIKtN\n1ZIuoNV5nDxDUXNf0h+78LW0upUZBWYFQGukH1Dxf6HOUHBru/nccS3i1dvW\nFv9fMh7MtcFOna7Qfu8OVn8+yId5W2moOW/f3ViFAc6BhB6nCJ7Xu6uxXuOQ\nSgOG\r\n=EOX3\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","husky":{"hooks":{"pre-commit":"lint-staged"}},"types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"fb0434cf023baab2a350fd868be81c5a9f7480fd","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint --typescript lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"npm run doc && catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --typescript --fix lib test","postinstall":"if [ -z \"$CI\" ] && [ -d \".git\" ]; then husky install; fi"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --typescript --fix","npm run doc"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.4","skhema":"^5.3.3","json-schema":"^0.3.0","@balena/jellyfish-types":"0.1.0-add-contract-interface-2620429fc6f320f6085fb097d1e82bcf8ef77c30","@balena/jellyfish-logger":"^1.0.53"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^26.6.3","husky":"^5.1.3","sinon":"^9.2.4","deplint":"^1.1.3","ts-jest":"^26.5.4","typedoc":"^0.20.32","depcheck":"^1.4.0","typescript":"^4.2.3","@types/jest":"^26.0.21","lint-staged":"^10.5.4","@balena/lint":"^5.4.1","@types/sinon":"^9.0.11","@types/semver":"^7.3.4","catch-uncommitted":"^1.6.2","@balena/jellycheck":"^0.1.1"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.0.0-use-jellyfish-types-fb0434cf023baab2a350fd868be81c5a9f7480fd_1616236213486_0.5828124545476896","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.0.0-use-jellyfish-types-2ff0c89a0ddb3b4058091a4f29dc71c7004110c8":{"name":"@balena/jellyfish-plugin-base","version":"2.0.0-use-jellyfish-types-2ff0c89a0ddb3b4058091a4f29dc71c7004110c8","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.0.0-use-jellyfish-types-2ff0c89a0ddb3b4058091a4f29dc71c7004110c8","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"017712fcf2c03243aeacca70c31dae4ff0b7979f","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.0.0-use-jellyfish-types-2ff0c89a0ddb3b4058091a4f29dc71c7004110c8.tgz","fileCount":18,"integrity":"sha512-GKfevL+A2NgQkbQxwidcRaFOk9Y+HBKHGVxKhjZc8/P2vvImX7GCc8FRcyphpOWpFtwq1mG7+eo5ak7tqzkAiQ==","signatures":[{"sig":"MEYCIQCmAgadsnc4ds10jPb8m24JUqAo/6IbRdp9BtIgmHAZXAIhAOco5FAS+il+ff71sifIS4L6Xf6vBOmA2sNU0FaN3b3G","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":30509,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgVdARCRA9TVsSAnZWagAAu5QQAJeFfimTIikO8kd5MDDJ\nmSvLD1l22vV1K/FpnwYeo+7ioZ5JB348Cv23temjcfsHqBD2VRm9U7XDQfYd\noAc/gmrsX7RqrtDOwm3PE4GvVEaeMZ1W61qb97cxo7x2xFfCdR4ZZISOiXkh\n3Zm6wFdjiwWw/jWT1yLIvvb9X37kwDWtW46irv7qmqHL2lbBp5zHAwJ5t2BW\n7+3HxPkgQP81sNUetaUtvBBGk4N4V4x8V+eZEI7VDGp2adjX2aSJBi7GnZGJ\n+4S40+zvUIElin8T2C3SdXHX1O5kSXKzu+YJtqYlaqhgHoJ+UcEQ1R8RFOsv\nrsxOvLG8NASmeN0nC50GzNQuBq2KNDLh/RSETGUj2ZO8QVJReGm7EGqwwf5L\nfesXaQiGOTnY2qKxvhGSU3wnL+mjQObqKgZ+Ec1h2V/RZR51zP6YDjXQv5c9\n0IZwsuGs+MBVxRzhzDniYhCh0YPGPARlnf3pyo06+VSDgV/TSrhtHqKER28w\nrh5rQgGPuPb3JdShc+4JzJGkHct1OL10tHs6z+cPMm5Ag6QB3/mfw6J0YLPQ\nweBRkydp6gar4J0kW1qlzbFt1nFb3ojcs2GDWbpFo5Xu189RR8G7Z7Nz8E/L\nUY749ZaT/B875jeZ7G5KwUFyN9QYPfl1tLH/TQlvWJ2EeKiAyrc0IQFJHr9x\nFFUe\r\n=QW7b\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","husky":{"hooks":{"pre-commit":"lint-staged"}},"types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"2ff0c89a0ddb3b4058091a4f29dc71c7004110c8","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint --typescript lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"npm run doc && catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --typescript --fix lib test","postinstall":"if [ -z \"$CI\" ] && [ -d \".git\" ]; then husky install; fi"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --typescript --fix","npm run doc"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.4","skhema":"^5.3.3","json-schema":"^0.3.0","@balena/jellyfish-types":"0.1.0-add-contract-interface-2620429fc6f320f6085fb097d1e82bcf8ef77c30","@balena/jellyfish-logger":"^1.0.53"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^26.6.3","husky":"^5.1.3","sinon":"^9.2.4","deplint":"^1.1.3","ts-jest":"^26.5.4","typedoc":"^0.20.32","depcheck":"^1.4.0","typescript":"^4.2.3","@types/jest":"^26.0.21","lint-staged":"^10.5.4","@balena/lint":"^5.4.1","@types/sinon":"^9.0.11","@types/semver":"^7.3.4","catch-uncommitted":"^1.6.2","@balena/jellycheck":"^0.1.1"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.0.0-use-jellyfish-types-2ff0c89a0ddb3b4058091a4f29dc71c7004110c8_1616236560504_0.8995767556112804","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.0.0-use-jellyfish-types-5e2718aa5bc2c70840954cc3bb4ae6a8103ea2f0":{"name":"@balena/jellyfish-plugin-base","version":"2.0.0-use-jellyfish-types-5e2718aa5bc2c70840954cc3bb4ae6a8103ea2f0","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.0.0-use-jellyfish-types-5e2718aa5bc2c70840954cc3bb4ae6a8103ea2f0","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"748d1a95646969634bfd97efc4e0719d2c91fb67","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.0.0-use-jellyfish-types-5e2718aa5bc2c70840954cc3bb4ae6a8103ea2f0.tgz","fileCount":18,"integrity":"sha512-iVSKfntbI4LUmy5G18WQAmylOcytCMoK3PnXwIGODCS5NTLNfBjBnbigzYx8AybG7RMK2cN1Zjtuz1N2aezbJQ==","signatures":[{"sig":"MEQCIAu1E+u8VvRRM8euCG4BVuCJ82zQWwHN67bDoUXaxWdQAiAcwpPPthcBDav6OUciSVJgsZZxRWtahghBXMd1LIAYuA==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":30509,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgVd7QCRA9TVsSAnZWagAAv6MP/iPRjMbmQJadWT3Fw68M\nfeFHdcVSmiTKqEJGIH9bvdXkp3RNUxYnALdr665IEWHK8ViHANlpUgp9fLy3\n3mVM2G8ZT3S/WWNFM2hxrv6exGA+tt0PhcFBoSYOQ7jBtbb6cYsH47robZGY\nAm4OFn8Pdg7Si0jZqdxCZTQHgaStxeXHkIpmfRV25wULJke/S6NI0Zhkmtaz\nCjXrg5JWE3f4v5+iND5G+8I9hM7TxCq6lwYWyVhxfWP72ybIi1F7v42xdZw4\nTjOo/TpNh7pQ+a+ob2GLzhXmNZxR0pWfW4awSepvxrXNk2O19yY4WKCbQrpM\n35cVg4V4AnyFM8Ct3J7r7s1yns15w0sPCbdZ7JWOZuyUfEjpYFXTuWWjRKc5\nmjSM2eX7WSJW5Ud5MC5fR92YLFL9qqe43Vp2cznGb4U+v4VDMb0AsYAxQTzy\np2uZWXt/i6wLibI6t7TtEIWcicaGuKtcFVeRv2a9ENPaagaw4Bd4egZWCoeA\n9hNzyXe5FHKcWqB/TXHTNYE3Kz0vIdm7/95C/typKhz1bPFsG64PJ2ak5i9+\nY7nL7OSh3Qf7o+Mu7TLiNbtzigGpAQHSGTcBVcTwoxSj+5/4yZZ0RNcfWw8H\n4i0q9WXXjnC2XTuFf33YR1oCqmlr0r/8sIBKmueLUHTSsio8DuzsrajUs53j\no4JM\r\n=PYmV\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","husky":{"hooks":{"pre-commit":"lint-staged"}},"types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"5e2718aa5bc2c70840954cc3bb4ae6a8103ea2f0","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint --typescript lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"npm run doc && catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --typescript --fix lib test","postinstall":"if [ -z \"$CI\" ] && [ -d \".git\" ]; then husky install; fi"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --typescript --fix","npm run doc"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.4","skhema":"^5.3.3","json-schema":"^0.3.0","@balena/jellyfish-types":"0.1.0-add-contract-interface-2af653339d7d7b567a0aa425fb8f05b045ac7357","@balena/jellyfish-logger":"^1.0.53"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^26.6.3","husky":"^5.1.3","sinon":"^9.2.4","deplint":"^1.1.3","ts-jest":"^26.5.4","typedoc":"^0.20.32","depcheck":"^1.4.0","typescript":"^4.2.3","@types/jest":"^26.0.21","lint-staged":"^10.5.4","@balena/lint":"^5.4.1","@types/sinon":"^9.0.11","@types/semver":"^7.3.4","catch-uncommitted":"^1.6.2","@balena/jellycheck":"^0.1.1"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.0.0-use-jellyfish-types-5e2718aa5bc2c70840954cc3bb4ae6a8103ea2f0_1616240336097_0.37327313783962324","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"1.2.36-renovate-non-major-4d6429a1029b8f4397c153d88dc841b81c521b4c":{"name":"@balena/jellyfish-plugin-base","version":"1.2.36-renovate-non-major-4d6429a1029b8f4397c153d88dc841b81c521b4c","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@1.2.36-renovate-non-major-4d6429a1029b8f4397c153d88dc841b81c521b4c","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"7084c1c279c16c51f3534e6c9eb11b8d18d6315f","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-1.2.36-renovate-non-major-4d6429a1029b8f4397c153d88dc841b81c521b4c.tgz","fileCount":18,"integrity":"sha512-u4RNSrOZKS+eXFJcWryn/xORdAroDAKM7N482nFsH9VEpboo+nHTQA8WcVijArh4N2X9HXZ+4gu5Q61IQ7y+hA==","signatures":[{"sig":"MEQCIEogn3aKr+tJmJ3T8P9VqND/DEbfP4YFg1LhnGx7UeXKAiBtMozDp6vlv8zu5sWOuufbV2tojwmKpFPMw5yDtGEJSg==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":30479,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgV6QTCRA9TVsSAnZWagAA3P8P/iqxgcon2fmisXK0v1Wf\ngM9YwDKLl+gM8gS2WOe5lNSL3qL7MQ+7iLxjF2D1zhhPYewOo1jXPzs1uHgK\nYbtdU147CuSTOHn9SaslDJbccRGSB4SRbjBvO6BSByXdEx5hETsd1DnXtnnB\nfr2yGa8Np8mrjm6OMUP28cjnGvNnNGpA0BLQijQ4Ib5RfSDq93lt+HSnzldv\nyq4UngEn1TgsTittuw3LtIb0DX4Ol6tdeR7ZuWUfQYPNebJEPVIn5GXPMTwS\nDkW2rr03aUiTvVNPmAiD9Uu6yefFTe9CMkxjzJSvFZD5Rc03HJtNVyssMmGA\nLpJkrgjtuZ94pf6NJciAJJ1GmceFRwt2moPW3W5WA+44h0a+Fq80+gZV1uIc\nW7mRS/yLXW3m99MIIPRKc55UZ0O4hrjVBz+QiRNvjLd+OWyZo6agwbbVxiKM\niF3urWSBfvWwwPFE0R2GE1Uca2uvdY1PN3XjfRyDR7PeLaAti8QMloYLSeDT\nePiKYqNiiH81fmswAMOHxDLYNctlpM80XLbxjD7BC08+NL6DGOvztvDXADgQ\n+oQhOhcm0bkUhgT5v28XHNpqpQRvCMGv91r16jtq5/e+0YlZhlmGRzrcgAT2\npS8D/tErHASpMZCSOLnwGKhnh91BNf7IaBBcHC0HNyRRBjT2/RzjYr3c7MXp\n5m9q\r\n=LGCv\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","husky":{"hooks":{"pre-commit":"lint-staged"}},"types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"4d6429a1029b8f4397c153d88dc841b81c521b4c","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint --typescript lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=shellcheck,@types/jest","test":"npm run doc && catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --typescript --fix lib test","postinstall":"if [ -z \"$CI\" ] && [ -d \".git\" ]; then husky install; fi"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --typescript --fix","npm run doc"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.4","skhema":"^5.3.3","json-schema":"^0.3.0","@balena/jellyfish-logger":"^1.0.53"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^26.6.3","husky":"^5.2.0","sinon":"^9.2.4","deplint":"^1.1.3","ts-jest":"^26.5.4","typedoc":"^0.20.32","depcheck":"^1.4.0","shellcheck":"^1.0.0","typescript":"^4.2.3","@types/jest":"^26.0.21","lint-staged":"^10.5.4","@balena/lint":"^5.4.1","@types/sinon":"^9.0.11","@types/semver":"^7.3.4","catch-uncommitted":"^1.6.2","@balena/jellycheck":"^0.1.1"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_1.2.36-renovate-non-major-4d6429a1029b8f4397c153d88dc841b81c521b4c_1616356370575_0.32476099795357505","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"1.2.36":{"name":"@balena/jellyfish-plugin-base","version":"1.2.36","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@1.2.36","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"059d6cac5658b526c3acf8d3b852097533b439bd","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-1.2.36.tgz","fileCount":18,"integrity":"sha512-29NhO+WSNkrYpKe1DWPYbPPN4AxUFpeV6oXVqEsC8vqTjBsFaxQFqrc36uLC4VXl3lEBAI0SJBrhEEXrdgiv3g==","signatures":[{"sig":"MEQCIFRCCqou+BMQKLaPKzPZQA8C97CQ6qSvu2LOpHbt4HuCAiAxPe17lAy7WNMzrTMCv0wWk58AGrTbm2rE2KjDvPV7ag==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":30419,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgV6TWCRA9TVsSAnZWagAA7tUP/3W9tYTkxrmY6q7Lc4od\nskVq5ba/UDOrJzZGPqGxmXh3KMPIWilF7hFiqDBeDcd2rzEwYcFNJNlz/y02\nHRpMZ+Wyh2NI0G8D7F4lHou4sL1TtrGjEfiZprVVTywvdzD9CaZIWWAkqCMm\nmqdNasKEJEQc2TIs4+3CpQ1S/k9o4NyUpnisAP4RqO4hF6tdjxZeGSivysN0\nQ2HvHq+AhE07L9obKgB8MneBVHVFZ9170Tyn7b/wfeTGU4rU+Cl4Pval8Gxk\nsczoD3kUahosflpXxJAsmYjjwJhpQ5ydRy/auFK/ma/qlLfdcdF9tQEzYyms\nSmw/bUi+JeXKjxWb8XO0J2ypPwd8tjAxDYF+Evk0X0eMcgjE5uizBJEWni4T\ngJrXJ5cJdhP+H3FDteZBNiqJ1M9mL7JaY8S62VG0qJMxTh9+kyF1t7SECbxc\nzfT3hbbHWC3am3k8CKFNIdxy7rRW1yorQKCBE0L11u9SKJ7PyNQkfFyHgxM5\n6nFNslnFDbZK8YkKc5fEJj25y/1SI5KDIsPVPegBMl6AwBLtvri7/FJDNhSF\nmvLAnRxDYvZTpThImIhDlcsnhFsnat21CWsyIu51SroCqKBUURzLFBN/RGH7\nIb5wRxCjJyYBEI8u+5zpoXXUQ278gPmRPJu10zDRxmSKEVLWqKrTyFhmK4QT\n9xMs\r\n=9cN5\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","husky":{"hooks":{"pre-commit":"lint-staged"}},"types":"build/index.d.ts","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"b8699fbf8af371fbfd675f408c02d5de0d40d049","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint --typescript lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=shellcheck,@types/jest","test":"npm run doc && catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --typescript --fix lib test","postinstall":"if [ -z \"$CI\" ] && [ -d \".git\" ]; then husky install; fi"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --typescript --fix","npm run doc"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.4","skhema":"^5.3.3","json-schema":"^0.3.0","@balena/jellyfish-logger":"^1.0.53"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^26.6.3","husky":"^5.2.0","sinon":"^9.2.4","deplint":"^1.1.3","ts-jest":"^26.5.4","typedoc":"^0.20.32","depcheck":"^1.4.0","shellcheck":"^1.0.0","typescript":"^4.2.3","@types/jest":"^26.0.21","lint-staged":"^10.5.4","@balena/lint":"^5.4.1","@types/sinon":"^9.0.11","@types/semver":"^7.3.4","catch-uncommitted":"^1.6.2","@balena/jellycheck":"^0.1.1"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_1.2.36_1616356565724_0.2898722947795991","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"1.2.37-renovate-non-major-80d55966c4207a7a56a02cddc84886eaf021508a":{"name":"@balena/jellyfish-plugin-base","version":"1.2.37-renovate-non-major-80d55966c4207a7a56a02cddc84886eaf021508a","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@1.2.37-renovate-non-major-80d55966c4207a7a56a02cddc84886eaf021508a","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"f67160cce2a44778538bab1007aaf42d3c05f986","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-1.2.37-renovate-non-major-80d55966c4207a7a56a02cddc84886eaf021508a.tgz","fileCount":18,"integrity":"sha512-4+8/pIZoT2ZEtOgdIVaYEDAaIFQ/+UpR23mwBA9Iasxv/tmmXIjyjoQ9OLf/9ckUPbWZlFJsSrVwGE0LejMI1A==","signatures":[{"sig":"MEUCIQCZgWJ0jDchDrXtQx9k20kiHTkQIA+hFdDq3GH+IW+G3QIgYGUjP8sL05PKvfUhYcr7bPIw7+tLGHiV4CuYSV3zWRE=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":30582,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgV8VvCRA9TVsSAnZWagAA8wwP/RuswqRKPrFDAdU2bX2r\nCYHlgcxOIWXdae4n8H/zQ188mfX4Mv+6LcVIfqXs0ZccRmvE96uJQQfxtTHc\nIm9MmF9KBv6QE8EhH9xsA8m3GGDuZlIGABSatwsGerrGcAkwl0jTvyaLf90k\nwapCpaXt9z5jc3hLeF0Kngd1ECrLA4rr207VUzEMOayru4FFoKOhFrDgFr8Y\nEZtWifRrnc9tQ8h8Kd6NerIdfthgS1KYcV0m4jk8UD2XNNA51cqwMsMuaq5V\nr+apcz93RCiQUa0WFYcyMQboS0+TGIO02DttRpx3lTweKh4zwUel7SOHSH2n\nCFGVEeKyaXBHgC5Qq/h5DE/TpScdVbhJhCbFke4kYWaf1hw7VvhR8Uzb6+/D\n6lJy0ro6MEhvoL6MpUwFKTzHXqQIS0aX0V83mD7VacTYPEQc9BIMKC9qP8pN\np/sZSKbej4dkkQpZbWgDq2461jRs4IEsGl7sBPkghd0fqXSBx2RopeNiWKDS\np0qDNXJAWhykJ0iBpdd/sJjc3gXRw0DZzbftPkFDvUojf14Lx4cz66XJS/UH\noG2M8JYbNoPbf1afspTslry1la+rfHTinbgtvf6juqTW5IKBF0e56J2WFYWd\n5mE/gNvLon4UCVxAFfvcEc+xfWB3LoIWgcvbJeghzpwj0V+En5kZ04tICSB+\nVA9g\r\n=VqJY\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","husky":{"hooks":{"pre-commit":"lint-staged"}},"types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"80d55966c4207a7a56a02cddc84886eaf021508a","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint --typescript lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=shellcheck,@types/jest","test":"npm run doc && catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --typescript --fix lib test","postinstall":"if [ -z \"$CI\" ] && [ -d \".git\" ]; then husky install; fi"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --typescript --fix","npm run doc"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.4","skhema":"^5.3.3","json-schema":"^0.3.0","@balena/jellyfish-logger":"^1.0.54"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^26.6.3","husky":"^5.2.0","sinon":"^9.2.4","deplint":"^1.1.3","ts-jest":"^26.5.4","typedoc":"^0.20.32","depcheck":"^1.4.0","shellcheck":"^1.0.0","typescript":"^4.2.3","@types/jest":"^26.0.21","lint-staged":"^10.5.4","@balena/lint":"^5.4.1","@types/sinon":"^9.0.11","@types/semver":"^7.3.4","catch-uncommitted":"^1.6.2","@balena/jellycheck":"^0.1.1"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_1.2.37-renovate-non-major-80d55966c4207a7a56a02cddc84886eaf021508a_1616364911208_0.7217772614492526","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"1.2.37":{"name":"@balena/jellyfish-plugin-base","version":"1.2.37","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@1.2.37","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"ceabfe6ae777f7c78548d7edec5ca7e253a48251","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-1.2.37.tgz","fileCount":18,"integrity":"sha512-98yRHEEegnppMPw6UbiiPIQXUrwnXE5q4yOZP20/1NBB+uytb7K0O4PKxRtXJ2R6lWA0yvCWePGjDSLKPNOJVA==","signatures":[{"sig":"MEYCIQCuMWY/tgvNLFxNgJzYDvhLtuopCt7efopgkvxxPHER1wIhAJxQen1Ldhcg7UnCysk7U1TOSme1rp+j2nYXFIUVF+P6","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":30522,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgV8ZHCRA9TVsSAnZWagAAeXAP/if0vDKnAgYY3Lu2Rpsk\nozt4swUQfK6HILEBHL55qpj/F4FzWxXl16W4DoMc+ZNDT58HxNEVtkiGpWq0\nM4qrYg1sW3nONVauBI1PkbtM9BIN9adRgTzBn1oe52ffx7e6DO+owTvbSrek\nKiBLN1TBTBbcGFI7U6bdGjynS3+78ABpfdb2/UgtC0OuEqnXyruZD5QybW/x\n0z5lwLxoqLLr1dV2tBoVkFG9svYjRq49doVZT4ITQg4DlTrCBrG29zkp9EMw\nNOCzfeFOsq2rJXiVf1Ne+ZSUoiwHWWPpyOturUldGhWB9yoZk2oFfdbuar6/\nIuN7jwc2lCMPp+2UJUyRiTAIOds2iCsxiiENs28/Wz4nAYgeu5ZmIwlOUqX6\nwxFIBgcYqY40VoCsbM6/f07EWZAowPqMypKGs0cYFHQQGIyvyrvdsMCywtld\nJC4UqdVgMeGxLkK1nRsSsBZz4ixvDvH0/eWIS6GXcrG1OoC+PPfCnnldLS4x\nXnRPgw8c8Lcn1YnRHa+iHm01ZWdA2tHcgcsiO9ZW2R/ciT0IZJuZpnzToVsz\nfrZ3ZrXyifcLd4KP1QRd6xMv9rp71SU3RB/i3HB64LayA31roaFOv513pGpa\nQ0gvCXZr2VXBNLdSpGwAX6LHvBmGk/TPmwoKj07CYwYhRAncaI57aiaaY6aI\nW7Jn\r\n=mUdc\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","husky":{"hooks":{"pre-commit":"lint-staged"}},"types":"build/index.d.ts","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"728614a08bd5d634bea7861accb864e0465326b2","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint --typescript lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=shellcheck,@types/jest","test":"npm run doc && catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --typescript --fix lib test","postinstall":"if [ -z \"$CI\" ] && [ -d \".git\" ]; then husky install; fi"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --typescript --fix","npm run doc"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.4","skhema":"^5.3.3","json-schema":"^0.3.0","@balena/jellyfish-logger":"^1.0.54"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^26.6.3","husky":"^5.2.0","sinon":"^9.2.4","deplint":"^1.1.3","ts-jest":"^26.5.4","typedoc":"^0.20.32","depcheck":"^1.4.0","shellcheck":"^1.0.0","typescript":"^4.2.3","@types/jest":"^26.0.21","lint-staged":"^10.5.4","@balena/lint":"^5.4.1","@types/sinon":"^9.0.11","@types/semver":"^7.3.4","catch-uncommitted":"^1.6.2","@balena/jellycheck":"^0.1.1"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_1.2.37_1616365126569_0.9903342330502356","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"1.2.38-renovate-non-major-1c83d5d636cdd34f6d19d0f76c0aa523b3c5f6f2":{"name":"@balena/jellyfish-plugin-base","version":"1.2.38-renovate-non-major-1c83d5d636cdd34f6d19d0f76c0aa523b3c5f6f2","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@1.2.38-renovate-non-major-1c83d5d636cdd34f6d19d0f76c0aa523b3c5f6f2","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"5d15d3d5bee5eb2f6cadba4c43efe632f0426b3b","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-1.2.38-renovate-non-major-1c83d5d636cdd34f6d19d0f76c0aa523b3c5f6f2.tgz","fileCount":18,"integrity":"sha512-KPG7LDr9DJBmMlhkqtv4htFBSYZT0WxxkM7viw0+NX6eMxsqrD5z9BS6/5QkfOUtO72UKpGNga26Zzodb18Xig==","signatures":[{"sig":"MEYCIQDFP61VK+k7ZpvxdsjSuv+FWe9P5KJMi9vWAn1Xy/RGtQIhAKhSPZVqpNphdjsDQ6JfrUo3XqJu/2wddGhU6PxUfa3j","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":30685,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgV+3CCRA9TVsSAnZWagAA3zIP/i1cAUs3rRfp4ucjl6nQ\nZ1KnfuH4Ge4tQPSbnN3NiIriwS/9ocxqx2OoWHf+DueJq3uhN78hb3BrbT2g\nHO6mNPsR1DYi4XyDIsAtkmuRjdKo4DkyA3Y7wX23vnVnNo0VBACCkRc1tSrF\nPaKwsKWlfecysDMv+Rk9dCGCgiZqDf7B/qyaOSbBR6+Xbh/gaZc6x0Zrnn2a\nykM4QUKNcpym6ijnNCZf6jycv5LOfc1Efm9RYTSFJISaOP+ZvWNMAK8l5ypf\nrybcjIxPVbsTQwGD+oMPPYkTmd9klBWIBo4YM/tNfsV0YOPzbA5c5xSg1JQm\nH3l3qDTcUN32nPdHol/Yr/oGFvDGEjZePqUatBj4QMw7kYiS4i3UNw9MQBTN\nGek1CTDMJWQkviXJw+vtQF0ec9nE8iUumbXU15mZYZ1BXIS3tMfKScb6D1nR\nvrkkCyrHWFkKRQID/HT9sFhGcCzLupZpNOWR0Pi/H1KO/d1co5g2rrqGCLIM\nCtgICSbE6SdRuorFgSOxPGQvTVD5R2cIEHyu+pY529BFh1lW0hn+FfwVJYAw\nmXgAZm6zawD6YYAwJhFQAoVwQ/vTdmIwIYu7Iz+UuQA9lx6dG2rE9jJUfE3J\n9OKI1ZtNshidv0uBgUdlsxa5XQQkKnOUXMCqY+V2dae85Y6L2uyLGO2lo8Ka\n6g1x\r\n=jx6n\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","husky":{"hooks":{"pre-commit":"lint-staged"}},"types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"1c83d5d636cdd34f6d19d0f76c0aa523b3c5f6f2","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint --typescript lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=shellcheck,@types/jest","test":"npm run doc && catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --typescript --fix lib test","postinstall":"if [ -z \"$CI\" ] && [ -d \".git\" ]; then husky install; fi"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --typescript --fix","npm run doc"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.4","skhema":"^5.3.3","json-schema":"^0.3.0","@balena/jellyfish-logger":"^1.0.55"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^26.6.3","husky":"^5.2.0","sinon":"^9.2.4","deplint":"^1.1.3","ts-jest":"^26.5.4","typedoc":"^0.20.32","depcheck":"^1.4.0","shellcheck":"^1.0.0","typescript":"^4.2.3","@types/jest":"^26.0.21","lint-staged":"^10.5.4","@balena/lint":"^5.4.1","@types/sinon":"^9.0.11","@types/semver":"^7.3.4","catch-uncommitted":"^1.6.2","@balena/jellycheck":"^0.1.1"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_1.2.38-renovate-non-major-1c83d5d636cdd34f6d19d0f76c0aa523b3c5f6f2_1616375233624_0.8903510384833786","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"1.2.38-renovate-non-major-f69ed8fbf6c602aa62ce4c7a4588fa437f0f8f6b":{"name":"@balena/jellyfish-plugin-base","version":"1.2.38-renovate-non-major-f69ed8fbf6c602aa62ce4c7a4588fa437f0f8f6b","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@1.2.38-renovate-non-major-f69ed8fbf6c602aa62ce4c7a4588fa437f0f8f6b","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"a014fcc890541f00d28efe84a11760e3460fe35f","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-1.2.38-renovate-non-major-f69ed8fbf6c602aa62ce4c7a4588fa437f0f8f6b.tgz","fileCount":18,"integrity":"sha512-w5I5iGH7ye9TStQbMEPeWHQhahesnWUtnIxl/B0aEOHBKq7s8EV/PnkV7ujz8TQbCqVx/M+bbte9cXKgtJRj4g==","signatures":[{"sig":"MEYCIQDzIGraUjh7xy2lqwK7DjcKTnJILPgG6izd/du4yul8UwIhAOM687CsnvmMpk/t5g+DMNwhk2pJnTylEbKk0kFedySg","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":30747,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgWAwcCRA9TVsSAnZWagAANVgP/im0pBpuHj2vYqqFOLXm\n22qXepn0v6xGUUKv2oP2uN4IUSg+QZzXhNhwj8LNNJwBrqucVP6q1W1AfPbZ\njVVMlpmCajoag1TILKudFVCdNzxFzj+Z7WmhQLBf3rG1/dzJ6AjISA6kqOh4\n0Sb6xOyLV0AC/U+SjWcBzaIVl4kEoNO39ZJKBNdkCntLtPLke+ncsxpGYNWX\nAAWm3/yF7zpJjetXEDSxMuLN4NX++5FKl1YqqSLCJLjS0pCFbgRlJsh4CCPY\nw9ZxUU5ULYuUWS2jnkvm0OCm7af1p8d/k445IUugYl4itIsCQ6tVJwYmtVxb\nXrk/IUmNbw4Ajjcxgig1Z3KztKMvqdNmfdbFSfPUwc/AUE3dwCV0iZiCbtMR\n93ypjxNn/91ITiBL8MM9eJesYjUaU9Y32rxglKMMb8iD3XLCZBYtpY0ppNZK\n2MphVe/axqB9XPI4SRBdMXLRIqH9bIWWKGT186B3DKkvhIAdjBivMzh9smtc\n4GRcngndieMgxySz6WMZCr9FVPPxQPx5wHRLoKBFbSOIZmmRU1aq6s3RfBIY\nTDNTAg4PAqk3j0fVkK69/0aDmGYLH7BJe65VC2GZ404Es83PtBhSTKSCU/3Z\na3E+SHX1/MZq8KAUI2sNgjm97b54twGZRVd3XOOu5+GRucvBXn9mVsowFjz5\nB2uj\r\n=g5F9\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","husky":{"hooks":{"pre-commit":"lint-staged"}},"types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"f69ed8fbf6c602aa62ce4c7a4588fa437f0f8f6b","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint --typescript lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=shellcheck,@types/jest","test":"npm run doc && catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --typescript --fix lib test","postinstall":"if [ -z \"$CI\" ] && [ -d \".git\" ]; then husky install; fi"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --typescript --fix","npm run doc"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.4","skhema":"^5.3.3","json-schema":"^0.3.0","@balena/jellyfish-logger":"^1.0.55"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^26.6.3","husky":"^5.2.0","sinon":"^9.2.4","deplint":"^1.1.3","ts-jest":"^26.5.4","typedoc":"^0.20.33","depcheck":"^1.4.0","shellcheck":"^1.0.0","typescript":"^4.2.3","@types/jest":"^26.0.21","lint-staged":"^10.5.4","@balena/lint":"^5.4.1","@types/sinon":"^9.0.11","@types/semver":"^7.3.4","catch-uncommitted":"^1.6.2","@balena/jellycheck":"^0.1.1"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_1.2.38-renovate-non-major-f69ed8fbf6c602aa62ce4c7a4588fa437f0f8f6b_1616383004261_0.6814822935514939","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"1.2.38":{"name":"@balena/jellyfish-plugin-base","version":"1.2.38","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@1.2.38","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"faedb10591b0b04453f1e9c965780855d638b2a5","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-1.2.38.tgz","fileCount":18,"integrity":"sha512-o2nCUUoJaKUDDXmOAGUq5hFChzYNqFoyMRkAJtbjYVpgqSzT8Y7aZoBbO1yisodMC2NB1mFAThF/ZEBLZE56eQ==","signatures":[{"sig":"MEYCIQCWjO/R/BP0uCIhQiov46J14g4fEUoGqtKQtiQmiNGPYwIhAIFoe9vkwU91RhplkeroNh5W0oTa38rPTo7TPlTtz0Lu","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":30687,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgWAzFCRA9TVsSAnZWagAAHQcQAJfHSp9KR1SyQMjcAkzV\nTjU+zw5HXi7lxq+T5GjxX8ugJ4pzHXHISX1VenzZo1mhHO2W1DugmtPD9oFr\nOr0Ez6zu95pJffWWpQGWR8ukwzJCW8jfCVa/7y9Q1bhj9Ub6zdkxSE1LHnUH\nBoYZVwXEsH64dgonQUgjsYU9hdtG2RTPJ5mOjCnT0yxUCbWhMY9Ufu+JmATq\nDbpUfsTmAVJ14b6o/V1/lWaLr1q2+EfCz9oRdtj4921YjrAB161/5dgBsQJ2\np2z5v9RENZ6UWSoeH6MRRJYT+blX8fljP25ZBCjq1lIGWOT6iNDT38eNGiHb\nGS55k/hobba9xIgyNEiJvRbpmGdauxs0iWeBbXRpIO+sXxSv+b/whPPoU5JM\ncTDMc5xd5IHfibwh7OR1LSQj37m4JZFzYNgNm7q2i71xWiec36zjBfGUeAh8\nzyJ157qK6mI/PvorFz/r8iq73bY4kfd4NOoa1jI4TWAn8LaOrdwHhhEceKim\n9DoIoEq0+loFtiMCy9240O9iDgkIfufmEvqimn8hjCUcvK9ZPauxwSO1s4Y9\nJwyntyragqwJHlz0g/3EeXjo5f/xlb4Zgr5fgZTPzXi0iXgNn4lmPdwSLT1g\nzjcnByJL9BEl/YYh1JRm4gPOl6HbngXm/NkqlukVOXxQ7nHUOo32On+c5j+z\nVzmV\r\n=/iNe\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","husky":{"hooks":{"pre-commit":"lint-staged"}},"types":"build/index.d.ts","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"167c7f7c2e2e6fb2a16981ed4254fed70597cfe7","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint --typescript lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=shellcheck,@types/jest","test":"npm run doc && catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --typescript --fix lib test","postinstall":"if [ -z \"$CI\" ] && [ -d \".git\" ]; then husky install; fi"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --typescript --fix","npm run doc"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.4","skhema":"^5.3.3","json-schema":"^0.3.0","@balena/jellyfish-logger":"^1.0.55"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^26.6.3","husky":"^5.2.0","sinon":"^9.2.4","deplint":"^1.1.3","ts-jest":"^26.5.4","typedoc":"^0.20.33","depcheck":"^1.4.0","shellcheck":"^1.0.0","typescript":"^4.2.3","@types/jest":"^26.0.21","lint-staged":"^10.5.4","@balena/lint":"^5.4.1","@types/sinon":"^9.0.11","@types/semver":"^7.3.4","catch-uncommitted":"^1.6.2","@balena/jellycheck":"^0.1.1"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_1.2.38_1616383173240_0.3559016102702135","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.0.0-use-jellyfish-types-480eb222dd18b15fc78c4eab0713c9e1be60cbb8":{"name":"@balena/jellyfish-plugin-base","version":"2.0.0-use-jellyfish-types-480eb222dd18b15fc78c4eab0713c9e1be60cbb8","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.0.0-use-jellyfish-types-480eb222dd18b15fc78c4eab0713c9e1be60cbb8","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"03aaf68e7056a0707b4104d7c6068f51952f03bb","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.0.0-use-jellyfish-types-480eb222dd18b15fc78c4eab0713c9e1be60cbb8.tgz","fileCount":18,"integrity":"sha512-QGDXptItj8vUTCRbixamOTLKMxOwhqN+JDqc3Ga2rrYVpQ3hUKPBQN4WJb8jNwJMRodIr5njjzcs0MeC6CuiUg==","signatures":[{"sig":"MEYCIQCfU3rxIgJqnqkDIJjhy+5vuNvAuhAIl7/OJ8wtrBaGhgIhANHpqbksmI0k3l6Rrwyxmzhf6QLLMrP+4umcTaQET5VU","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":30797,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgWBjyCRA9TVsSAnZWagAAxzAP/1wC9HoDVoVk+sSM/+eF\nedS1PZDck1wYg+7GhnsmAVGG/0vOSAqp+DV84RBJPhl0D/Tf21XsjyVZrukM\nhzHtmxhxtihWMkzVyzZfQH9U7E3rLGhdY44VFC8aOZrrM2tXhR/gkknXVyOL\nJKoc2qO7KO8C5eokvkoNPHZ7MWByIVR+b5D4nOuO7Hc3z6GoGQRzxty1f22U\nD4UETJJCNasEfUB6M3yRk9r+uwc3acDD0k1r0GoZz3nDkEbj+oMAp7dFpHHn\nRnRnyxcY+DHZFfGH63TG3tC9CX1TwbRY67EmoCWLJP4fVk8Mg7omJhjy+tp0\ntodPvGiBRD7x+BWHoJhP72mrGeIuwy7+ZkPEqbhoARhegQdA0pZRFwnwS1u2\nfs0RJAIBt2SEum5FL4srRo2W865DBa1fO9YXmsgcpffBGjHYrker9gZskwdp\nUcgp1B75xiUOsaaNXoi7hVII2vjCL/1ch7VyMyBkHOsrkoy3MZ93n9uONXg4\nY6KYuC6bPzZZoU8SORM0MrdnfOxEjY2BuNFLeOBPokBw5+5EnKIXZ9OfkHX2\nQ4At7kFG+n1MvqqFtP93zmF09b2e81dS1GxOu+RcQTaViSTFp2+kqvrYH8Mf\nFcVHqL7/0cYn+jDRc9CZr37UQ2JqTIKw6imxXRbMetZYzejRMWPBV+5qy4/u\nCMbb\r\n=doZO\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","husky":{"hooks":{"pre-commit":"lint-staged"}},"types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"480eb222dd18b15fc78c4eab0713c9e1be60cbb8","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint --typescript lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"npm run doc && catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --typescript --fix lib test","postinstall":"if [ -z \"$CI\" ] && [ -d \".git\" ]; then husky install; fi"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --typescript --fix","npm run doc"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.4","skhema":"^5.3.3","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.1.0","@balena/jellyfish-logger":"^1.0.55"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^26.6.3","husky":"^5.2.0","sinon":"^9.2.4","deplint":"^1.1.3","ts-jest":"^26.5.4","typedoc":"^0.20.33","depcheck":"^1.4.0","typescript":"^4.2.3","@types/jest":"^26.0.21","lint-staged":"^10.5.4","@balena/lint":"^5.4.1","@types/sinon":"^9.0.11","@types/semver":"^7.3.4","catch-uncommitted":"^1.6.2","@balena/jellycheck":"^0.1.1"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.0.0-use-jellyfish-types-480eb222dd18b15fc78c4eab0713c9e1be60cbb8_1616386289633_0.25916158140026946","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"1.2.39-renovate-non-major-d1d25372f7e483ac38ebd0b63f18b32fcf7ee7de":{"name":"@balena/jellyfish-plugin-base","version":"1.2.39-renovate-non-major-d1d25372f7e483ac38ebd0b63f18b32fcf7ee7de","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@1.2.39-renovate-non-major-d1d25372f7e483ac38ebd0b63f18b32fcf7ee7de","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"981c2c1610a85f6f62471f64f7447fa220221375","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-1.2.39-renovate-non-major-d1d25372f7e483ac38ebd0b63f18b32fcf7ee7de.tgz","fileCount":18,"integrity":"sha512-kNIpeYpqk/mVqa7nxGv9AW+kSbm8kTZCUxACJ2ka80sJlpa/5tmuTkNFSsAZ+Ad1kysaZsfj1KQY6v5Zw96ymw==","signatures":[{"sig":"MEQCIAYHKQJ/USbRcV/7xmzfQ2Wcmcegl/rl4GZyK8JX6El1AiB0wxJgarrbRt1jgU71rZY97hfvkN7Ug4N8UaNv4SXaeA==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":30850,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgWDWjCRA9TVsSAnZWagAAVe8P/0UU/vMvv9cVnFn1i1Ko\nJn5OeitL79gaTZPJk64mEAUzAN8Qpo2fxBXFqjJMVlT9IdFxxYfNYdEL+GOm\nMffvzrSoinxPpTDJC1IcUZk54y/ISmCTL8iXoqDBz/GbC3N3udBu3VMrMRgS\nrRDX9uui/KjCeMefEmiu86yfdeFGSMA+QO5j6PK0EYdqY53TYNgkRw5DWUsG\n+NpR+s0iCm37vsBQ/0fIrmVaOAWoQpA62ZajtOgWk38BdBPBPyJjZtyytNRT\nxz+JnjzqESDNjLCjRpipK6nDBxqU8sC7nCRR/d1wfxcqfGjoSsL1R7PSXJqa\n2uW0p/hS2reSxkZeuuggffTEIhnA3r1xNHgv6ZBNWA3KEIjJt2lN7GthqU6+\n9OKiu92NUTdZNagPDoCp4W1nlYw2bCnYzFlIRW0c/+Joa6CTKDr40IXhjUAJ\n4ZTJAJRJiJj1jQbr+J69lLW4738G04nexxOb9F6+ZwRfLT5YgUf5cBrSpYgj\ne771uzU2+mJzSxjeyAy0duxN5fhf+invDGF03xL0JHOTaXG73hHcu3LKPdoW\nd48T8D90FzW7MOw15b7cuclHrTJk3mxWESWfu5ZYjZ3/n4zG9ExF347T0Y4/\ng3wgaHTv5VKdIjQD80lOdrPyPARhfZ/Bk6GxIfjbcqE/0RE7PDZM3YAPv6PK\nHJt1\r\n=pja3\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","husky":{"hooks":{"pre-commit":"lint-staged"}},"types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"d1d25372f7e483ac38ebd0b63f18b32fcf7ee7de","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint --typescript lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=shellcheck,@types/jest","test":"npm run doc && catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --typescript --fix lib test","postinstall":"if [ -z \"$CI\" ] && [ -d \".git\" ]; then husky install; fi"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --typescript --fix","npm run doc"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.4","skhema":"^5.3.3","json-schema":"^0.3.0","@balena/jellyfish-logger":"^1.0.56"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^26.6.3","husky":"^5.2.0","sinon":"^9.2.4","deplint":"^1.1.3","ts-jest":"^26.5.4","typedoc":"^0.20.33","depcheck":"^1.4.0","shellcheck":"^1.0.0","typescript":"^4.2.3","@types/jest":"^26.0.21","lint-staged":"^10.5.4","@balena/lint":"^5.4.1","@types/sinon":"^9.0.11","@types/semver":"^7.3.4","catch-uncommitted":"^1.6.2","@balena/jellycheck":"^0.1.1"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_1.2.39-renovate-non-major-d1d25372f7e483ac38ebd0b63f18b32fcf7ee7de_1616393634711_0.014892165722019346","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"1.2.39":{"name":"@balena/jellyfish-plugin-base","version":"1.2.39","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@1.2.39","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"39230d0d04ad5ac9b67cb419e59eebf1f1780369","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-1.2.39.tgz","fileCount":18,"integrity":"sha512-U9sqtT5/K80QAOYKyTGLnOufIuysBpiiiLBSR7KmscH54w3AJrnNEXuNqd/qgXD1WYzN5xHL3OTEQDMgOsbOIg==","signatures":[{"sig":"MEUCIDIHxBZK1qFuS7taGFJEu21cRM2jIm9GVv5PxEKkJv5nAiEAjNB9YtTLwFBQpP70l8OIw5QPCmCrQRMNE3gy95KXX1Y=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":30790,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgWDZyCRA9TVsSAnZWagAAjzIP/2mUE7p4kXxMzWtBowoW\nYF8GPz1HPvPxz5fb1L/jx9bhUy5i9qD4Z2g549dBT8FLSORSsfF/+nA2/uiV\nbkR57Dg+lnkW/sWAU0tmvO1ubo49Ra9pMpGEhqQSOr5Bqde147atlmvw//kh\ntmDzXkJyEtQQKXP8UgiXR8oKo+BxCK95h5B9+rgJ5vdcI9LqAMLANnd+Ckpi\nlCK/ee+lDyzYFZkRtCrF0kIIaGh2vKgKVGlaNbNvln3TLeNUFsn9zSwXBgGY\ne0eAR7nZoHS4hsjNxxJYQBq6O/JCfnBcTVvj/kDpG77yeEssFPdBOWBmx6i1\nl/REjYDhd/t/SqjzMALG7XyAv7B/VGLP8e3aTelvqalRC7hyhlM//6tKFedz\nnP+wPRuRIhQOKYiu/sw1MFiug3EO29BOtdC3fq22Kazh0LB8MlWlvWt1PMWe\nyhLFi9CoqiQ7X9PEWkEi9nn+ktlGW6QBeoJEqHY36h5Gx02G+LM2wpwwWDSH\nlzVU/NC274WMgNHGVcykAW1y5rSn5tVe32yQ4M4RbR7fAZTlMKmFS0iafSJx\nbj7Uo4fFswiJP7WnColOPURaCfK/ZIZBMtw7ABPywyYAStHRoNzPGinqyvHO\ncnwKk+/EqDOaPJuAz8WOkGyd1OKqOv/GlwFFv/Ct7bga6uzyMMmS9LxJefH0\nw7At\r\n=eOy0\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","husky":{"hooks":{"pre-commit":"lint-staged"}},"types":"build/index.d.ts","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"0695d7a4b24229725d68650be6d1ff151acbd7f2","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint --typescript lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=shellcheck,@types/jest","test":"npm run doc && catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --typescript --fix lib test","postinstall":"if [ -z \"$CI\" ] && [ -d \".git\" ]; then husky install; fi"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --typescript --fix","npm run doc"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.4","skhema":"^5.3.3","json-schema":"^0.3.0","@balena/jellyfish-logger":"^1.0.56"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^26.6.3","husky":"^5.2.0","sinon":"^9.2.4","deplint":"^1.1.3","ts-jest":"^26.5.4","typedoc":"^0.20.33","depcheck":"^1.4.0","shellcheck":"^1.0.0","typescript":"^4.2.3","@types/jest":"^26.0.21","lint-staged":"^10.5.4","@balena/lint":"^5.4.1","@types/sinon":"^9.0.11","@types/semver":"^7.3.4","catch-uncommitted":"^1.6.2","@balena/jellycheck":"^0.1.1"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_1.2.39_1616393841859_0.893060660522182","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"1.2.40-renovate-non-major-0a7b4d759e2e618d839648fafc8e78492b133e54":{"name":"@balena/jellyfish-plugin-base","version":"1.2.40-renovate-non-major-0a7b4d759e2e618d839648fafc8e78492b133e54","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@1.2.40-renovate-non-major-0a7b4d759e2e618d839648fafc8e78492b133e54","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"ebde52e304ea3d666a981f1b66b96b92fc24f497","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-1.2.40-renovate-non-major-0a7b4d759e2e618d839648fafc8e78492b133e54.tgz","fileCount":18,"integrity":"sha512-PhfFTRE1864Zi576igl55dDOHPcTfii8DdZAlTbksxvRtUU9CFpntjut9sDW/utO7pBdkGC1SNxx3D+yHxR4qQ==","signatures":[{"sig":"MEQCID6Loo1m5lulhnh+5mhCn9q0WO3/Z1hR3oLOIV3IaBMLAiAFpRANQRDTyU2nGyWy8cYnhdItV8Vu2Djq/aWtGcCKeA==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":30953,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgWIyBCRA9TVsSAnZWagAAmywP/1koYNxhBa/U0J9AoeFs\nVCiXxWW/Gklha8zMfK9EUD9vxo6dDBoypHEhnAj/LiE0w2uAOh7XmJyV+2/P\ndErDm6/RyRRDW+S4iKgH+TQL6AMGWR1y3nBRQtnag+gqHIj6xx47FcSCtbKE\nRQxTzWoYiR9aOCK6yXGVaY6niQ4m1vUSjYK7Tmr1i1ylgn0vMdRvkiIOvwOb\nEGxLksOuU1MdLTxw31lIKEGBOSo6VU/kP+JQbbdy868D26F0eAPbqVyTiwoy\nSsuUTSClJyfq+IpbW45XM5QTF7/kImh4pWgADqA7SpL1KFZETMA8ZNFH9cjD\n70/DgC0fKCm+mSZ42qQN3NAU02Dx42A1qnH6zfCr8yjmzuxkyiDDURSKUipo\nCPa0CYzeHQbi7RMG0hl4S5peWsB0+JV8PKhRZlQl9VWNy749fxel49RGvY4u\nV6QJP3GAAuI5AMCqTZa1X2kEi6shFnBlUXVkduXqJzprsdVOsJX1DfI6EszJ\nkQCMbf6oImYWi3Qcrg1rScXQ+l25hKCQ/0nb1pvUmYWFH4gnBFikH4wXEHbx\nkcHeOpO9XysO1R6Y+UuDx3PoHj8C3Qz8f22F9fNbi65imgbwBMrmxFkjxGml\nAgxf5L5K9calyDp3fkBkV6kfSEHj5/10puEKmShKWUeqUS1BHcrXKNNLanam\niuIE\r\n=izIB\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","husky":{"hooks":{"pre-commit":"lint-staged"}},"types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"0a7b4d759e2e618d839648fafc8e78492b133e54","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint --typescript lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=shellcheck,@types/jest","test":"npm run doc && catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --typescript --fix lib test","postinstall":"if [ -z \"$CI\" ] && [ -d \".git\" ]; then husky install; fi"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --typescript --fix","npm run doc"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.4","skhema":"^5.3.3","json-schema":"^0.3.0","@balena/jellyfish-logger":"^1.0.57"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^26.6.3","husky":"^5.2.0","sinon":"^9.2.4","deplint":"^1.1.3","ts-jest":"^26.5.4","typedoc":"^0.20.33","depcheck":"^1.4.0","shellcheck":"^1.0.0","typescript":"^4.2.3","@types/jest":"^26.0.21","lint-staged":"^10.5.4","@balena/lint":"^5.4.1","@types/sinon":"^9.0.11","@types/semver":"^7.3.4","catch-uncommitted":"^1.6.2","@balena/jellycheck":"^0.1.1"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_1.2.40-renovate-non-major-0a7b4d759e2e618d839648fafc8e78492b133e54_1616415872746_0.2473238155578108","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"1.2.40":{"name":"@balena/jellyfish-plugin-base","version":"1.2.40","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@1.2.40","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"843564aac08ac498b5de4849ae7806f20860ed4e","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-1.2.40.tgz","fileCount":18,"integrity":"sha512-d++PTaunwzNv7qUceUAXSlLKAXJdtBm/5GiSISiz3vDc/7c1Elk9riSg/91xy/nxgQGLTdfUj8qqPBYfRS7Hhg==","signatures":[{"sig":"MEYCIQCJVcQ7/ptSJz9JCnap4zo5mQB0/CRYi6Fs+KgL5Ie1ZQIhAJhkK+7CvSyXFL9/leuN9rcmQ3oAQ8SNg5ibjGQ6wDtR","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":30893,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgWI2MCRA9TVsSAnZWagAAAV8P/2C2rSx8OxAK2U8/xpYq\nuogNFGeqD40kAvocL2ahnP3j82ik9vI5j6fBtXhhDSCgEbHlQkEKVYbHbny4\nXe7sjV+uyDmGoTlVE3uB78m0m2woP3HQvejId5Qciei/2m8IBSHzFOmO8hU6\nQef7JJDQKbGPdx885ZbUaDQB7BmrVsXO2wu+WXccxn1Dz5iYDgFNL07IcSxu\nIkuV9zKnctLPvgdrJQXP29XsLg0iUC6GKYlrsPYg5eYAxOMuiNMjtoA2F1+u\nRevuWmdh6fTfeXETpye5uZD3J30ApuRBsteMN5hAlCtXI0TTkk8S3cUYxGr1\nxd4Y+dUUH4PDTnJGYk7DHUljcasbpBK73UAs4KyASbauY7ZqzUtCB1cozbey\nfmk0k1ljsIyuRJDX1n44VY34YNgUYe7nUVuLpTg2QZUPiGh4d/A9mIufGeK6\naQFDN7hYl9M9byleAtuxQ8RhfxhpqIxyF2oq1D4tIdHg0gfe4xQqvLkGnW9u\nmehnaTwloux2XSWGzVKnbBtwgJTmLk6MX6fIwb6+IiHbFqM2fL2Pu0BWWHO4\nUt5De09X2py0ZI3YznW9ZQC0adS7ny2PlDZxyDrFiNk0GXytaSco4F/pumWm\niELl/xPUvumarPi4YHLgVoIVrBvNnVHDVmBmqioVguWF0gc1S0EeSU1pT5K7\nQ8A1\r\n=vGR4\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","husky":{"hooks":{"pre-commit":"lint-staged"}},"types":"build/index.d.ts","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"b3cbc6e670b600423801f07d843714be18a48457","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint --typescript lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=shellcheck,@types/jest","test":"npm run doc && catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --typescript --fix lib test","postinstall":"if [ -z \"$CI\" ] && [ -d \".git\" ]; then husky install; fi"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --typescript --fix","npm run doc"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.4","skhema":"^5.3.3","json-schema":"^0.3.0","@balena/jellyfish-logger":"^1.0.57"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^26.6.3","husky":"^5.2.0","sinon":"^9.2.4","deplint":"^1.1.3","ts-jest":"^26.5.4","typedoc":"^0.20.33","depcheck":"^1.4.0","shellcheck":"^1.0.0","typescript":"^4.2.3","@types/jest":"^26.0.21","lint-staged":"^10.5.4","@balena/lint":"^5.4.1","@types/sinon":"^9.0.11","@types/semver":"^7.3.4","catch-uncommitted":"^1.6.2","@balena/jellycheck":"^0.1.1"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_1.2.40_1616416140235_0.1366634578472219","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"1.2.41-renovate-balena-jellyfish-logger-2-x-84c66da85985fc0a3daaa932c802a7766d055180":{"name":"@balena/jellyfish-plugin-base","version":"1.2.41-renovate-balena-jellyfish-logger-2-x-84c66da85985fc0a3daaa932c802a7766d055180","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@1.2.41-renovate-balena-jellyfish-logger-2-x-84c66da85985fc0a3daaa932c802a7766d055180","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"25b2142b0d5c89dbcf9b68b9e1183f71548c3b81","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-1.2.41-renovate-balena-jellyfish-logger-2-x-84c66da85985fc0a3daaa932c802a7766d055180.tgz","fileCount":18,"integrity":"sha512-gyi7E9V9Ieeyp9kFpsAcSlE2Dz84VwUEKnPkvEWo0rlxCbIqbpeSSPhlLLAwaachqirC4mPlpfLqV/uRqnockw==","signatures":[{"sig":"MEQCIB8WLdTShxu+tSbxzgaW8Pgs8db7BxwnGE/4Z2wwI+TDAiBlt1dtjPJEe2bhTlAg6I0lf6iWG9bZXlnBIoxXOHR0LQ==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":31068,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgWPCPCRA9TVsSAnZWagAAGIAP/AzPyxGAIY8H8LMKPg9N\nc4nAdozzhcTFpqtPGKnSUWXmXH0K4FwG54/kjBgEuC4iK5cgsLErQCuzY3GT\npb8h5GL5UXW9pkzqSnZ79nJv3/pveUjKhQsQSjCV99wvDiQmrb5I0D26ztQq\n1dMyU218aSZT2aWYtfyFf++vj3RMaoCkNPJRVItrZpDhWeO9whv84iXYMVvn\ns+dKvtxq5XkrgkexzliBCbSTw3GyHW0Td1UDvuz3UiyxeuKJlj1uefn8Xpsx\n32KNo5zx+6/KgHPYjdnBWyv0eQeGdpDzODlP3knd/ua2XkG3rX7mads+GiP4\nCPne6vVCSX6XhvhDD/POE5ECyvhXdaOggnFX5bnZxRkZtMCUzqyHAYdeMeYX\nzTq9/yM7BtdeWpYmy/eDgUzQbYJrZuQg1WyS1oIHESt0jDcZGo2XipIcUuzA\nhKiXL6fnp6Sg4xr0FaGvHIAqzPz59tQVrWxOL8lMiwz84cixIddC0iN/0dW/\nha/SYPIxgwkNOA4SDBk8THbYQ0Is9j8wa4QZpwaG/7bVZUw+0X0RP4cWvph7\nTaND+lpVLXMG1zMSabYr7wf0YVdrftrzD3kMuu6eAyp8gYqvq5c6XCbgVy9C\nDY5nWpHELCC7QPJMgzTYpYibyGvJs2tKA0iu4M2gqCPLVvD/24iPGy5CsbXG\ndf3r\r\n=1kWt\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","husky":{"hooks":{"pre-commit":"lint-staged"}},"types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"84c66da85985fc0a3daaa932c802a7766d055180","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint --typescript lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=shellcheck,@types/jest","test":"npm run doc && catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --typescript --fix lib test","postinstall":"if [ -z \"$CI\" ] && [ -d \".git\" ]; then husky install; fi"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --typescript --fix","npm run doc"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.4","skhema":"^5.3.3","json-schema":"^0.3.0","@balena/jellyfish-logger":"^2.0.1"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^26.6.3","husky":"^5.2.0","sinon":"^9.2.4","deplint":"^1.1.3","ts-jest":"^26.5.4","typedoc":"^0.20.33","depcheck":"^1.4.0","shellcheck":"^1.0.0","typescript":"^4.2.3","@types/jest":"^26.0.21","lint-staged":"^10.5.4","@balena/lint":"^5.4.1","@types/sinon":"^9.0.11","@types/semver":"^7.3.4","catch-uncommitted":"^1.6.2","@balena/jellycheck":"^0.1.1"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_1.2.41-renovate-balena-jellyfish-logger-2-x-84c66da85985fc0a3daaa932c802a7766d055180_1616441486676_0.23812777099525584","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"1.2.41-renovate-sinon-10-x-2f527a3b13c71c677246906b568e269a5ca970dd":{"name":"@balena/jellyfish-plugin-base","version":"1.2.41-renovate-sinon-10-x-2f527a3b13c71c677246906b568e269a5ca970dd","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@1.2.41-renovate-sinon-10-x-2f527a3b13c71c677246906b568e269a5ca970dd","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"7a012805603230e63428f19a7c5e711fa0f32c9e","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-1.2.41-renovate-sinon-10-x-2f527a3b13c71c677246906b568e269a5ca970dd.tgz","fileCount":18,"integrity":"sha512-xjAG94qY00o7djbHjtENvkLlllQIGWAs8QYqdeJYcDHtnTcpbmPGah7MHGyBohNXiFOFW6WE5qMR1yuaTuYSVA==","signatures":[{"sig":"MEYCIQDhPXa3QdU7pK2gMkNocPx/cPg/C1f3o2AUCqqL7lzJdwIhAJ783Tx6TuFcKIvwaM2I+Qp+kt0Z0ahuPQjYimofcRDA","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":31035,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgWPDWCRA9TVsSAnZWagAA+G8P/iCBGvS0qTb/9CozeB7Z\nAgGO3+mHk8zwSi2EG3R9+Au0o7nqSvjK12p74HCJZCrku0PGOix/ECyCu4mW\ncs/Od6tNkFOIJeNplH9p4J3J9eyx02vwW66gGspY3GWIFvHK9ddIltfnSxDV\niP4VTmeZbG/vVqmMTML9GIEowlgacls6+QxrFmcjDjdil6LQ6CoIe3EKlLXw\n2I2vmNoaU87BaPIx/Am0OZphXgcm8WxhXxpRFyak9Jd8UBXjPfBOB7ft63O9\nJN2XEi9pHzmIpQ8w9rF8TLTP41Mjvtj/FQYYKlzk8ELNYlCOi2deRm42DxIV\n1V334k4QzC5YioQq1ZvsBQkbpfiHsemy8ZZILDV6Z2O6vodc7FgvWik887JG\ndx3EVrvHzv8u9uyBFYFeijfO68xVO8Abnat5S7S4r8VmOnMDn9291crBgGkg\n8bA6mQsj6J/5UIluaGgagNS5wfyWkizwfD6icKm6D/Kob/DOixh3eYyTx0FQ\n96KLfeiIMauFsTQApNtvBlqzopYlLWonCFK8Zi2kLBDFktn3F/XSAYpVj4+I\nB+RTDgtZSjNKSS5KAMYRr6reTx2nKZzN2ylNiPLg3ZY8lVkwP9v8cxGRwTHE\njcTB3SoaKTQAMUqvM3NLS++tKUK9Tzrm/Wh6yeXH3MwCr/Poo4KAjSYio3vu\n3xuu\r\n=PXYN\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","husky":{"hooks":{"pre-commit":"lint-staged"}},"types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"2f527a3b13c71c677246906b568e269a5ca970dd","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint --typescript lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=shellcheck,@types/jest","test":"npm run doc && catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --typescript --fix lib test","postinstall":"if [ -z \"$CI\" ] && [ -d \".git\" ]; then husky install; fi"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --typescript --fix","npm run doc"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.4","skhema":"^5.3.3","json-schema":"^0.3.0","@balena/jellyfish-logger":"^1.0.57"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^26.6.3","husky":"^5.2.0","sinon":"^10.0.0","deplint":"^1.1.3","ts-jest":"^26.5.4","typedoc":"^0.20.33","depcheck":"^1.4.0","shellcheck":"^1.0.0","typescript":"^4.2.3","@types/jest":"^26.0.21","lint-staged":"^10.5.4","@balena/lint":"^5.4.1","@types/sinon":"^9.0.11","@types/semver":"^7.3.4","catch-uncommitted":"^1.6.2","@balena/jellycheck":"^0.1.1"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_1.2.41-renovate-sinon-10-x-2f527a3b13c71c677246906b568e269a5ca970dd_1616441557540_0.3767120590902149","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.0.0-use-jellyfish-types-bad5f79976a9cd48c5f245efe9b2637846be12ae":{"name":"@balena/jellyfish-plugin-base","version":"2.0.0-use-jellyfish-types-bad5f79976a9cd48c5f245efe9b2637846be12ae","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.0.0-use-jellyfish-types-bad5f79976a9cd48c5f245efe9b2637846be12ae","maintainers":[{"name":"somombo","email":"somo@mombo.solutions"},{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"04b86ea092e2956d70d0b453f6563b571ff33fe9","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.0.0-use-jellyfish-types-bad5f79976a9cd48c5f245efe9b2637846be12ae.tgz","fileCount":18,"integrity":"sha512-35DbThXWHPOiaUtp8IdVviFrnqXgQxFLvh4H4e+Kv879nxuMx+vzU9egj7BItZ3sW7EiVk+XImmUUx9Qw+mhXg==","signatures":[{"sig":"MEQCIED89P4CkGJeOwU+qCVl0UnefkPvyEudXCeuxU9toE/CAiAN3GjxnpvsgC2TrJ3++dMpgDp1qb0GuAANRCA7wAE9WQ==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":31002,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgWUxqCRA9TVsSAnZWagAAxDMP/3nl5B0fvldO8ICWLUL+\nzo7UwOGHMCObAik2Mcz0Ra0HqqNQLialVa+FIjLE9ijgLw8y8m3GbHlebb3C\nIjkFof+ke/vBWaC4g5uiAdGRJF+pBWQDJpfavaLQEqoEUzPcn6eCftFt/b5W\n9qVws9fxuhQsMuMnD6piqaB58XpdCU88dlyDXo8jd2vJIv/5+DF6Af8Lj8it\nbcxkJdXo1x7jNDOsgDZiQkSBp7O8YOslV6ozWH+uITsrSNe4lW2Ek1UZ9V9F\nH+xsftkWRWNapSWWWfo87yTtpW4+H3DqpTilGZ898VwqGvjzYBxFUAG4wSIX\nKt17oSIH9FToWNyYln6tv7Ro1/Tsh68f5Cmk+9DC3TqT+najAagmgNrEAQcR\nMW+j80JzwzK9Hg575/T/FmFQ48YxvMC2xyc9uvQJV14SzP2mTUDzIRTAjwbx\nxpV+ghUcBEIWKxJ/tC1R8UdXG845kN0+qBK0wawW25T16OQ2c/NRYPq72mY6\n8fGm7UFkDCY1ju3bbbIxchqHCU8xgd+T0Q39bSulQuDMOg940Hy7ifLxTR7k\nCOaVkfKYjQmK7s3OOBmX7VF1BJko1lsr+RMWzT89HVP9rlUcoa74DSl9xgNn\n1b18vULbtfY0yCJMX+YfQrlA8ialqVhAFN81xlt/T2RQMehp8AmdArxN4Xjp\nDth4\r\n=8xIT\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","husky":{"hooks":{"pre-commit":"lint-staged"}},"types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"bad5f79976a9cd48c5f245efe9b2637846be12ae","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint --typescript lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"npm run doc && catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --typescript --fix lib test","postinstall":"if [ -z \"$CI\" ] && [ -d \".git\" ]; then husky install; fi"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --typescript --fix","npm run doc"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.4","skhema":"^5.3.3","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.1.0","@balena/jellyfish-logger":"^2.0.1"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^26.6.3","husky":"^5.2.0","sinon":"^9.2.4","deplint":"^1.1.3","ts-jest":"^26.5.4","typedoc":"^0.20.33","depcheck":"^1.4.0","typescript":"^4.2.3","@types/jest":"^26.0.21","lint-staged":"^10.5.4","@balena/lint":"^5.4.1","@types/sinon":"^9.0.11","@types/semver":"^7.3.4","catch-uncommitted":"^1.6.2","@balena/jellycheck":"^0.1.1"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.0.0-use-jellyfish-types-bad5f79976a9cd48c5f245efe9b2637846be12ae_1616465002254_0.2368131358750185","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"1.2.41-renovate-non-major-409992412e007d5f1a1e1533f1234a85cb2c9a1b":{"name":"@balena/jellyfish-plugin-base","version":"1.2.41-renovate-non-major-409992412e007d5f1a1e1533f1234a85cb2c9a1b","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@1.2.41-renovate-non-major-409992412e007d5f1a1e1533f1234a85cb2c9a1b","maintainers":[{"name":"somombo","email":"somo@mombo.solutions"},{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"b83122d9a24503cfe5bc0e4a2d301148f8e88975","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-1.2.41-renovate-non-major-409992412e007d5f1a1e1533f1234a85cb2c9a1b.tgz","fileCount":18,"integrity":"sha512-bRhDVSQPkTBAOwerEWzIosEJNjaMWyBgmbNFgZyFeTdFaw4CyHGO747t72TFTSHXql7bGqxPhd4YDa7QcA574g==","signatures":[{"sig":"MEUCIQC/45YToIZpm5Nt5TExVA9eqo54tABkXZbfx6l1cWTYnQIgFC4wOOXdyNKk+ez0rc6+vdKLnhgHMDFsR2qXStA+qeY=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":31037,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgWVBrCRA9TVsSAnZWagAAJXkP/36FnPrAnhlpJ6HQR6L1\nwYYh7sFRL1FBzbFNhstK5WZSXatK/t9PwbevfSwZVaD6sWPXzDeFGxvTVd0R\nbZVFTzngSVhaCrGltRz4wIciSKBjWLDedKBOEz+An9wxd6FoT1EJYlNo5KmR\n77OvjqZV1t65IWs0fs9DFjphw4+virjyWdAUYpf2Q6LA/2SfKHQKsfadrij6\n1P79USZmL2PjXJnbAQBn0fdbHc86IdGxczcb3OTJF0Z5o4EuW/FD1XRuRYUv\nJbsjpS4XMLXpYipKiwrCPjGSRwAIhuwD+6lD9AsTjFNX9fjjH/945aWfdHz6\n6J3QypBsBcuulJtbvt3lyTg7rWm2tJE1DpdkO/tCs607+ne7rRLtNRP9B8ld\nHyswi58Gn0MytzN8hpumhcgM4iVVttSTzF/hQyPVEPfgfZXy1hx+PcUcpzOc\ngz6nYdicriL59+mUZYB1zMsTLMQcQbZMOJk4wHjW42dWI/NFmFcCZrriN0We\nqjte1v+xghaNlJR8SzISDZ9zGJ+s1n2bs5/2ePcqeNU685Ox/YEojJww/VdD\nywK5ADMlqxiGgly3SV7vR/JYEnLcIiHYq3OMHzdOQmo/cuniWtW8yb+qhZHt\np5NzhOGPrsaXsIs/GR1Y0lH27kQxrtERh9Oq9nSNxpLSc15Eq64Zdp7aVPWy\nG06s\r\n=5dtY\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","husky":{"hooks":{"pre-commit":"lint-staged"}},"types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"409992412e007d5f1a1e1533f1234a85cb2c9a1b","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint --typescript lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=shellcheck,@types/jest","test":"npm run doc && catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --typescript --fix lib test","postinstall":"if [ -z \"$CI\" ] && [ -d \".git\" ]; then husky install; fi"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --typescript --fix","npm run doc"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.3","json-schema":"^0.3.0","@balena/jellyfish-logger":"^1.0.57"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^26.6.3","husky":"^5.2.0","sinon":"^9.2.4","deplint":"^1.1.3","ts-jest":"^26.5.4","typedoc":"^0.20.33","depcheck":"^1.4.0","shellcheck":"^1.0.0","typescript":"^4.2.3","@types/jest":"^26.0.21","lint-staged":"^10.5.4","@balena/lint":"^5.4.1","@types/sinon":"^9.0.11","@types/semver":"^7.3.4","catch-uncommitted":"^1.6.2","@balena/jellycheck":"^0.1.1"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_1.2.41-renovate-non-major-409992412e007d5f1a1e1533f1234a85cb2c9a1b_1616466026573_0.2757351138226285","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"1.2.41":{"name":"@balena/jellyfish-plugin-base","version":"1.2.41","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@1.2.41","maintainers":[{"name":"somombo","email":"somo@mombo.solutions"},{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"692b76e56242b3603d39f8ca9826d34297be907b","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-1.2.41.tgz","fileCount":18,"integrity":"sha512-NgTsLatQ1lWrUXmbkJEGrOVKJI2Ic05uRsyAhIY970fshkM4e9XwOl3GcXojDhSDDKAehVQBUIqCe+jwKcI7Rw==","signatures":[{"sig":"MEUCIBRtmvVcSw9RqzGIBJkwYlEZfJOI08T2U8sTxF7cJCe2AiEAjQ9XO8VKRGqPNk8scTgUB5rGx3eNe5Mn9jGLd2tarZs=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":30977,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgWVE1CRA9TVsSAnZWagAA89cQAIHV91aVwgiI5cXX0SDA\ndk1HSyBP3iV43l9/tOAosbOxJB0y6zZm2Sl0ry1qI3NXoVdNkAQy5nDlsDwz\nld0YWT7JTIakFM69a6hgPIch6n/2RXKPpe4UmSXASO94rBkPl8GEoBD9vmkW\nXa282y75CwqK53cW61nmQ4pwff3eR91kqwPZbNPhhnE9ea9HyJwvR/gY2kzx\nDup0NdlYpso1B6bkPf34/HQxlHifla0ipnYYn7xG8ADbYSFA5Fd/nwnpULlj\nBw+vfyRsvzZyfej4G5stBHScvX7df1YGQ3aXl/vOL1mlRXW77cceouaVV2xK\nFTdTgq/QoAu8vyEkRZ0ljMEM1Bh8Bn843+agMbeydHKfw0yYm4Ix+m/1z2G4\nj9CwTTyFmPDlotGay5fl60n7zZ2GMctfx6dAhDe9KGvhaItzhz/GOSPFBS6K\nWIjhvh+Ey3FyZQdSqHMvv7lXvp0wVdVus95lkAPIZNAMxo7c3Yn32mwYequm\niJLVG693+IbcKzCrg/cAngUnu1OGove62Jkmfym3Swf0J0/3wPlOcuVBNeuq\nHAuHKIAXr4fFHanzUvTrDukzJnlxONnI8SlKGhZ8DBbsQtvhPHZXypcS/wsY\nYcEAXvde6JpRsM3RDvFXYB18cOXXSzjv57ACOWqXhzj4xQeQe4mLd2Sw/5Ql\nv4lN\r\n=2XJF\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","husky":{"hooks":{"pre-commit":"lint-staged"}},"types":"build/index.d.ts","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"8f5b61216a69011eda4fe4d4f86d01c59fc3bebe","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint --typescript lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=shellcheck,@types/jest","test":"npm run doc && catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --typescript --fix lib test","postinstall":"if [ -z \"$CI\" ] && [ -d \".git\" ]; then husky install; fi"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --typescript --fix","npm run doc"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.3","json-schema":"^0.3.0","@balena/jellyfish-logger":"^1.0.57"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^26.6.3","husky":"^5.2.0","sinon":"^9.2.4","deplint":"^1.1.3","ts-jest":"^26.5.4","typedoc":"^0.20.33","depcheck":"^1.4.0","shellcheck":"^1.0.0","typescript":"^4.2.3","@types/jest":"^26.0.21","lint-staged":"^10.5.4","@balena/lint":"^5.4.1","@types/sinon":"^9.0.11","@types/semver":"^7.3.4","catch-uncommitted":"^1.6.2","@balena/jellycheck":"^0.1.1"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_1.2.41_1616466228856_0.022579460449801747","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.0.0-use-jellyfish-types-db6de98ea213300c4f78e2caef85d450a0b36c14":{"name":"@balena/jellyfish-plugin-base","version":"2.0.0-use-jellyfish-types-db6de98ea213300c4f78e2caef85d450a0b36c14","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.0.0-use-jellyfish-types-db6de98ea213300c4f78e2caef85d450a0b36c14","maintainers":[{"name":"somombo","email":"somo@mombo.solutions"},{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"8fdb5e2716cc86e36af205fc0cf19bd74942dda8","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.0.0-use-jellyfish-types-db6de98ea213300c4f78e2caef85d450a0b36c14.tgz","fileCount":18,"integrity":"sha512-g8dq2gWIGkEd7ztDnPVt8OlbhHoybTtmQWdiuReXBvySDouRSpNePgrqSQ1Z+B57Paz91Pdm1tQ6RJcnNfx7ig==","signatures":[{"sig":"MEYCIQDGR26TwAtIB9CsTd51J62jgHo5K4zJk+4gv9TWg3dRAQIhALnAcdtaR+hFfKBLGr7jAO0j9aQ9K07GT7gGSZx3rwxG","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":31086,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgWVHzCRA9TVsSAnZWagAAJC0P/0Q74J3E1fHXCGux0hOS\n//kn19Z8u70th4Pk91V1L4uKgqMOMYS+uOir4MTf8RBQ3jBjRbFni7xiuBju\nA3MPWtgQKHr11tt1Ds5p1u7nIyyRDKxBQ/7gUacKv3gOl8ye6qm700p8G184\n7RZEr9n6aDplHeH6LgHf0uW1UJc7yuMvH+lk2e3ZraJna1dUbaiSkf8EjQCe\nBYpTQXw8SGwfi9srIsjqHu3fPofXQ+YJK/QAdSz+OAoIBh+9RCUFV+PSmFW/\n5ZDmMJ3AlXKdHpnxaWUHpQNYxS1bHU3eE/Kughp1UMrrToH4gwDYWay2SUL+\nv8YtMsfr68bLN3+7Uonm6FQ3A+oqWX90feYiriFvOUEnWHbmDBsigeATlUkS\nvE6iRxcZMqskz98/8SDJJ7yWGQNoosBF8m9tqdmjrTebY7kteMKRukPOm/mz\nZHE5rNytJRqUeVejDQyk6B0FY8ygyXnSG0CbA2Kjko1VTboxpMi7A/P8WP3x\n3YWYAlGoagG67N82GBBMdkk7VLkIwfROsRfMz8dCy3BO6fjpeLmSM5ouKKok\nclsgfdVQNk527shDVNFm5Ml30v22TJeNHEZopKRhfAzxlGrXgnOWf+myEJLZ\nViu3eVKZgn/IAfStSOrBmSIODMULWAQOpvsdydD3pJFQ+9qirMTrIvIGl2aS\nmLw9\r\n=Ub1/\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","husky":{"hooks":{"pre-commit":"lint-staged"}},"types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"db6de98ea213300c4f78e2caef85d450a0b36c14","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint --typescript lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"npm run doc && catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --typescript --fix lib test","postinstall":"if [ -z \"$CI\" ] && [ -d \".git\" ]; then husky install; fi"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --typescript --fix","npm run doc"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.3","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.1.0","@balena/jellyfish-logger":"^2.0.1"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^26.6.3","husky":"^5.2.0","sinon":"^9.2.4","deplint":"^1.1.3","ts-jest":"^26.5.4","typedoc":"^0.20.33","depcheck":"^1.4.0","typescript":"^4.2.3","@types/jest":"^26.0.21","lint-staged":"^10.5.4","@balena/lint":"^5.4.1","@types/sinon":"^9.0.11","@types/semver":"^7.3.4","catch-uncommitted":"^1.6.2","@balena/jellycheck":"^0.1.1"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.0.0-use-jellyfish-types-db6de98ea213300c4f78e2caef85d450a0b36c14_1616466418559_0.4725340321894076","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"1.2.42-renovate-balena-jellyfish-logger-2-x-4e2295981797e75efdda801c2269dfde922e9ef1":{"name":"@balena/jellyfish-plugin-base","version":"1.2.42-renovate-balena-jellyfish-logger-2-x-4e2295981797e75efdda801c2269dfde922e9ef1","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@1.2.42-renovate-balena-jellyfish-logger-2-x-4e2295981797e75efdda801c2269dfde922e9ef1","maintainers":[{"name":"somombo","email":"somo@mombo.solutions"},{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"b9f77632f1d9a3279cf4c56d4651c30fc91a091e","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-1.2.42-renovate-balena-jellyfish-logger-2-x-4e2295981797e75efdda801c2269dfde922e9ef1.tgz","fileCount":18,"integrity":"sha512-/WmQHevBdVMetEhZJ84nxuegfMj0IH7DghaHJol1yjMeEd82B41NCsH1ax/gV5LfFDoZRIF8C3Uo78eSf4Py2g==","signatures":[{"sig":"MEYCIQDT3GCpjPQnZX33Mf21WcbXgLIBMgo9DC9WpkvS+/VERgIhAJ6qtdDDKGK5CadKAjjjZ9oks3nulshUtIiXX3lZXaeZ","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":31152,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgWVH7CRA9TVsSAnZWagAAZ5IP/2GqQxOXaxJPgfG0sl2V\nW04DCyHNDB5kP0FCOOGfwGdtcqxgvarrezq2CpPpcH/Dmctj+8QhjFgnyzTI\nWe6tR8/F0Ed1iOxOpkuxLc6w4ibX2LjsuRtNsnWR5Vh3BQ0n478laDS0Wrir\nW3W0qs2pe9XYGpw6+FeleoUAEVrW0S7Qo9+SPHyZxLIxaU3+Fm0dlG8dR4P0\nThMmx7bKiqwZIPR6S5MQTeM2VN8IkIqBx1GiJOV35KBGUN40osCK/w7rmjnl\nmjvd/6j/ihRlwkCRUXfshFKPxnwNGqWRp7O2kzuLkvlHblTe3OyrQkhKXBo+\n06U+bbcadKU3zxaIozSXmeKLUt1f5gj3q7b8q+Y8rRdWssC6IVQk0dPwn+xO\nIdRTFmlpfSIUdToELu/94g1liuiIwStjYQ/KyNx5D+KAWChARjSg5nmLYtmV\n1UpCvp01pZnQIF4w7C4j+8R6tarxw9DDLWkQNaMxhu888NVTB+CwRIWcImak\njbXPEWvo7GU+I6Iu4VEWzrhXuUcYSDS4HjuR89Y+Ghmenr44I2J4HZN2iLTY\nvvtyUZM91nwYBfEanekFXZNd61RghEboxB77P4IBHMrs/koxh1GUs4JEaqHR\nPmsUBxkymH/EfwMB9Www4+z/lhsMuS1sKyOz33lX59DYauGp7rEQyzYSbG8U\nqqn3\r\n=nyoG\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","husky":{"hooks":{"pre-commit":"lint-staged"}},"types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"4e2295981797e75efdda801c2269dfde922e9ef1","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint --typescript lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=shellcheck,@types/jest","test":"npm run doc && catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --typescript --fix lib test","postinstall":"if [ -z \"$CI\" ] && [ -d \".git\" ]; then husky install; fi"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --typescript --fix","npm run doc"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.3","json-schema":"^0.3.0","@balena/jellyfish-logger":"^2.0.1"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^26.6.3","husky":"^5.2.0","sinon":"^9.2.4","deplint":"^1.1.3","ts-jest":"^26.5.4","typedoc":"^0.20.33","depcheck":"^1.4.0","shellcheck":"^1.0.0","typescript":"^4.2.3","@types/jest":"^26.0.21","lint-staged":"^10.5.4","@balena/lint":"^5.4.1","@types/sinon":"^9.0.11","@types/semver":"^7.3.4","catch-uncommitted":"^1.6.2","@balena/jellycheck":"^0.1.1"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_1.2.42-renovate-balena-jellyfish-logger-2-x-4e2295981797e75efdda801c2269dfde922e9ef1_1616466426757_0.12268900684131223","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"1.2.42-renovate-sinon-10-x-8ddac46980f120f6787c60998d592943106b89c7":{"name":"@balena/jellyfish-plugin-base","version":"1.2.42-renovate-sinon-10-x-8ddac46980f120f6787c60998d592943106b89c7","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@1.2.42-renovate-sinon-10-x-8ddac46980f120f6787c60998d592943106b89c7","maintainers":[{"name":"somombo","email":"somo@mombo.solutions"},{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"6e2a5c5715d775b0c58f79ad208b95d32c72763c","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-1.2.42-renovate-sinon-10-x-8ddac46980f120f6787c60998d592943106b89c7.tgz","fileCount":18,"integrity":"sha512-QwHv9xLWooVzWyk+a3KKSC3JqtGIqLyyD68e4A26mjifzFBtvE8r63FvxQf2QUUCVvBiazoWnqovIQjsjG8J5w==","signatures":[{"sig":"MEYCIQDmF9D4db0VuvaiS8i0CIjYoqa7hM87tUodyScBuhftKAIhAJOMQE2sqfQ709cr9+CM4u9/FSRIv7tn57+v8e4pPIFa","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":31119,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgWVI/CRA9TVsSAnZWagAA+U0P/1fErTJDtBXEG7QJMaE3\nVQm50wF4T/9SQO7ZroLw2f8oYiHNHMZD+Agr5fQPEdA4WEUZnZJ8qia7Dq4k\nLzEO4WooILwxqVLYUDn9eWpa3nO6IWjXl/XxnsYIFyLkVeeJLJAcWCXESsI0\n40hfEDHv2wx2diX1OMQyFgW7bczZ3w+Ef4S3pYnYVZVlz4+hAsNkqbTb+Qy5\npLa/rnUyYzxIT0ZM/quOnTe0nO2/H+V62KvLbj9ftui1xpGq1b/mD2Z0knF/\ndgy961OrDGJJbpPNKObLnZNx4yjdCdoDUGOGk4DQOe+Eu7S6nun0vw09mY/Y\nurA3W/sTkzBoslyR2hjGy/C5syggaoZ47Pz7Qpb5p+AlZeXD4plHIzDHf/W7\n9RPL+4DTe8GiT0pyGsRaeW104NVweNObb4+/Slig8zTXtYhWOOAIVxLLjOAr\nhJA4jc2zwmvJ6XoGmT6kZSqYbChy6ioaTgAqnyPVl9gZc6nGv/qoWs4YbL1F\nZqDlXbLkBULtfSv0R/wqvWVnsKvT8DaqufFvwv5QYayjarXAI6LcNvdO2ya5\nciwgsBUcFLI+6I4jmOYT6QUjKTPs6yyfCjOAJUNfynEHaE+Efr2B2JzMc3oz\nxGed5unWKlvwwXTM1SKpdeWN/FGY9f0+KGG3+cG/h7Y6XsSXo3MhBRKuF9dG\nCbVn\r\n=oWbT\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","husky":{"hooks":{"pre-commit":"lint-staged"}},"types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"8ddac46980f120f6787c60998d592943106b89c7","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint --typescript lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=shellcheck,@types/jest","test":"npm run doc && catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --typescript --fix lib test","postinstall":"if [ -z \"$CI\" ] && [ -d \".git\" ]; then husky install; fi"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --typescript --fix","npm run doc"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.3","json-schema":"^0.3.0","@balena/jellyfish-logger":"^1.0.57"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^26.6.3","husky":"^5.2.0","sinon":"^10.0.0","deplint":"^1.1.3","ts-jest":"^26.5.4","typedoc":"^0.20.33","depcheck":"^1.4.0","shellcheck":"^1.0.0","typescript":"^4.2.3","@types/jest":"^26.0.21","lint-staged":"^10.5.4","@balena/lint":"^5.4.1","@types/sinon":"^9.0.11","@types/semver":"^7.3.4","catch-uncommitted":"^1.6.2","@balena/jellycheck":"^0.1.1"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_1.2.42-renovate-sinon-10-x-8ddac46980f120f6787c60998d592943106b89c7_1616466495491_0.5298117355493681","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.0.0":{"name":"@balena/jellyfish-plugin-base","version":"2.0.0","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.0.0","maintainers":[{"name":"somombo","email":"somo@mombo.solutions"},{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"73aa97bc730d3afe8ad8670108c24c2af75f7271","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.0.0.tgz","fileCount":18,"integrity":"sha512-457hGvoUQSZyheYkzLkHQgvfXdXWaBbXDZ5Tg25LufSAfaQvsoVsJrasQuRPbfWW+9Peoik5EDWRzS0qFVO2ZQ==","signatures":[{"sig":"MEUCIDuur+CF97Gs7GYcdE8ZOfAPN9sUuQ+UCBmgk3e+ZEHiAiEA+porRdEMC3QUooRMAZyUlpq8zweaMPS3pcVRnQ03zZc=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":31025,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgWVaECRA9TVsSAnZWagAAH44P+wVS2CfruvcVisOc4I5O\nyIjfsuot7qdJjD0DSX77pALOG0la1xmgGWQMWRv6CHsYmm3LMo4ROYzGTkkB\nVqcwX8tQ2XK0uKkvgTJUayjDlP4UxWUFWfrWhfgBcECSTNlY0NQqmluFOCHc\nTkS6xLhOkK1sRjc4mw2/HQVhIQ5bI8rvhbIlcRmiiaM8c6Kj0oWFCbSa4roy\nXtEyZa4nCIE26VxpfEXD541G1O2q7h+MOfMxEvDSrLFweVCdG5diZeJU0tHH\nOSGQviwhT0Q4gDHBcoEEeTceyYndchGUebTI3ZnIPSsQmf4BAU4uU9qgBX/i\nuQRw1xT2tZy5h1W5Wd38TXFo7QweuBOcFUKRZ7yEywNcKDeyhysWAUpfTjQG\nXDOCLxTsoVDo5TLbzoRf6gue7mr5e6g3xXtZUw4HoJE7Xv+OY3aD/8UNjs53\nrSUO0seGXAmtv+3H6DR7we9QIT9XdivszSx2fLRJUBWcnE63t7CcxWnULql0\nf+Dh9HMTSTCqAmBCUJEwJI8cDALkzk1CviYZhxNCcjkz0LG2yMQRltf6+6nb\nmNhzWyB7cnC75nXUjpcTJnLEafmQriQx4WDXesVZfl8VD3lc9vt6JBeKspju\nTxS5bvXLyawbbACAsI9eSPRRMLimPl3Vk72iPkACUh581oXJsYae7XpQsnDl\nlPTj\r\n=N38c\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","husky":{"hooks":{"pre-commit":"lint-staged"}},"types":"build/index.d.ts","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"deef82fbabd66eb8d9960f555b9f981eee12f97a","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint --typescript lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"npm run doc && catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --typescript --fix lib test","postinstall":"if [ -z \"$CI\" ] && [ -d \".git\" ]; then husky install; fi"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --typescript --fix","npm run doc"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.3","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.1.0","@balena/jellyfish-logger":"^2.0.1"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^26.6.3","husky":"^5.2.0","sinon":"^9.2.4","deplint":"^1.1.3","ts-jest":"^26.5.4","typedoc":"^0.20.33","depcheck":"^1.4.0","typescript":"^4.2.3","@types/jest":"^26.0.21","lint-staged":"^10.5.4","@balena/lint":"^5.4.1","@types/sinon":"^9.0.11","@types/semver":"^7.3.4","catch-uncommitted":"^1.6.2","@balena/jellycheck":"^0.1.1"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.0.0_1616467588330_0.1921634130938621","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.0.0-renovate-sinon-10-x-ce4cd3c3f02502b633313a73e5391844894dd835":{"name":"@balena/jellyfish-plugin-base","version":"2.0.0-renovate-sinon-10-x-ce4cd3c3f02502b633313a73e5391844894dd835","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.0.0-renovate-sinon-10-x-ce4cd3c3f02502b633313a73e5391844894dd835","maintainers":[{"name":"somombo","email":"somo@mombo.solutions"},{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"3d4a3c6ebc604de5fd89b435f4e226f5ea17413b","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.0.0-renovate-sinon-10-x-ce4cd3c3f02502b633313a73e5391844894dd835.tgz","fileCount":18,"integrity":"sha512-iu+n98UKjR6vvkR8bV38ccrKYKuRG+3CVwQWDJt0LRQqw1l6CsXcT8i/2FnUuwOxI9r0sXwiJ0slpDwHseIHzA==","signatures":[{"sig":"MEUCIDAaaiyWRmtd7YERiD5SDj+2D9ZQtmxNxkoINc/vd82vAiEAzx8MSQJfoQDG1h9r+b+MFk5+BnHoomDvzXlA1v1TpFM=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":31142,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgWVddCRA9TVsSAnZWagAAUZwQAIVNTcvF6ruJiZXfFE22\nR9A/zoOQq+SxGJL9VahLMytOKvhl49aZXMG+IhqpYcsVLybKxnyA1raIpQNv\nV7Sjw+cmAuUxgIsHpcN3j7eHZcMxxPHcpBqkIkZzEJuihctj/WZekpmfXaH6\nEt9s5MFO4RrjYiyQM4cLVSK5uvOxsQGMbbpWyNG8zJnjFiN4OoezpkQwZcPY\n4vh8N6ChpzMEDei4xhCRgvoLtd7XTDBhmyXI3S6zhI7TnJQ8Ih0YLO4SC/AB\n7oZ0q5zGj2TPn76J8L8ZVkjbByuvb6WiVCs8ojNBcMvnoOfubU89JTOuR973\ncxeMLd3mkXTJN+SgBAedF++UxIyO+Or5Mb8ZfnmDGogTqK7a2gGQNoW6mwbr\n2W3iHo70BB4bAFOsFJtLrh6Sw+9lYJEPz/0uCKCNidbM6EiUPgT6sU2Y+OUA\nXZ3xJTOOFk7piP5pBpYB7Vre7Cwk8EtLRynBQkK4g8pSfeQruIJn8PmcVVuu\npfiW3cwAcpQL9mP/MgzAzJRzXLoNl5O80tjKXsY/VPDT4UDT2vIOITRX0SnZ\nHwLaLiCQ9R6Pp072ipJWC0T5Of8E/Xps+GApYPbLSEt+NzWfC2DRA/eqhzPx\nESKcL0YaeQZBCIN5AkIMD0wUH/HnJMiYqRUIM77lPzr7RhHR73HQuraS0T8j\n+l14\r\n=4kX9\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","husky":{"hooks":{"pre-commit":"lint-staged"}},"types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"ce4cd3c3f02502b633313a73e5391844894dd835","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint --typescript lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"npm run doc && catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --typescript --fix lib test","postinstall":"if [ -z \"$CI\" ] && [ -d \".git\" ]; then husky install; fi"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --typescript --fix","npm run doc"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.3","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.1.0","@balena/jellyfish-logger":"^2.0.1"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^26.6.3","husky":"^5.2.0","sinon":"^10.0.0","deplint":"^1.1.3","ts-jest":"^26.5.4","typedoc":"^0.20.33","depcheck":"^1.4.0","typescript":"^4.2.3","@types/jest":"^26.0.21","lint-staged":"^10.5.4","@balena/lint":"^5.4.1","@types/sinon":"^9.0.11","@types/semver":"^7.3.4","catch-uncommitted":"^1.6.2","@balena/jellycheck":"^0.1.1"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.0.0-renovate-sinon-10-x-ce4cd3c3f02502b633313a73e5391844894dd835_1616467805255_0.4243803770112138","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.0.1-renovate-non-major-60728534b8a818e18c064e60d8d36de8d724b021":{"name":"@balena/jellyfish-plugin-base","version":"2.0.1-renovate-non-major-60728534b8a818e18c064e60d8d36de8d724b021","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.0.1-renovate-non-major-60728534b8a818e18c064e60d8d36de8d724b021","maintainers":[{"name":"somombo","email":"somo@mombo.solutions"},{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"dc216eb503d6a50f52bf7ee9b30b88aee079b2e8","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.0.1-renovate-non-major-60728534b8a818e18c064e60d8d36de8d724b021.tgz","fileCount":18,"integrity":"sha512-hvilLi6OdN/FZZz3pymcNN5tVmNcIZAvbRfyoZvz/tokikaDDAgeksckcfgF+CvpyHmZG/YXtW6XW+/0GHXvsQ==","signatures":[{"sig":"MEYCIQC5Q6/vqMCTEZ9cIbaZ3Kehgd8e8oFOsdRL2h5R5HMH8AIhAPLQgu53NGaMAGhZ3YFI91zO28tSS3Vd63FDuN4qQFDx","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":31186,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgWVf/CRA9TVsSAnZWagAAFKwQAJSxeaIGaAK++Pp494ny\n72cOoDTJSYKgV0EjFncEiponKKZqy+5qVfb8UZSSQlknztAqMWfD+9ae4buw\nJZkXkxwYYzcxkwWW1a9QixBH0Scabp53FXd72EQ8fAlOO6l6RCht8T7EFAHm\ndZKKqX0KzpL8IKFYt5+s51ctr4SSnGC9on97LtLVBf4DHiaJwwXiQ0mv6NdB\nGxhTwZI9oMygToZZ+4mddwtzjlolamdaTApUzq0eoOOMnHchjaWMWA7MN3pB\nZGbFeLrJTxjiK4exYVHfWrAawwf9F+VL+bI6dZbtfhZEDF/Zm5PDUhNUnfAt\nB5LHY/7QOnkP8oJsJNj4tW1jeB9AQbDx1zA2w6velvaDE5TganhelIdgNi1K\n/XpteyxiIw4a8fVEQvQPUZRTl1SCMhD1rUMQsY0ZZAGi0eylV6wQHcNOX6G4\n3PR9DoTS3SC+xkKwRt1N9hHqgu6E8LeGak9WFlj1rmaZxGqmQIXtgB/FwQEy\nxcCeLG3qwZ3ELsLG+zhGqDOz8KVp1PujdEm7tWNeUXrtsYQoGp2LYorbQJl8\ngIqeLP6XwadntEfX9tcEubBMOfdFTPIMbUxne6/VIGlJtyFnBmNRJArW20ch\nmkD3n8RcSUa33p3SpGkF4XhWnaS8bVewJ2dRxZ5gyrLs33oRkOM6rqlbzW2u\nCq0r\r\n=nHO9\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","husky":{"hooks":{"pre-commit":"lint-staged"}},"types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"60728534b8a818e18c064e60d8d36de8d724b021","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint --typescript lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"npm run doc && catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --typescript --fix lib test","postinstall":"if [ -z \"$CI\" ] && [ -d \".git\" ]; then husky install; fi"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --typescript --fix","npm run doc"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.3","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.1.0","@balena/jellyfish-logger":"^2.0.2"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^26.6.3","husky":"^5.2.0","sinon":"^9.2.4","deplint":"^1.1.3","ts-jest":"^26.5.4","typedoc":"^0.20.33","depcheck":"^1.4.0","typescript":"^4.2.3","@types/jest":"^26.0.21","lint-staged":"^10.5.4","@balena/lint":"^5.4.1","@types/sinon":"^9.0.11","@types/semver":"^7.3.4","catch-uncommitted":"^1.6.2","@balena/jellycheck":"^0.1.1"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.0.1-renovate-non-major-60728534b8a818e18c064e60d8d36de8d724b021_1616467967367_0.5094470217637916","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.0.1-renovate-sinon-10-x-b604be429dd51ac5da21613222a4b73d04594a88":{"name":"@balena/jellyfish-plugin-base","version":"2.0.1-renovate-sinon-10-x-b604be429dd51ac5da21613222a4b73d04594a88","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.0.1-renovate-sinon-10-x-b604be429dd51ac5da21613222a4b73d04594a88","maintainers":[{"name":"somombo","email":"somo@mombo.solutions"},{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"6ad2e090e94c926a268bf7284f95ef02aa3da069","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.0.1-renovate-sinon-10-x-b604be429dd51ac5da21613222a4b73d04594a88.tgz","fileCount":18,"integrity":"sha512-hqzILMNra4ZfyFIA36CLuPCZtUZvWePfwPiy9pys8WQavDfekyPU2HhKBUjtyLegjAF7spnsjjGacOhFzRCzBQ==","signatures":[{"sig":"MEUCIGHMBOiPK7mfSXxn6BVeeyJJ/DvSH4EvOlAFFdSGKuAaAiEA3RpI4SqqS7cujYSwJofRI3BfON30VYx+15/0Vr7xYQ8=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":31166,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgWVgjCRA9TVsSAnZWagAAUAoP/0QEOrLlJC34pE0tsvLe\n/QK6j06lEXzrVoleZ97e/BSiESpbZACVroi4Bgc3z6s78z61mHucsvvX87CU\nDZcsvSznFy61LGi8K/ABn/pnLlIoZv7Zjz5489BVYxPYx6EeMoAZk07aHTH5\ndNfTJGaHLwpO49b0Z/IZNSSN5F4v884paf8ytOw4XuUgTCPAU9oduntkkKsF\nxaWvbqjSgsX6lydNUaEZCA6SqSsJtdgJAhN/uS0nk4sF4gKV6HlWlDR+ImkI\niDSI1D3ORs4KMCZDBLm1uJ1HYurJaRMweNuK1gc7qU3JjbgqNXRWBy/fx2p9\nF8689/eYLltB9Xamv4pRxGg5heCpB94gmPaImk69c/gIE4KWi44/W2ol2rBy\n9+vayuBiQ1brp08xo+pzwoJsW7+ERJv8h5hKA3pLmDKoUe4Gbm1miu1T/rsZ\niFpiETmFX4QAsuzKELrj69waoepmHufjzyTJ6rCRTgaiOmKkfGa1fkm8rKoc\nSotB0N9NSrKSuhSckDlFKUZsOoJJOoyBp29Ushzs1Q3vnPz7eFhSySSqVRgL\nbQ3MWyXlRZ/34JoLwFIzOblJF/Wa4Ehx7ZIPAwTavM9dzqvUvPF8qL0PYNfD\nTWP/Pwjuq3O2SxpoQj2kNpDFhwijpWK+pGb8t7rEcSuuk+uZpVqUytE3mmd+\n+x7c\r\n=wHBq\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","husky":{"hooks":{"pre-commit":"lint-staged"}},"types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"b604be429dd51ac5da21613222a4b73d04594a88","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint --typescript lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"npm run doc && catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --typescript --fix lib test","postinstall":"if [ -z \"$CI\" ] && [ -d \".git\" ]; then husky install; fi"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --typescript --fix","npm run doc"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.3","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.1.0","@balena/jellyfish-logger":"^2.0.1"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^26.6.3","husky":"^5.2.0","sinon":"^10.0.0","deplint":"^1.1.3","ts-jest":"^26.5.4","typedoc":"^0.20.33","depcheck":"^1.4.0","typescript":"^4.2.3","@types/jest":"^26.0.21","lint-staged":"^10.5.4","@balena/lint":"^5.4.1","@types/sinon":"^9.0.11","@types/semver":"^7.3.4","catch-uncommitted":"^1.6.2","@balena/jellycheck":"^0.1.1"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.0.1-renovate-sinon-10-x-b604be429dd51ac5da21613222a4b73d04594a88_1616468003447_0.4999422932320392","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.0.1":{"name":"@balena/jellyfish-plugin-base","version":"2.0.1","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.0.1","maintainers":[{"name":"somombo","email":"somo@mombo.solutions"},{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"766cf0fd400c9bf62dbd78b122bf00643c0dbad2","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.0.1.tgz","fileCount":18,"integrity":"sha512-p0kFm22tP3iHmG1tGekA4B7Xo6yA5iQvPjD+XmRpMpa/FJ5DlrWH8++2HX+0j0NJjS0PON5JN84UVHUdTVHetQ==","signatures":[{"sig":"MEQCIGDtAc6n+6vNvJ441pbSbjZfl9o3ab+0dd45MzRKk708AiB5cwDi3qTk3/kp6cyioPZ7x8MolTLt0AuOvlgTiVxBCQ==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":31126,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgWVjbCRA9TVsSAnZWagAAhdsP/jureyz3WhH+taUc6NT1\nDgtDsOnk0kHzTsJ45t7MAtviClQ+6VgfbcStvGX0tKjk/70j8ycsZBXSNloM\nk8kLS8ifpiOkECnYw7kdvmatGy+P4IewK8doM2a1hBUnoq9oXfrhwzpv6P37\n1CTAG9PNl9r0WUtWBR7NDJPk9Cp9XQQhvV+WokXUcQpecvul3c1w5xtA66bl\nvRAvBuT7XQiUCXwj4SqmX5LUA1HDCB5AdViADydvjCy7z4nsED6whM2zDCzV\nJimUL8CepwW3uyUSXPdamN0chOKPCkxtog6joy1sCmf6i4UuKh9EC+KNsIBe\nWKV22/BVtLbrHH1Mu30KEqhgj/TzQo3Vy/O6M5kuYQTnSQim8CUTW88jnpvR\no2aZ1zUejYgDkRCFT633mKyucVFhCs7a5OI2BbdDc88zA3qh7KXPylv/A2Sc\na2URgBw5/E2w0eRy6t6iVoYpL1OY7gbEd6xaggBgnwAlvOL9bHtgAk0/4mws\n91nTYNnsVBrRut+KAlV7yhL/Skc9DGHLg9UfpNmzJeKAtdFuDPoJNtUYAyL2\n6pvpY6eR6e8lxayx72GIm5d6vXapUeWs3xMfCWSUVilveWT2JAhTSSWc0ikd\n4Zuo7He3rq8xuFMDYNclu6gUGBgBNn4C/Pkxls6+maaOGXBYAxHV0JfKYMhc\nwV5W\r\n=k4f6\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","husky":{"hooks":{"pre-commit":"lint-staged"}},"types":"build/index.d.ts","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"8c1053e67b543ed635f329f34bc1ae8ed66120d4","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint --typescript lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"npm run doc && catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --typescript --fix lib test","postinstall":"if [ -z \"$CI\" ] && [ -d \".git\" ]; then husky install; fi"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --typescript --fix","npm run doc"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.3","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.1.0","@balena/jellyfish-logger":"^2.0.2"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^26.6.3","husky":"^5.2.0","sinon":"^9.2.4","deplint":"^1.1.3","ts-jest":"^26.5.4","typedoc":"^0.20.33","depcheck":"^1.4.0","typescript":"^4.2.3","@types/jest":"^26.0.21","lint-staged":"^10.5.4","@balena/lint":"^5.4.1","@types/sinon":"^9.0.11","@types/semver":"^7.3.4","catch-uncommitted":"^1.6.2","@balena/jellycheck":"^0.1.1"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.0.1_1616468186984_0.15326263107753357","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.0.2-renovate-sinon-10-x-ae519d0e7aa6b3bdcbb911b97367481bfe82c297":{"name":"@balena/jellyfish-plugin-base","version":"2.0.2-renovate-sinon-10-x-ae519d0e7aa6b3bdcbb911b97367481bfe82c297","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.0.2-renovate-sinon-10-x-ae519d0e7aa6b3bdcbb911b97367481bfe82c297","maintainers":[{"name":"somombo","email":"somo@mombo.solutions"},{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"1f57b2a6f9b0c6ccd8a1dce409a2b555f529b01b","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.0.2-renovate-sinon-10-x-ae519d0e7aa6b3bdcbb911b97367481bfe82c297.tgz","fileCount":18,"integrity":"sha512-VNi8HTd5mmP+gl7cxnI2dN7YG5vtmYcOYhmY6bx/xh4QEauxinXwj3bfF5U88gZCgoOJaT8Uod1I5MSLJJ2I3g==","signatures":[{"sig":"MEUCIBEVIbEdZO1WlCp6RypeKMoS6JNfSIw+xO7hchVZaIBrAiEAnSRpT+TGOGKG4P0axUWdpGxdq9uycKNah9rzGzp3U1w=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":31267,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgWVmYCRA9TVsSAnZWagAADHQQAIhw4PSegDof5x2Z4ACz\np6XEQlMJvENyi5i6i2BC5jRTvbYz5SaAEw/QssJoEOuv23BtT0z5YhTSky8z\nIdIBjT4fvxTZHGVEYcAuoSmHmw9KfI102n731Cj2j/DPUd0p8Wf3CbJyxXYL\nXUqPh/3Fbu2maMiNXOkR6d91PsPCgYs1+EQLi6LoU93efu/woMGiXajrzxRF\nP3T+Yb0m7f/7c8bazNy1GWtlyDrBRzbD18aA7aEdTjpPda1rgTWL6sLhnzF9\n3z2tBIPSjtFEwkRG9pZQ1Wiuc51wa3YPmt37ycCpJUL+IdvTcnyAhwK5IUjM\n767OQkK4wybBSzOwwBmb5INDXnwQFEp7Rkh6zgE8nMGpFPuIBJGMGVdp7rqP\nP+9gPkN96HKVmxZh1DCpITPw93B9a4ZzySAoCZqUfV06jBrtQzLqxoxgTzKl\nK6A8tlnm4Oa4JQaKcVcoaXruX6h77JVymIFDdHNJtQ0N4nSOHhYqj1OSAvN9\n1uXX1I0M26a3RE/r0rs4cuTpAMG/MEDp8//aXhYArIz0u0h1o96JSbzB8uRn\n9tplY1fGGEiU23b3/T0Ol3jvbV6KpwqT0Ggyr2dAri6xtVXmQqYu8vy0D43F\nTuxVJ6Mpt48ztwWAkNtf4050o5swkzTExgPtKRSVV1C7aWRIPEkhZGgUNUP0\nG2cw\r\n=lbvM\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","husky":{"hooks":{"pre-commit":"lint-staged"}},"types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"ae519d0e7aa6b3bdcbb911b97367481bfe82c297","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint --typescript lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"npm run doc && catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --typescript --fix lib test","postinstall":"if [ -z \"$CI\" ] && [ -d \".git\" ]; then husky install; fi"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --typescript --fix","npm run doc"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.3","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.1.0","@balena/jellyfish-logger":"^2.0.2"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^26.6.3","husky":"^5.2.0","sinon":"^10.0.0","deplint":"^1.1.3","ts-jest":"^26.5.4","typedoc":"^0.20.33","depcheck":"^1.4.0","typescript":"^4.2.3","@types/jest":"^26.0.21","lint-staged":"^10.5.4","@balena/lint":"^5.4.1","@types/sinon":"^9.0.11","@types/semver":"^7.3.4","catch-uncommitted":"^1.6.2","@balena/jellycheck":"^0.1.1"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.0.2-renovate-sinon-10-x-ae519d0e7aa6b3bdcbb911b97367481bfe82c297_1616468376425_0.276855458026775","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.0.2-renovate-non-major-cc0932d3a2d444d4abbc129fd979978c39edc4bc":{"name":"@balena/jellyfish-plugin-base","version":"2.0.2-renovate-non-major-cc0932d3a2d444d4abbc129fd979978c39edc4bc","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.0.2-renovate-non-major-cc0932d3a2d444d4abbc129fd979978c39edc4bc","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"573f91c3588e984c3ea2c3c58dd64e663fe7f2a5","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.0.2-renovate-non-major-cc0932d3a2d444d4abbc129fd979978c39edc4bc.tgz","fileCount":18,"integrity":"sha512-eQYZgTkUqPbzP1VrB1Kum04ioCGFQklPV8PbP0J3v6/gX/2lIqwFEAld+jYvUektsGO0ChyA8RV/aTRXH0iSag==","signatures":[{"sig":"MEUCIHrFaI71UsHuyR5B9nqFTbPdulVWdkOdbLlOgmPnITJiAiEAuoaUeR1kWQrmAtcwvgxGnLMzEPIMo6+kN4o9gB3Pn00=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":31287,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgWr9TCRA9TVsSAnZWagAAHHEP/jGpjH9xJ5kv77EiBYgk\nk8IBYMjfRU22PEGHPYgZbDFimbYVePggfT0He53urL8yHJpP2e0Qg93hWyaM\ng7dl2ZMi2tqPm6US0xsfNJGjGaUgax5bQn9hA4ET8VH1CWtoLkE3IvGU+VE6\nsH4+CPr8V0rsnYNEM6O0xJKRQc2bWFGYa7YZpuWRoHp7b4aEjNNLDo60u4Ja\nxv8ij51VRNR85WTVndmi9S6MXIEaNbgsBt4Dz8v/8yk1RhoJwfpfyuqOzQ5K\n/xCNu+8B+S9OWDwwoj6DBPgHecv7H1y6H9UqtzPRquxeZYN/oLlKIRmpyoms\ndNdK9phmi7G16X9ZY77Q1m8U4QCrMEbkhs9AJgg0sKYFqfh9Lb+4cXQrCP0P\nMfmEIPXWxcM93dzeFkE47tC4T66ofn0hj5QR/CXOZwd8xtxFG7k16Od+bp/P\nCMfiKaCsOYHNR4ZEP3ZO18JDe6h5OyOjyKGA/OP96+4sP4TceoGhWX8r5iJI\nup6CLMTDe5kDXbKrLn3Sh+bqohqc8CrPgDDMh7YXNF+/ie0aWFrx32qwkkjm\n/1j41mIxw6ix1jKIrXfA3RvwF2BsgZ9zhlAUU6FMiEfKmzfYAppg/ccSn2E0\nLkqHSIqbbX90jcyhAbJ62ZFokASBfP/fK//gDoxlcKhdwo9iy1qLx9wqgoKy\nr1Kd\r\n=Q88/\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","husky":{"hooks":{"pre-commit":"lint-staged"}},"types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"cc0932d3a2d444d4abbc129fd979978c39edc4bc","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint --typescript lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"npm run doc && catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --typescript --fix lib test","postinstall":"if [ -z \"$CI\" ] && [ -d \".git\" ]; then husky install; fi"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --typescript --fix","npm run doc"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.3","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.1.0","@balena/jellyfish-logger":"^2.1.2"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^26.6.3","husky":"^5.2.0","sinon":"^9.2.4","deplint":"^1.1.3","ts-jest":"^26.5.4","typedoc":"^0.20.33","depcheck":"^1.4.0","typescript":"^4.2.3","@types/jest":"^26.0.21","lint-staged":"^10.5.4","@balena/lint":"^5.4.1","@types/sinon":"^9.0.11","@types/semver":"^7.3.4","catch-uncommitted":"^1.6.2","@balena/jellycheck":"^0.1.1"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.0.2-renovate-non-major-cc0932d3a2d444d4abbc129fd979978c39edc4bc_1616559954527_0.7694444206201398","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.0.2":{"name":"@balena/jellyfish-plugin-base","version":"2.0.2","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.0.2","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"178eca721fd8107a431f367c93189b800eebbf9f","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.0.2.tgz","fileCount":18,"integrity":"sha512-G/W6Ubiz/b87KmQJ2LuFGDsLHXmGXy8PsoVeLQSCbMB4nXi2BGnMmVJ/K/IEUiS7ZFJED+QxYSrGKd3boFFDIw==","signatures":[{"sig":"MEQCIAQB56kBK8ZwI3aSqMADFivy5sdt9Xq1NvmCwwGzqKhRAiAvqpkT5uYlAJquXCVxh92S3mYsLAJKmqpwNMx2//IW3A==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":31227,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgWsAjCRA9TVsSAnZWagAA6lYP+gKcDZrRZy3xWco1le6R\nwHq4vSFDaAO3NKKJ9ynsDiH0eNTP1Kf+xTzsic69bnt7xulhGT1tVCQVV/dS\n2KAQfo6Ag1FyAazrD+O9YbFTBrNJsY5A4UoKS554+P0Tx2V8Qq5yRCs+xnnm\n3YAcFTlXsAOFcvA7gDmRKUOSfNGxM3EmtSVRVLgY7rlFzZ4KdxGnLVXrVpQu\nRJNCn8Ut2BujRXLYFxKXbSFrGk2K08268teNAhI17msoZg/UpG5x3uKA+2CH\ndcL/PfoqmBf5indHOcw+/BTQsbKQaynv+TS2qTvrlzCUCcyqOIoR6GLFsL4M\nkst2O+INZkl3pLUrp33kV+iW5Gj/wD8OJfCa4IrJ/YXhA2aBuWx3zKyqg9iW\nYgWCqHIkZAwJVZDNC6aoQl8UHt0aBTIMzVSZx3ZsUENAV+GQU/rVI90dZ5fB\nuVomdY9nV9EUmRcyoZb1lmAmePjplR/yeVwfFmUdVArmXP/m07RbeEiCw7QO\nfn66b1sZuv6NkS+XjL4LDhnoZ2+8+h3l1i+hkNMRUDPDG4AW6WCDX0ZBb3FD\njfJn3owx9ESPMtwcuWzxQhz0lLjwZUhL7BpveFgJlLhjIBEWq8pIUcMiA/PC\n6ineeH9q6kVS/gFAxe3tb/sATbqXIK/9xvFp22Qw2Ee1EGe/t2ME2GjOBi+V\nO0wR\r\n=/xaB\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","husky":{"hooks":{"pre-commit":"lint-staged"}},"types":"build/index.d.ts","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"fef7d6f0780c9aa6df1ccb8f8039187e17c26ec6","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint --typescript lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"npm run doc && catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --typescript --fix lib test","postinstall":"if [ -z \"$CI\" ] && [ -d \".git\" ]; then husky install; fi"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --typescript --fix","npm run doc"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.3","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.1.0","@balena/jellyfish-logger":"^2.1.2"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^26.6.3","husky":"^5.2.0","sinon":"^9.2.4","deplint":"^1.1.3","ts-jest":"^26.5.4","typedoc":"^0.20.33","depcheck":"^1.4.0","typescript":"^4.2.3","@types/jest":"^26.0.21","lint-staged":"^10.5.4","@balena/lint":"^5.4.1","@types/sinon":"^9.0.11","@types/semver":"^7.3.4","catch-uncommitted":"^1.6.2","@balena/jellycheck":"^0.1.1"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.0.2_1616560163056_0.4877713888047628","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.0.2-renovate-sinon-10-x-797ef467a9ddcd368ee83d1f820ff6f6223d02f5":{"name":"@balena/jellyfish-plugin-base","version":"2.0.2-renovate-sinon-10-x-797ef467a9ddcd368ee83d1f820ff6f6223d02f5","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.0.2-renovate-sinon-10-x-797ef467a9ddcd368ee83d1f820ff6f6223d02f5","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"22abeece8b5e4fc9b68b991680f58316d3410bd2","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.0.2-renovate-sinon-10-x-797ef467a9ddcd368ee83d1f820ff6f6223d02f5.tgz","fileCount":18,"integrity":"sha512-nQl0pQHshTh+ivBTKTAFYEwuyb9AroXC2f+uH3aCEbeG7Lw+diLIyHgOUIdlF5s0y2nTAFc71+OI1VNjprKnFg==","signatures":[{"sig":"MEUCIQDkSx0oBiCsQFqSzAJIG+QrnZNiokgqBI2bm4h2LZ85WwIgLCfyn2VAB6umhiPUM1wOmSP5BPNGI5NE3vMqUDIkg7s=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":31344,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgWsDtCRA9TVsSAnZWagAAFgAP/io8yMRMA6/tpjzwP1AY\nY41y9SAJFlZcnX6lLgTVPbxLZj7Em/keN0YXd6q8e/gOqFvnl1L24U2TKPAP\nTlL1X8cIR5KURe9POHZsjXRiphAmrgGPjbOMPayFLhbfEZKIpXZOyBH4zCYh\nfkbfLQNJlTSmYvUi6lyMEplEsWrDo+fEsbB5EAPjqziBnMkvk8bHyvfb1sB3\nSQBCC9DrKMn6Ax3aIlOqA3iUJNQQUzF0KlBgbmzh6H9/SyIk9iIlnz3tZjjv\nyymE6ZIu9Rn247jaZw0AOZvrZMqqeWXsOfjRHRq0hGhHJH26SKWAYRrpAaUr\nOk41mrKlR2a5l4QRP36w3VBE/8O99r6QujOfTPG2+ioFNBwFRGJTY1o97Mje\nXMjIVK5Z4zABSk5tvkpHDQKBWflQ3Yv1QFTA1Nj6VCxPqW5BQn+FZjB3zXk+\nn/xu85/IsZ06gHjdUzNNrZWjMx/3S2JKOcr/Njl2XKnMRFWa/q7my11yGc3s\nYY07oArpJJaTKW0Qwyf+nXKijquGVkESfiEh0fmiPEYsDbFr9mSSP5HWYndT\nYYiaG+o31K/q5r8uo890KoR9McRDg0UEBXWi8fe99V+wzErRjMyfurtHrWd/\njEOt3Ml0oAjQ40hrX/55b5gRBuqC2HYw5nETilMb6Fej5fFwxWQDYEpfC46L\nr8mV\r\n=9Mip\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","husky":{"hooks":{"pre-commit":"lint-staged"}},"types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"797ef467a9ddcd368ee83d1f820ff6f6223d02f5","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint --typescript lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"npm run doc && catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --typescript --fix lib test","postinstall":"if [ -z \"$CI\" ] && [ -d \".git\" ]; then husky install; fi"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --typescript --fix","npm run doc"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.3","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.1.0","@balena/jellyfish-logger":"^2.1.2"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^26.6.3","husky":"^5.2.0","sinon":"^10.0.0","deplint":"^1.1.3","ts-jest":"^26.5.4","typedoc":"^0.20.33","depcheck":"^1.4.0","typescript":"^4.2.3","@types/jest":"^26.0.21","lint-staged":"^10.5.4","@balena/lint":"^5.4.1","@types/sinon":"^9.0.11","@types/semver":"^7.3.4","catch-uncommitted":"^1.6.2","@balena/jellycheck":"^0.1.1"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.0.2-renovate-sinon-10-x-797ef467a9ddcd368ee83d1f820ff6f6223d02f5_1616560364782_0.15285730707022216","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.0.3-renovate-sinon-10-x-c0dbd9833d877da4e664c43b44bccae6a527a9ac":{"name":"@balena/jellyfish-plugin-base","version":"2.0.3-renovate-sinon-10-x-c0dbd9833d877da4e664c43b44bccae6a527a9ac","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.0.3-renovate-sinon-10-x-c0dbd9833d877da4e664c43b44bccae6a527a9ac","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"dd5f4072bfc36ee765e9d2324289db4db635d817","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.0.3-renovate-sinon-10-x-c0dbd9833d877da4e664c43b44bccae6a527a9ac.tgz","fileCount":18,"integrity":"sha512-S5RZqU5tNiKhcCBwVIrav5eE+6NMvLpdHeimvkUojYwpuKRRJuUsQs51Pvbtt/j8ufQ9ciVwH5Nbst3lX9YLfw==","signatures":[{"sig":"MEYCIQCKP4ABurQVnQ62hfMLBYB1CEvsYXh2axoKuti7+su/cAIhAO6hnCqNT9kaUCF/QbBELMaT6KLxH/dki+jSeSgbNpOQ","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":31368,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgWsFoCRA9TVsSAnZWagAAxqgP/ifHUIOQufXsGRaGVw2O\ngJY0H/fP/zCAa4duDx+ESIzNiAq2M8907dW1BxoJzwwZR+cKREp39YQIZWRh\ntCHjWh533DnLwjkEZ9An6BvyxqfuTG6ea6CUhavLGV0PFGliCxrOoCsG4lP9\nXmAsqXj5E3BFt+9v9gXbUNbSGkOjgS31EKNvkX+geO9GzPcEB66QHNYQNdwO\nzMFVlts4hZAWmbSZgQLFM9L4KvmEgIFOxBjo8nIXMlSXF4KET2zNb/0BT6/4\nPaCHErFJfyc446Wg8nf6KEWpvWQARbRs8j+WiOM+DXjSd45r4m4rBLoaBxNe\n86T5CFsEN/qD+vwH3aB/ALdGxvfvENyrWuuySEnHyR7eUuGPdvtLdeCsFCXa\nmXoJHdauCvmIioZLlwmibjfS0WrPG7GV+/tMdIdJpqdbptsjBiNrg304hACH\nG6VZFs4q6T6WoG9ML2h+/dolQ5vY/fsPCraPIsfWGd5fG62P7GTfYhyaRPr0\n7+2oai8e1B4/WCPFYn+dXib1dOZcYWq6JFyXgB2xhKPFdQ2PPnVVwkQFC3Gu\nlRy5fIhz8J/VBpt6A/VEMVBJv0cI7Oht+Pk1S+Vg/ZwGMV7NToSjkpa/0w28\neY4B/vnmdIepaABqjQNZTEFY/D0NAidZixaYR96TUiC2RB20B1DTQwuUMjyq\nHUdf\r\n=0zWT\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","husky":{"hooks":{"pre-commit":"lint-staged"}},"types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"c0dbd9833d877da4e664c43b44bccae6a527a9ac","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint --typescript lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"npm run doc && catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --typescript --fix lib test","postinstall":"if [ -z \"$CI\" ] && [ -d \".git\" ]; then husky install; fi"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --typescript --fix","npm run doc"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.3","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.1.0","@balena/jellyfish-logger":"^2.1.2"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^26.6.3","husky":"^5.2.0","sinon":"^10.0.0","deplint":"^1.1.3","ts-jest":"^26.5.4","typedoc":"^0.20.33","depcheck":"^1.4.0","typescript":"^4.2.3","@types/jest":"^26.0.21","lint-staged":"^10.5.4","@balena/lint":"^5.4.1","@types/sinon":"^9.0.11","@types/semver":"^7.3.4","catch-uncommitted":"^1.6.2","@balena/jellycheck":"^0.1.1"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.0.3-renovate-sinon-10-x-c0dbd9833d877da4e664c43b44bccae6a527a9ac_1616560487903_0.5100190772018822","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.0.3-renovate-non-major-e9277ed52576a2cbaa4ecc339ce6fc646d563b45":{"name":"@balena/jellyfish-plugin-base","version":"2.0.3-renovate-non-major-e9277ed52576a2cbaa4ecc339ce6fc646d563b45","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.0.3-renovate-non-major-e9277ed52576a2cbaa4ecc339ce6fc646d563b45","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"5b51c837442fdcebcea9bc56a3b79058cb5344b4","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.0.3-renovate-non-major-e9277ed52576a2cbaa4ecc339ce6fc646d563b45.tgz","fileCount":18,"integrity":"sha512-e4aV43ihHUc2JfOLe+hzU8tkXwdT6MGQs/lCUjEPARe05kD9G+0HFkQKKR7s488JgrYzIT0VIDBeTDzKGuKhzg==","signatures":[{"sig":"MEUCIQDl0zxQCBIbMkpSwERoHL5IX8V+X41T8QS/xePtg8xbIwIgYfC2iziUTWuyUvPNjAWmFF2Y0RhotUsQmnmvXq/H7sA=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":31388,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgWsJ2CRA9TVsSAnZWagAAOQsP/0AoumIkQHGy/m3OEuK2\nSdFMjlQ2dbbO7SBPgrnJmT2eJWxsFMncFfA5dRmxs2RkxiNcgKLjJgtCltGe\n8EZSvCE7tfGCkJMCMAJKF0v/iwxdpJ0qOtQLXeLh6l35fshFO5x7RLCSjsL2\n8Hu3Uhp5HZdISTuZMxpK8BLr4gHjgXU+y3fHuX4qdIHuCC+b4cw/t9FtRLeR\nNm3yCSA0rYWYLbGajQoUlWYz8M+mWOkj/Asg5AJ3ERxIJnU68J4coZk3DC6/\neCOg3RcMw7AXebmEPfmlk3Md0qi+xms0t40fWCPC7n11ptX3GfEFQQVFhlMM\npdmw/jEAXbQMrEl6PZCIXssoByFMiwE1Dkt+frIFGTKt65y9TD8lh7o8VwsC\nytLRNohotyooPusBBHMFhmvG7xEYuf/fLRQC+WzpIqryiKEW/Z8Wo4Yuau/2\nkuqcnu98Mjbbu/qBE9kR9oix7pL5DF5orKj3+cd5y/pb3oCx3z9ctJM7DKaM\n3tdhMbxU1tmcXb312SGlIJES/FMIOehwyzdU4mkHDEcbX1Q316qZtloxPebb\nkhPb+FXWwIhqSdHhn5/p/oaxU0Ma5TdrZmkN5Pn+fdmnIYecBFiZ9/bkaMip\nfVCoofCVNZ3P42rijKuD+C8yIBax+NGZnUZaAyv/hjnGYVaNaYemzCUAC9Py\nPuBJ\r\n=5QvQ\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","husky":{"hooks":{"pre-commit":"lint-staged"}},"types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"e9277ed52576a2cbaa4ecc339ce6fc646d563b45","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint --typescript lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"npm run doc && catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --typescript --fix lib test","postinstall":"if [ -z \"$CI\" ] && [ -d \".git\" ]; then husky install; fi"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --typescript --fix","npm run doc"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.3","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.1.0","@balena/jellyfish-logger":"^2.1.3"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^26.6.3","husky":"^5.2.0","sinon":"^9.2.4","deplint":"^1.1.3","ts-jest":"^26.5.4","typedoc":"^0.20.33","depcheck":"^1.4.0","typescript":"^4.2.3","@types/jest":"^26.0.21","lint-staged":"^10.5.4","@balena/lint":"^5.4.1","@types/sinon":"^9.0.11","@types/semver":"^7.3.4","catch-uncommitted":"^1.6.2","@balena/jellycheck":"^0.1.1"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.0.3-renovate-non-major-e9277ed52576a2cbaa4ecc339ce6fc646d563b45_1616560757842_0.6101593677930464","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.0.3":{"name":"@balena/jellyfish-plugin-base","version":"2.0.3","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.0.3","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"76589e60e02252e4c61d0fb62fa587f100ff2be8","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.0.3.tgz","fileCount":18,"integrity":"sha512-uKrLmwVImJpPsJ42zqfXqN9tzlBA1vzfDU8QpqOvOopB8eOKS6w/7WR8AjW0Xtb16SjIN41n1eBooULvppjUGg==","signatures":[{"sig":"MEYCIQCT9TeN40wly2COEYsBRQXepmRjZ3vQ0NPbLab9fEXlZQIhALenLppN7bJFC140CjvKSdeIQPJkLEL62XAhOz31BKD9","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":31328,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgWsM7CRA9TVsSAnZWagAAY4wP/iDMr5e6V+GKp4xZRjFZ\nPw6vW24/ZBmoFU9eOnPTl1yljQv8L63ek7tAf/EQML7E0TYsWfTj24vT+n8z\nu5zStO+/tv8VQHapqPDI27IUqi8maRY2m+P+nNSHVBcSfOMYkqT1zBEdwajc\ny3gh3xG6DKH1JvU73y/HAoW2dtMaCqRfd4uHXV1kgWDhtowkEVQSAd5M8mL/\noQVqN0Q3W43rSImKmOJxEtsDgcfqFFxbUPgtbZiXIX4pYbAp/m/MG/IRNdUy\nqvy+MAshyELrmzndXyKXijXBUMKeAWEAxWvRaiIcqH0Vbv9U3Vf04I6cWhaZ\nNMewLpRkGov56OLayAfjMBU52zw1QWfd86FpmiDIaYPfIn1tLeBMn0MsDkf2\nnQHYTkHCDKn1q20Xt60YBIIyanRIQp6GvV12TSmwG56dR6DTcU26aacV7sgw\n/wd8YVct6rTHvicaWLfVnpY+TJ7ZZEczDzdHJSSFFK73sbSWrRXLOEveY1dT\nsyOaeVOv8DfOpMm6OsbObGpbe9hDbCdSfBJgVAMp3puTeaBgjrE0rEN6hYx/\n5IPkFLLtHdggcCCwSkwH+6iLUKy1xOQvg3+/DS5SHpaiVAfvCi5Uuae6xuI6\nxKFvJsBu0FIOd9RTXAwFePF0JVrKWXNE832AvcIZD2tvOGBqRzmgL13iNdD5\nDlKu\r\n=r17B\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","husky":{"hooks":{"pre-commit":"lint-staged"}},"types":"build/index.d.ts","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"60246cd55e6ec2733dd68f213cd69a8974b02f88","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint --typescript lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"npm run doc && catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --typescript --fix lib test","postinstall":"if [ -z \"$CI\" ] && [ -d \".git\" ]; then husky install; fi"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --typescript --fix","npm run doc"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.3","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.1.0","@balena/jellyfish-logger":"^2.1.3"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^26.6.3","husky":"^5.2.0","sinon":"^9.2.4","deplint":"^1.1.3","ts-jest":"^26.5.4","typedoc":"^0.20.33","depcheck":"^1.4.0","typescript":"^4.2.3","@types/jest":"^26.0.21","lint-staged":"^10.5.4","@balena/lint":"^5.4.1","@types/sinon":"^9.0.11","@types/semver":"^7.3.4","catch-uncommitted":"^1.6.2","@balena/jellycheck":"^0.1.1"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.0.3_1616560955232_0.25061476920452574","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.0.4-renovate-sinon-10-x-769bc4d19b5bb247637be4e364829808d737e37c":{"name":"@balena/jellyfish-plugin-base","version":"2.0.4-renovate-sinon-10-x-769bc4d19b5bb247637be4e364829808d737e37c","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.0.4-renovate-sinon-10-x-769bc4d19b5bb247637be4e364829808d737e37c","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"5a49d4febadec76bd1af677f0ab915be328094f9","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.0.4-renovate-sinon-10-x-769bc4d19b5bb247637be4e364829808d737e37c.tgz","fileCount":18,"integrity":"sha512-h3iPeR/yiZftcKbZg6e2BGnZ3ioN40TS1nnhThdzxRJBggQK5xA7xSzmA/Ud8RonysJ3OxMElxM+p/oIwqqRWQ==","signatures":[{"sig":"MEYCIQD1QyabVolTk5k6hzGd2/5QOz9uoStbtHXYEEuFQh/ANgIhANinNY8GXcO7gjtS9+z/YZzNI/wcmyv09NhxhN1m9/na","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":31469,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgWsQWCRA9TVsSAnZWagAAGd4QAKIpGjOSyaSEehnsydT0\nuor0nddQ/wBgCoD0uDOQdN/IJccfGOWdfw71PIWrTCaTASb6fBnSM/NGfFq8\nz3pgs4yUsmYExRzR0CsUoIL48HEFB9T+uVb/FkDxjBJdblZm2s+MJwibyucg\nWDRQU0Haa6LRMld3T2t8MVkXgXf57XIQHRhHG27kxU9SiLIOL/HAPRO121Rr\nxnqCb1x6nMmA2dUFK6tJhP80ePtPKbNDQr7Z4yLFCMojW6IHMyodXuZXQuiM\n7x6+MMTJW6TJ6SgO+3LJ0c2vNJy6BcuGVi65c3dWc6VtH75J6bZbAnBZE/Ke\nzA8zGJDe39xaXZnIwh5aPamlBklOIst2YQmRU47cppvQ/K97abNFXCrLmAcU\n9DjeO4j2jX+Dbxsbfj3mkAL41GrzEXJVw+iC0fiJ21iPGV0b9e70YFIDz2al\nmN6Dvw8HmTrf67TDrhOVX/penIyrDDhSLYedrabqfCSdKv2N6WhMzAOd0s9V\nG6yF+eaVjjYowao9lnD50nI5AdvjKJ6ZjhxIc4n4SAKBiLwqhBmYcwN8nP/U\nW6bFZ1zl8azbOYCOhPL0l7TqBa/q4zaMwlfmY1Rc+4vw4hjgyuUGT9rRxouG\nHgWYX+6YsOp29hITJ/wnWjqEl9ahQ3UOl30mbixyZJkK3fQDC6MSDVNDLVzH\nRRiX\r\n=jeaa\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","husky":{"hooks":{"pre-commit":"lint-staged"}},"types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"769bc4d19b5bb247637be4e364829808d737e37c","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint --typescript lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"npm run doc && catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --typescript --fix lib test","postinstall":"if [ -z \"$CI\" ] && [ -d \".git\" ]; then husky install; fi"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --typescript --fix","npm run doc"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.3","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.1.0","@balena/jellyfish-logger":"^2.1.3"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^26.6.3","husky":"^5.2.0","sinon":"^10.0.0","deplint":"^1.1.3","ts-jest":"^26.5.4","typedoc":"^0.20.33","depcheck":"^1.4.0","typescript":"^4.2.3","@types/jest":"^26.0.21","lint-staged":"^10.5.4","@balena/lint":"^5.4.1","@types/sinon":"^9.0.11","@types/semver":"^7.3.4","catch-uncommitted":"^1.6.2","@balena/jellycheck":"^0.1.1"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.0.4-renovate-sinon-10-x-769bc4d19b5bb247637be4e364829808d737e37c_1616561174141_0.9885983179831115","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.0.4-renovate-non-major-43a0a3bbab07d0ab274ffa8b91f5287feac44e9b":{"name":"@balena/jellyfish-plugin-base","version":"2.0.4-renovate-non-major-43a0a3bbab07d0ab274ffa8b91f5287feac44e9b","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.0.4-renovate-non-major-43a0a3bbab07d0ab274ffa8b91f5287feac44e9b","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"a8e0edc07873cab66c5b4c305264186885668ded","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.0.4-renovate-non-major-43a0a3bbab07d0ab274ffa8b91f5287feac44e9b.tgz","fileCount":18,"integrity":"sha512-nZ594/DvWg4OkzbjG9K5eLNff/BGdr6VCTS+cW4pb7qN2FKQcaSn72vbXvBBpdUoF3MlYWUYCag4zi02ZJkEGA==","signatures":[{"sig":"MEUCIQDqEBVVzxKCFyUQAepalVzE2YScmJsqefJsJ5EbLLUKDwIgfuaGxNAM/qzaszd/CJsG+ckXW6nDMyTCHQsbw7Lo7R4=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":31489,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgWxGlCRA9TVsSAnZWagAAbOsP/22g5s1BIg6QkG6Pq28s\n0agwzPl+BGu44qNNSlfOfBJrwClTlU5L8AkdombQFSnUhGKuY9lhmv65IDAN\nmZUjWLmZdCssHnikXzFyapF5uos5Cax1HdMgfvvnNz7xdHCPktYKYtDunivD\nEnQt4CJBpfDZVaPjW1kG15aiH6MeaoQVa4ivrPD81N5eCYQMuDIEKZfUAVNl\na28CIidyVYDtf08ommA2SYwgZ3miz/Af9ZpFb3Sm5UY+W851YwlZ0kCqDCta\nBZ2u6TX4GPyrj8urtz4CRRU9FSNIljVg2fJaSSnwMJ6l1CSZcHkVzjoP8SO0\nQz24DwI/W4pygEySDytccyNh8b0z6bregnSM90tyfeMUaHl3NKth6IWnhHCV\netwTavtjHlmr3f22NS8cllR/RsG1agmNXDJPRIo+BkL26tylgVMNhuUFoXn6\n+Xcek/ZGsv8eZojfnrjCJfAiyrgAy98ke5SWL5cA89WjipaHk1Gkp+Sp8JD2\nIhz2GVta8FSn6DDA2UvVS/kdS3lglY8XFuUygxLXZoN8j6ETXcSwEtKLl7O5\nPUjMzY3TpHxiSnto1OXAGAU6UuFX4QVMDQ5Tz5JpvPQ7BwfDtN0y/9XOYzo/\nce63OV/LDXgz9eRydIxWtdZBaBKqyLd2Trl933R7Cae2rB+OzlrTL/10oPLD\nhcTQ\r\n=1jXR\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","husky":{"hooks":{"pre-commit":"lint-staged"}},"types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"43a0a3bbab07d0ab274ffa8b91f5287feac44e9b","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint --typescript lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"npm run doc && catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --typescript --fix lib test","postinstall":"if [ -z \"$CI\" ] && [ -d \".git\" ]; then husky install; fi"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --typescript --fix","npm run doc"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.3","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.1.0","@balena/jellyfish-logger":"^2.1.6"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^26.6.3","husky":"^5.2.0","sinon":"^9.2.4","deplint":"^1.1.3","ts-jest":"^26.5.4","typedoc":"^0.20.33","depcheck":"^1.4.0","typescript":"^4.2.3","@types/jest":"^26.0.21","lint-staged":"^10.5.4","@balena/lint":"^5.4.1","@types/sinon":"^9.0.11","@types/semver":"^7.3.4","catch-uncommitted":"^1.6.2","@balena/jellycheck":"^0.1.1"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.0.4-renovate-non-major-43a0a3bbab07d0ab274ffa8b91f5287feac44e9b_1616581029203_0.8753223585532857","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.0.4":{"name":"@balena/jellyfish-plugin-base","version":"2.0.4","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.0.4","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"21e84e3a0da7a67a78e230e7885b44b7e8f7d75a","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.0.4.tgz","fileCount":18,"integrity":"sha512-JycYfjToFKJ/extOfDYDYlAJtiwkEr69WQmFGIDucSFR6nvgT11VA6LDXxOCDgo0cUfmFgrufzYuK7gduK0Fyw==","signatures":[{"sig":"MEYCIQCJ0bziICKPtqRvtY/sV0Rs1/jxKlJUBAXeIUrjoUz0VQIhAKipXd5iWHdX47arF9OWgsvBa/L7SIhWAKXr8ezXDkXN","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":31429,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgWxJgCRA9TVsSAnZWagAA1isQAJ7Gh7jk75eOhvLLj3nx\nAUTqi/lBE/fuO1OqcaYbdFA8PCbosHImc1HdkciJB1TH5Z1prGMDxQHKT5sm\nnBAS5zoYnQu6zyzQ+0SgyEm0i5LHdKlTzfmgjA/7EmpmKzNeXg613K9kqxz/\nYmBsngXWz29FxBQR6pPG27NCPkeTZhW2TEtddNnj1BjTyREQkXeFss6FiPkA\nEZI2GkTEMZ2J6dx6xeJELU/uaxx3t3AeaWZKGEWfFxcd26jN65I1gM/HvU1x\newdvX4q2DQ2zHlmJSdU86HXCbZnXGHnClkXlt3eS5qTKeD6enT0rMQbkM67M\nN/EgJHz6JGugI1lU3X4XoC3DrWYq9/ijtdKAf7DpViimXWiz/ym4QVDciUJ4\nCw2re60lv9Jm9jx2lp5Y78W5DHAPyCoowjS4xEIYq+xyxIs9yUluO8IPTlCy\nwrDqxNqcbHbdFTzBShxSdGextrMPRiRBu4+IFpfwXkGHJOWWIafRawVSjteO\nehSiYT8Cagw+zNxsXJmj2VAhEZnwlyDhs8EwHhrjXrIpaZ2ZqO3LaGRIR8bF\nwa5/d0UsvweFsxYIB/ddxNVe+iy3dTt9w/azjOSEBkpY3beD4K540/O4CmOG\nHAqXzQRcttux6tgHj6uEb6C6+TFUV68Rwm1jusdoV8gbTsp9Zv+YAlI+/oxU\nmWrc\r\n=XYdL\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","husky":{"hooks":{"pre-commit":"lint-staged"}},"types":"build/index.d.ts","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"1c67c4593bead81044bf917243d83267eca427af","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint --typescript lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"npm run doc && catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --typescript --fix lib test","postinstall":"if [ -z \"$CI\" ] && [ -d \".git\" ]; then husky install; fi"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --typescript --fix","npm run doc"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.3","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.1.0","@balena/jellyfish-logger":"^2.1.6"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^26.6.3","husky":"^5.2.0","sinon":"^9.2.4","deplint":"^1.1.3","ts-jest":"^26.5.4","typedoc":"^0.20.33","depcheck":"^1.4.0","typescript":"^4.2.3","@types/jest":"^26.0.21","lint-staged":"^10.5.4","@balena/lint":"^5.4.1","@types/sinon":"^9.0.11","@types/semver":"^7.3.4","catch-uncommitted":"^1.6.2","@balena/jellycheck":"^0.1.1"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.0.4_1616581216343_0.10850530691321536","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.0.5-renovate-sinon-10-x-b05097c784bdddc4933d458828a34ece20d61810":{"name":"@balena/jellyfish-plugin-base","version":"2.0.5-renovate-sinon-10-x-b05097c784bdddc4933d458828a34ece20d61810","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.0.5-renovate-sinon-10-x-b05097c784bdddc4933d458828a34ece20d61810","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"f9b6efa05e327638335173d494ca3bc90c5914c3","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.0.5-renovate-sinon-10-x-b05097c784bdddc4933d458828a34ece20d61810.tgz","fileCount":18,"integrity":"sha512-D3EAOBlxJyOUxNlTfRZWg9MMpTv3TneKiAANcO1Mj4Jee77ErXGFQUH52noj6gAED1POKxPnXwPB0xYWgDcXug==","signatures":[{"sig":"MEYCIQCDCLMo+z1ZTGGoJ2GFf24SZgB583Er911MrJyCjZsAPwIhAKc05tkmZgMp/5LR2AvskBdp0Q1UQNUiOou5RsfxOgFz","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":31570,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgWxNCCRA9TVsSAnZWagAAZHsQAJQk72BeZj8CvqXFy2cp\nNTia4JEyPyjhGJWtyrn91kVEIdAxkhSIgb/cdJPi6mNOmN5X3xZue38vbQf0\nOAw4mWurzHQFXVQql2qgve2IbRBhQRkaYWbE/ny849QYJJBkKCME8YeU5AgM\n3BIZDwTbvP4QPHHP1UFk4iq4AiAQmf+reuMoxGjKxmK8f2mCTEC7LPE9CXsk\nzf8idqXTSoG/4+hVCgfjaoVdmisEZlWh6OX+vPu4cBZu7WE6+Py4fFI9EFBe\n/ZzA71WRTC06aKu+SD6AP58RCZD+Lye61WBXft6vCL/dsqM1HfRZPbxqXE8S\nAkj5D0OYWC4lCQ+QrECzSZL3gaeiZuncymuLdQ632+NcVZyju/VGqm72iJV1\n/xgChEDsWiFRp6LjIB5z6rXqby+U41iAEuLe8HcOJq5dl+00e/GTxsHF6kqf\nyF4Azr2vq10KDk2HAjjrDS1Dvu6JEbP+o5ivTxW6jXOsc5E6xTMXRMbGfvYm\ns42e5nOZZrIk1ceK0ZZjlSYDicDpKVXGJSsgyJLPmm/FSatG6UVil3mwpqL1\nApSqwFOJUjxWIY/CnzbtKyszAuX1jVKGgnTedbK4+86X4fYirCSfAZR0yQz0\nHI2p5gcWD8M5rz33ZPVzu7hdUaMkNHw9MB6v0knsc5cngN3Buex9wP1xWITW\n/Xyx\r\n=dOLg\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","husky":{"hooks":{"pre-commit":"lint-staged"}},"types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"b05097c784bdddc4933d458828a34ece20d61810","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint --typescript lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"npm run doc && catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --typescript --fix lib test","postinstall":"if [ -z \"$CI\" ] && [ -d \".git\" ]; then husky install; fi"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --typescript --fix","npm run doc"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.3","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.1.0","@balena/jellyfish-logger":"^2.1.6"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^26.6.3","husky":"^5.2.0","sinon":"^10.0.0","deplint":"^1.1.3","ts-jest":"^26.5.4","typedoc":"^0.20.33","depcheck":"^1.4.0","typescript":"^4.2.3","@types/jest":"^26.0.21","lint-staged":"^10.5.4","@balena/lint":"^5.4.1","@types/sinon":"^9.0.11","@types/semver":"^7.3.4","catch-uncommitted":"^1.6.2","@balena/jellycheck":"^0.1.1"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.0.5-renovate-sinon-10-x-b05097c784bdddc4933d458828a34ece20d61810_1616581442536_0.96983578114723","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.0.5-renovate-non-major-f636a4353efb7190d42e13a46ad469b1f0a844cf":{"name":"@balena/jellyfish-plugin-base","version":"2.0.5-renovate-non-major-f636a4353efb7190d42e13a46ad469b1f0a844cf","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.0.5-renovate-non-major-f636a4353efb7190d42e13a46ad469b1f0a844cf","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"3101b45a3000ad04a867594fa7cee0037a3b70fb","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.0.5-renovate-non-major-f636a4353efb7190d42e13a46ad469b1f0a844cf.tgz","fileCount":18,"integrity":"sha512-yrx+T4+snmMJLPPVZksty0xEY8WAhsyyzV/md10DSiekwWluTG5cHDpc+ae/0t1x6m/KfnsuEV102E0H0NJapQ==","signatures":[{"sig":"MEQCIA4uAFjdB2xp1tM5UHqo9zCoqD8eY9+Ped1xolLcAnkaAiBjVFlvYJUuFn3KmZbaCNEBwet0mojl0360l2Cpx0gelg==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":31554,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgXBvKCRA9TVsSAnZWagAAE18P/A6B5xCrYZ2D2N4Nl9rk\nHXt2Hl3Gkcv0pcL6OtDHrOypn8wTUjPxbAeAGewYTz8ldaayNZ6mlAEWEAYl\nvtuzeYJMlYeQewjWnKCwP3JHQl5CfuGAhZiPnLzi0b0R/7H9aeD9+GrDvjjz\nIf6RmRpftN/rHStIlptbvfUdWkhObNS/K2uO50ZzPw0Z2QyJ2/AO/2rnUSN2\nWsTqHElCRLWobhjcs4O2fqHtn94yVn47LiI2vlAgjXQJks0PP2DRhUq7V3mk\n9Ylvf8yyLO0nlgfOEIUFycbpvwoSUlJqhoQKMu4x/hPiR8Ol37tv2vlZFyhV\nvSTcy09U5Dv1k+Epg9rk4Pf/MUG2E3juLoXg8AOYGrQ0HqDbWCppACh1pU7i\nWlOyoCJ/FgROSHEiLNazFcmTvlzT8DGJPkOlT97Szr2kXscZh4IhBfDnqjt0\nCbNrHDt7ABg6Q+EKkf1RvJ2oamIktDADBAJ3A9osaBDxaSz4C8yINW3Gwby5\nJo+xoo0MlBjQ75tbFRR5wkmqwaWnrKZ3HmIPaeB9/I4dlQdk2L7hf8kjlExD\nN9U3oruZs+adudTSHRYdYERPiQCPYytisXsudXIrjv79lEqjD0YaNTBJGyL8\nRXZgjTiyNiFJ9iO/LsTzZjhgZUsgY0MBHY5Bn9eG4I5NrHl+kWnSUtei+n82\nVEWZ\r\n=qZfr\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","husky":{"hooks":{"pre-commit":"lint-staged"}},"types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"f636a4353efb7190d42e13a46ad469b1f0a844cf","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint --typescript lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"npm run doc && catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --typescript --fix lib test","postinstall":"if [ -z \"$CI\" ] && [ -d \".git\" ]; then husky install; fi"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --typescript --fix","npm run doc"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.3","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.1.0","@balena/jellyfish-logger":"^2.1.8"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^26.6.3","husky":"^5.2.0","sinon":"^9.2.4","deplint":"^1.1.3","ts-jest":"^26.5.4","typedoc":"^0.20.34","depcheck":"^1.4.0","typescript":"^4.2.3","@types/jest":"^26.0.21","lint-staged":"^10.5.4","@balena/lint":"^5.4.1","@types/sinon":"^9.0.11","@types/semver":"^7.3.4","catch-uncommitted":"^1.6.2","@balena/jellycheck":"^0.1.1"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.0.5-renovate-non-major-f636a4353efb7190d42e13a46ad469b1f0a844cf_1616649162459_0.5647402330942461","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.0.5-publish-docs-action-e81b4b9ac22a28ded6943b70ca7d1d16c04fed33":{"name":"@balena/jellyfish-plugin-base","version":"2.0.5-publish-docs-action-e81b4b9ac22a28ded6943b70ca7d1d16c04fed33","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.0.5-publish-docs-action-e81b4b9ac22a28ded6943b70ca7d1d16c04fed33","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"84ce2bc77d4daab773d9dd657047fc15e8ffc7a7","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.0.5-publish-docs-action-e81b4b9ac22a28ded6943b70ca7d1d16c04fed33.tgz","fileCount":18,"integrity":"sha512-RvW/+Rin3Q9lnTBusUMnyDLDG/qovTwbiFPUvN8sQvNOOXRn7Mx7FbtHJWKhcXGxRjHXqxEvY0hFRBvIfaleGA==","signatures":[{"sig":"MEUCIQDZYaMhsslcs9/bNrH/d4j8zieKBROrMn6TExr05HjOnAIgSqDeiaGSNRqVJryzQABB50T1bVy4h5lBF743XlzfzeY=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":31768,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgXCC1CRA9TVsSAnZWagAAyIUP+wXIbDOkco2flDdFQrJT\nt8l0KB6PpRgNQPJ/A/NGaqdzNveDyDwq5bDaTgudmieIOiFRwYolWY6gSzVE\n3cb84NlzpDBKfN3raNv2aTezNuGFlD/4unTwhTMPjeC8ZRGh1VvJ/ydWEt+X\n52aR8+yHZlUXJbPh5cy0oaZ/fXQ751S3gsmNv3dS8P1dhMR1b34CEe5KWBED\nkJJjaPZscHjJjs9Jzko5eS6rks5N1NKDOURbAn3tSfrKXRmitBSwk8Pvrn3J\n45qzwDORqbM1m9JexCyir2voaphCPwpaWpoZ6HN4IRpmpsHwE7E03SwLsHpq\nt5rxZ51035Pxisc1IQ3br8fySFnblgbf0gk3qFGDBhQb7rAz/1FZv31/yFH8\nlQcG6MWhYtCGnEpJ7kIMbOmXpcWCKXpwh1FCy+oinZfg4uTWbRIrr5Jun9je\nnaxMFsp/VVQq/lrIg7vAXOtYzmC4J5K0A4CeVRGhvseQhIzBMsPm8r7IFoth\nmaEbkvQfXf0oh/OXpiK5+ZzeRF+N/OzbtTb7f2lbeV0r1ls8OwILlZa1vydr\nT1D7FzpVYE1ri3r5sSiHLuALRSCQFq/TBSAGWLAn2vKdVJumr5NG9WgtAsy8\n1jpjgZXJgNgrhXzSYdQ6vcK8GtAJHuG4rwexdz9WQSb1or3DxCqOaarFl7C3\npkTD\r\n=H7O9\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","husky":{"hooks":{"pre-commit":"lint-staged"}},"types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\n[![Publish Documentation](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml/badge.svg)](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml)\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"e81b4b9ac22a28ded6943b70ca7d1d16c04fed33","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint --typescript lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --typescript --fix lib test","postinstall":"if [ -z \"$CI\" ] && [ -d \".git\" ]; then husky install; fi"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --typescript --fix"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.3","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.1.0","@balena/jellyfish-logger":"^2.1.6"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^26.6.3","husky":"^5.2.0","sinon":"^9.2.4","deplint":"^1.1.3","ts-jest":"^26.5.4","typedoc":"^0.20.33","depcheck":"^1.4.0","typescript":"^4.2.3","@types/jest":"^26.0.21","lint-staged":"^10.5.4","@balena/lint":"^5.4.1","@types/sinon":"^9.0.11","@types/semver":"^7.3.4","catch-uncommitted":"^1.6.2","@balena/jellycheck":"^0.1.1"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.0.5-publish-docs-action-e81b4b9ac22a28ded6943b70ca7d1d16c04fed33_1616650420921_0.06673336761386772","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.0.5":{"name":"@balena/jellyfish-plugin-base","version":"2.0.5","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.0.5","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"718b3925f67a5afbfd512b6fe552762b10c69656","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.0.5.tgz","fileCount":18,"integrity":"sha512-LG1VcVMDGUEdgfoxc400OHGREjPgVjlTIcQ/0UNvcd0jWxwrNEFlc09bTlq5VMvtv9neK8BF9wxUAM6uYIQEyQ==","signatures":[{"sig":"MEUCIQCdQ5f+7KitLJz0aKUDwUxybiLZqJsd5rH5Odq7+BmfqgIgUb8JPknoLgWuHzH+DTA1dqf+3TYJ1TsPklkNLcuBpgA=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":31707,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgXCGFCRA9TVsSAnZWagAArAYP/iVwER6MdfbmPOL28/0k\nHSeBR/1dETndMiJbkJ8LPnO3owCZvZ12Z2IfhxIlIgpjeB0tUcJ3ayPq5grt\nR+bNMzMLckWPKZLr/FBnHZYzmpSo9WVxLuCiVDBRhgLLF54Dk52uIbvNCaZx\nlHlETW+MX7gK2RFv2LFJFud4M/nBeQPiWN4a85/muNdW0xW3I+HO9XAEHqNY\nYD1Sn55QoaC1BLeP3Sp2VGXhYpD7qyiL2genFh1C6ezRSgXC0LF3MKFRHKg0\n+jcae2uM/Dan9xVEl9rEtZtCCKtWjc31blaDOQJe+vwEhODxzq3r8fVSJQ7t\neZv78GT+KOQmFmHV2FfiFmLjWR7DgfpChHdFyfw+1Plv6kh9JzsM6qUsNeZD\nJ+vkYGgDB0cbJwAUxBLH6cxu8GTRoVtH4hIDaR9GxsaeHBWAuryj/WFGe28j\ndd6c4zQTe41p7t+hnYIiODWkaDhFEmQHes87/mhrvTLN/JY+e/XjJKQlQm2M\nBQSyh/HmQauCb14W1LS+0Lfd3pI7LnxSlg3+ueZz/z3qGf4qNSC1rEc2QIAh\nGYZyhfazhc7Taid8QvB9uO4RJ1pm3V2Uej349sxR6igOUYpbyNfGT+XWcVin\n0xWNmmtgTd47HKO+bvQDqr6Ud4x2Kf6un6FVqGqKcIpjURC6nLpSnAuByXSw\nh9wS\r\n=gS8n\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","husky":{"hooks":{"pre-commit":"lint-staged"}},"types":"build/index.d.ts","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"f955f182904e256e95dd71701e9c3350322e3b37","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint --typescript lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --typescript --fix lib test","postinstall":"if [ -z \"$CI\" ] && [ -d \".git\" ]; then husky install; fi"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --typescript --fix"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.3","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.1.0","@balena/jellyfish-logger":"^2.1.6"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^26.6.3","husky":"^5.2.0","sinon":"^9.2.4","deplint":"^1.1.3","ts-jest":"^26.5.4","typedoc":"^0.20.33","depcheck":"^1.4.0","typescript":"^4.2.3","@types/jest":"^26.0.21","lint-staged":"^10.5.4","@balena/lint":"^5.4.1","@types/sinon":"^9.0.11","@types/semver":"^7.3.4","catch-uncommitted":"^1.6.2","@balena/jellycheck":"^0.1.1"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.0.5_1616650628743_0.9317326061501454","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.0.6-renovate-non-major-05d2b48aec468e048e1da925a5a7ce42f3488d16":{"name":"@balena/jellyfish-plugin-base","version":"2.0.6-renovate-non-major-05d2b48aec468e048e1da925a5a7ce42f3488d16","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.0.6-renovate-non-major-05d2b48aec468e048e1da925a5a7ce42f3488d16","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"9d1bdbe8e2b1705b935517781fa81599d3baf972","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.0.6-renovate-non-major-05d2b48aec468e048e1da925a5a7ce42f3488d16.tgz","fileCount":18,"integrity":"sha512-P9GPdzlVqvNfg0w+Xd8YRHGAaosz3HjnVfek2yG4ovPLnEXeVPE+eUL0UwBYk4zXpWohWHesGb9PPKrSHs18Uw==","signatures":[{"sig":"MEYCIQCiR+YJBT7VwFKRzeS7mZfLVsnTo4WsYJUvqAcWMYerugIhALqiaRHbPMJz4pU58gd+QvzBzAWFsFDlp2CZuAK0BGnp","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":31832,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgXCI2CRA9TVsSAnZWagAATVgP/3M0UFsUzK5+rrsoLBHr\nkK1f0w3jhd/2BCOOOZtjHB9rV4Ky7wM074Jx9vhsMltLJdIJwza6DzRKsRQK\nZab4yGceTO4gqvgODQ9dB+VTNirLUBPTpQ1sWtthYWThFr8BgCw7aKD3uZzE\nyn2CfEUcSbq22bwF+NPXJXgAN9/JHgIN8CMmdXXvEAxvQVa/l8yM46xVYkE3\nn7/3vAT9jCyRdR70nDFfmGKOl/sjcoLNW4MFrj4kyEz6H9paCkDdKUTe9bfJ\nh+pjI5hm3/pTV1HADMKXX3tCe+W4V5rL3G9LnITtuGXn3/fSizIYtIC0AJD3\ndyjDU34ePRUOijcXSCv789AI24qnHom6/dxxUq0X8oY+8ornId/WRS9PAY4f\nwjEyZP76sfsGDrzwPLb9u0XluWcEsrazwN4YJeUZqs/ekkAmf9UC8ya+4cex\nccgkA7Vb+U3q6uXq9Lz85BpzylU8Rc8hhIbjsrl+GgFadOV3eP13LdUg+Ru/\nmjBC1L/jj1oMVXlJyGKjuMR2+a7OIse9FM/6F2RbJF3GuBZxJ2YOBRgL0Jm5\n96Cu7Bwb5LAl06W9H3OhO8le8cCRoBGClwbawjji29S1062fKuxZkm+0vCgU\nNDS8TyOKHL+44URLBgzfGlymoP55EbJGjczl46T4TsDBHRgoDBK9goYDaAI1\nxPlV\r\n=RzAK\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","husky":{"hooks":{"pre-commit":"lint-staged"}},"types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\n[![Publish Documentation](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml/badge.svg)](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml)\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"05d2b48aec468e048e1da925a5a7ce42f3488d16","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint --typescript lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --typescript --fix lib test","postinstall":"if [ -z \"$CI\" ] && [ -d \".git\" ]; then husky install; fi"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --typescript --fix"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.3","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.1.0","@balena/jellyfish-logger":"^2.1.8"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^26.6.3","husky":"^5.2.0","sinon":"^9.2.4","deplint":"^1.1.3","ts-jest":"^26.5.4","typedoc":"^0.20.34","depcheck":"^1.4.0","typescript":"^4.2.3","@types/jest":"^26.0.21","lint-staged":"^10.5.4","@balena/lint":"^5.4.1","@types/sinon":"^9.0.11","@types/semver":"^7.3.4","catch-uncommitted":"^1.6.2","@balena/jellycheck":"^0.1.1"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.0.6-renovate-non-major-05d2b48aec468e048e1da925a5a7ce42f3488d16_1616650806215_0.9018489229400608","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.0.6-renovate-sinon-10-x-47da430ef56d4323ef96b23321f6450b0d6af603":{"name":"@balena/jellyfish-plugin-base","version":"2.0.6-renovate-sinon-10-x-47da430ef56d4323ef96b23321f6450b0d6af603","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.0.6-renovate-sinon-10-x-47da430ef56d4323ef96b23321f6450b0d6af603","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"69a95365f2fd5430c4c55becd73315556d4fc23f","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.0.6-renovate-sinon-10-x-47da430ef56d4323ef96b23321f6450b0d6af603.tgz","fileCount":18,"integrity":"sha512-1VbwFBNA7EyptMQReZiVHKY6VzfIfdN8YE+vUVH6qg03Z8lWvT+Sbq7DmXWsBYcUdCXA8c6qePE4ca9ne++mJA==","signatures":[{"sig":"MEUCIQCr3oT+J6BwOBZVLy7TTpJtTHVCtYmoe68+8qaRaYneTwIgFkS4X/pe3S1GvyF/FODa7WsY+EKH778EPl0geFER6Es=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":31848,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgXCJ7CRA9TVsSAnZWagAAUEYQAJ7vVRMMJf49ZKy2Uvqi\n0ypDsV+e+ul1fReBCf1ykmr4KLpHYzJroY9zUrFvq0E3TvF1ZVsunQFoZTAm\n7bda5lC//C67EzdZXAwh2HLyADt7r+uNPzuxulv6jyp0y0ig9NAZJgNGhl5o\nh14tpip29Q6bRAAnNO44rWJXr7Td09+vQEt6zmOetdKvnuqk1iuvOoWyTVHP\nWGnaOoMBt8LAUOv8BUi4ntUc+8DuC5Tm+7cT0eusHdvqHhHi26dpyC0MpVPT\ni8zJS1wIqeexasQ8/NSgjE9w63FlAKYAgjCXlElUxC0JPe40zOEZOtzv6o4O\n/C8Y0hYouixk4XxAUOqGKfuJ4SAMbnON37ZNRsagDSMmD2UpVx5YeCDDVFEw\nkjkAZuyIhv6nNEEP2GqBXGyLJMwiwGJKkX4pEN6CfqAywOmUzLsQTtLOW78u\nO6fUzrF1bd2VIlUAqDyO7DJy7VllPNDYXrKAoc8zGx5N/EwDoIwFoUdG5ms3\ni04qAKVGV2qpgakuk3qqcRGF0QpYBgYHWGf0XeYRcgIhF0g9aKnvQBZvo7yV\n/0m6QPflQ+62zi4GJsigny0z0GWAYVYnmxSaZvgyNRx2o7lbRRH9EYqyL2hI\nHqM3fmydKDLjE7kAScq/hLRskU1GmChGfng5jITPTkNYyaCXWgD1h0qOt8nn\n/jmw\r\n=YaR/\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","husky":{"hooks":{"pre-commit":"lint-staged"}},"types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\n[![Publish Documentation](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml/badge.svg)](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml)\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"47da430ef56d4323ef96b23321f6450b0d6af603","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint --typescript lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --typescript --fix lib test","postinstall":"if [ -z \"$CI\" ] && [ -d \".git\" ]; then husky install; fi"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --typescript --fix"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.3","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.1.0","@balena/jellyfish-logger":"^2.1.6"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^26.6.3","husky":"^5.2.0","sinon":"^10.0.0","deplint":"^1.1.3","ts-jest":"^26.5.4","typedoc":"^0.20.33","depcheck":"^1.4.0","typescript":"^4.2.3","@types/jest":"^26.0.21","lint-staged":"^10.5.4","@balena/lint":"^5.4.1","@types/sinon":"^9.0.11","@types/semver":"^7.3.4","catch-uncommitted":"^1.6.2","@balena/jellycheck":"^0.1.1"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.0.6-renovate-sinon-10-x-47da430ef56d4323ef96b23321f6450b0d6af603_1616650875109_0.7683480368585205","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.0.6-renovate-non-major-f41f1da146e162e4ad75c38785044de2ad137169":{"name":"@balena/jellyfish-plugin-base","version":"2.0.6-renovate-non-major-f41f1da146e162e4ad75c38785044de2ad137169","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.0.6-renovate-non-major-f41f1da146e162e4ad75c38785044de2ad137169","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"44662692fa732065c371c71adb8e540d83ba285f","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.0.6-renovate-non-major-f41f1da146e162e4ad75c38785044de2ad137169.tgz","fileCount":18,"integrity":"sha512-57iYGJNgLJWjA48AJT40e0DILAW2+IHg3B3+UAidpkDuKVT0h0617I1WWYQECt5ov9Fm+yD7mfCfqHxMPzAcQA==","signatures":[{"sig":"MEQCICm9nuKP0NaEbEkTbIfodQZbRBG+MUZHaOeWt5KMBjQ1AiABOMJZFTeAUBi22XpzbccEL38WgWKEamiC++5NmpV4nA==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":31832,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgXCNmCRA9TVsSAnZWagAAhKoP+QDvZg6fWUa7BAaYJawK\nwPqChaKHtFdz8qrLlWZ53CzIU8E0yi1QTsKHZqnJ/eBXi0gqkj4t7p00vCrT\nRXedMamHGwDvJvCBbvUc3Lo3YjfjrbDpLKoIUeIOrS4C8RuPRmPCbq5QZuR2\nndhDUklqTiIDJHOsamK5hj1GwJHFBy/n/CaOBvpCM2prMddTJAZ67PrQjLFt\nsemhIPsvBL+KMes6e4akaGOgoNkIdPDgVcA+mJvECOwY+qflZitqsKZmppvb\nURA7cE/zhN4FbZwu/wZMWy8Ew0u4qCx7//sqA9rNcTDSmU1N4N6dqxznO0Xi\n4N+ftic6OCGOulu7x0Suj2hEysroxBzbBJe3TOLqjyJ/82+3/esElcRxRPbf\nQp2zMNhW5Oq/ycmLcjsQdg24kac22/AkQpZvSJEhXPCGhmg05xXNgmr3OPS+\nNfk8qKG64m0XNnOX3Ul+J4OdJ7GW6TrAFnt5ulBVeEU/cVnCPAQyIztxj774\nOhgjvwE2qm8E5Cicv+4+ftvWd/lO4kfLlmwdQWLkpX00e7KLPmLLPk+rQl+7\nNWZYpuqthHp0pXDeVMTXoxqWGnHio7D1mUoRZ200sIvOLjK/e6XBn2Y3zX+D\nA3nX3iSIAUtSNXiBhcQ1vzlKJ3DldABYc5YbIF7MC3un9GNrTbiZVOFS7bdw\nNALX\r\n=x9y/\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","husky":{"hooks":{"pre-commit":"lint-staged"}},"types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\n[![Publish Documentation](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml/badge.svg)](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml)\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"f41f1da146e162e4ad75c38785044de2ad137169","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint --typescript lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --typescript --fix lib test","postinstall":"if [ -z \"$CI\" ] && [ -d \".git\" ]; then husky install; fi"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --typescript --fix"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.3","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.1.0","@balena/jellyfish-logger":"^2.1.9"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^26.6.3","husky":"^5.2.0","sinon":"^9.2.4","deplint":"^1.1.3","ts-jest":"^26.5.4","typedoc":"^0.20.34","depcheck":"^1.4.0","typescript":"^4.2.3","@types/jest":"^26.0.21","lint-staged":"^10.5.4","@balena/lint":"^5.4.1","@types/sinon":"^9.0.11","@types/semver":"^7.3.4","catch-uncommitted":"^1.6.2","@balena/jellycheck":"^0.1.1"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.0.6-renovate-non-major-f41f1da146e162e4ad75c38785044de2ad137169_1616651109575_0.8406885902143553","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.0.6":{"name":"@balena/jellyfish-plugin-base","version":"2.0.6","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.0.6","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"3f9526b587661930ef8a1d776658e379d4648b87","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.0.6.tgz","fileCount":18,"integrity":"sha512-z27emvbn6DHXkbmmJVmiTpU+Ej+ALdl3ihaFS0bhL9i+M1oq3zF580NdUCife5cmWxQoVHUK7ViMv/5NCafSMA==","signatures":[{"sig":"MEYCIQDBVB8JrcaWPjDdXh4+z7p5LPLhSLZ0oSPxGk1wMHTCLAIhALaFFKqPBlITwE26MeMsDtFJ1L96viIJqWVw6xOc2HCp","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":31772,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgXCQ9CRA9TVsSAnZWagAA32QQAI+9sveuYbJNh+VwFys7\nCf+BCbIE7yoKTuflRIWtULEc4erYtYCFlgX1Ac7zuw5m+ZMYbobYAAex3ptu\n50laCbAH10u7gpzRg+fqlXTfVEjQV8LrLeE47OItcOfr8AdxzQY3bWjaagPm\nkMuzibDYIpUxaJo/ZQwdz+W1TynizlOG+oyCx1FNH9PJbSqg33lu66vVhtkw\nKDQ8ebv/SKP2v5bOaP7DXtE80iJQGsRlinFiPUXxR+KsGF8PoLWrF7PKSDyU\nj095f+gxuZd8hhjqC40LQAWvG5NvwddYJ4szNuGqZWZsCqXsAvYGnHxr93Bn\nsS8sjOb+O/j9ClC35XAUy7/naSv2758hNeO/RuX7W8zVQ40DIBDJsCj3wCrf\nyJ8xdVUDr+wHjd0IS2A9Q4V7d4i/MQj0Uk3zUJBt9kqe5Aoy8IFZcitGz32B\nmv2JL5BaB0d1YiHYiRAP2+ecRNcs8qsVmhMndYpbwiELZOuWgTLAziBf4IDJ\nxd/Qs5BUzdJ+7r7DMSFwfTylXJvDVQJiAI6Q1XfCZG/pS4OyVyTtf4WSchKH\nfDiUom1u+DX+NCnNyj7q1r85dMlwb7HYZXOBv6l8Dv/ixlp5u35HQkYVaNSx\nJzy49PkhT4Rqw+1V1Ru0W/0oCNqY6aP6ZXvH01jwNJ3qoo1gB/xSXbdXyXRf\nDllx\r\n=Lhgg\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","husky":{"hooks":{"pre-commit":"lint-staged"}},"types":"build/index.d.ts","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"2c8644357ff068908a7d6f277311f1e78e6d9f68","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint --typescript lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --typescript --fix lib test","postinstall":"if [ -z \"$CI\" ] && [ -d \".git\" ]; then husky install; fi"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --typescript --fix"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.3","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.1.0","@balena/jellyfish-logger":"^2.1.9"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^26.6.3","husky":"^5.2.0","sinon":"^9.2.4","deplint":"^1.1.3","ts-jest":"^26.5.4","typedoc":"^0.20.34","depcheck":"^1.4.0","typescript":"^4.2.3","@types/jest":"^26.0.21","lint-staged":"^10.5.4","@balena/lint":"^5.4.1","@types/sinon":"^9.0.11","@types/semver":"^7.3.4","catch-uncommitted":"^1.6.2","@balena/jellycheck":"^0.1.1"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.0.6_1616651325122_0.7853924920875388","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.0.7-renovate-sinon-10-x-18a83bea09030ff272c0832e1f1c36014c925d4d":{"name":"@balena/jellyfish-plugin-base","version":"2.0.7-renovate-sinon-10-x-18a83bea09030ff272c0832e1f1c36014c925d4d","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.0.7-renovate-sinon-10-x-18a83bea09030ff272c0832e1f1c36014c925d4d","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"f179a22305adba796efdd358c1e4e3c7e1d97932","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.0.7-renovate-sinon-10-x-18a83bea09030ff272c0832e1f1c36014c925d4d.tgz","fileCount":18,"integrity":"sha512-T2zSwjF12oyFGEPcGl0GT5Tz49q/Z7lytUeyQtf7jfFWqPpx/ixY911gHZuAqsUXZ1IWmsuIikjThqcEEoEHqQ==","signatures":[{"sig":"MEUCIQC6xLNv0JHvzdLRKCMPzmVPL+SaRLPutX/ZfEXI2QNg/QIgSIidf+2CA206Qxi0YIZyOh/Lj03z1DW15XC0jIk3p2c=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":31913,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgXCUQCRA9TVsSAnZWagAADfwP/j6BqeRrIEvAUcG4TaH1\nU3VeRrQFqLfahC0m2FrKLsquspSyCXeQztfZETwQHdDeCtvCw2+rJ7eGKnoM\nno9k5VLutf6M1ZCQvAw7xfHYhHJBvI9J1lUFiKiGu6tKpoEUEFbF7TkKvifB\n6BGE+DbkCNEf8fLbEzdxOu0ob/9wKbc9DoA365gKlQVHzm4CWx0Gg+m7wLjd\ncG3zuRGvjuq9fwzv3OH0KcS6d9mKK8RUi1epRng01JGhNnPMZNV7F86W+eXN\nXyQmlV56hVIwhPcg0b5Wg7f4Lt/r1+NduzwP340WnRkvmaTiUqCfRAE+d2gG\nS0DYpVjg5teqZ919rSRzbbZFmZLDpfymBmniwKRTuxiJh5vmbxVleNBhsFNA\nxnLWtLPJZ00EMLqVNNZy4MeIoEMixsdMJHIOOOvMBcqBRHNKdiuGVUBKfgR3\noINFeIoOMefLpUC+Af6YQTghzY3OnDeSj6xpHRlkgwWUcMykVdNG8djfn+CD\nNA73XSZki76EUXRkCL+dLF9rAAnNeGhnUIL9N+QYBzo0Xcc/pSkPBC1JMGlC\nfO2QopgfzMNnH53fGgQkNG34vF7XLq8DDyzFgZczE+pKKpE0DuR/r5O/XMTn\nwrH85rEf1WwfF6pfnJKoaZz54eI4KVvFt3Mb8P1+V+kJ4ay3AtKvN6Fw/5Zt\nkzWU\r\n=vFjx\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","husky":{"hooks":{"pre-commit":"lint-staged"}},"types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\n[![Publish Documentation](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml/badge.svg)](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml)\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"18a83bea09030ff272c0832e1f1c36014c925d4d","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint --typescript lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --typescript --fix lib test","postinstall":"if [ -z \"$CI\" ] && [ -d \".git\" ]; then husky install; fi"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --typescript --fix"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.3","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.1.0","@balena/jellyfish-logger":"^2.1.9"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^26.6.3","husky":"^5.2.0","sinon":"^10.0.0","deplint":"^1.1.3","ts-jest":"^26.5.4","typedoc":"^0.20.34","depcheck":"^1.4.0","typescript":"^4.2.3","@types/jest":"^26.0.21","lint-staged":"^10.5.4","@balena/lint":"^5.4.1","@types/sinon":"^9.0.11","@types/semver":"^7.3.4","catch-uncommitted":"^1.6.2","@balena/jellycheck":"^0.1.1"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.0.7-renovate-sinon-10-x-18a83bea09030ff272c0832e1f1c36014c925d4d_1616651536278_0.9412375216752276","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.0.7-renovate-non-major-261e5f6110d1367cfbe4c07daf3dd1581fb70736":{"name":"@balena/jellyfish-plugin-base","version":"2.0.7-renovate-non-major-261e5f6110d1367cfbe4c07daf3dd1581fb70736","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.0.7-renovate-non-major-261e5f6110d1367cfbe4c07daf3dd1581fb70736","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"65e16725ad6392664f6e1cd5856263d2804fee54","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.0.7-renovate-non-major-261e5f6110d1367cfbe4c07daf3dd1581fb70736.tgz","fileCount":18,"integrity":"sha512-nXXhHIZ0eW7Owfz70tegc0cLWQJkTnQE+OO7XeIJZkZPIeChBcVkjmc0z0T12cQ29Ogqy6PQ3y4M5VdMq4Tcig==","signatures":[{"sig":"MEUCIG9FqYHU3fFQv7zD8gc+Ue/YXQRy62ulf3WXOFV1VVwPAiEAobniWLfNbqMI+kqQE1+5gj9nDRTeNilbyNWmtx/deIo=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":31935,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgXJVXCRA9TVsSAnZWagAAIeIQAJIDHjpbMhDMTASn44J1\nwT1/UBqsbQpmfTgz9QTk3SlC4pO+XdaRqcJUNAsMjnTF1se5aQrjp2rkzAjr\n36F4/Hs/RIZHbfQIsZxTZvxNwD9qYS9k83zp4tJmBFaKRkGsgzHtF/aaxLYC\n2uWelMqIFCDwFeMVAcs0GzodG0yJbwCrICwTWvhZCreVacOxf5iZb+2mVxCc\n+VAvroKf6MDcb07HpCLhOtf1Ht90Cu9rkJWo1KnyFwAnqpkZzjvIqKFxl0WL\n5KeOWRiCPzBajbZRPU3kuDwnuK+hA36Hrl7SshXyjvUj3je3Ti2Fvo0sqaS1\nUC6klnFGFOaFrDnKIhr8wX2akGZ8kdXGz8KLKjhpORUcSIPhyhDzRqpeex8g\nsDsTo8cxTiW07M0vqBB7BeX5Y5tPZrTDTFRSG6o1E7c2VqihKQ9mPpDL6I/+\n8WLc3TahvbonAob12SYNGH9HlGQBQTVqvtamUOCHzOAfuLa0T5/r0AwVEnCT\nKlnL3gpkFsYJQHnRBvTgqyb4n6vny6G3QuGTdecvasQfM7Oer49jr/24tyt+\nMOXaZ0ZHPeR7rnJkFVts3PcqN53tLPEA3SSHgULTy/JpTV0SnYP98Lo6IVIk\nr1PQAjNZm561/aPvx9YEyd1deVzcSdbH0rOdFV40gNH8e0Lyx1IdLs5AmgTa\nnjED\r\n=Kc/8\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","husky":{"hooks":{"pre-commit":"lint-staged"}},"types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\n[![Publish Documentation](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml/badge.svg)](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml)\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"261e5f6110d1367cfbe4c07daf3dd1581fb70736","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint --typescript lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --typescript --fix lib test","postinstall":"if [ -z \"$CI\" ] && [ -d \".git\" ]; then husky install; fi"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --typescript --fix"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.3","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.1.0","@balena/jellyfish-logger":"^2.1.10"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^26.6.3","husky":"^5.2.0","sinon":"^9.2.4","deplint":"^1.1.3","ts-jest":"^26.5.4","typedoc":"^0.20.34","depcheck":"^1.4.0","typescript":"^4.2.3","@types/jest":"^26.0.21","lint-staged":"^10.5.4","@balena/lint":"^5.4.1","@types/sinon":"^9.0.11","@types/semver":"^7.3.4","catch-uncommitted":"^1.6.2","@balena/jellycheck":"^0.1.1"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.0.7-renovate-non-major-261e5f6110d1367cfbe4c07daf3dd1581fb70736_1616680278604_0.6116820243001349","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.0.7":{"name":"@balena/jellyfish-plugin-base","version":"2.0.7","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.0.7","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"c377ea65e095dac205231a264681e56236385191","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.0.7.tgz","fileCount":18,"integrity":"sha512-Nk9yNPHeBmWDbcQmFEZ64cJsMepwnn1OzI6kCSXJbZnXAg97VbCDx+z8d1TvTUlkqeNrT5kxJvvLbbwzCAJLtA==","signatures":[{"sig":"MEUCIQDL5qyaT4S1+NDtjhajmDEQq3ObA8XjLlhxIh2eHlpzSgIgQ1LTNi6NuK2BJqfqAWGr/73F7SjURwCmfiM26VETKzA=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":31875,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgXJYjCRA9TVsSAnZWagAAE3kP/0kvathf0N5yvhc1XvVB\n/QPkAedArpvjm9PKowJaVmJbtL3M4clISXT2AWpTJlkzr/iD4q4TszPwOQnC\n4WlHomP6KSqORP3pdPf8hEqvTtGVQgmy2fr9vRELq+dzKs6Gr82CFH0EleiB\nOKQAVZ1wXA3U3i+EIlJcHJRohCvMMnusTJ0IU+cvQ7bGoVBLTZTTFqJrq4X0\nv2b/IrL92iGzu+KmMZdkhRmncpXhazDA0Ll24thl275T6Wu8n1FuMJBqKfMq\nWIDcspGq+4ygiXiFncAEJ9s8BbOttR+ulBn2LOHXv/8AqB54RRoLuQYfY3mC\nPhGbQrw5FhE3vEBpid1ziAJI5P1lN0LlGChXZtetbh+vPn32vu65/mONU4Wi\nKyJ/F1uoWCORfjwatQ8MsPGmJhFL2mfJj+94s6g75iZgqmAZ5gStMPnEAITo\nGmHyMo0K2kWpkdN/RuJWBVR+V5f6rLg+lfgoAiS/RKlbGjcO7Bbw3bxJqquy\n3X8pBPL7AUAx7sdICi1Xc8l10EmRNVA6+1PignVCYgsMdH0/fY3OptBV4q2K\n2F8Aa3/4fUAoc+VrchsDZfwdUBRy1OOggYqMhacbmj+kU8tbl3YDA7qn+NHq\n9Xh3yAmZRbCJNAuclLg4SW6JFG1hWpsROvC1p14f6TTpLzHD37wyqaaPdoSr\nc8EJ\r\n=rGxy\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","husky":{"hooks":{"pre-commit":"lint-staged"}},"types":"build/index.d.ts","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"76a6e133cb2193c9849a5127d7315cf034d50c05","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint --typescript lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --typescript --fix lib test","postinstall":"if [ -z \"$CI\" ] && [ -d \".git\" ]; then husky install; fi"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --typescript --fix"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.3","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.1.0","@balena/jellyfish-logger":"^2.1.10"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^26.6.3","husky":"^5.2.0","sinon":"^9.2.4","deplint":"^1.1.3","ts-jest":"^26.5.4","typedoc":"^0.20.34","depcheck":"^1.4.0","typescript":"^4.2.3","@types/jest":"^26.0.21","lint-staged":"^10.5.4","@balena/lint":"^5.4.1","@types/sinon":"^9.0.11","@types/semver":"^7.3.4","catch-uncommitted":"^1.6.2","@balena/jellycheck":"^0.1.1"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.0.7_1616680483199_0.13082446141649529","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.0.8-renovate-sinon-10-x-2b4a169943fbde3465b7f2631816baad03c5b985":{"name":"@balena/jellyfish-plugin-base","version":"2.0.8-renovate-sinon-10-x-2b4a169943fbde3465b7f2631816baad03c5b985","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.0.8-renovate-sinon-10-x-2b4a169943fbde3465b7f2631816baad03c5b985","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"46bf1971216f0f301e39b5f0582c2cc34cbf6ca8","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.0.8-renovate-sinon-10-x-2b4a169943fbde3465b7f2631816baad03c5b985.tgz","fileCount":18,"integrity":"sha512-q7hKvEd/PVOjBGGo0ZgeQNUz9DfBU3bG7vQZS0GCbOULgaWS0TdXGzstYYQ7MDrBQ4JtxVLO3gRmARHfzDC+YQ==","signatures":[{"sig":"MEUCIQDI8we7mh8+pXsSnR+odpWZoofgHA4TxtCKc5a7N105NQIgfYhSIZvl36xwcdNW//w4YWVOLKVkQLqVE9S0dhQjzyM=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":32016,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgXJbmCRA9TVsSAnZWagAAWfYP/0kMnbZFi0Ly6uHgEoiA\ndO0O4UuOYEaJGftvMwfMyAdPo3uEtuyp4MPDENOuZMP4cQpHktGL2Zv6vNZo\nBSSlkcCtDo49XS6/2hqqs4XjTbI3B2PaQIbkGXeyiUneDk8wrPlK78XBo6LF\nm274U8ksYe1kTzRHZ6JQ0e+g2KPLFZPGGxYZyhUbHWoFL557MKI8a5sweeKK\nTYCpwxMvAYDKrdo5X22yQe8tEhkBo4Tv/w/gQyhS7LLza6MT0m9wRYd1a4t+\nZMOXngN4T1yessw02tedNreT0wILMVPel2d1B7kK9zLe4FadPK6AWgrM6wuH\nuV8N332j+ttnCLm8SuOUAh65folbXmizIRqw3Dk9z5KmnQxXlrjDoOvy0sNo\nGTKy2shGG5aGy/mGH/WAeC+85Pxt9gwmBWF8NzNc+imS/zAKs8PA+iOx1pQm\n/iMlPLB64vlZv6F9SVmzhqNOo/tSutVVb3/m3/8m7HEhzNOGkMRet3guqMzO\nttbTQOlt3ktsyzICCyWWfS+sQug5MNmHjcYfiZZB5n+m1F4Quzi1ROxSVnwy\n1gQ/SFtLT8ucpUCoqqGLT22isWAW7jTvUhcXCmc5o3F2AfTGNo4EUoyQjQZZ\nM0nm4oLEWN8fdIYPw5Bu2G3LBQJGQu+mWT1Q8VSLquWujiJYJ8NIhDjfDBSv\ncOWS\r\n=8yBc\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","husky":{"hooks":{"pre-commit":"lint-staged"}},"types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\n[![Publish Documentation](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml/badge.svg)](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml)\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"2b4a169943fbde3465b7f2631816baad03c5b985","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint --typescript lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --typescript --fix lib test","postinstall":"if [ -z \"$CI\" ] && [ -d \".git\" ]; then husky install; fi"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --typescript --fix"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.3","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.1.0","@balena/jellyfish-logger":"^2.1.10"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^26.6.3","husky":"^5.2.0","sinon":"^10.0.0","deplint":"^1.1.3","ts-jest":"^26.5.4","typedoc":"^0.20.34","depcheck":"^1.4.0","typescript":"^4.2.3","@types/jest":"^26.0.21","lint-staged":"^10.5.4","@balena/lint":"^5.4.1","@types/sinon":"^9.0.11","@types/semver":"^7.3.4","catch-uncommitted":"^1.6.2","@balena/jellycheck":"^0.1.1"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.0.8-renovate-sinon-10-x-2b4a169943fbde3465b7f2631816baad03c5b985_1616680678151_0.43390824851012977","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.0.8-renovate-non-major-db926b63cd37082e2978c31968978e281d83e364":{"name":"@balena/jellyfish-plugin-base","version":"2.0.8-renovate-non-major-db926b63cd37082e2978c31968978e281d83e364","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.0.8-renovate-non-major-db926b63cd37082e2978c31968978e281d83e364","maintainers":[{"name":"belodetek","email":"team@belodetek.io"},{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"7ae264cb8f5fc79fd75a917f36a03dd0ea6e3a05","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.0.8-renovate-non-major-db926b63cd37082e2978c31968978e281d83e364.tgz","fileCount":18,"integrity":"sha512-FiyKReABWoIVbCfl+0wPWoSrTJ4yT6R24As48XwYz/DcEFQolOyocXuJuWCgYu/4u52+mqtWBS2GJ/n8fVHUzA==","signatures":[{"sig":"MEQCIETKS8t3bGZdypNOsC/rDUV13PFWYdT7vK7P5sijyPQKAiBtHm9A+HHP/0y5FW9r12OorbByC8fX/7Db7FP8qMk82g==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":32000,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgXOuuCRA9TVsSAnZWagAAevIQAJsSJXarj+8MRSxHQvJq\nLRiDsZgrZ8x93sBWyfMSS2r8BIAf/c9TXnqfSGFDLRNsbasqo4umLBac8t1B\nYPesoXmGBrQijREeSdjn8tGpHp185IpH7O7b0vfitrD29OBj77CW26ZMI2p2\nYjAJll8UR1fWoQHAGg8WFd7XKWNdFq2dJplRxqBs1VWOriDDmD5Xjxk5tu4C\nEYSURTdrFj3WFjdNPCZPfTzZO4ZUD1RLqtoq62Qjp0qFtoB1aDZgbPHP/cup\nbYX/PW25vyyjsjWmcPNGneswnoM3u0FaXe+Gq6F2vnDaFN85izmBsY0hf8Td\n67BUiBHCCf2XtFqpmHqkG916fMKWg5EnmHDHFqDZo9PoqOBmrKfWV/HbNx+7\nXTBGUgvkhDF2si0gkdY4uMGWhDbolA6Hruf1fUSu6x5zOZXrDwJqUOiOhA2v\ntCzr1MiKFaDv8TLJH2AYN7ilBfRqxq35ZxSMjGl8jCcKesbWnSv73A2Sjml+\n0QG3fIJH0rY5roUXvIUtorSaWpuIs2HP8y9p27MHSadqZNtRUQda9k3Epkv3\nktYyix44j+cjBWqdEPWzMajZZSTFsX8hByeRBm2ghzXVFd3Itpj4/nScRMFw\no0gV6LmpR7ZEOQYjVlKFmn8PKsIv8buHVIDldt0wbnSsV7TGWQVkGVb1T1Gu\nbyhJ\r\n=NZ8V\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","husky":{"hooks":{"pre-commit":"lint-staged"}},"types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\n[![Publish Documentation](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml/badge.svg)](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml)\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"db926b63cd37082e2978c31968978e281d83e364","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint --typescript lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --typescript --fix lib test","postinstall":"if [ -z \"$CI\" ] && [ -d \".git\" ]; then husky install; fi"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --typescript --fix"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.3","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.1.0","@balena/jellyfish-logger":"^2.1.11"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^26.6.3","husky":"^5.2.0","sinon":"^9.2.4","deplint":"^1.1.3","ts-jest":"^26.5.4","typedoc":"^0.20.34","depcheck":"^1.4.0","typescript":"^4.2.3","@types/jest":"^26.0.22","lint-staged":"^10.5.4","@balena/lint":"^5.4.1","@types/sinon":"^9.0.11","@types/semver":"^7.3.4","catch-uncommitted":"^1.6.2","@balena/jellycheck":"^0.1.1"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.0.8-renovate-non-major-db926b63cd37082e2978c31968978e281d83e364_1616702382352_0.7987761311745778","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.0.8":{"name":"@balena/jellyfish-plugin-base","version":"2.0.8","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.0.8","maintainers":[{"name":"belodetek","email":"team@belodetek.io"},{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"2329c64cbab4f32ad6f19937a5abd72266ed8397","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.0.8.tgz","fileCount":18,"integrity":"sha512-cm8Hbb1cA1/nRSo2mAIOpRJ4imPrcRPfBCLNHUYLl4LaCAqymiOT/p5+BAZdRr+BkLs8F+rPBpzYLWEJ/OjLCw==","signatures":[{"sig":"MEQCIDMZU8vgwbG59KDZBWPcEO6tN8NqvFvB8Z9PqaagIqiBAiBPX/jouwKFEFL1sTTx/eVz+bTpRgr+NpMlp+mN3/2zYQ==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":31940,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgXOyRCRA9TVsSAnZWagAA/gEP/0bLJv4B63J87DQKuVpx\nBtFMcUTcfui5hLwnxc9QE6w9LS9o4iwYt6ev/OtyxXKgXvkfQN/bRhG5RnQb\nOP4tWnai1UnUOucmlNBgvUn0DQ/Wz6+ulDKXP24QFkwqt/sy1catDot1B0IX\nd5mFTxOLp3wczgu4qxTCZr883W7K89ge328hv8UUNXS5UIonaAOQJk+HkFcu\nWuF8fW8mVu1QuraE1dJNdEEjBrVJj9Kr3H96pDm1THU+nLWnKfuGe0t5f1I1\nUJv3bh89UKem4Qd+hF5tzB8OjIWQOFqrfyQWsEzj41IinNkw79uXpOeQfx93\ncIUjL2SUWJfsLuiEipH/FvJ956D78VgsnLBSBrPP1D2cbe5abZWhLK1L26/O\nfJGmo2A+2xXErs1GO93DDjj5I7nV2M5COQukKmU6cUvB6FvTgPxT4lMgpyxF\nrSYEAwq1UEClrm4QhDz1XyHrrq3+pIMl35Xt+Xp2Nr570QFWF3VRTodYOCMc\nmb6CTJInU11YhVDsFEapa3wohvdTWsCmyCi18WIv6BZNsIhRt6xipBtwF4mS\n99rzGm37WPCPNoRgGMi8omyR/KSJdQZJktZiD4eEf4E5Jegi/N/M5V8SWpOU\nnJLZRtGWVwLeiXOms0oExmfty0cmcqs26YxfydBUoZZZRCenppbpgwyKKi25\nALIZ\r\n=In2m\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","husky":{"hooks":{"pre-commit":"lint-staged"}},"types":"build/index.d.ts","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"79e3b985c9087b3471e5a0c5eb5f712348428c41","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint --typescript lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --typescript --fix lib test","postinstall":"if [ -z \"$CI\" ] && [ -d \".git\" ]; then husky install; fi"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --typescript --fix"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.3","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.1.0","@balena/jellyfish-logger":"^2.1.11"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^26.6.3","husky":"^5.2.0","sinon":"^9.2.4","deplint":"^1.1.3","ts-jest":"^26.5.4","typedoc":"^0.20.34","depcheck":"^1.4.0","typescript":"^4.2.3","@types/jest":"^26.0.22","lint-staged":"^10.5.4","@balena/lint":"^5.4.1","@types/sinon":"^9.0.11","@types/semver":"^7.3.4","catch-uncommitted":"^1.6.2","@balena/jellycheck":"^0.1.1"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.0.8_1616702609497_0.49283972085962025","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.0.8-renovate-sinon-10-x-784e33d578d1293fcdd0c9b0914580e069d7ba9f":{"name":"@balena/jellyfish-plugin-base","version":"2.0.8-renovate-sinon-10-x-784e33d578d1293fcdd0c9b0914580e069d7ba9f","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.0.8-renovate-sinon-10-x-784e33d578d1293fcdd0c9b0914580e069d7ba9f","maintainers":[{"name":"belodetek","email":"team@belodetek.io"},{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"fd1c911abff926dee62cce7e5c0abd277a0ed925","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.0.8-renovate-sinon-10-x-784e33d578d1293fcdd0c9b0914580e069d7ba9f.tgz","fileCount":18,"integrity":"sha512-pyS3lSyV0/3gCWApr95jnPmTVxH3jfivhZx1D8c7V9uizuwCh48mCs/AuKxUFV1fAkp+pU1A+yTcPPK9kF5BYA==","signatures":[{"sig":"MEQCIH3FhMKndZIMsNcgxj5c+yyOQ9CDBLruf82+UbVkjtyqAiAL6VvMw5QbP7GpZTM9SaYzqCmXSf6EUQqfRly155rBvA==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":32057,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgXO00CRA9TVsSAnZWagAAF5cP/jqGXxjyfm2udi3lmfC1\nBsU9TeMYV8CXoqERvXbNRUln/8t49I/NvFo9YVe82vVFQ18tg3ucFXdx2h2/\n/uEyIFD+fLF++AA+kY7Ehg+ix00zFGNPgb1IaucdSIVqlk1Grb1Pd0MkNrKI\n1C86/8Xyr6/w89TeVS94C1N2lf6l58jKpfSQMr7xLksU30hWclynIgGiBSGn\nHjfT95aWRQBPZydV0boKCS33t5V/wmruW9rHxc7T1bhm5EaeejyvP7iy8FqM\nKJiV2j8dQOi8QqUENIuzhz/nmLjtEzcXN5qdmHAUtDwY21MRKl0tVg9kvNvv\n1gFSY6mF3OHo8M7II2VJbBoAAgzv6nBf7+vlX6FqW6jPiZOqNV+vAOnrDXHu\nLI3mo3SCg3jnyu4nbuiBCBgXUw3rOPo9EuPIkS2kcilzStfCT0+TzS7WjQKI\nwL15qeSvNQEMPhd4mrZqPFcTvuHZFSbSryxI9+UJsjEbYCskycez9xZMiUul\nEwVi04zz6hz3B0RmJ7r3E51t7TBfCuu0W65SNtYUMNk0vf6++0yi4m0enpNi\nHStmOdStg9YCuz0tgaJSaB3Q3Q60/+EnyM0Sgs73evvCf9LC8li5bSFYW9SH\nagvayNkKyEbwzr9qJ6kb52siRmnpeBmyXMKbMCDXFd8UtOSqSYunsdtF05QO\nzSm7\r\n=7RVr\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","husky":{"hooks":{"pre-commit":"lint-staged"}},"types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\n[![Publish Documentation](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml/badge.svg)](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml)\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"784e33d578d1293fcdd0c9b0914580e069d7ba9f","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint --typescript lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --typescript --fix lib test","postinstall":"if [ -z \"$CI\" ] && [ -d \".git\" ]; then husky install; fi"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --typescript --fix"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.3","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.1.0","@balena/jellyfish-logger":"^2.1.11"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^26.6.3","husky":"^5.2.0","sinon":"^10.0.0","deplint":"^1.1.3","ts-jest":"^26.5.4","typedoc":"^0.20.34","depcheck":"^1.4.0","typescript":"^4.2.3","@types/jest":"^26.0.22","lint-staged":"^10.5.4","@balena/lint":"^5.4.1","@types/sinon":"^9.0.11","@types/semver":"^7.3.4","catch-uncommitted":"^1.6.2","@balena/jellycheck":"^0.1.1"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.0.8-renovate-sinon-10-x-784e33d578d1293fcdd0c9b0914580e069d7ba9f_1616702772209_0.9252558363348333","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.0.9-renovate-sinon-10-x-f7bde8ead5297dcf197b851123bda9cba5ca9658":{"name":"@balena/jellyfish-plugin-base","version":"2.0.9-renovate-sinon-10-x-f7bde8ead5297dcf197b851123bda9cba5ca9658","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.0.9-renovate-sinon-10-x-f7bde8ead5297dcf197b851123bda9cba5ca9658","maintainers":[{"name":"belodetek","email":"team@belodetek.io"},{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"3962ccb98c763f5955412984762bfc33229ffe41","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.0.9-renovate-sinon-10-x-f7bde8ead5297dcf197b851123bda9cba5ca9658.tgz","fileCount":18,"integrity":"sha512-ETkyW4ZE4pxfvWYjXhgzAKKi9U5C4N45SMIl6Nx68lpxxIt1S9g5dJ+accBqC+S6DUMCqIXabqDwrLjb/ZjUdg==","signatures":[{"sig":"MEQCICh69DqFE1feN05zG+W6+hwNEapFlGshJUQS9MjG5A6YAiAcSqWbzFVpU0uT80GuoG9rgvxKEKFEUiku0lCmMvqZNw==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":32081,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgXO3PCRA9TVsSAnZWagAAp4UP/jXtAEH8lazX6qDXkrZq\nLLp80oYUa6ITJ26KjHps6ACJUNJaKEROhruW56JWiE87arYDCbS/lynNsFya\nzrA0WXmuV9rh6kY0qiX6YKz4toJ56iSlMR+aoL7KbQ3Ze6EohhT/Iad11Mwk\nMUUwH5TphouCtQWWV4xh+kjG/bHbHSceB2RHRezYqv6vJfAbkDOFkDAB7pKS\n/xvx+bwl6ftuw2PL1diddZh+KNaoh9g4/99In2okjGRvQQbdFerzWe2EzjXH\ntQ6pgMNLl7u9Sq4ZNDO+zwZtmXnm5Ur4Bt1BZK7zVz+7GEfpkRYXvqF9yrrD\n4ywhahPlK2YRYCPy2Ts+njdzguqAunyP4Cevrs63lPIpTQSlEJLIn4R9zyD6\nnL1zPOZ457Zme9NfTa4rwYs1nQIsd+hzUhjKc+H9hAwd/ZvKz8tDbmcDW2qa\nDsPbSPkqbJhDeG2uKV3JAyqTMTiroidTENTO1zCsMkBENZzPp3twLUvcTe/K\ntcqKYvUDpUncQsW0bvfUF9Cdyrjd2AJ2GrUJZcOyGb6rQR5SZjxrK/jtQsmg\nEJRpo28P5qZW7RYktRRYfklKaE/7FviZx3Z6gyysABFJfLEh8IkWcRlzgDgF\nCn7pJpzXIRf/Kt4hsyzQy67XcWhxUfwsgPLwGOIhystn5N/aJQyHW1CThFce\n3U++\r\n=GnhN\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","husky":{"hooks":{"pre-commit":"lint-staged"}},"types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\n[![Publish Documentation](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml/badge.svg)](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml)\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"f7bde8ead5297dcf197b851123bda9cba5ca9658","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint --typescript lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --typescript --fix lib test","postinstall":"if [ -z \"$CI\" ] && [ -d \".git\" ]; then husky install; fi"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --typescript --fix"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.3","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.1.0","@balena/jellyfish-logger":"^2.1.11"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^26.6.3","husky":"^5.2.0","sinon":"^10.0.0","deplint":"^1.1.3","ts-jest":"^26.5.4","typedoc":"^0.20.34","depcheck":"^1.4.0","typescript":"^4.2.3","@types/jest":"^26.0.22","lint-staged":"^10.5.4","@balena/lint":"^5.4.1","@types/sinon":"^9.0.11","@types/semver":"^7.3.4","catch-uncommitted":"^1.6.2","@balena/jellycheck":"^0.1.1"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.0.9-renovate-sinon-10-x-f7bde8ead5297dcf197b851123bda9cba5ca9658_1616702927461_0.026207990433881","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.0.9-renovate-non-major-c2741c0b1e66d6406ec7fa5ac8e49b5f05ef5f85":{"name":"@balena/jellyfish-plugin-base","version":"2.0.9-renovate-non-major-c2741c0b1e66d6406ec7fa5ac8e49b5f05ef5f85","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.0.9-renovate-non-major-c2741c0b1e66d6406ec7fa5ac8e49b5f05ef5f85","maintainers":[{"name":"belodetek","email":"team@belodetek.io"},{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"dad86f0e6ea369b94743852d7201d4cff9f01c3c","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.0.9-renovate-non-major-c2741c0b1e66d6406ec7fa5ac8e49b5f05ef5f85.tgz","fileCount":18,"integrity":"sha512-v0idXUpxG+RAxt5X4fMHNxIl39LEqcHzeQXs9BahTmd8eGddrqZ4MljROqDl8D24nv6NwxKtZ8ZZeezbywJ/ZQ==","signatures":[{"sig":"MEUCIQDcnJ6OLVfNnKQD9TOIn+WtmdDTdJwn6km3dhJ7xhO/mgIgazo8LzUVqpiS8zUY6Ts1E9/RyZkpln9DcN/OlQHYpQs=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":32102,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgXRH+CRA9TVsSAnZWagAAhuQP/jWP8M+VW9NfK/UAw6eH\no0MAbEOAz03ks8kqj6G3Ew6EuW3Op23jrCvKtratH/4haKJx93lgnRMeOIw2\ncC6cLvbMAAnYbapqA84Ooa0gUmX+iqteazLPaS3be9SDCK6rZPGu9kSUqvNQ\naflbkA5169vHXd/p5JM5CbKi1s4F+xzrWybRy5TvbV1zzweZyio4F4vBM83g\ncf97aromkDcQ1Jl0t5IRk3qJ8oxSt5+cUijHQGikGxOYUBnxC3SXMJJUwBHs\nyZd+fdtkbV76neqP2YNok5RKFmsNqrPG8llId5Ii1NJEBySxDJgNit3XYmXR\neG/1WDwQxoQqsIDZEpUWfSlt7K9BU3v/n8IaSLn5m1UqJqBzn3Qj5VDVtm5a\nyN7ZP7hubeTM1bLmgxLrBGUozeXdxYxtcy/NqldZGXHWFAfV52Kk0ukW+rIw\nizuJNtil0Mk8iYcWAwNWqdsPrf3kWEFgaIegL8xPJKA19QRkSvXBl5eL4M9z\nAHCiwSvX4KmqDPoLwL0INiGka3Nk7Dff4bPBBt5EBpmHHt+VyTckAIn6LDN2\nRUl2aR3jKz+WTzowB8cs1tHHltXlLg6mlkgfsXEKLCPhHgt2qAgJDfHjxj27\nLXsitaxOMeVIURP9lBgok+CdZQ2fFQzqCA4l0KA1bxbIiYIVFwJk+4lJFy7z\n33aC\r\n=PuCH\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","husky":{"hooks":{"pre-commit":"lint-staged"}},"types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\n[![Publish Documentation](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml/badge.svg)](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml)\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"c2741c0b1e66d6406ec7fa5ac8e49b5f05ef5f85","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint --typescript lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --typescript --fix lib test","postinstall":"if [ -z \"$CI\" ] && [ -d \".git\" ]; then husky install; fi"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --typescript --fix"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.3","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.1.0","@balena/jellyfish-logger":"^2.1.12"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^26.6.3","husky":"^5.2.0","sinon":"^9.2.4","deplint":"^1.1.3","ts-jest":"^26.5.4","typedoc":"^0.20.34","depcheck":"^1.4.0","typescript":"^4.2.3","@types/jest":"^26.0.22","lint-staged":"^10.5.4","@balena/lint":"^5.4.1","@types/sinon":"^9.0.11","@types/semver":"^7.3.4","catch-uncommitted":"^1.6.2","@balena/jellycheck":"^0.1.1"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.0.9-renovate-non-major-c2741c0b1e66d6406ec7fa5ac8e49b5f05ef5f85_1616712189698_0.12613849279672973","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.0.9":{"name":"@balena/jellyfish-plugin-base","version":"2.0.9","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.0.9","maintainers":[{"name":"belodetek","email":"team@belodetek.io"},{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"9c483ddc988719f813d03e7fbd7f093bd011ce58","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.0.9.tgz","fileCount":18,"integrity":"sha512-hhUIDifYiVJcBcWq7xe3NG4zqB478fxxNmWgXLL2lgmggUt25P+xRwjIqh0LwH7V7s10abygQordrhonSugxwg==","signatures":[{"sig":"MEUCIAEUvUQQnBij22X24nH4sNNA1fRUbhme0HpKj/zzayLtAiEA3vzvtuYTHvMNu5/SQyqDf4L+S14mm8a9+lg2ty/GmtI=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":32042,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgXRLNCRA9TVsSAnZWagAA6LwP/00az9cb9PDjGYau1MBy\nQVGsSJeQ1ec+O4Qzssz13XgPaK2NZt+hX14xwertmUgvRT8rvn2RJUSO1rB9\nMrWEcvXFuhayWOk/Nqn7qh8qnQwMl9l7OtHWcCSxTSPOsMt1VbSiLawbCwTN\nZcBRiMqXplswNrUgkupuGxc8CM8DIBhWb+yMXHnBI4B644XLFQMmJY4qTycQ\nhxe5bMB0qof5rMyVJU036FfzFzs82UjuBKTgz2uZ8zDRgomYWL8l7sa4X47y\nyJ/li2LFGwvUJasXEodmfRfabpk9YaVOUKsgoK3317zHaaQMzlQvICgYjicc\nGRn8cyLQs9GDyHQSFaaTWGHFquia1d1o0lC+a/W8OqLpAzHkNAWrlxvjzGB7\nHfCd9akfeURL1/6N+8cl4oFfkDHqphV+IJBsRW0Lct7goKEByE4CMjZzz9mX\nj1mDFRpj6K0y14lE1S4C4UBKw5hA6AvzV49O0SNI9UhTWyCQBRhhoEaBuPgw\nn+SbzyUDdzL5khhi4gvMl0+KD3bU9IagXOETro/M43kw1XK5DaYKA5YXBIT6\nf0Y/mjhX8ntm3dqccM2nC/Q4ShEWj73GgZIRC5r5mZvgkhRMXoZNvvI/bUdc\npYEOERSXWeWkNMQGqw9gJzQ0XCPUH5Q5IIpoWIlqK/0ibk0xVOcOaefGoDcP\nLgkw\r\n=dIk6\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","husky":{"hooks":{"pre-commit":"lint-staged"}},"types":"build/index.d.ts","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"49ed38e8171a545133ebb4e2ed081f1889426aff","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint --typescript lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --typescript --fix lib test","postinstall":"if [ -z \"$CI\" ] && [ -d \".git\" ]; then husky install; fi"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --typescript --fix"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.3","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.1.0","@balena/jellyfish-logger":"^2.1.12"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^26.6.3","husky":"^5.2.0","sinon":"^9.2.4","deplint":"^1.1.3","ts-jest":"^26.5.4","typedoc":"^0.20.34","depcheck":"^1.4.0","typescript":"^4.2.3","@types/jest":"^26.0.22","lint-staged":"^10.5.4","@balena/lint":"^5.4.1","@types/sinon":"^9.0.11","@types/semver":"^7.3.4","catch-uncommitted":"^1.6.2","@balena/jellycheck":"^0.1.1"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.0.9_1616712397314_0.6024671683662537","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.0.10-renovate-sinon-10-x-e237e70769220df21e5f96eff59a8f50373ff5bd":{"name":"@balena/jellyfish-plugin-base","version":"2.0.10-renovate-sinon-10-x-e237e70769220df21e5f96eff59a8f50373ff5bd","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.0.10-renovate-sinon-10-x-e237e70769220df21e5f96eff59a8f50373ff5bd","maintainers":[{"name":"belodetek","email":"team@belodetek.io"},{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"e8a410504d7049158be620a6f7b7ebddf1f4b3fd","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.0.10-renovate-sinon-10-x-e237e70769220df21e5f96eff59a8f50373ff5bd.tgz","fileCount":18,"integrity":"sha512-b8Ms8X+CPpY53WzrLjHngJHolOzHYp2/dFPvkOixrI5//YfslaT4QlUN3LqVarjWWEiQCGye3h4EScyjThyX1A==","signatures":[{"sig":"MEUCIQD9jfFmQXDRFFapIIwImHUlzF3kP4cf/u/vBjX3P2EEUgIgacSIJ9ZLcA7SeWfzYPMSJ02JLWD4ibPIJVM/905/kCU=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":32185,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgXROSCRA9TVsSAnZWagAAKzUP/0AcyOI9mY5f4xTPh2bl\nuKZ62f8ABv5d9Xh85du8TsSenYtQfLBSf/UlCAC10MPj6ve7awlIM2Dt3xjG\nk5ykfCzxkaLfkIo+Ke1uWY3hlsAy84vdtWaLufcoaYomsaPFkWjJ9am9X6TD\nODNhtWRIKqNPnZP3bOdrVpFPzobjm0E+BJcGVy93uD0tuYmM8w/CKzYEItjc\nDJW1n7IR8NDGtGpBb2YhP0o9VaqL0KWCb03Sxx3xF3jQuU7RX9cdG3oGqeSh\ninVeyV5v44TSsTCEmup49PPsuaNb6jJM3t+qAKNj32hN3RuwwYHJY3FI630N\nMsqrw3LQxOhlZWC87jRD/pa2AnYimJBX0ELmCgVZ6KuDo7AyD0P7er2P1TDq\nlYCdH7elQ91QaWmr41Y4Ur71BpLeVa8RMIhaJKQaJ5agCVJq9Oyvn+7Iy88P\nJU0JM5y7r9cK7zvn2Iy0sNOhgPyGVkVAefoz6vM6r58wvYPer9mDwK+E+pai\nS8s2WzF7Em7arPuZ7MkKU5fDS2BL/eXvxaipxorXrdlXLDrYCkauW8wFKdRA\n1MT/wphMgSCz3BfSQg0P/FP93P4SNvhDQEErCdwzAFKQwZC0Gpem6urCTHIX\njkfAf/Y3iQJ/RyWaGQBhsIk4LCy2VCB9G/zwzcbmC+rLowrkRi7ApyJGknf/\nGQPo\r\n=sZI5\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","husky":{"hooks":{"pre-commit":"lint-staged"}},"types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\n[![Publish Documentation](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml/badge.svg)](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml)\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"e237e70769220df21e5f96eff59a8f50373ff5bd","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint --typescript lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --typescript --fix lib test","postinstall":"if [ -z \"$CI\" ] && [ -d \".git\" ]; then husky install; fi"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --typescript --fix"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.3","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.1.0","@balena/jellyfish-logger":"^2.1.12"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^26.6.3","husky":"^5.2.0","sinon":"^10.0.0","deplint":"^1.1.3","ts-jest":"^26.5.4","typedoc":"^0.20.34","depcheck":"^1.4.0","typescript":"^4.2.3","@types/jest":"^26.0.22","lint-staged":"^10.5.4","@balena/lint":"^5.4.1","@types/sinon":"^9.0.11","@types/semver":"^7.3.4","catch-uncommitted":"^1.6.2","@balena/jellycheck":"^0.1.1"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.0.10-renovate-sinon-10-x-e237e70769220df21e5f96eff59a8f50373ff5bd_1616712593647_0.0880700850226932","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.0.10-renovate-non-major-570caa9be54bf318d3df6d666fcb01eb03f4349f":{"name":"@balena/jellyfish-plugin-base","version":"2.0.10-renovate-non-major-570caa9be54bf318d3df6d666fcb01eb03f4349f","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.0.10-renovate-non-major-570caa9be54bf318d3df6d666fcb01eb03f4349f","maintainers":[{"name":"belodetek","email":"team@belodetek.io"},{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"b8f9f5ea392158c62739ed0fa3091384077ab780","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.0.10-renovate-non-major-570caa9be54bf318d3df6d666fcb01eb03f4349f.tgz","fileCount":18,"integrity":"sha512-/qX4Vt6a8FXBnIc8ZsNL8Q/uxHaGE+iujmd6AsUDR8PrVamvL/AmDfsg8oenA4FMI8aCzHCkYLa4S54ZxTQJXg==","signatures":[{"sig":"MEQCIGV9jAkPdaN3DhKJEhL1QYPzJ7iHutUgVevstEwj2bX4AiBOF0r6PtbOr7PJiY+YFh+sqr2KoDJ8tVmlk6Fg57Ceyw==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":32204,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgXWm3CRA9TVsSAnZWagAALeIP/ioiSzQYZleWg8SGhkkz\ntGnbxj6qnwdD2vQ4xW2HpltnDWhd7AhCZwfjlFhX2+OA+xZkD5RQz5rBfuTc\n3NAjKyC5B7RUWaERsQ4EKZOBslGpaTYcbvT19Dmy11Goih3D6l2FFtfhLJvV\ni6rdYWeA8QUq037ClVj0FqBFhWv6CIufWrj3yltHSQvCZUUWhNUGt+i6gXrZ\nz2AK3uOWMOrK8UK7xQM7BGrC6OSuaNWyO0OyNQTSAfcKIwrztLesPeL2q6ST\nF6kZde5YegFD/0eND6ssHHQS+TIAK33SK69pLneeVvBVi0PiFDEUO7U+Z20F\neJIFXNC1PWSMlw9+oTVxReLI7Nzy7625qerFMTgRqcxwG/6qhDdeTEitVNUX\nqcw2Ox7SzeopT6D5Pi2rHatZ1SGL4oP51aOJDALw6w8ZUDTNCqP5YYfW4EN3\n5doGEk/XnXRKUpQD6wSqA0iohB+1YRCuYGe4LPWOB2eZTrfLXlcYObjNP7uw\nKcWygBdXXyaqfZhqASdpR57Htuh/3dueNTBcngF9l/U4DoxxfKDT4pBApsib\nKy2cq1UujsQPQRi3TqgUuKyqpfJZPLeKSbt22dgEILCNhx7PyrVrJtmU0zKg\nTzsLJRru9k7+7rQRJxgzMIxT7x0fp2bnCviOqZ403zy6MKtSZ2FC61MQVHA1\nyYES\r\n=hvqU\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","husky":{"hooks":{"pre-commit":"lint-staged"}},"types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\n[![Publish Documentation](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml/badge.svg)](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml)\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"570caa9be54bf318d3df6d666fcb01eb03f4349f","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint --typescript lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --typescript --fix lib test","postinstall":"if [ -z \"$CI\" ] && [ -d \".git\" ]; then husky install; fi"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --typescript --fix"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.3","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.2.2","@balena/jellyfish-logger":"^2.1.12"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^26.6.3","husky":"^5.2.0","sinon":"^9.2.4","deplint":"^1.1.3","ts-jest":"^26.5.4","typedoc":"^0.20.34","depcheck":"^1.4.0","typescript":"^4.2.3","@types/jest":"^26.0.22","lint-staged":"^10.5.4","@balena/lint":"^5.4.1","@types/sinon":"^9.0.11","@types/semver":"^7.3.4","catch-uncommitted":"^1.6.2","@balena/jellycheck":"^0.1.1"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.0.10-renovate-non-major-570caa9be54bf318d3df6d666fcb01eb03f4349f_1616734646372_0.32577198939903473","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.0.10":{"name":"@balena/jellyfish-plugin-base","version":"2.0.10","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.0.10","maintainers":[{"name":"belodetek","email":"team@belodetek.io"},{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"5ac1e8e3dfda7f7f483aba122f8edbf079bbe51e","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.0.10.tgz","fileCount":18,"integrity":"sha512-gI9y67/QAbecn4LI92H/5zVWWlZFDtJ58+v3PFWk4/JlFWmNcRyp/rEa7S3D8fBItlYqSBJdqjPsxc+qWqYCzw==","signatures":[{"sig":"MEYCIQCkJQ6HoDebjHFEs7wOqox3sKmV/1aO5hbQxhhwyvqP2QIhAJNWWJNPzS18kJEb/fYrXCWy2O+RayphdT/aV5U0etf0","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":32144,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgXWp8CRA9TVsSAnZWagAA7JAP/00DvtbVpt8M9kQlw0Se\nKuf74IOfOZmJH0hiX56KgVTGZ4wedf2b0KLAwO3pRzZgHAqpOf0gCCeVckbC\n9bE9AuIyzIIHwO0ozqtvBCD6nT0dC1bg28bS/VGYvaFRGasY6KfF2kZXO6wR\ngbUlCXWn6Q/vFWPTM5zdQztqg5RM4I6hZptAh2p4Nc23a8lMDwf7sHMwlJ8D\n0bYM9oROAen3dH3dwR8FzghuGBd/XJAbolPFaMt/KXrLzbIKN+MpzvJ3bt8/\n18DxtZGk3bFRyA7sEsLiA1Zsbmg31LvaiY9FMcqLiK7EaA5R4zveFnLxLLob\nxmtwWfYtmsIHHNoUiNpw5YCmzZTtSCm4dWOYVXIuF0VlCrttk6a7bQlFSk5u\nXNnlX5UakCTKzqnoGrSMW//WjD7SYq+FsB95lpo3Awr/4Fw/T3fUXA5bpzsk\nMhSSOqyApyKuj92FNIBXNuxd91bDDEo5J1CDq7b7swIwIGb17b8SATxunkkI\nenHknK99xookH0XNAJ1V2GNaDC0axfqW1yy945Vo67ccNG+k3m94CB1nY4He\nwIqBS46mnS8FDta+rqgWpZSHaD1dxciB2UpoOeVAO7E4h1jXK97C8HjFz+YH\n3fSmu88TIXCHJkUGCL76lDxOJlrvQNyp1u78KCJXpU1FyQ6FscOLEvy9KJlg\nBOWc\r\n=JuJ8\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","husky":{"hooks":{"pre-commit":"lint-staged"}},"types":"build/index.d.ts","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"504b143d3767309e02f3fa1e06faf52ab589d1b3","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint --typescript lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --typescript --fix lib test","postinstall":"if [ -z \"$CI\" ] && [ -d \".git\" ]; then husky install; fi"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --typescript --fix"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.3","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.2.2","@balena/jellyfish-logger":"^2.1.12"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^26.6.3","husky":"^5.2.0","sinon":"^9.2.4","deplint":"^1.1.3","ts-jest":"^26.5.4","typedoc":"^0.20.34","depcheck":"^1.4.0","typescript":"^4.2.3","@types/jest":"^26.0.22","lint-staged":"^10.5.4","@balena/lint":"^5.4.1","@types/sinon":"^9.0.11","@types/semver":"^7.3.4","catch-uncommitted":"^1.6.2","@balena/jellycheck":"^0.1.1"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.0.10_1616734843613_0.6138497303998596","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.0.11-renovate-sinon-10-x-e304c7ab3a1d29e2d7db657819f3416ef036e32a":{"name":"@balena/jellyfish-plugin-base","version":"2.0.11-renovate-sinon-10-x-e304c7ab3a1d29e2d7db657819f3416ef036e32a","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.0.11-renovate-sinon-10-x-e304c7ab3a1d29e2d7db657819f3416ef036e32a","maintainers":[{"name":"belodetek","email":"team@belodetek.io"},{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"04154c0c668670395485b1838d978291e38b231b","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.0.11-renovate-sinon-10-x-e304c7ab3a1d29e2d7db657819f3416ef036e32a.tgz","fileCount":18,"integrity":"sha512-P/8RcardUKP/z/OYwA2YdSnIJK7ErhXe+5y9xq4hoaGvI+Jm3+0lrrR+GC+yEoSLE+jMbzPh09cAgnRvxo10jQ==","signatures":[{"sig":"MEQCICGhgo2APRCc/lRGNQdhqC+sMVsYsYN1+Z48d3wMI9buAiBAzuQSJPPuP9ms37KRTVHx3EACuS3FeRODG8LahXZWmg==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":32286,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgXWtfCRA9TVsSAnZWagAAmiwP/iQpZX9AWvPj/oSlFBLd\nlH+OYKOQ4HpRztO2NesaSFCrjMC7UBcHpI4EMN2mVFfFb4fmX6WHhdgbaqOX\nuH+kHL1Ufa/FIEUhSSNDputKOON2VMDe5FK9z8hOZmwUMGi60WYElcoyJcuJ\ndZmOLp8g3p3OCyCMf3uNgU0pop+A5R/Iz04C7uY//8ShV1juIT/gMYJcrbSk\nkdCUt2V+SeAR808SpT1HCYumuX2hwyBmjKtL3rLuWK/anJRfXfrsERyXWsOv\nojJVi9NrcxHeuEwyo+M2fyFQVJcb36z3Df8YdI3EjZD5LbJtX/pSw8d2Rgfa\nXR7Xr6iUWr2FGfPZG89oiU6CwukN/kxLqX/Mjxy/LChlUkiCy5GSE/GWoMNa\nnLizM0vUZi7ho6LjnUqssOwUXDw0GuGUjAxpgfEwaR++f1wm3Th3ZWnHoQl6\nT1IVEv++Y9JHyMgtRMXdPNOUUNBsl33V/VSu0SgS6sy8VxwP+N5FpUNoreFx\n2lJd2vUHAKld62qa5qGCzh9jGsaTihtNXpInEQSCTQROz78E+Lz7BEPy7PG8\njQp4zZucE3DsdkIumZht7aktIKtR6tWiyVJjxO1MzeIFSFJks6FMLgkm033q\nj3f7+Bs3lsTEbuA+xqn4EAFN1kFpvfrmKV2a7hlko9RNVsI8cfWWARfXXf90\ngQT6\r\n=i7oi\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","husky":{"hooks":{"pre-commit":"lint-staged"}},"types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\n[![Publish Documentation](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml/badge.svg)](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml)\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"e304c7ab3a1d29e2d7db657819f3416ef036e32a","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint --typescript lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --typescript --fix lib test","postinstall":"if [ -z \"$CI\" ] && [ -d \".git\" ]; then husky install; fi"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --typescript --fix"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.3","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.2.2","@balena/jellyfish-logger":"^2.1.12"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^26.6.3","husky":"^5.2.0","sinon":"^10.0.0","deplint":"^1.1.3","ts-jest":"^26.5.4","typedoc":"^0.20.34","depcheck":"^1.4.0","typescript":"^4.2.3","@types/jest":"^26.0.22","lint-staged":"^10.5.4","@balena/lint":"^5.4.1","@types/sinon":"^9.0.11","@types/semver":"^7.3.4","catch-uncommitted":"^1.6.2","@balena/jellycheck":"^0.1.1"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.0.11-renovate-sinon-10-x-e304c7ab3a1d29e2d7db657819f3416ef036e32a_1616735070911_0.7121562397937469","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.0.11-replace-husky-121b00b2843a7f0bd8117ea9ae88b85ca87c9327":{"name":"@balena/jellyfish-plugin-base","version":"2.0.11-replace-husky-121b00b2843a7f0bd8117ea9ae88b85ca87c9327","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.0.11-replace-husky-121b00b2843a7f0bd8117ea9ae88b85ca87c9327","maintainers":[{"name":"belodetek","email":"team@belodetek.io"},{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"f8d19f97d81dce08ab6fe0725ea9b48f7c404233","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.0.11-replace-husky-121b00b2843a7f0bd8117ea9ae88b85ca87c9327.tgz","fileCount":18,"integrity":"sha512-0BIsIb3DxN7jrHbKEHc43pMyQd/GzWBEQGZLcIEuB01LCwPyEAFVmqSvd6Fh44klO/1Ji7hUOTeMiTSt85+mEg==","signatures":[{"sig":"MEUCIQD2aPTZ5inn5zOTi6X4QznKn3aslElE2efLxaswF4rBHwIgaWVCFwvmqyFmUS01L6McupEmXJo3cConCj0nI9r85lo=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":32201,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgXXh2CRA9TVsSAnZWagAAQpAP/2iEfyUPXYKf5mKu5XcX\nhRwNrat/NQ8b1oj/0Ov1KS5mSGMl8Z62HhJGwCqBwCaSBepWuMaZp3OCStSY\n5BphZJsjeQBUSnO1ZsB7isRRBwSXFH/93T5/8cwAsEd554NRU1rIULDHstMw\nI0hTa/pEEkW/HrBT4gKhJ6G848c7cNyeIsWbCdlphXqseTmjEvk54x0RzwFV\neywp4IPUtdDbpKARcK/G1k5LbAwuvUh7t+GLCOUYbzAB88oLLdQu9gSazYLY\nUP/o5B+PaZZrnDcfVzOUfEwqFLoOLU9UjgA4B+iZYalOftVWx8/1qMyFHL0b\nJawBOpXEK7wg/+sjrr5NXuXJhLV0DBe3T0JHtjhymE24ANsr5KDF5oH67qp9\nKUz+516+ee1WdXlqRPsQAQeXmgdpvM5FpAZ/ah0milRWcNzghZZMiLxXPkw0\n3hSyXZpz6ppR0y+u6SN+JzPkKIkfMt6P566cRwu6szrDDPfOknDjd/gPZ9/9\n4clxwGLX4ho8ayCwzwSWtloXZbzT1tIS3JQqo5+mfQDZV8GFTSqO8Uk9593T\nmzsPfwRXDbp3Nt6RBvxLvdHyog83AFvNIe/hN7pR3fYNkCKgyRSonpRHhhGy\nbJ3bF7LoKU9NCzJhkhkK87H+DBC/jTc/4KbTyIN6IW1ztHJuJzrEIngzIYSQ\nayBY\r\n=+Tvh\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\n[![Publish Documentation](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml/badge.svg)](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml)\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"121b00b2843a7f0bd8117ea9ae88b85ca87c9327","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint --typescript lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --typescript --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --typescript --fix"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.3","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.2.2","@balena/jellyfish-logger":"^2.1.12"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^26.6.3","sinon":"^9.2.4","deplint":"^1.1.3","ts-jest":"^26.5.4","typedoc":"^0.20.34","depcheck":"^1.4.0","typescript":"^4.2.3","@types/jest":"^26.0.22","lint-staged":"^10.5.4","@balena/lint":"^5.4.1","@types/sinon":"^9.0.11","@types/semver":"^7.3.4","simple-git-hooks":"^2.2.0","catch-uncommitted":"^1.6.2","@balena/jellycheck":"^0.1.1"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.0.11-replace-husky-121b00b2843a7f0bd8117ea9ae88b85ca87c9327_1616738421736_0.9788997960894348","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.0.11":{"name":"@balena/jellyfish-plugin-base","version":"2.0.11","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.0.11","maintainers":[{"name":"belodetek","email":"team@belodetek.io"},{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"9e38843a19f07eb0cd2255a83dd86e2611fd190a","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.0.11.tgz","fileCount":18,"integrity":"sha512-tesAm84qgBtK2E5XTiB8FvvOHDLXweVF6ttg3gxbaYn+B1/jTcOO1oodJuRRu8/uTfC2N4023gsBcoiy5P4Fjg==","signatures":[{"sig":"MEQCIESJqOuuPF5Cizax9YczH5CholaS+0cQ6nHiHQxMCDRXAiBllD88duKFyjW7W1apAktxpYfV5/WIzM0zSiSZxdAAAw==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":32146,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgXXldCRA9TVsSAnZWagAAM7gQAIch/bjcVfdGfGVTz156\nmYHeuqRHIu2uq7W/63hctQBHupqfc5gkqFE/cHoJCBbe8XGc74OJPNJsXAo9\naGtifG05PQc4zk+WcoV8SeHg3abuAWqTA1MCHK72w1+f8CI3a0isttuwStdn\nRSgYZvvUwj0WcCO24jJhTOqjeV4S1SZzyXf9rBiu9f0cZK+mnWlicvcRhMp1\nJR+VsqSMXgOq66O2T2m8a9YLHbLyhL0JwO7jUMymWj0HiNQD1vsyBLC82ei5\nH+a/c+o1XLXj05pkG7hvSY2KAJmZ19OrRYx9GSYCzuFNuR+ul0ZZgZHzIsl1\nPnia+LaH9XaBSi/QLaJBECKstzQPnGrXnyl7NQepLv4P8osMFisC0CTvKe7W\nNckEYvEFkaAtBEpYIO4HidZHOeiSAQEhGXsbf8eDWrbEzJb4OBxmBVSslEZp\ngRbhriH3IvFVdr8cxg9fG7noVodcKa7Ed8EVCTbj3BpFCBBw5XrTYKKMWKmu\nXBZkXr9G5UxYAlOvyhNRgUZiWe7ncyWf09kPNWK+JMPPSib2h9+/zBPU8FAY\nxnt6+GsUjfxhM5tVXcuRWwU8tPma3ldzldKqbb9JPFOvG6rmz2E27UHTIag/\nfbcLJyRp6Q+13I40cvFfMyWxoAOKdxVaOOwXfumVsa6jF5qXZxCU7lL+4386\nO5Nt\r\n=GXGB\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"b19ffcf77f2eeea10472940454a1d0c35e40509b","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint --typescript lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --typescript --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --typescript --fix"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.3","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.2.2","@balena/jellyfish-logger":"^2.1.12"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^26.6.3","sinon":"^9.2.4","deplint":"^1.1.3","ts-jest":"^26.5.4","typedoc":"^0.20.34","depcheck":"^1.4.0","typescript":"^4.2.3","@types/jest":"^26.0.22","lint-staged":"^10.5.4","@balena/lint":"^5.4.1","@types/sinon":"^9.0.11","@types/semver":"^7.3.4","simple-git-hooks":"^2.2.0","catch-uncommitted":"^1.6.2","@balena/jellycheck":"^0.1.1"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.0.11_1616738652977_0.21448302619208315","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.0.11-renovate-sinon-10-x-661791bca8ca71736a87a9f3e7077ab687487ead":{"name":"@balena/jellyfish-plugin-base","version":"2.0.11-renovate-sinon-10-x-661791bca8ca71736a87a9f3e7077ab687487ead","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.0.11-renovate-sinon-10-x-661791bca8ca71736a87a9f3e7077ab687487ead","maintainers":[{"name":"belodetek","email":"team@belodetek.io"},{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"0cd62badc6b4d583b450393ef9d10b2e40bf16f0","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.0.11-renovate-sinon-10-x-661791bca8ca71736a87a9f3e7077ab687487ead.tgz","fileCount":18,"integrity":"sha512-O7LhnpNw+pbBMDNNygug3KokzcGmP/3r2RIH4OJ7loulD1zJ3XFaKlKr2NVCf7JjbjAfKm5a+NTxPXs8vs5mpw==","signatures":[{"sig":"MEQCICwaZqO3NH/Lba1HNtHP5FdUvubFo8NZ5P4yzj//4wnLAiAdo+0wWhumzGdTsdh9OVmWLpDjGBX78nNH1H+QvbIuWg==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":32263,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgXXoOCRA9TVsSAnZWagAAOyEP/0mGvdRr6IhZHZi20vQJ\nTMTrO0Qu3jw1YpSE+bM00+xsQzXbtMW/mEf3ufMGyB8hkEkbfwsOK1nW1N/u\nmHhmaFpo3u22f7Ne3MUQDytHBfyG17QADzH7BpE9slLJNUxmggjB8yJwtY5g\n/amm3uv7ZfVUvIYr3VOldVIQg2jJdiy4JfSjXUITzkTXn682NoprpPVfZRpO\nvq9/P5E42qiJwe1h4vccEDSpuRkVB+8/pdJ+RIbPPfS3hNQpWR+qLDWr+3Xz\n5XEEctd1foLak1ku4rjxhK5AIqQcD0/ilgN3x6ikVwEIUu6NiVk7Kbc/5D6M\nCuFcs6oUM9TQLHo2GMnvV3M5frOWys3rA7j81oaYBaxHWqU6/3GNfpEejho2\nz+3AEvQ3oE9EU4Cj/uQxcao9HPYkM7TgN42TQmTXJpqyT+dlfLwOG4SGsyPT\nwY+uYKrnDi+pBBkrBiptfKhEbg8VC4fCMqfKFmbeggZQ4AKjteu/2SigFJa7\nHic0Wyuv3yUgp/2xcWk/bq+0Sgfp1ZtAtNkbeHWUioUf4VBqMflst+bor8eG\nX25/cw1xpS2irOvSskMKp6SOUSoWdMN63MDqMbkuA/8s2J2JFqdxd7inZ3M1\nlFn+zW3M5HSq+kQLuZguwQgs/TFYwd2CcitjDUvAkakL6Q345j9I6t1KhrMF\nxriC\r\n=44pZ\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\n[![Publish Documentation](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml/badge.svg)](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml)\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"661791bca8ca71736a87a9f3e7077ab687487ead","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint --typescript lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --typescript --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --typescript --fix"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.3","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.2.2","@balena/jellyfish-logger":"^2.1.12"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^26.6.3","sinon":"^10.0.0","deplint":"^1.1.3","ts-jest":"^26.5.4","typedoc":"^0.20.34","depcheck":"^1.4.0","typescript":"^4.2.3","@types/jest":"^26.0.22","lint-staged":"^10.5.4","@balena/lint":"^5.4.1","@types/sinon":"^9.0.11","@types/semver":"^7.3.4","simple-git-hooks":"^2.2.0","catch-uncommitted":"^1.6.2","@balena/jellycheck":"^0.1.1"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.0.11-renovate-sinon-10-x-661791bca8ca71736a87a9f3e7077ab687487ead_1616738830309_0.24282026173979987","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.0.12-renovate-sinon-10-x-a4e8342c5f60de13aba2eddc715fc1586c2156af":{"name":"@balena/jellyfish-plugin-base","version":"2.0.12-renovate-sinon-10-x-a4e8342c5f60de13aba2eddc715fc1586c2156af","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.0.12-renovate-sinon-10-x-a4e8342c5f60de13aba2eddc715fc1586c2156af","maintainers":[{"name":"belodetek","email":"team@belodetek.io"},{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"089b561db895a80f19ea36e74f5e8bc48066a8fe","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.0.12-renovate-sinon-10-x-a4e8342c5f60de13aba2eddc715fc1586c2156af.tgz","fileCount":18,"integrity":"sha512-nygQjHld8g05Qau+kzUAMucyVxMiSfkdWTXu0ruw3tlRWmkCe9QcpTWPF1ikuIHPDYTUngnuFaiYFVu6CgyFPw==","signatures":[{"sig":"MEYCIQCEvM2U+JCmoXxC5ILSlG7LJWy9rJRgreh2fAoGYCXcdwIhANP09tHNKhR5MMZvhGzS+PQTAUvGrNgrzoxPGlIlaLp2","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":32288,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgXXriCRA9TVsSAnZWagAA2IgP/R3IK8y13OusLfT+L0bv\niOH6qFCGAhGdV+qIusXqoQ2HTSs/amBeLFQMmWZzIX+IG+zgTfLN53UmBuMl\nOlyzKp1l5DOU84DsVHgKjwUCAbJ+9V1FF03V8Aq3MXX+cU/BSNRIfYvLTRki\nA2YrPnKEcxv7iZiAzMnOfWQoWbjk59lcQoZVlX7lVCMDd70H14PiK8bWeCFc\nZ8iZx056XC0OL2ykZukYsFUQk5b8sOif3JtiToqZ5IQKMrMI5K5XyVBgsOSm\ncow6vWmH45KidaStSIuSvNDV4OROyrLfNwp+4N86ZLs5QKGy6PGGmSb2DYw0\n0oam2zf++EfFbFLY7FKD/QfHhDNTKkBln27ougOV6ZI8mqu+20vvPbqLe/aI\nW5alIUv81/4L2E8mgCrkHmDj1sRcViNXxqX110LprRVpz2HteOcpCdEDLu0a\nLN0Kg9VrqN7Mo7ypAoCl7uDE0Ex0HkDSc9pksPdBQZZN4dSpVzVnvNwpfsQb\nBtF4ZSWgHoT/HEXzQKPT/YDTbTBSgkhK/SDJ0CYLXFyQBUU0QPQxEZ3WS6I5\nDVn6sVEbJln6pAZ7M7249wDObLKASvPO0vxZBzgA1vFV0Y5I1dgNvj2n+bGo\ndYASu0V6fEVmP7oinXn07Y466G0FaQp9HjBN1Ql1UW2ufywMEQnZUhugDwJM\n24R6\r\n=VLEX\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\n[![Publish Documentation](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml/badge.svg)](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml)\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"a4e8342c5f60de13aba2eddc715fc1586c2156af","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint --typescript lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --typescript --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --typescript --fix"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.3","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.2.2","@balena/jellyfish-logger":"^2.1.12"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^26.6.3","sinon":"^10.0.0","deplint":"^1.1.3","ts-jest":"^26.5.4","typedoc":"^0.20.34","depcheck":"^1.4.0","typescript":"^4.2.3","@types/jest":"^26.0.22","lint-staged":"^10.5.4","@balena/lint":"^5.4.1","@types/sinon":"^9.0.11","@types/semver":"^7.3.4","simple-git-hooks":"^2.2.0","catch-uncommitted":"^1.6.2","@balena/jellycheck":"^0.1.1"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.0.12-renovate-sinon-10-x-a4e8342c5f60de13aba2eddc715fc1586c2156af_1616739042001_0.20300508064192613","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.0.12-renovate-non-major-25eb0503054c1c860aa566210573836a8c2a425c":{"name":"@balena/jellyfish-plugin-base","version":"2.0.12-renovate-non-major-25eb0503054c1c860aa566210573836a8c2a425c","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.0.12-renovate-non-major-25eb0503054c1c860aa566210573836a8c2a425c","maintainers":[{"name":"belodetek","email":"team@belodetek.io"},{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"06de15befa43b3481cf26ff66645c33d28a12df4","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.0.12-renovate-non-major-25eb0503054c1c860aa566210573836a8c2a425c.tgz","fileCount":18,"integrity":"sha512-I3rlHm31EPoi72XgI5SFnAci/gKylehj9KWRMrN9o8yhSMHjumbUVzeECK5VBdZttSOUAzni2gFS0OBUUC6/Rw==","signatures":[{"sig":"MEUCIQCcuhdKQwLcxKUrUJsUnD6lDAY6aQnKvCKKfVJDPfdxxQIgfrbhv98Svm/oyJGrzDsEHkFfV5tXpAojDxV1Lws8rxw=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":32366,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgXedRCRA9TVsSAnZWagAA55wP+wdWSY81XljlQfkiDFJF\n4aNYYsEpJO9m9y5rMAkvMD2sE0LXji0urz7nkpKojrOkRTMNTswWcQgVkbDY\n2sP6z0Y7oL1l819cAdp0mebcrQQPniTdlRFYBLYVjfAdMkW2LEJv7GXcE8N+\nDxXuXqG5dNZfq8qKSrPqaWWoVWMImwhcJZQInAJNoEoYRjsmhie30Grv6B51\nR5hww/6qN4IyZ6kTeWn8h0uvM67t6CTCmqC9InfIOC6MaTKNdCk/qniyARAC\naQ++SY41/GYLUguJHCFuGbU//PjI0cZHuiDHZ2KmVBOUC87kfjsgQWytEiE4\nVd2i3dqA1qSLhgn4/WSV4xGVNWwcKpyLzFqEx18HorblfcylAUlW0dGJNVlp\nx5Udk76u2XD7jIqwNF1VoiYLMJKDYT+5dQHfpTZ1S6z+2zDvs7wiHQTmo2vQ\nmdsv9DPkAY5r3CE5fNIL6/jgn0udBsNNfhWMJXvviE/21ob+AGEr5xq03/rd\n4Iv2YZtU+xk6vC21mG0SsEno96oFvF5IeC8oTHUy6BFRiYy82gzpSIPLsma6\nBHpwURBbuicNmhf5/A9GAj8Zc0UmZcr2T9ZoFQdLbTAQ1Z5rImnqkyecjnpq\nN0J/5n82vgqGGXL9jkE+hHu7RFr/e65qzfp632WWu/T/tszqqBGMN3VSyRz+\nEYiu\r\n=R2la\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\n[![Publish Documentation](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml/badge.svg)](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml)\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"25eb0503054c1c860aa566210573836a8c2a425c","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint --typescript lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --typescript --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --typescript --fix"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.3","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.4.0","@balena/jellyfish-logger":"^2.1.12"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^26.6.3","sinon":"^9.2.4","deplint":"^1.1.3","ts-jest":"^26.5.4","typedoc":"^0.20.34","depcheck":"^1.4.0","typescript":"^4.2.3","@types/jest":"^26.0.22","lint-staged":"^10.5.4","@balena/lint":"^5.4.1","@types/sinon":"^9.0.11","@types/semver":"^7.3.4","simple-git-hooks":"^2.2.0","catch-uncommitted":"^1.6.2","@balena/jellycheck":"^0.1.1"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.0.12-renovate-non-major-25eb0503054c1c860aa566210573836a8c2a425c_1616766801324_0.3659955474606029","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.0.12":{"name":"@balena/jellyfish-plugin-base","version":"2.0.12","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.0.12","maintainers":[{"name":"belodetek","email":"team@belodetek.io"},{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"05830bca5d10ed2a751b40ccb326bfbda1e43458","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.0.12.tgz","fileCount":18,"integrity":"sha512-cw/CJFXClp4VMTTVFuFxo9MHyb7GO4jjbSgQL5m7VDprMGpS62ohc/rSsf9ecLpbF9XVpm6BfVeP1DE/V8GxYg==","signatures":[{"sig":"MEUCIQDjVxOp1CTftrpOUOziNYurvCoaoHwtrVgcG6bjGFjqRQIgaa6eYntGcr1tDf67AWnthnkMPfLKMQlK1i6N4uKLzcw=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":32306,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgXelGCRA9TVsSAnZWagAA88gQAJFgwmvjRAj1wYggxJS3\nK4aeyn11WTpxy6i8p2qBqI1Xl7szhyHx29Ys5EiK0ur03kNjw8y2e3NRKtij\nWh4lU6IlLHjRUiKP9PkYwGrjlds3X1B/0GfmTRCM7nMiJ3BLynRT/kGSle50\nTq7h362fyjzGlbbpRYNyqFf4ugX38CrnGDnV0zkIOwwu1kSpofSCsc8pYgVh\n1T2TprxsgUmz5+0SdhS/II/zZx+MHajar8us5Nn5vWjtMmj5GVOdudQyr/0W\njXSp5HNM/JQZkiGRkPgRuigEXFXMOeEvjo2eREfCncAPE2vn2sX2ur9GCfaO\nxkb71LkgK7HCc970oXbew0aFnfy9Ls6KLc7/7WcCGzKt5JJ/6bnwWCWMBoJ6\nemWhnH64xDuBEPa6SSZhzRTqxfHLSx6Bwk8XdfqTDJuRHYPOPOdLf1NYasw/\nMsn2vP0YyLpzjPbyvih3rWCBfrxwcrkfxH0hPSRNdEjd9E5wU49Dn2HfZo1r\nsmjeKlcg9cw9Mo4N6tWJLUVswWFxtJfn6LD6sFXyB4J85Fe4PWrnsfCUnGlL\n7Em3eS3MW9sfb9WOZY+Au/1dGAH0/aoXawQROw35I6x0psCRipwXQxjoH0dw\ngSXoWPKKdjNPRj2sQIhlTXos+V3uiA97Mx8JxhBYS5Cr1InW3H6VGobkTjac\nx8Vs\r\n=OyxH\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"835e917deaad14064d936b8bf486f5f183321c43","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint --typescript lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --typescript --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --typescript --fix"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.3","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.4.0","@balena/jellyfish-logger":"^2.1.12"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^26.6.3","sinon":"^9.2.4","deplint":"^1.1.3","ts-jest":"^26.5.4","typedoc":"^0.20.34","depcheck":"^1.4.0","typescript":"^4.2.3","@types/jest":"^26.0.22","lint-staged":"^10.5.4","@balena/lint":"^5.4.1","@types/sinon":"^9.0.11","@types/semver":"^7.3.4","simple-git-hooks":"^2.2.0","catch-uncommitted":"^1.6.2","@balena/jellycheck":"^0.1.1"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.0.12_1616767301681_0.4237803098400923","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.0.13-update-interfaces-f0cd3afe3b687fcacb140e7cc6532c6da266a2f9":{"name":"@balena/jellyfish-plugin-base","version":"2.0.13-update-interfaces-f0cd3afe3b687fcacb140e7cc6532c6da266a2f9","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.0.13-update-interfaces-f0cd3afe3b687fcacb140e7cc6532c6da266a2f9","maintainers":[{"name":"belodetek","email":"team@belodetek.io"},{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"182f888f4ce48e286869fbd1b58c1202bc9eb8c4","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.0.13-update-interfaces-f0cd3afe3b687fcacb140e7cc6532c6da266a2f9.tgz","fileCount":18,"integrity":"sha512-x5SE9jmPzYt9lehCwAlnFG854GTFXJ9fNzU/CyskqkBCP8zfUAs+MjDrHsEadPVku4R0K9KtA0q7XPhIJ0D+CQ==","signatures":[{"sig":"MEUCIQDV4r2fABjE0OrO1BgqswzWzhzz3L1eLJAYs7XhI38ldgIgJlvL7qhtB/27nqkmm4BaLTIEWdfropdCZt0amZQWHcI=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":33101,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgYTD1CRA9TVsSAnZWagAAbjkP/1okPRFNKa5ZTGYDCDkE\nDTCH5CL4jWGRUEd7bwgwAjfdd7oR5K0EEhwJEgOPllVXkZEc5OkyXBt6wX/A\nvQl8+B5YP7kg379wRNN9VESda1LL67uQKm+BRWm+LPSRZPtY5/b07QdaFhAh\nnH7PSxObuiQT93kP1dQBwMvjGsjXKTu+e02GDiev2zGs5LHpFb63lx0FG901\nFANXMmjsYrTasWlqtlQuQgrDTuIO9hf8kzXSWM2qvYSKeq6yNHWDF554qiRi\ney8McjqcDaIqlq/tPnLqEM0DBZu3qPhlI7Y8a91lDfOXt0LByhWnr1L8wVv+\nWkOV60rRQfMk1mhH2Hr1q+jT+TBJD1uycdrHdFUQUWtPpY4LMmuT713xsMOT\nRoXBgaLCstIXP4dena3CEg2ovCkZDzyV5whzH1Nl63BGsImvuRfnYUBUiK58\nDgzFZPpW37jaVNYtz4ro6b7LVdZ/Anq+KR1wz5oitl4mknbLbBKjvJmwdTP6\ngpiamYPKuynwHxO9G7eQooVXrZwsvdBwZ1/fJUDgmYmqoHFEZg6zvsCXCn3i\n5pjPTdvH8mAXV9AnUb32QSp1jmxKNlgIHPks4jXb1jzhSkr5HZF4crD43CnW\ngbbXNuejBd3dXcRbjRewiH+h6BsIFIOfn8eeWTZR5cf7sHBh0Is3mAWOkp0S\nAOvt\r\n=JVS0\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\n[![Publish Documentation](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml/badge.svg)](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml)\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"f0cd3afe3b687fcacb140e7cc6532c6da266a2f9","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint --typescript lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --typescript --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --typescript --fix"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.3","json-schema":"^0.3.0","@balena/jellyfish-types":"0.5.0-jellyfish-core-interface-39957b492a40bc905faedc176405580dac4a0cac","@balena/jellyfish-logger":"^2.1.12"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^26.6.3","sinon":"^9.2.4","deplint":"^1.1.3","ts-jest":"^26.5.4","typedoc":"^0.20.34","depcheck":"^1.4.0","typescript":"^4.2.3","@types/jest":"^26.0.22","lint-staged":"^10.5.4","@balena/lint":"^5.4.1","@types/sinon":"^9.0.11","@types/semver":"^7.3.4","simple-git-hooks":"^2.2.0","catch-uncommitted":"^1.6.2","@balena/jellycheck":"^0.1.1"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.0.13-update-interfaces-f0cd3afe3b687fcacb140e7cc6532c6da266a2f9_1616982260694_0.557798260184087","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.0.13-renovate-non-major-fa60d59e2b25c5b04fdd5252822071da236fd2c4":{"name":"@balena/jellyfish-plugin-base","version":"2.0.13-renovate-non-major-fa60d59e2b25c5b04fdd5252822071da236fd2c4","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.0.13-renovate-non-major-fa60d59e2b25c5b04fdd5252822071da236fd2c4","maintainers":[{"name":"belodetek","email":"team@belodetek.io"},{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"82b7657ff585abfd2d3b4b1549f21ffeacb8bbbf","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.0.13-renovate-non-major-fa60d59e2b25c5b04fdd5252822071da236fd2c4.tgz","fileCount":18,"integrity":"sha512-LGBfDEe57KAzTfyJB4BQELtAMlDZxBxrq9UTRRxJsA+bIV9xXxrgZ6JMzsPwGWNq0Eb5j/650KWUzZifL5Xy1w==","signatures":[{"sig":"MEYCIQCpeqG7M1iPD8zP+FSzrTyodhoVu1Li7BUDDIom+mGQWAIhAJXQjWOnMPob3Lx4vxfH0ZJMVb0z6MEgZ10jywpNnIDg","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":32467,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgYXiLCRA9TVsSAnZWagAAB7YQAJ+i5A7WHZ6JOgrPbP/J\nmj7prwRbbm+AKM9ScrZBDNvxyNw7pn98dvgG/eSqHUD200gJW/rSbvbbOzTl\nwC8jW/Y+JfnwikAgqaxn7wV6CTuvxvGM/93vZIyp5ZSB1OGey7eSpmeJHP0P\nbxTSAM2+vw7OsWrMDY3cJ2G0/zMWKyYooaODAf5Nmn90dw7vb0yzh1vq7aSx\nj8mpkVgob1UQq8/IklHOE8nXhCdjc2Va2FJQWGpFpYFrlvVtQlKClySOJJUq\nXevWdNlrszDC1rsGVyMkfin3T6q6g7tzbf4UWPqN+L+ud1IhVxvL+4EAKWpq\n+Yz5oASFwyGSSXzjraiuJU9i6P1boQDENOpVQP4c62ZIl43KbE7LhapbXr1N\ntiKJ61aCA8LeGvSVxbJyHSp99T8kPLqeSvP8YcfrSMlq0TQANEmTny6XC0QB\nZ8bxAi+T7B8HE9ZdbkcctGg0kN6+AL+wy/Rm/3nVTO4PyFdUB5ShtlqehXP1\nNDByUnnWFR0EDvg3bnyhrPZAWwvbwX5ggp0vcLSimSZM+z1+88XCCdiWayHI\nz5MTu1dH4u0lMfyVwRWxvFjH7t2t2uBuzjF0dd1LazNvLyGmYQUwWqFBaEDv\nMiJUN2g7uiGclPThwrkZ10b7S5S/dwIGYZpU3LW/vGsO4I7hC9vlhsryk8Ho\n18b9\r\n=zfA3\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\n[![Publish Documentation](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml/badge.svg)](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml)\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"fa60d59e2b25c5b04fdd5252822071da236fd2c4","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint --typescript lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --typescript --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --typescript --fix"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.3","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.4.1","@balena/jellyfish-logger":"^2.1.12"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^26.6.3","sinon":"^9.2.4","deplint":"^1.1.3","ts-jest":"^26.5.4","typedoc":"^0.20.34","depcheck":"^1.4.0","typescript":"^4.2.3","@types/jest":"^26.0.22","lint-staged":"^10.5.4","@balena/lint":"^5.4.1","@types/sinon":"^9.0.11","@types/semver":"^7.3.4","simple-git-hooks":"^2.2.0","catch-uncommitted":"^1.6.2","@balena/jellycheck":"^0.1.1"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.0.13-renovate-non-major-fa60d59e2b25c5b04fdd5252822071da236fd2c4_1617000587361_0.318822182948022","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.0.13":{"name":"@balena/jellyfish-plugin-base","version":"2.0.13","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.0.13","maintainers":[{"name":"belodetek","email":"team@belodetek.io"},{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"a41cff2e87493168b6e62a61ee3129b9e2b33dab","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.0.13.tgz","fileCount":18,"integrity":"sha512-FkdCuCS8WiC7VCW+TeKE/mW/i5LWRt9n/lnJoLYNDYeFRx4BiP2BnOcbHf/zD1iHd/gt7x1lIas3gbUhucvRlQ==","signatures":[{"sig":"MEUCIBejCNc0RH3YPi3ZrxD80mIU8L+FNncpJiiez117C22rAiEAoMNIoLtW3jf5DOFkgY3D+Q/mEd4wUZZPTo/A/Wb2UC4=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":32407,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgYXlFCRA9TVsSAnZWagAAYFsQAIXAAc4u/bcQlJXe2tpS\nFTlBrGl9lZG/UoUL4Fky9IKTyac7lIItBd4JM8+ud/CRGpb6dwOKzhkJMp0F\njywCe1FsWEGrsCf60N9iDTahYcN06q0nEiKCRsM9L2fnI6P4aY44x3i1g7th\nWEVjJvVqkXIm4lMaMOC9L1GQMR8sv39pwD0MrFDE3S0fRYdlU0UKd8+tbyDg\nmbTO0elbfdS7q9lRzzknLSwwXM4XcfvnokHjF+Xo7EHmRr2dXgkIT3Q68ecQ\n3W0C+Mk3b7x+cpqml2EG+/OTxo8djfLE0SAnHIcL1t6XmYnvNK3t5Ayd11Au\nu31QmnqtJNSZx2hd987RA4ot5E6rEY3F1D9CDWQpeoifucAb6poKBlxC1x6E\nC2El7VIj0l6iYkXONr64/mUmYlweomXqXIroHD9ysqQ90zbxgtCZpC9zl0Qu\no8Cm0dNhdapMMsJhhdalZJdhcYxQYJ73FjK4ETsLJ4zIwojgwiuO3AHJ68IP\ndm04Faq/uA6LQ08oP1jx2MOLKMOgTC1SGwn758X5jpTz6VTpjWQb2Mrg/6sY\nMRED52A7vUcbbLgp34ocf7bIDhX40eLsndra+1a1HcELMpoJg7o0zuvwfu1H\nIJX2KIrrkqTv5fK0ayAlpTFH8HbHP9Mmn8n80DmHV30Df4JseJD53hDCGuhd\ntA8k\r\n=R5vL\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"d125ef7d2992a23b9f969336a7068f480a72b5c4","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint --typescript lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --typescript --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --typescript --fix"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.3","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.4.1","@balena/jellyfish-logger":"^2.1.12"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^26.6.3","sinon":"^9.2.4","deplint":"^1.1.3","ts-jest":"^26.5.4","typedoc":"^0.20.34","depcheck":"^1.4.0","typescript":"^4.2.3","@types/jest":"^26.0.22","lint-staged":"^10.5.4","@balena/lint":"^5.4.1","@types/sinon":"^9.0.11","@types/semver":"^7.3.4","simple-git-hooks":"^2.2.0","catch-uncommitted":"^1.6.2","@balena/jellycheck":"^0.1.1"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.0.13_1617000773033_0.7057345974950655","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.0.14-renovate-sinon-10-x-0f4080abf2284cbe028371a2447281a827481b3b":{"name":"@balena/jellyfish-plugin-base","version":"2.0.14-renovate-sinon-10-x-0f4080abf2284cbe028371a2447281a827481b3b","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.0.14-renovate-sinon-10-x-0f4080abf2284cbe028371a2447281a827481b3b","maintainers":[{"name":"belodetek","email":"team@belodetek.io"},{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"075c5b308cf544c8b8261c2694f3b13ab131fec8","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.0.14-renovate-sinon-10-x-0f4080abf2284cbe028371a2447281a827481b3b.tgz","fileCount":18,"integrity":"sha512-dVsA33cb0KuktwbYN/WIs3QpE59GdpL63Z8qpPydaTBl94mVqkuniJ/uReHSMO165ystiDZ4ddgRxFds/SnKTw==","signatures":[{"sig":"MEQCIG9MClXH0FAYizSGJx3BagQbuFKiQJJyYO/nztl7yLRXAiAvJDO6ED+hc34NStKDmlyWfczz5znEVGV5ZoAB0NzcQg==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":32549,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgYXoTCRA9TVsSAnZWagAAM8sP/iA4hi1HnEUYoXdNEl1E\n/1seykG16/Iu94X6IJmTNkZOU2iVDmCeKboyK3yerftEteQX4NTuF0cNdd2V\nhfJNIUbtg2LDJyhs/tMXXx5h2uT84/eVS/w/YUO1mRDnuFzlfJuPdFrQwFuT\nOwexcstfyFJhS/LUyySGneOWBgZimIf+EL359yduy/s/e8Gbxtd3cZ9RgCQQ\nR01nPky/oxHBMXWpEor09Oz5j1xTgvbaXilWN4BAsz1i7VujDcIRyCnnfYBv\nyO95qQky93w92UHUgAMS3IdrcHTcfwg+p6pGV8XudPecxA2qIuRVVZL42xqR\nNmSHrkjJGAx6p+3Ch3WZv1VrgSlD7nLq/YFFDafs1HQjfQCfhfSGGddjso/6\n5zknXXeW7pqb3I509j0AtPct/wdCFM50sVRdpXl2BrErGcyzmKJGP9s7c0MH\n6Dyg3jok+U1ARfDNykDK9L3RqdAe916zDYtSIxeZxKPpha7Uj3bpFXUQHcJF\nukyZfW3zqBMjL+2okB5Z4NO+OcDNHJ/rYe+36F8CaDO9JnDszi8va7FOszuf\nSFt0noKF22Vca7/MkSu852Kdn2PJMjgez0XR25h4AOw8yw7p5ChHpbrmrYj7\n3KIMNIVT3Dph5AkedmG4unHlxawvGKD6eBz2zonMvOGL48dAeIxLDyo4cd08\nPBG3\r\n=o1Ij\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\n[![Publish Documentation](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml/badge.svg)](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml)\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"0f4080abf2284cbe028371a2447281a827481b3b","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint --typescript lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --typescript --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --typescript --fix"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.3","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.4.1","@balena/jellyfish-logger":"^2.1.12"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^26.6.3","sinon":"^10.0.0","deplint":"^1.1.3","ts-jest":"^26.5.4","typedoc":"^0.20.34","depcheck":"^1.4.0","typescript":"^4.2.3","@types/jest":"^26.0.22","lint-staged":"^10.5.4","@balena/lint":"^5.4.1","@types/sinon":"^9.0.11","@types/semver":"^7.3.4","simple-git-hooks":"^2.2.0","catch-uncommitted":"^1.6.2","@balena/jellycheck":"^0.1.1"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.0.14-renovate-sinon-10-x-0f4080abf2284cbe028371a2447281a827481b3b_1617000979456_0.5765429261384776","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.0.14-renovate-non-major-1b43c84936b4a4cc294e7738603c3d4a61d681fd":{"name":"@balena/jellyfish-plugin-base","version":"2.0.14-renovate-non-major-1b43c84936b4a4cc294e7738603c3d4a61d681fd","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.0.14-renovate-non-major-1b43c84936b4a4cc294e7738603c3d4a61d681fd","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"596b57092560c5b5fbff00bff023e57442172a45","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.0.14-renovate-non-major-1b43c84936b4a4cc294e7738603c3d4a61d681fd.tgz","fileCount":18,"integrity":"sha512-MtOYHTHw+ZqtipMS5ytHBvenjYtqhgcVDKVu3v5BcMOACPxE8J6LHpWRqij2EzZj7yvyueuVP9tOw6f9sZQ6aA==","signatures":[{"sig":"MEYCIQD5LkJicu+0rXkZFfzEBePtyL+RIvPmO3DLlBjxAYbh2gIhAKeSLvzOmP96uAx0hkz9OwVAcBx/v5E83DHwU6PALhm4","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":32676,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgYgujCRA9TVsSAnZWagAAS9YQAJQoguUQoyuAb6l3pjHc\ny5McPAfdYP3EZhhalLHK/UraHSQzFtqJ70jYWfggOtJ/TpZV4kwivgfwNrnq\nzFqNM+xx2hDvNlkv6dgY8wLxB8Xr4cl8UUebPbULB79ZoNL8MwUm17YGYJmA\nTNEbMYWGfYVR7Som/wlV5reukzYs+VKqkfKxqzOzYPmx5J9kKuoB8RrQM/Zl\nA80shq8nz5k1Jc8VOz/VzmKU44AKNK5hV5/blR5zKnrprO8duJyOEJvwq0NL\nq1J/cM5pLMCSSFAfg4U5s/Q58toofBJrmOtYw+/jg+1cCiDrPIzy58KNR79M\nNUaWSMalVp34o8G1uQHPzqCsrZmphGEUKFmzvwWaP1ijqIA16Wz7itA+EJq5\nJ3nMZyVTbm2+mZ5+BIbWn5nz+8i2pPG8MZ2xv5hTGFx4Amw1WPfxoD2jptoe\nDJAqajXDuQwRpIKv6yK6vclm4uurORcyqJRgn+/izd7g9vThkBXjeJbUq4Xr\nsDTKM05uNcxzGNDJdu4rkEfTHattkO8CKkDxzldHJphcJKLMn8FC3ziRgded\nEiSjTZ3EqHpzoh+yJhN5VEM7KNGsHrAcYsjSKfsxaW0+9lECVgNX9GXVVBdc\nTKSJ1nUGkJzsynAaLZaNq+/k8PoaTK/htlhHXtheVKEuh0HrpYHaDLsrx9bf\nX6rr\r\n=53+c\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\n[![Publish Documentation](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml/badge.svg)](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml)\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"1b43c84936b4a4cc294e7738603c3d4a61d681fd","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint --typescript lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --typescript --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --typescript --fix"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.3","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.4.4","@balena/jellyfish-logger":"^2.1.12"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^26.6.3","sinon":"^9.2.4","deplint":"^1.1.3","ts-jest":"^26.5.4","typedoc":"^0.20.34","depcheck":"^1.4.0","typescript":"^4.2.3","@types/jest":"^26.0.22","lint-staged":"^10.5.4","@balena/lint":"^5.4.1","@types/sinon":"^9.0.11","@types/semver":"^7.3.4","simple-git-hooks":"^2.2.0","catch-uncommitted":"^1.6.2","@balena/jellycheck":"^0.1.1"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.0.14-renovate-non-major-1b43c84936b4a4cc294e7738603c3d4a61d681fd_1617038242511_0.4282228931903691","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.0.14":{"name":"@balena/jellyfish-plugin-base","version":"2.0.14","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.0.14","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"ef2fe344b9c79cbe4e23a62a87fb9293dc714050","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.0.14.tgz","fileCount":18,"integrity":"sha512-1MGaTJqf4dHnVcM87XwELxOdUg4/LzIwoEFB+cS8PDjxxXdwko2Lu24CwY6zACmnCae9VAvzuKK8mNTfrXh4Mw==","signatures":[{"sig":"MEUCIQCtHwUyi8vctSmMm0EpZ+yavCyXr6qYf0rmzGCkA5WzMQIgZHDjmrl5ed1s+VFxONGWuDRHL2oZ/46ZziZNask9OpE=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":32616,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgYgyUCRA9TVsSAnZWagAAWMIP/0mFkxmO+9vuweZj2TpG\nkUfMTU7MutdhCLDD1hO0HV6WA+W0Svoo5z52Y3hWCjzyG6HZZT5Mc7tfPNvF\nOvcDRZiuxVjEg+kFG0LB+zwiGW2Zl7twhP6Nvvq1EXDOJP4CId233KOF/ND6\nyGt7xmedk81w5sdaDd27KgwFTI9iHuzBfm1TWEi/wfrOaDfclLwVIfpV4M0u\nOlrtfK21z1UE5MtolXvWAbMeoZ0IpL+7uqv4mtENU9TXji5sSFnUTzZkfFqS\nWgbU97jfEgjYmq0ngBr9XmavwCwm+LV3+CQaU769EdTm8nAeEdUI8fLshjQm\nOqICkSHwGdoe71g6NkPscb0kiS4/JfbFvogGW9/jwrPikHbWNdVoR6UU1Vum\nuVLKVTUe+TVTxpP677qNEwDnszLrxKVTAGfz7WBdx9Vp7kbAg/nW8ZK0jwjk\ncRagq4fF9aMhjxf/jQau2bo64HW+NJJhoSsoL7wSkxSrSLg+QYzHG5qCwLDj\nHTqzA3lAhAPkNoeZfOAd/JwVS63tqJP6HSyJ7tX03bG1slyzyahT06cJRaMq\neDlM/eYkFpQtJvzTWjIqPysabYJbRLbDUPdMyIrHh9MsdFfDhQW9yiN9VrEI\nZGlOKl0wTas0APUe/9sNIH4BlNdcw/F9TE8qtMnxvzVI223ACC+r1/Ox05dA\nx1At\r\n=U3F3\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"6095d2151aea550d01e86d1f50b9441c4683545c","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint --typescript lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --typescript --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --typescript --fix"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.3","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.4.4","@balena/jellyfish-logger":"^2.1.12"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^26.6.3","sinon":"^9.2.4","deplint":"^1.1.3","ts-jest":"^26.5.4","typedoc":"^0.20.34","depcheck":"^1.4.0","typescript":"^4.2.3","@types/jest":"^26.0.22","lint-staged":"^10.5.4","@balena/lint":"^5.4.1","@types/sinon":"^9.0.11","@types/semver":"^7.3.4","simple-git-hooks":"^2.2.0","catch-uncommitted":"^1.6.2","@balena/jellycheck":"^0.1.1"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.0.14_1617038484409_0.6089335266517799","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.0.14-renovate-sinon-10-x-9c703f0136c43875e051677f96bb44352ff87929":{"name":"@balena/jellyfish-plugin-base","version":"2.0.14-renovate-sinon-10-x-9c703f0136c43875e051677f96bb44352ff87929","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.0.14-renovate-sinon-10-x-9c703f0136c43875e051677f96bb44352ff87929","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"346274775fc02e9bccaf5448039e2fcdc2f50aa0","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.0.14-renovate-sinon-10-x-9c703f0136c43875e051677f96bb44352ff87929.tgz","fileCount":18,"integrity":"sha512-iArBaARsf5qotxV/KSQE1nEms4FtvvDohK/S0z2Jfa76LhWwAlMWf+sK6CJmAXlBaD0WtHc77XGwjdoWaTAsHw==","signatures":[{"sig":"MEUCIClvaRZwgsqLVQW+iXuT5AnzgBmtd74EE8fWsIK4jiYdAiEAsl6xSF6hhgrmQecwKgMm6oZsM9SIi9/PP98aX//myCA=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":32733,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgYg1oCRA9TVsSAnZWagAATlUP/A9JIQIoaIBHR4Tn3MrL\n27xYT1F8D34lZ3TorpS+S3lDPQF3gMZziiALp1ZLOZpQNgtGVSXvdKbDVXEV\nsdf0EYL6XfcVpM8c02itLfNPxOawuhtodp1udVQb/asikZE/ItDIE4Eu6uR8\neLyngh5gzRkarJWG8/Bwx9pXYjV2K6pZVgmg8c4H6pMAcoDkVSeFxpEfV6gu\nJXiQgiMUcrRFHQ7PXkaQWFlv50o1EvJjhRuzObG+/8uvi6+zvtHlwYS2prcb\nZXPsVWDx6/IvpedF3p1crAF2/r7v8g0IHQvpp9N11pX5kQ+HpyIOVR+bW1BM\nHsX5m1Ob+l8UQX7LKwYcdqrCGD//oU/jzdJk6t6msGVN3BaOVfdjQNHvdp18\nW4kEqWacId2+2DzugIlSX6x5OB1bzkbv6/rGyecv8gqFvU+nujHDC/5fn+vy\nMqbPJ7apkT49FyWactXyN0ijKEiTLiYydNKnJnsFjsYupLlvAGGWuuKKAt5C\nz0e3ergJX2UxKMiBVKxHoHfwuW85L5FUvnZii/5itYxyn+3s75CLLRzx2hin\n0oqrSyZn8Xrtc2hTXmzu1ZP4dFRqum/XoXZ58XqVkTfgh7tR3C0uZlfdXbBI\nk6MbLDw54kuUkZR5JtJE6uOJ4vP8kDRz+pTj2/4MG7juqZocUs0gNwAzdcQw\nRAcz\r\n=lNrF\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\n[![Publish Documentation](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml/badge.svg)](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml)\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"9c703f0136c43875e051677f96bb44352ff87929","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint --typescript lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --typescript --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --typescript --fix"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.3","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.4.4","@balena/jellyfish-logger":"^2.1.12"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^26.6.3","sinon":"^10.0.0","deplint":"^1.1.3","ts-jest":"^26.5.4","typedoc":"^0.20.34","depcheck":"^1.4.0","typescript":"^4.2.3","@types/jest":"^26.0.22","lint-staged":"^10.5.4","@balena/lint":"^5.4.1","@types/sinon":"^9.0.11","@types/semver":"^7.3.4","simple-git-hooks":"^2.2.0","catch-uncommitted":"^1.6.2","@balena/jellycheck":"^0.1.1"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.0.14-renovate-sinon-10-x-9c703f0136c43875e051677f96bb44352ff87929_1617038695792_0.6980310170505317","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.0.15-renovate-sinon-10-x-480f9986f2befb4ea5f57d62ded780e8963e49e5":{"name":"@balena/jellyfish-plugin-base","version":"2.0.15-renovate-sinon-10-x-480f9986f2befb4ea5f57d62ded780e8963e49e5","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.0.15-renovate-sinon-10-x-480f9986f2befb4ea5f57d62ded780e8963e49e5","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"793d025f49f5e2bb2679edf83f45cf28c74ffb22","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.0.15-renovate-sinon-10-x-480f9986f2befb4ea5f57d62ded780e8963e49e5.tgz","fileCount":18,"integrity":"sha512-umzMbm71H6K/fRv6rpYZClFmh9Ocgyx7ABq38rvslU5efMtfxx6pvktU4LEd7UgiN9bU+NYZNKlnaOF1Nhnh7w==","signatures":[{"sig":"MEYCIQCMKIR1mj4g7UY9Oy0EISN+7iC212AYPjfyAorFMTTwWgIhANb6vA36ezFwJj78hWQNZvvrlBkL3HYW/F4+4OhmDQQS","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":32758,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgYg5gCRA9TVsSAnZWagAAfl8P/3OGTa8URr1qB156N2lb\nnsuCwEOVKc2I0zNe6kjd790xLSfiR+lFAo4gbqMgA+8Q1zLvjWngLH/2EnSM\njBtGShtsq7RtP3kgdWQhclGhO/A08SVr48fCJRoDpaX9wG6SklQMiULLOlHB\ny1W2P2/TbEaXk3koJ+1i9K9Kcz4PN+iL7kIvJQjPvIEBnqW4Efvhs0IdtGCS\no7a29YRJidKthEdHrlEEse+wS4P0HCnTmPcJtRYszSxK2pVOay/R27Apo1eH\nWqIcyk2NkdjQHLj0fXFquLMHUzIumbWPDBE7zqYiHogwhD85FwsleLa6ryAc\ny/cT8NIy8gWZpNkSyG+caXT12AuqPHcK/a1aER3Is6/D9E9Sv+LzPh0BPCL3\nkjPR3+HtwP3lREgVvGgIH4G7q97OHSP1PcpaTDAR8i0j8sl7cal2NQn0Y78L\nEfQ7S2XcqyY5t6ZmjaUuQeKzr0clQV7FFgidYRGzTyaXKGH75vqOPVnc5WIQ\noqUz+5eZD31XUOqbPg+EbT9bXoMUto0OX+IHwjRH08R7cTE63UK6ZFOATAOG\nGzaMg/qBmUdcpehdlQJHMg2UMGjXGnSfiiFuzq3rjmNAOCI3SJYAW+kBvha6\nWTl8AY4ARwliFUnudu7pI5fcSxcioskzE9XBe8mtvf7QyyDyn6bj8cQZp5VX\nyjio\r\n=MjQ1\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\n[![Publish Documentation](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml/badge.svg)](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml)\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"480f9986f2befb4ea5f57d62ded780e8963e49e5","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint --typescript lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --typescript --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --typescript --fix"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.3","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.4.4","@balena/jellyfish-logger":"^2.1.12"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^26.6.3","sinon":"^10.0.0","deplint":"^1.1.3","ts-jest":"^26.5.4","typedoc":"^0.20.34","depcheck":"^1.4.0","typescript":"^4.2.3","@types/jest":"^26.0.22","lint-staged":"^10.5.4","@balena/lint":"^5.4.1","@types/sinon":"^9.0.11","@types/semver":"^7.3.4","simple-git-hooks":"^2.2.0","catch-uncommitted":"^1.6.2","@balena/jellycheck":"^0.1.1"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.0.15-renovate-sinon-10-x-480f9986f2befb4ea5f57d62ded780e8963e49e5_1617038944370_0.031278605033011164","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.0.15-update-handler-return-cdffa0087095b13447c9456c584012f922eac234":{"name":"@balena/jellyfish-plugin-base","version":"2.0.15-update-handler-return-cdffa0087095b13447c9456c584012f922eac234","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.0.15-update-handler-return-cdffa0087095b13447c9456c584012f922eac234","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"fcb19e160fd6dd1a37bb1c167975718e2d0217a5","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.0.15-update-handler-return-cdffa0087095b13447c9456c584012f922eac234.tgz","fileCount":18,"integrity":"sha512-o9cxE/HyRQ4rS3df5Lv1Sta0wf2qX78wm0WDZe6bDLG3cDcCq1jYOQcyWZ7moJfnUE1McYNdjZXHtayv41/WrQ==","signatures":[{"sig":"MEUCIBHaa2xiPIq1AyrpVkJ5BHDN9mRD/XbWRbUQeVhVi3hFAiEAwwlZEC+ZT0JhfLOsOXlANFhlt/Fluk7o3UmFCnnEDE8=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":32795,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgYozYCRA9TVsSAnZWagAAN50P/0CiBmRKpSA9CEBHolQK\nqxumYVhzJiabeNYDFV+KB3HKXrQZXmO4ILrriRZYkVoQOzZaelrAQsDXrjer\n7tnbhfPTChnNCZx2M40LUPiCkKoe1tkgoFb8oIOjnhN8xvBSaIERwqjGrWrt\n5J6plcdUm8eVwYh74E3IjOT4ej4fRxZEPokl0pNZc0NC42N0x47eCKL+kGLt\nazFoxIn3nF3iJEc2T0Hrad6efdlWRul0Ah80EZmhb5Czi0ymAfXSU8HB1DQl\nIMzPP4mBj0NCBCmMfiDVxzHqQ6ZQis+IncU4L+TD8CzLigQMey/IoMPdZNzI\nl2kFL/9sOksl/6gq1Ld5W4Vix3BoV9RuM+D4dg0w24d0vH+cUKDxN/GUpEFd\njHzO8ZsK4yEXYcjCNcZ3MwGhHpDAkghrjXV1EOjVfqyjjE3adX84UvWHXF1J\nw3dA41EkgMLsf5BEd6JfZlraEvxZeQn5mBDGn1lPdWFza/3VAkhCGcC77rRw\nFZfXWZX2prnVnxp86chexxkU48aySwz0ejb5rNrT+HI9dcnj5b4OwDLaClsr\nUNOXb2zYW2nDqM/LnyGLau20P3xz3EDd0SJ2cDJVxKRBNUq4UTIsrktRSD3z\nZXb2rXcSBVg51KtULT9ChOz84vMmA37DgQP/YYnZDZ2DCRWEPDBl9UfniIdT\ni86Y\r\n=YT+p\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\n[![Publish Documentation](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml/badge.svg)](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml)\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"cdffa0087095b13447c9456c584012f922eac234","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint --typescript lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --typescript --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --typescript --fix"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.3","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.4.4","@balena/jellyfish-logger":"^2.1.12"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^26.6.3","sinon":"^9.2.4","deplint":"^1.1.3","ts-jest":"^26.5.4","typedoc":"^0.20.34","depcheck":"^1.4.0","typescript":"^4.2.3","@types/jest":"^26.0.22","lint-staged":"^10.5.4","@balena/lint":"^5.4.1","@types/sinon":"^9.0.11","@types/semver":"^7.3.4","simple-git-hooks":"^2.2.0","catch-uncommitted":"^1.6.2","@balena/jellycheck":"^0.1.1"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.0.15-update-handler-return-cdffa0087095b13447c9456c584012f922eac234_1617071319964_0.7462336107986427","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.0.15-update-handler-return-70e8d326861ac786b556d38f44ca6569902cd883":{"name":"@balena/jellyfish-plugin-base","version":"2.0.15-update-handler-return-70e8d326861ac786b556d38f44ca6569902cd883","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.0.15-update-handler-return-70e8d326861ac786b556d38f44ca6569902cd883","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"631fff6549eb88980c097e6fb8f51bcbc7125745","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.0.15-update-handler-return-70e8d326861ac786b556d38f44ca6569902cd883.tgz","fileCount":18,"integrity":"sha512-ALKSA7x7kx0I5NPWJowDEh9YTb6bSMZV/F3oYTM/yx807IvKYh9HcYPEyuLl02ubZJ1Tx57MOpxuvOSo3hVbZg==","signatures":[{"sig":"MEUCIQC52DbWzGJQkC7Q+JaZs7TG0undHdlZQChyOsKwBUG59gIgD+giNGW3y6IJVaPoOqkY5F+HJUPvACij45NYB/7UfVM=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":32783,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgYpFOCRA9TVsSAnZWagAASlwQAJp27bmwwFuhRo151y04\n1N+YEqUY6gvA7szTS9P9cp+vsWeL5exqMwXPei2hoixWWkGxTKGhL7DGrvpx\nf8g2Z8zOCJgmvv9oGIf8DRCpQgUpVEseDjeuCygaRfRo8twLzbdCchBYGUNl\nfFfzHiEqmMs9WoTk2wE8tAve7HJFteyCW9SFqAyNZX7/cGPRI/GNE+mGZC1/\nqzBcPKXTNqXq9A2HUqI+js511X1c3+dJzjRcyuDPOVbQDevRI+5eAq0fH1NJ\nWtz3/qb0YBu0M9SUb3eiADhsM1ohTMqwfeSM7E2liHbMdjoWgDX8iyCKE4Pf\n/MkmkFgA/D0WTjLwrkABn0x5AfCRcwtBr5yGISTgEVcVjiSuA0EI4QrKdtni\nvhKsirhURTJM5bwVHrv4+9cyoo2t631DNXAPIRDF+lJMKExrEQHicdzShI4k\nvbT6pCQPvVJhj4d8j7U+uc7H/86g0LzOvZfxz1t04MijvAfqwTpZFrajwHmW\n4F7Yas5S/NTHPLZmFB+0z09H2aJ+37kAtem9DHZD83DLkThv+jqPrUd7kxDo\nq7vlQIKGeL/X4iu0WVMRY3bKQKPPUGQomcQB4H616M5hW5inJC08Hog00XHK\nWbxqkbOliKNsnpyagLoYLvFQRo0i6A1NUw0zM1h1Ix3GS/VrGpPCH2O9q9HK\ny6tH\r\n=5RFg\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\n[![Publish Documentation](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml/badge.svg)](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml)\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"70e8d326861ac786b556d38f44ca6569902cd883","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint --typescript lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --typescript --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --typescript --fix"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.3","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.4.4","@balena/jellyfish-logger":"^2.1.12"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^26.6.3","sinon":"^9.2.4","deplint":"^1.1.3","ts-jest":"^26.5.4","typedoc":"^0.20.34","depcheck":"^1.4.0","typescript":"^4.2.3","@types/jest":"^26.0.22","lint-staged":"^10.5.4","@balena/lint":"^5.4.1","@types/sinon":"^9.0.11","@types/semver":"^7.3.4","simple-git-hooks":"^2.2.0","catch-uncommitted":"^1.6.2","@balena/jellycheck":"^0.1.1"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.0.15-update-handler-return-70e8d326861ac786b556d38f44ca6569902cd883_1617072461915_0.020876765926316265","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.0.15":{"name":"@balena/jellyfish-plugin-base","version":"2.0.15","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.0.15","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"569931faecd9035fe26c288f489a0b6f733f2533","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.0.15.tgz","fileCount":18,"integrity":"sha512-PNVaWpq3RGQ9Wk6mrmrPTmk35L8h3pdJfOn6y7rfDMBbd3w7mcCylQgcBFSe47SmO5dqsHdQGaV7eHKcK5jJGA==","signatures":[{"sig":"MEUCIG45rPn/PoG3WYzBhdokeiY1YZObKAtFD/FdlP4t0wPEAiEApuPkcGKe4mIVvwW6F8rNLFsMgHTaPkJCYZS2f3HHM6M=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":32720,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgYs/ICRA9TVsSAnZWagAAxXAP/RlF3yzvOc26a91WDadE\n03O3lLbQKVacZ/KEUw8kQi0nb2xrScoE/xX51iYyP0XGl2ul2N9sPfV6roqa\nxmBjHsDW77zijPWeUgmsA1Xi8gUJPyC64YU3o6UwXvpoWEfOM9b4lEuMOQ2f\n+CKZLnOm4lIrduap3pZB8tr6uMbYDxmLPqRZAq4YlvNugJeIOchbYDUhRL5E\nASlbJiE0p15QuaIvQvDQ+hip9RnJN4b7a9Ik1K3m/qDPYCK7cZHKeTyNJYC6\nnGQAGDwEmxeUsEfY9w+V+swenx4NL7B2q+3yW0fAgXw61hrBvhD/dNSGVGSy\nCAFwIRG8rw8g5LII1S4eGrlxgHzJcQbmqnwflxjNwnH4oE/D7A2/U4xRSOxB\nulwtIuQs3Yr1HPn+jgCnBmFsoBTCvtuIFxwDaEZIq+ETWSDSzrdkRkWw2wJJ\nKd85WEfTZRip5ADnu84vhU9dkUcEkWoUU1DKbzjzCnSjZ2DAotjmD/EZdoEu\nqDu1Akybbua41OA3jSedAwWrTJw+KuK/2EC/ShK/bu1UdOUqnfmRy0ir+3cM\n44BWrLamZiTMOe9rh0GkrUu76BDrSCVYS5jgPiV67688+8xeNokK5ey+pjnu\n7DNpEK2PPldCL+dHRB0p0MLlVjXka1r3fdHJFeErhTbACgLArrbhxe0ApCEY\nIMSP\r\n=G+Z+\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"db6b1961645ab94207251a5ed8ca011dc0a2329c","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint --typescript lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --typescript --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --typescript --fix"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.3","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.4.4","@balena/jellyfish-logger":"^2.1.12"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^26.6.3","sinon":"^9.2.4","deplint":"^1.1.3","ts-jest":"^26.5.4","typedoc":"^0.20.34","depcheck":"^1.4.0","typescript":"^4.2.3","@types/jest":"^26.0.22","lint-staged":"^10.5.4","@balena/lint":"^5.4.1","@types/sinon":"^9.0.11","@types/semver":"^7.3.4","simple-git-hooks":"^2.2.0","catch-uncommitted":"^1.6.2","@balena/jellycheck":"^0.1.1"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.0.15_1617088455643_0.7606211774948282","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.0.16-renovate-sinon-10-x-a62d35b24c1fc3ef55ff0ea6e1f18663044d3ee7":{"name":"@balena/jellyfish-plugin-base","version":"2.0.16-renovate-sinon-10-x-a62d35b24c1fc3ef55ff0ea6e1f18663044d3ee7","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.0.16-renovate-sinon-10-x-a62d35b24c1fc3ef55ff0ea6e1f18663044d3ee7","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"912b25d0ff13054c31b423cc2cd2654078890eaa","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.0.16-renovate-sinon-10-x-a62d35b24c1fc3ef55ff0ea6e1f18663044d3ee7.tgz","fileCount":18,"integrity":"sha512-Bo5EPgIwcistDW4IwMh4E+fKjtst1gBo76F3n8vYbp+Z6I3Xc3f8YZifbiN7UBj4qRw2Otb28CYQtGfk/LxQzA==","signatures":[{"sig":"MEUCIQDsoIfmamnVCBCLHT7SdrsOiEqVtc0HHmAGCS3fEJgQkQIgENa1lnuSgSDToAC3mIx/2nB4wPPJPK3FE22/jn2BBpI=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":32862,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgYtD/CRA9TVsSAnZWagAAsG0P/2nInxqFfcHtc5+6hqwO\nRY1KprzNZytZYWZat19JifNjg2qhBTk23dboYG3UCeg8zMgWx7iY31fsGplF\nWsGI4nQ8K708BZc2sb+p6k9ic1io4GGKx5mrVNM4Iebs4obx4jXrGDuBQiKA\nXbvO7bIx94LWng09VRaZhCfWR9gwPoFcKoBVCrhyJKI+rTJMXQvFpgB1hXeP\no4GgfecL/aCreU5uDKs4gq9iKo4b+DkGucku72b8CHuxj0rYBGsqJi8HM2w+\nPlfQ3s5K7CHngok24x/N/3k43izB4l/CE5+pji9qusq1d9TYK49qgWc5i8T6\nZki0rmdwtlLLhWM7sqaALIqIJsYfvJae/iCIpaDs+QcfM6tmBCJb7+ePleFU\nCyRaEn/OK3m9360kKU2IZ4pP5zJ9esSm5sdwIN8vILLwFl1068gjgvJYj7cS\ndAByP/nCM/yV9xaBvEwR7TZTYtxFoP5TdD6oW33VQWYKTCoIc01itVnynizH\nEjWiWDiNOv1ADLTA/S6+sLvDJIY2o7UA53ThD4zERaeJIhYW4niECXXuOfic\nSValJubus074WskDeSKDJNO5HoeAVsRosyPfNCjM7+3UNFsjQaWyZd95n/8L\ntHGhdtYBvMigATSt38ec5OXqZp7k8xDl00jvjKC417CKV+JSnULyMsFPuK/H\nmKKf\r\n=0fmq\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\n[![Publish Documentation](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml/badge.svg)](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml)\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"a62d35b24c1fc3ef55ff0ea6e1f18663044d3ee7","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint --typescript lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --typescript --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --typescript --fix"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.3","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.4.4","@balena/jellyfish-logger":"^2.1.12"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^26.6.3","sinon":"^10.0.0","deplint":"^1.1.3","ts-jest":"^26.5.4","typedoc":"^0.20.34","depcheck":"^1.4.0","typescript":"^4.2.3","@types/jest":"^26.0.22","lint-staged":"^10.5.4","@balena/lint":"^5.4.1","@types/sinon":"^9.0.11","@types/semver":"^7.3.4","simple-git-hooks":"^2.2.0","catch-uncommitted":"^1.6.2","@balena/jellycheck":"^0.1.1"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.0.16-renovate-sinon-10-x-a62d35b24c1fc3ef55ff0ea6e1f18663044d3ee7_1617088766779_0.1996914676438155","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.0.16-renovate-non-major-c8d71a085127d0a9f68535d63444a99c71e9fb6e":{"name":"@balena/jellyfish-plugin-base","version":"2.0.16-renovate-non-major-c8d71a085127d0a9f68535d63444a99c71e9fb6e","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.0.16-renovate-non-major-c8d71a085127d0a9f68535d63444a99c71e9fb6e","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"a79fc57be8068b1ff243e52bdc9ed52e0088d1f2","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.0.16-renovate-non-major-c8d71a085127d0a9f68535d63444a99c71e9fb6e.tgz","fileCount":18,"integrity":"sha512-CFPm1cBYdxGDvwgWX/QPgMeB4hX2+hvf0XiQF+czq4juHCpQU4nVPEy48xapcvhzZsBlvHg8TghbPLagPONqtQ==","signatures":[{"sig":"MEQCIARV9e6wOQJayNfmLc6khWgZqVHFh2fKCZ0xEF0IXZYvAiBcR9/W24n+y/zpi5L8vavVu2NNRmNu/HLD82AHj2fpfg==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":32883,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgYwiRCRA9TVsSAnZWagAA6lwP/AzscSF+ZBNWaCLAeDCX\nMnYmagrA444LN/rVlYgjrb/8vHvNYo5IRSbyhLfx+2E1DjnoxPD7qAdbwo9N\ntK5Sb1X3Ke5D5M6aFj3LvMf8sHd5KVNCOs6/X/LPMizUZUZmIVGBC5ur5TUC\nHctl60YhKOOXsd9zIj4VJ4WtM/foNkLm+6uJJd83hRzLT6pBTLcEUlheFQRY\nNot3DYmog8m7N0RIfL0r95WpiBxwooLvuPYdJKhmF5MU3R39fdk3mjIVdR8s\nCotKzq6t41y0FYQ0q32KHY23eLLZ5AH97tffz6v1aF50huZcHOwFygEvyADS\n6G3XJ2mGzJ4rzBIjDX2Hj7zPVKej3p/bpXO7aDg6k4lJP3WYmalv6hHuZuXf\nUEz/hp9fRGZtXuBN25BdVLItbvBafIPukVziMzw/JJtRUZtVlwWFRqv4gfIJ\nBB1m9MixdwvhP6CQyitQQLE2Bc2kg9nN/uuA6UVahvbSrcUZ96n7BG3dpmz3\nkfPFPMaHNE0Or1hkdIvDKqDKtylkU8txbjeB8WWw0ngjpb5q89fYA1Nh4T6+\nrY1i/Pdr9UPaU0Z53Ei2LzkXbYloZDv5JIFJJxGglc0biZ4y2jvJNpjEjuds\nupMdR9cfi9T42cTOVg4F1fL1E99HDBwab0WYtoJ9Dc5a/5vBfB8zR2QVWSke\nqg2q\r\n=O3zb\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\n[![Publish Documentation](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml/badge.svg)](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml)\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"c8d71a085127d0a9f68535d63444a99c71e9fb6e","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint --typescript lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --typescript --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --typescript --fix"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.3","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.4.4","@balena/jellyfish-logger":"^2.1.13"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^26.6.3","sinon":"^9.2.4","deplint":"^1.1.3","ts-jest":"^26.5.4","typedoc":"^0.20.34","depcheck":"^1.4.0","typescript":"^4.2.3","@types/jest":"^26.0.22","lint-staged":"^10.5.4","@balena/lint":"^5.4.1","@types/sinon":"^9.0.11","@types/semver":"^7.3.4","simple-git-hooks":"^2.2.0","catch-uncommitted":"^1.6.2","@balena/jellycheck":"^0.1.1"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.0.16-renovate-non-major-c8d71a085127d0a9f68535d63444a99c71e9fb6e_1617102993242_0.1734942599273277","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.0.16":{"name":"@balena/jellyfish-plugin-base","version":"2.0.16","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.0.16","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"6e12402406039077ecb6ad25c0b7a4a95b9d88f2","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.0.16.tgz","fileCount":18,"integrity":"sha512-xXQo1Kw9in5C5snisXy4/aT5ykdfB9N5HgDQJPiA6sfapV8nVf9J7HdgMth7C4FgUzYq3nAGEwKwgm4aT5a/DA==","signatures":[{"sig":"MEYCIQC4/6ms8FtyzUmA1e3faB8Q3Bg96pUXjZfJJZEN02/jUgIhAI3GHTPBcVb+ZzbTPbq6yhJZSV94Tf6tWdloQMNJMsSe","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":32823,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgYwlJCRA9TVsSAnZWagAAx+cP/jrLNIv5PPVOi1lmJ5r8\nl20/DShcxM1lK28pre09d1MMBTdScXtf16hqxWT7y7Zih5s+6hs5kn5scVF/\nL8ItxagHCs/yvYvWdCULnggaTfJ6TCtq85EsoWEECmd0o0tGlwhF9JECBXDw\nfFs25BJkEKagiW2oPgsEKTalfEtyaW1tN/uZoxWs44vvDJB2taR7aA3NiGY3\nUA4UmSI5zesNaFTutXrNNHZcFo0wSbmuPrN7sJ2nmGd3NqifPjh3BSAqYtrS\n5s9lkD0eCUjwEk85IhSx+DtIpopuP0GbiA4TKjpn2POTXY6PMB5Hyqm43S05\nNeckah+zoxXoaeDWlGZV3lF6i7Gw8HkTlhYV1BPtoeQg1VJksmNw6z88K3/7\nvecV8Q7Cwoy5waZ3wv57NK8STzGVAnf2YwUbSuaLbB+6elq6039J2EmB9a56\nc4i4Z/5bY2X/7r/exJj7WXYpNFFbV0W3Kc8h7yeDv0QGhfecFndnexyXe7C1\nG2oTqPO6cQ8ZsI4HiHmxjynSlBIcv9oZ6m+92tYp+O2bAo0Igy78Xno9jL+m\nOmzgBHo5AgqmC/RY5pkWViHId2sceoc+d2kNN1ESOi4usBip7cz5TkfA13Gn\nBLwpgomzAEMualoNPVhW9+R6YsZUBhcJ8HxhKSKsWOl4MzAkKr9u/AWS7Iwk\nd81v\r\n=30yb\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"0c8eeefed89b95562c13c33cdc97a783b904aaf1","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint --typescript lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --typescript --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --typescript --fix"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.3","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.4.4","@balena/jellyfish-logger":"^2.1.13"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^26.6.3","sinon":"^9.2.4","deplint":"^1.1.3","ts-jest":"^26.5.4","typedoc":"^0.20.34","depcheck":"^1.4.0","typescript":"^4.2.3","@types/jest":"^26.0.22","lint-staged":"^10.5.4","@balena/lint":"^5.4.1","@types/sinon":"^9.0.11","@types/semver":"^7.3.4","simple-git-hooks":"^2.2.0","catch-uncommitted":"^1.6.2","@balena/jellycheck":"^0.1.1"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.0.16_1617103176530_0.20831535831089143","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.0.17-renovate-sinon-10-x-f6ecc92afe0b9e0d0812e3f648d6f33f2c1d5a5c":{"name":"@balena/jellyfish-plugin-base","version":"2.0.17-renovate-sinon-10-x-f6ecc92afe0b9e0d0812e3f648d6f33f2c1d5a5c","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.0.17-renovate-sinon-10-x-f6ecc92afe0b9e0d0812e3f648d6f33f2c1d5a5c","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"f04cd358c54ff18339587301cd1f3f28a7c54fcb","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.0.17-renovate-sinon-10-x-f6ecc92afe0b9e0d0812e3f648d6f33f2c1d5a5c.tgz","fileCount":18,"integrity":"sha512-J5Rfli10oyAmgtt5TX0rRI8bSYfv5iwTa2m57zeYU2yXwE4LUIrZQ8APr8jLdC0Sm8lruakklF+hxM9Ka22a+g==","signatures":[{"sig":"MEYCIQDei09IDzMMUbzJfQCeUuKVm6Jn6r89rH1kDwWqkZYz1AIhAJEKdLGCvynHadxN7t6mBf2v9/X31hsXUReoPsahQjkV","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":32965,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgYwq4CRA9TVsSAnZWagAAvyoP+QABfOW6KlhLfZhQkAeF\nFJ4souPxYCJ9jHoEJSSfwhx70LJ0RJYjwZ0VNlceGIejmN3qRzbNowxXCG1b\nlvm3mu+NQlIShzOx5tfRFMCGlWY7vpSTF4VSFLDQ2/xx3sk5P4nHAsrpZYoT\n+9zwqRi4W11JFQRbn0leY/8HMvj3AR03a/+vZg/08QcR5YpACLq5XTg1fXDX\nZGr/0/ZlaaX9J8gHJaInhbGw4QaKsYwEDYmvqHAafLcOM8C+scPDhs7a9Zr4\n3NYLIyO61YbkV0fo9nZdhoebYtPMG41avRLAlqExH0C6H8IPH6rKaGJ7SeNG\n3GkdzKq3uUOsd1VbAXK9LFHUTWzxs+ofXvcdy+Gl+07JlwhSXQABsKlw00RI\nZAMuJSFDCNBJX+yTpDk9SmYG5fnsFHvov49r7nrGqjd4b06NzvO7qg9Nsmy1\nGKBN6JVf6ZTr4YXWNs3AGZHe/t1WOG3S5TNqQyMkmaB7fRug97/azF5yZWy8\n6aw5dxIMApnckspTwwyr+uJWtbejmNAbX4a+Ki8k1oq/y5ZRN5Pj+/z8SisW\nCmRFPp01Jj6z/aqGAkrdbJXIIPpJWuIB+94mm8Ds5K9hvq5ANbmAK4BGN0iu\ngIHR+wPUH4XEILh7mJ+PfcJHAmcKGGi/oG90Q4/CuH/x+ILNmn2skT3pHKT5\nALfO\r\n=lZmS\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\n[![Publish Documentation](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml/badge.svg)](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml)\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"f6ecc92afe0b9e0d0812e3f648d6f33f2c1d5a5c","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint --typescript lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --typescript --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --typescript --fix"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.3","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.4.4","@balena/jellyfish-logger":"^2.1.13"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^26.6.3","sinon":"^10.0.0","deplint":"^1.1.3","ts-jest":"^26.5.4","typedoc":"^0.20.34","depcheck":"^1.4.0","typescript":"^4.2.3","@types/jest":"^26.0.22","lint-staged":"^10.5.4","@balena/lint":"^5.4.1","@types/sinon":"^9.0.11","@types/semver":"^7.3.4","simple-git-hooks":"^2.2.0","catch-uncommitted":"^1.6.2","@balena/jellycheck":"^0.1.1"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.0.17-renovate-sinon-10-x-f6ecc92afe0b9e0d0812e3f648d6f33f2c1d5a5c_1617103544357_0.7605137863158671","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.0.17-renovate-non-major-57971a16972edbb72c201b400ac21c0002ccb185":{"name":"@balena/jellyfish-plugin-base","version":"2.0.17-renovate-non-major-57971a16972edbb72c201b400ac21c0002ccb185","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.0.17-renovate-non-major-57971a16972edbb72c201b400ac21c0002ccb185","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"5e69acc6f291141b906b61f3ee904beff0b72972","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.0.17-renovate-non-major-57971a16972edbb72c201b400ac21c0002ccb185.tgz","fileCount":18,"integrity":"sha512-qvwGVAonvbXbw8ewSoiBGADCuTghDw0a3eEWskOy9NfiYAwkcP/rMjVdlMENYrjFNGGMEwbKqKi7fEgWAq3J4Q==","signatures":[{"sig":"MEUCIQCjrIW0rtwjnVyYtvq6zK9vNH7JdJytJyD2Y9be+lKg1gIge6ZA7qRthJiQBt6kKak+fa0igNV1ohcB0S3cW+Ro1NY=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":32986,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgYzpICRA9TVsSAnZWagAAL1AQAIecJkPqCUQm0ICuvMCy\nNkE/jlZGj54YnwH6sqEFmkdPFHyYVCjacrvxH1yD89wfpDMGirrSNeJkvnRx\ne86evTbHpTM31Xldun4nmqIUo5hsbOAj9Thzwrgh/iJL4FmJSQLXq2/ybqXc\nv0O7J/qSxMJK9wTDMltpXYjBNAASXZzS+8X+vsjZ2p473N2OPRQ7+zlAPU+F\nhG8H3UniUFAKF7dPm/YRs2gGf6dDSxUY1VbAImFvevxr+hx+2WLTmttATIAx\nSccHmIOtX7bl8j4tC1zG+f24IPXAgZzYVNMIpfdRpGleggrOOCJW2CX+qyJx\n5qK+rCaRy5kK4SOXvIkA41m1gDzk70LhAa7ZqT05FQIpngOB6LYiRxJuTpu8\nEkcJif81DJbpBt/bnRh0Fy4bCw1U3VaZjN3L96HI/HZ3WS6L/TmAiAt0IrKg\n8wZvmdU4MQbahrTG5I1xFiJxG90x0nMIbltzjI6jyutYYEU5+RYe8D+wZKLV\nUfQyldYao3xeL+plZRALy3zKuoMB/3pNlLiuOVJatWyMxPz7BT57GOr5X6Kc\nhtoxn2hhagNkkyl8LXFTdJ+dowGV2AM1NVh488eIGdr53tV3vNnAlgDW8b1g\nH97RVeC6zzBfAUcQxJASz3lZlU9jsNhHDW2+cnrvbj53lfanyEVgeIFcTScN\nAX5C\r\n=n74y\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\n[![Publish Documentation](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml/badge.svg)](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml)\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"57971a16972edbb72c201b400ac21c0002ccb185","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint --typescript lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --typescript --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --typescript --fix"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.3","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.4.4","@balena/jellyfish-logger":"^2.1.14"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^26.6.3","sinon":"^9.2.4","deplint":"^1.1.3","ts-jest":"^26.5.4","typedoc":"^0.20.34","depcheck":"^1.4.0","typescript":"^4.2.3","@types/jest":"^26.0.22","lint-staged":"^10.5.4","@balena/lint":"^5.4.1","@types/sinon":"^9.0.11","@types/semver":"^7.3.4","simple-git-hooks":"^2.2.0","catch-uncommitted":"^1.6.2","@balena/jellycheck":"^0.1.1"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.0.17-renovate-non-major-57971a16972edbb72c201b400ac21c0002ccb185_1617115720289_0.37331245718099115","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.0.17":{"name":"@balena/jellyfish-plugin-base","version":"2.0.17","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.0.17","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"58e97a6593c41210c63663204f092355b3630f6c","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.0.17.tgz","fileCount":18,"integrity":"sha512-/9Kt5cBmAulSSb4SgjObJyFf4gi14zezcDehClfRT2G+tErPzjd47aa0G0UiF90g/G+4I+sWHI8Qkc50IiIlQA==","signatures":[{"sig":"MEUCIQDwrgwwn5HUKoU/Pzbi7XLpvCjQ+NpB8yf5gQSL/NJQngIgYhiA1WTuCooMNgIYYlmiGselPoHQOA0/9/+nIS2Q/jo=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":32926,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgYzsTCRA9TVsSAnZWagAAYEoP/R4V9V5IyNi6Jod5DK9j\neU4sxo/tOlGyW89nlTDrpwHZBhqa+DcHSKu0I/gaDsdOw3SYbg3FFSfRKM3B\nIxJ1LLwvD3xOtffNpZ6x3F3jGNIT0l/26GgTqT5VL2fpsMXLiC7ht6eAm+Ao\n5IPiCQh5hioRQdu2SJg10WHm7hn426Q2uET2Ld9OpAcJc9L0eGqYNGlFqqaY\nPbH0jCMes5pZ65yPmbpKIuwBP7oKihT/C+22JcHF81mkspNuwXExKirujeEW\nfl3rJMQoTqfN7OSIzwLBJWE+M9ZWse7oabQiMN6jEzASdj08NsLqAXMQgXG2\nXzviX/yHdtSJYvX2Q054OtKsi/aHXmpeHh4E2QPKb/LM0ku84+UapnRBAiN5\n/OX3WHlSBCqc7oCoZVgZSd9lx2GWoyqWPgou8CwgdBBhQl4H0Txp3aGLE8tN\nnlkRLTf/fa83/944eC3Pdn5GhZxJoU0OtO5h3FuFGcrRHDafdqGsG96K2jHh\nAxr8gZxVINUmT1LCkiWkt6ZUrc3t8dSVQvNTpca+kVzuXWf0G3bXLJSOGRK/\n6LvesgnBmN35aXuESPg3jgcILXIGE9DhYA188/6LuFef9CKUg75VAnvpOLYe\nE+aakyj0IndcdSauMToAlUDR6fALrYpxyoorISY5nDroCHRnM4ABDwHIj2xO\n2Rak\r\n=TVEx\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"5fb6c7343b7ed68df53612b7b4b6dadb477e1c56","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint --typescript lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --typescript --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --typescript --fix"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.3","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.4.4","@balena/jellyfish-logger":"^2.1.14"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^26.6.3","sinon":"^9.2.4","deplint":"^1.1.3","ts-jest":"^26.5.4","typedoc":"^0.20.34","depcheck":"^1.4.0","typescript":"^4.2.3","@types/jest":"^26.0.22","lint-staged":"^10.5.4","@balena/lint":"^5.4.1","@types/sinon":"^9.0.11","@types/semver":"^7.3.4","simple-git-hooks":"^2.2.0","catch-uncommitted":"^1.6.2","@balena/jellycheck":"^0.1.1"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.0.17_1617115922532_0.19564570011791282","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.0.18-renovate-sinon-10-x-eacdc63951ceff649c8a740f42e9705b66b71017":{"name":"@balena/jellyfish-plugin-base","version":"2.0.18-renovate-sinon-10-x-eacdc63951ceff649c8a740f42e9705b66b71017","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.0.18-renovate-sinon-10-x-eacdc63951ceff649c8a740f42e9705b66b71017","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"121137890184b40bcf7f30c7ecdfe74f95b062c7","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.0.18-renovate-sinon-10-x-eacdc63951ceff649c8a740f42e9705b66b71017.tgz","fileCount":18,"integrity":"sha512-9VWuEBTrRd2SPHZV0gNDuv8TojN5BPYox07bLwCO53wFON6cMwvPuyPvRujyyXdHgoP1Ngo5ClIBtitY7k/CFQ==","signatures":[{"sig":"MEYCIQD2BX310xIAJiY7hOphxJd2LlApTUhDQvOLwq0lA8ExSQIhAIJMjDwtmMcBAKt7teEbp/fJWx+fNj0k+flkV+KSS7On","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":33068,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgYzvyCRA9TVsSAnZWagAAAaYP/izQwKGrGutNFyVfWxoz\n8t1K42kaBtJVScQqUrb/fIszcvzkR4hPAa0Cnb0frxzBv39+zEGEkvEVwLw1\nJKdd4F9+eTIpK6oca7mLPMHQXhSXdWyqOEOCRKYgFhCdz8vkJNTkFKL0IcoC\n/9+Vb1i3qcSyJxTG8LC+MlbzuXu8Q7b2ey6LV6kYBDAU8Nmxbqpe7F9i3Pnu\n006rTnNpuDXwqmn5AuOy4tjMUCmQbCOao/k36KrUMFhol5FrH0rvbftq0puM\nhUB7wUcYJB+XK02kT3kcAUJBxpoytTm5AaO+J4s/rwn1o7tIEIugrCEUU6/h\nA+796IS7lWcyKdz/yS4dCnVWcRiJVNjrwVAd2GMxhv1ZkZQmxEU8tnCyx1NW\nQf7ylaTTSGmE3bxWo2gkWki2Zq9SN4lT5rdjZ0nS0e3CT3Ekn9324n7QefSJ\ne/nJdS+nbUNaCkCVflPeerL/WtK053kE9Kw7MSKQnGTkVmf/+24fIoQ+/8Ly\nwhWjP0hmqDTnhRZ8Q/ZH/kYx3HHQe4YxVxGxAPCLrq+Y2KRuXHXW89+aZNz5\nulRZzitWR4y/l2Zb/IDBS5g/a347S/2GGqY/Er7R4UmicQ/rAq5t+2nQswAP\nFLVZY0jehAl403fYbPJicXEOtFvqMBruWa8y4Gx5Mq12BMePjOLvc47ti+Gt\nKs/K\r\n=YxoO\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\n[![Publish Documentation](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml/badge.svg)](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml)\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"eacdc63951ceff649c8a740f42e9705b66b71017","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint --typescript lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --typescript --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --typescript --fix"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.3","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.4.4","@balena/jellyfish-logger":"^2.1.14"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^26.6.3","sinon":"^10.0.0","deplint":"^1.1.3","ts-jest":"^26.5.4","typedoc":"^0.20.34","depcheck":"^1.4.0","typescript":"^4.2.3","@types/jest":"^26.0.22","lint-staged":"^10.5.4","@balena/lint":"^5.4.1","@types/sinon":"^9.0.11","@types/semver":"^7.3.4","simple-git-hooks":"^2.2.0","catch-uncommitted":"^1.6.2","@balena/jellycheck":"^0.1.1"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.0.18-renovate-sinon-10-x-eacdc63951ceff649c8a740f42e9705b66b71017_1617116146172_0.7529620703913344","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.0.18-renovate-non-major-5b749f94a78a8de9f1167f1e04418bd1c5bd3499":{"name":"@balena/jellyfish-plugin-base","version":"2.0.18-renovate-non-major-5b749f94a78a8de9f1167f1e04418bd1c5bd3499","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.0.18-renovate-non-major-5b749f94a78a8de9f1167f1e04418bd1c5bd3499","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"e9abb9c7e1effe014a7b2ef90ee83e1e1a26bded","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.0.18-renovate-non-major-5b749f94a78a8de9f1167f1e04418bd1c5bd3499.tgz","fileCount":18,"integrity":"sha512-Jwz5TOWA/JkMnk4OSPGesFQdOW7YgPnj/cDyQWGT7yX0s+mhqv9NvAm8sy+M2Z4B7KkrW6ShlShuIfT6Ar7a9w==","signatures":[{"sig":"MEUCIQDuYpL7lCMKKRnYiNsjaN/bLQktS4HaVripPM1qqBzVUQIgBwSNIufDK0yRCwpYR3lbNBIGyRPYF1mjIgWDqhpkrkQ=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":33089,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgY8QCCRA9TVsSAnZWagAAjVEP/RR6nvRMkGQlQI+seAKM\nvvosAMji9u3sZ1R921TD4nqy+4vIaq9hHVPc8vY+5cPXzcc6cQ1MsCrQh7n9\nyk4UQq558Wx9KAixQYDoPUujNB/OkanxLLeT3k1SihwDBvbExWOl2qO+Yp+9\nQVVCvu7GPf5EgeQRW933jr4sEpitIXfMIC1l8PScg/UiiX+PT+tk5mq6JcFv\nuDCVr9pHF+p+yZLjPNTPeJSn3aK1G3lUELYJamTegUaxG71QXNWABExwAb9b\nRd4N5Az7f6IGp3V3hT9eDhgiCBz7i8+Z+/MNQVFrfdE/oWwKHr6nXAyWLXF/\nCFhzRP4dyQIKatF1RQzBIL3nX6vS0T57gnBxi3VitYRJ4DiuioPKAzXU5qUK\nhELFIouRTBC9kJSq9clI19Wu1W305Ify8voievnhtCItgVDzfRkiYazYvv9I\niQI6daIV6xSzXScST8Oo3cWNK6JdZS9AFX0OfOkeqc6VPUpZxFYaWzu6u3eN\nzZyczL6+gnPDuFoPzerLspDpQE1Cx37lHRCy5sWYXgmrbcFAMGyjYn3jH3cu\nyWAegpsg47IYljiv6GqJTfcXItDb+Ny0C8+rJec8VULUNDlCctwljrscrGT/\nl9RtoXXyNnAO0UKT1Zo5PH9rPEg0vJ9Jn46YVD97Pt96hlDvRCoLk8ypKfdc\neaX+\r\n=62vM\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\n[![Publish Documentation](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml/badge.svg)](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml)\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"5b749f94a78a8de9f1167f1e04418bd1c5bd3499","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint --typescript lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --typescript --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --typescript --fix"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.3","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.4.4","@balena/jellyfish-logger":"^2.1.15"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^26.6.3","sinon":"^9.2.4","deplint":"^1.1.3","ts-jest":"^26.5.4","typedoc":"^0.20.34","depcheck":"^1.4.0","typescript":"^4.2.3","@types/jest":"^26.0.22","lint-staged":"^10.5.4","@balena/lint":"^5.4.1","@types/sinon":"^9.0.11","@types/semver":"^7.3.4","simple-git-hooks":"^2.2.0","catch-uncommitted":"^1.6.2","@balena/jellycheck":"^0.1.1"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.0.18-renovate-non-major-5b749f94a78a8de9f1167f1e04418bd1c5bd3499_1617150978235_0.3162010754206488","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.0.18":{"name":"@balena/jellyfish-plugin-base","version":"2.0.18","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.0.18","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"2eba466bfb23470a33dbe38f5d8d8f05a385ad11","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.0.18.tgz","fileCount":18,"integrity":"sha512-RIM5qXI6DTRbdwe9DeomFINVM38ITnZJBHfQjpmgKedS3Xf7qKCltuV72ztAKI10R+cuV7JSOJ8psy4Kj9lKSQ==","signatures":[{"sig":"MEYCIQCHu0pOVfB7iCx06SRf1ithAK9H7BCmHYD09BboXqJPpAIhAIxRQGRB5qngJZxodKA0BJ/ce+2l4/Mcw3LxrZ1rBKY9","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":33029,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgY8TbCRA9TVsSAnZWagAAH70P/37uzTwO+2Jusv6VQu4J\nOtVoEEfXXiHw1QIOrRXtp19fjsS+vtl2lK6knp/0wyKiwWGAOWI3lF0s9Doe\nLJXXESGNw1ttrnEmxcN1uED8hcirmA02iyVyhtQGe2xk2iEoQDOCHbpCqjWG\nhwxxHMheqtX2ToAOWzqxz4Kj/b4H9CWzuWhW6qS4WR1L/t5ikLSWkXkHTE4m\nS0njEtm8eXxak2whhagGeplks2Ct28yFw0zivzeDMmE6dIFgqJKY70M4o2pM\nQFM6yOBGlpHEBWsJSbWq15FtlfW7BhezjV6FSt4gq1tYTpmDmpTEHKL1Qj5c\n5WvL9ZXpqb422idmmtER7USu3IWBHi5V0/4W7+QrnVdRPKLjv2l4E3qLqsIM\nfUV1afMu9Zp5IwVdWOliUxyrzTVTNiXCD8pIVdvYtaNk8ni+I5gRQnzsie45\n4m39bIWTyQdOG+ob7FTaiL1SggGsmCQYq2w4fr1tlR/IZTDD3QvO/B/ayvkU\nvhrTGtHLQtBv42gJAvppdU9V5IxL4RlTSFBCCQYKhVpbwg3AC04A32N3WVkx\nIoKA+9/TmJdFA7h3gD1fiuQce4emJXtTXOhy70K90vWo6S5Mz7DACAiTPChL\nIQ7vMUEqk0OrvZmefiI8xyrA2vQexoNx1malKUZe+WmTvLtcCdUTP3FdDeBB\nbKZT\r\n=+8z+\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"2945416a888d2b92b81f64297d81647831dd7d2b","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint --typescript lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --typescript --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --typescript --fix"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.3","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.4.4","@balena/jellyfish-logger":"^2.1.15"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^26.6.3","sinon":"^9.2.4","deplint":"^1.1.3","ts-jest":"^26.5.4","typedoc":"^0.20.34","depcheck":"^1.4.0","typescript":"^4.2.3","@types/jest":"^26.0.22","lint-staged":"^10.5.4","@balena/lint":"^5.4.1","@types/sinon":"^9.0.11","@types/semver":"^7.3.4","simple-git-hooks":"^2.2.0","catch-uncommitted":"^1.6.2","@balena/jellycheck":"^0.1.1"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.0.18_1617151194953_0.15345016446492998","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.0.19-renovate-sinon-10-x-6c6b3b4a14d619717d9564106b861d22e135b622":{"name":"@balena/jellyfish-plugin-base","version":"2.0.19-renovate-sinon-10-x-6c6b3b4a14d619717d9564106b861d22e135b622","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.0.19-renovate-sinon-10-x-6c6b3b4a14d619717d9564106b861d22e135b622","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"8881cdf3abfbd3689d90c75fd516af74173b1240","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.0.19-renovate-sinon-10-x-6c6b3b4a14d619717d9564106b861d22e135b622.tgz","fileCount":18,"integrity":"sha512-fs+Ly/uLZqhNmCzY06DOeRAlvdklsd897vv2y3Ud9j98KOC3QXSWlxrxDPOOa9NM6RMqsOIIQl4oy5Ew2NY5Iw==","signatures":[{"sig":"MEUCIQD9wX+qPaDjnBobwdFi41wpg+SQgFbPcfrebbly5RQ4twIgVgHlMX9PSeLQA27Tz6k0S3zMvwwI6iu55zyftTUR4eg=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":33171,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgY8WuCRA9TVsSAnZWagAAeyQP/js/lz2gq5nzRR1jF3Ny\npe5on/YrGnoZx8c8IWDcknpQnLFUxxHbzjkmtLcaDQEs2OgkRmeNvMN+xRi7\ncjBh3iBfa8Lmg2wCI0FzU/RLpeumhlpNbIfLDsT/FfnPCFEjjUV+o19Q5pln\nhsISxi7C7a6KHL39YUy9G1Qf82cSyvYXD+gD5x6qDV4+Zhy/Zd6HIqJycaUJ\ndycp6U/4tICTtiH93YLv5BsAU+85ionB/PHdBSVwiM286wXBmDVjMRLSMouK\neu6fjR20uhWj+suLiLhrMbqupUhsjX4cPNCDOKqGGdD/amuT5GOmaGza5pTT\nw4Hz5sCrOOQS2C2P8hYxrhjBOaf5DiRay1w0i7N2FFSQhfAokOgj46Jkmras\nknzog4gy1rjVLwxIp1LoUNwhYpLh5745PR4qSOsSBtATf/tnJ/kbZCFY8giy\nkw3wj04hqie+liQnMxDSBrkX+jT2dYhjWpqYpYANOlG1yKwWWJQ2tO+ZoHvz\njSOORUEPBjmOx5n8TzDNgcHKhj7WQmVPfosmSvoOMfSS4P5Wl0cck2rOlH9H\nMIRNam5gtJYiX6qR8soZLx55yZZvjTnfmbW2BcFvj3C6Sa5XQSS6fyjs6SvV\nWeZeNEO3umggfSicZZfP3FLi1W/kqqp3A7It6vfBcZxwpJnBC/5pinoPoufD\nvy67\r\n=5fv4\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\n[![Publish Documentation](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml/badge.svg)](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml)\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"6c6b3b4a14d619717d9564106b861d22e135b622","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint --typescript lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --typescript --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --typescript --fix"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.3","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.4.4","@balena/jellyfish-logger":"^2.1.15"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^26.6.3","sinon":"^10.0.0","deplint":"^1.1.3","ts-jest":"^26.5.4","typedoc":"^0.20.34","depcheck":"^1.4.0","typescript":"^4.2.3","@types/jest":"^26.0.22","lint-staged":"^10.5.4","@balena/lint":"^5.4.1","@types/sinon":"^9.0.11","@types/semver":"^7.3.4","simple-git-hooks":"^2.2.0","catch-uncommitted":"^1.6.2","@balena/jellycheck":"^0.1.1"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.0.19-renovate-sinon-10-x-6c6b3b4a14d619717d9564106b861d22e135b622_1617151406202_0.14629848375190813","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.0.19-renovate-non-major-5c62dece4cba7f77f45a8caf76ae0902a1a5f8bf":{"name":"@balena/jellyfish-plugin-base","version":"2.0.19-renovate-non-major-5c62dece4cba7f77f45a8caf76ae0902a1a5f8bf","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.0.19-renovate-non-major-5c62dece4cba7f77f45a8caf76ae0902a1a5f8bf","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"45ecba634b8fb714ee0b8212f4d316b4f7844d4f","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.0.19-renovate-non-major-5c62dece4cba7f77f45a8caf76ae0902a1a5f8bf.tgz","fileCount":18,"integrity":"sha512-sLbk2fNHwP13cYfGcHBh7NVEEdf7eiiOcaCyXQ1FqASnvBqFoAWn12u2gwV7Nsv2Cx7LZM4BBIxtFBj+uw3fNA==","signatures":[{"sig":"MEQCIF1IEabPhfMZCcudc0DSvv42PBlkF0w+HEJRganH7cHoAiBh7vtk0e67p28XC/FCeQpjknGftnD60BB/I5QjVRi4sg==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":33192,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgZDvRCRA9TVsSAnZWagAA688P/1b4Rfle6KgESSAgGu3L\nkAEaZRN+tiA5FyF5AI05ZPStDhwF5FFlVgchz7iHp6RpiImG8i2L0qWrdUhk\nVhPCegoFpvGlBoxN1swQ9vBJxLWoK4YOBkPWaxfEHYBYF4EfiFG9QYfIYVvr\nlohBRvhG7C3s3//6SF9jQZu1HBZLEbGm+mz5k/axSbHRNsY8jJQnpcvnLE1u\nwNwRRqAZplUxKN3pq4a05nRvhNupdJp6ICqrVKMKQOA4h1i7ZEP0qRfEIy2T\nqgm0nKbIHBtABExB2FtsQBbORPfq85NqY2VlbozGnvDP3gCWt0Z90iONR5b0\nsOo0JZZvutt/zQ/ko/jxJ49L4MV9NbyVxjPas/J2YHy8a3p7bfZBEAPxeSQA\nMgfDhZLLUoJdqhJFQHSCCL9iS7wwdHyyWg67EBLIwruKyvRtLIkaEPT834Bl\n+MrBu9j5tE7+nok9N4LJu7KRozbgSqzdTY/ew+xgLllHNC6UZ3i+ysj9HDtu\ndhWV/ydK6oI/VZ8eAMe/iLXqY9RRBi5W1xd0tGoVxeIVhLwalwJqCg/O9k8Z\n2x8+MFU257iW+kaRets+gd65G/9coFma0BL3nqVgHswcDN31tswoy7+owgP3\n8/xdwgS48wcVCx4CpaG8W2akt2ifDsYQZTSQEosud8xBqtMDJS5wDYavA9Cf\nh/dB\r\n=HefX\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\n[![Publish Documentation](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml/badge.svg)](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml)\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"5c62dece4cba7f77f45a8caf76ae0902a1a5f8bf","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint --typescript lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --typescript --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --typescript --fix"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.3","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.4.4","@balena/jellyfish-logger":"^2.1.16"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^26.6.3","sinon":"^9.2.4","deplint":"^1.1.3","ts-jest":"^26.5.4","typedoc":"^0.20.34","depcheck":"^1.4.0","typescript":"^4.2.3","@types/jest":"^26.0.22","lint-staged":"^10.5.4","@balena/lint":"^5.4.1","@types/sinon":"^9.0.11","@types/semver":"^7.3.4","simple-git-hooks":"^2.2.0","catch-uncommitted":"^1.6.2","@balena/jellycheck":"^0.1.1"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.0.19-renovate-non-major-5c62dece4cba7f77f45a8caf76ae0902a1a5f8bf_1617181649373_0.41185514021360303","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.0.19":{"name":"@balena/jellyfish-plugin-base","version":"2.0.19","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.0.19","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"92704d397749aa035e549bdd6edf01dbd6299c40","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.0.19.tgz","fileCount":18,"integrity":"sha512-jdY1ltY4Y/CiD/fq1KPAsu4oHaWvf3aSuBCe9rcBP283jHlylNTFDUqpdoHRKEc8SZPRh2mQhF+MDl/ibqFluw==","signatures":[{"sig":"MEUCIQDMpQmqjmUV7F3QLkcD4MrLfaIftagAC/s7sizU8vgseQIgU2kbdWq779abSlsSqbudi4XL9+y0ioXiFDv/ZgwVZKs=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":33132,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgZDyKCRA9TVsSAnZWagAA2GgP/0q+sHNUb/LOC8WzMoVe\n+7s7WWrQd/DDJaBS/KlPUGjT/lg3wzq2kp16r30UtwBaGsIac/Bd9Y715sw6\nZDRVoyH9eiGPGLEpLGTWzH3ukRMq/edLVcOWi5P09vf/2jCfI8Cp9ovgwQVs\nDXBZQGWb2bSiUmAgZrm+U+cigaow/15k+5jrbCjOq9ps0YxD7n1IF/HM4Ru3\nzR9kppOK5vwBr9wWTKch5njsXXsdk94erkM8248R5d1I0+jvJq6+lHhVhNBA\nqNo4PMu8o6Jqc90PGaXbOW4+Fcy9v7pcKBC8AygICFwiKITw3rNv9l31S1jQ\npqjJgmmvlQzeGJmFaVobrZIwxp44VXQiSNX8yaZNEuEvb8f7M6pJpzrxGIZ/\nFxnwW8EIH9ZXfKGB+vyCloJW4aNbL6zLuvicdawW06zMq4He3omeAIH2VYDn\nw/FFaR4MnplcFP2FEdflGypw1kmUXii7pbqkRGmV/qSc1nvZMjTffx9uucuK\nXUvmsOQMrRTVTQ5YoadEWa9EwV7em5r70k8T9y8FACYbOFPULA7QBrjQuu5q\nCxuB5XxbXNcuBd4vRtsH3eeN+zMK7UYaBo69hVmzBYSq/BYqRt3XsUolzUAi\nusHNsN+DUFVGCHHnMF7SuysOf4D4x4Im6S0BAUSvsevaO1hFZ8ljs1M15PMc\nUfqL\r\n=+1Wc\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"f731dd8e10c5c9e42ff41ae63c21d4bd2854549c","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint --typescript lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --typescript --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --typescript --fix"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.3","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.4.4","@balena/jellyfish-logger":"^2.1.16"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^26.6.3","sinon":"^9.2.4","deplint":"^1.1.3","ts-jest":"^26.5.4","typedoc":"^0.20.34","depcheck":"^1.4.0","typescript":"^4.2.3","@types/jest":"^26.0.22","lint-staged":"^10.5.4","@balena/lint":"^5.4.1","@types/sinon":"^9.0.11","@types/semver":"^7.3.4","simple-git-hooks":"^2.2.0","catch-uncommitted":"^1.6.2","@balena/jellycheck":"^0.1.1"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.0.19_1617181833570_0.9103636277758778","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.0.20-renovate-sinon-10-x-d1c66b45b40bfa5b96cc08d725d1a34c14d66bab":{"name":"@balena/jellyfish-plugin-base","version":"2.0.20-renovate-sinon-10-x-d1c66b45b40bfa5b96cc08d725d1a34c14d66bab","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.0.20-renovate-sinon-10-x-d1c66b45b40bfa5b96cc08d725d1a34c14d66bab","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"8952a124aa718e3597a3ed508a611ad06e88d842","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.0.20-renovate-sinon-10-x-d1c66b45b40bfa5b96cc08d725d1a34c14d66bab.tgz","fileCount":18,"integrity":"sha512-3qPef8vFrI4UsZIyVgpQAYdbPRmvjbgOegl84Pei23F4yv6BFwdonbG88hv85WuYtmlg8HDTRgOdwQ/WsoSCCA==","signatures":[{"sig":"MEYCIQCc725Y9qzOg6Mn2a4Bwwjq2i6ZE7qdNxlTK0uj9RGnYAIhAO5ITibVo5bzVgkF68hUAgdgqMSPdRn3LeWNPd91twfl","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":33274,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgZD2kCRA9TVsSAnZWagAAwVsQAJjGJb7k+FlN6/Tw6nOS\nY60TlP1zdoh0ajVRmoCEfbfZ9VJt2ZTWRtitOIC9qM9yYiEwPg7kawtDdtQs\nigCeLp2Jr6Ud/qQt+jrlw5H1awy96Unb+viTkTYlKcZfZsG7lUOoU673MX1Q\ntHthcmQcxmvmhSSoZXpbxfgMGHjGCJpMDEApMGoIYLnPBNZCKuvHV4gTkft5\n3z4r+A/0u5x9tQFxLsgFwTQeveeY9nwiNSRnuXzmiG/nUBXFd3PB9/wVXO42\nKtoQZykzHUOm4XKM3B3dfmFTLxhu/6wWackX8xO4yriGCGRb6Zg4b0SczwmR\n5OJtrTrBT96yslvdv3kDG8eqwmsdVB03KzOw6T79R/0ZOx9SaaqiodPThNIj\n3ooZt2KdB0dN3mPtIWJFmiSx4F54SbuZehP8vVitB9QKqdP40sctG5u8/JS1\nb6xYiKQIdKRJdNzzp/CZNByDQ1a6MkR5fI2MK4FvgQLD4fScqaGkYfMWOyes\nOEHldrsmTbH+gepTNlBaZ3AGkohHxMWwy86lBVnR0UHHJIXYWRC1Cl+7EsMm\nbAclnWSIjA9eD/bZbBHNjaFpPnVv+zeMdeFVkUi7fe+UIUsxuts18hjboWBW\nyQ/75dEBbNIawf1j3C3ZboZc8AxeFn4GcjkgThyWhNF5aI7GQs4kJi5K+f4E\nfIIJ\r\n=QqTU\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\n[![Publish Documentation](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml/badge.svg)](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml)\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"d1c66b45b40bfa5b96cc08d725d1a34c14d66bab","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint --typescript lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --typescript --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --typescript --fix"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.3","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.4.4","@balena/jellyfish-logger":"^2.1.16"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^26.6.3","sinon":"^10.0.0","deplint":"^1.1.3","ts-jest":"^26.5.4","typedoc":"^0.20.34","depcheck":"^1.4.0","typescript":"^4.2.3","@types/jest":"^26.0.22","lint-staged":"^10.5.4","@balena/lint":"^5.4.1","@types/sinon":"^9.0.11","@types/semver":"^7.3.4","simple-git-hooks":"^2.2.0","catch-uncommitted":"^1.6.2","@balena/jellycheck":"^0.1.1"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.0.20-renovate-sinon-10-x-d1c66b45b40bfa5b96cc08d725d1a34c14d66bab_1617182115635_0.6623653480150984","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.0.20":{"name":"@balena/jellyfish-plugin-base","version":"2.0.20","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.0.20","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"55944f8e9a8c38b2b1af02944a3d54764d11a5a4","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.0.20.tgz","fileCount":18,"integrity":"sha512-WMWXAmJHa3K3cmN9/iQTbyAFpQhEpWwrikjc+CidYI9lwRu/XWzV6JNS4NImL6cgvW5FPHsLhhFNe2rCIT1P9w==","signatures":[{"sig":"MEUCIQClsaDuCNhZxdRmKaji5pqR64XiLAaekEPZwOsWwE0wAwIgWm90nKZUm0eXI+fAekqrWVkammZSRf3hTez8/xVR6vw=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":33213,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgZRePCRA9TVsSAnZWagAAu68P/0865/CZGQfqm0aCi9V2\nIuoYjt8p4bVWYAvTIZitJDwiBk3HqzQU6yBbqEmz3JBAFvszwl/F6zjAi97g\noRgI0e1zr5SFHpIo0/xupfb+fjbtWVzKSsg3mVfsPqdHCTLX8VOigXRBRigx\nztv5Lbz26K0owQZZ6NYL9MBe6ppF9DI4du8zoJd/pxjpSHeS4b7HD236OCqp\nSIfF32F8WNZesnI4OjIXxliY2R/TpxeSxCp4C8mU4Lm5jyr/7LUhT2qOqCyL\nxNY3g1kkIKZj9KwDMG7l8ZAirkO+H9gUDPfNLEOIpzZ8HK09kWtjKF1PSAo4\n2Dqidqg8Eq7VJj7ndUy3xvXZCu8R1MSOn5LRAeNmcCqoV+8ABQ8zuYF9/0km\n1dIap9seytNGIghEc0ytDMG+l0BLICjOs9UXRHBw9Fnvpqphbg8JfCUNexlz\njde2rDVHgX/gyjmdQwIocQ2LVN6jd+ke/6sea3SzVjA47BGzYN18maBibVu0\n6lBuTbvgRN/qawTRpUmF8vi0glfM7Uc2MhG4ZJjOX2QLpPRh2DrMpHLg32Gl\nf2gDPu8qXIt568Clh9/ILnwcAygJMxE6CcF3plOQ+i/XnEDU3AHGyNAEkuii\nXSUBYwrc1yY3pShdpMX7Nmshg+RTzD4gTyrC0DI4x+9DNnJzDnVkqXvAOUSQ\nTGNj\r\n=qnVU\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"3f704b06199d54480c581726f97822e8181614de","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint --typescript lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --typescript --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --typescript --fix"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.3","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.4.4","@balena/jellyfish-logger":"^2.1.16"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^26.6.3","sinon":"^10.0.0","deplint":"^1.1.3","ts-jest":"^26.5.4","typedoc":"^0.20.34","depcheck":"^1.4.0","typescript":"^4.2.3","@types/jest":"^26.0.22","lint-staged":"^10.5.4","@balena/lint":"^5.4.1","@types/sinon":"^9.0.11","@types/semver":"^7.3.4","simple-git-hooks":"^2.2.0","catch-uncommitted":"^1.6.2","@balena/jellycheck":"^0.1.1"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.0.20_1617237903106_0.7073336643552584","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.0.21-renovate-non-major-b09ee5cc1669daf6651f7278579c823078d39055":{"name":"@balena/jellyfish-plugin-base","version":"2.0.21-renovate-non-major-b09ee5cc1669daf6651f7278579c823078d39055","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.0.21-renovate-non-major-b09ee5cc1669daf6651f7278579c823078d39055","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"1259cf67878ac44e539aa06c8b241f8a81a2ad58","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.0.21-renovate-non-major-b09ee5cc1669daf6651f7278579c823078d39055.tgz","fileCount":18,"integrity":"sha512-0q9uE5LXgv+EQ+HkALADoClF1hFhhTozMiNKmGHyzqeOaoonDC0Iuf9wwHgyDpvfLgZbvbqW8hZyvt3noAag7Q==","signatures":[{"sig":"MEUCIQCeVH/arJOwGx0qa9WCEJQMrvdfSMfQPmJLJZGhXogyJQIgYNVeJt3o5O+P6tEGwugZK8wx63DcvZgItw4en14bYcg=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":33374,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgZRuECRA9TVsSAnZWagAAeLQP/RWTdyamaMWm3iNk7dlt\nEdFszMHKUGm3YvF1L5BtVdXAyku6djB7xUORZ/7nd7m7ak3PWbmuGZs/KNnX\n+le6uoaB2pgnGITGnFKjCdsg69F4vi536Cg3H5W2+AoLBkqZje3Rs44UzKA+\nOWcO9ue23L1nceHNEf+UkUMa6VHvmPcwMG9MWARjZt2pYU4SpTQh8oP95e0E\nVwAAtPknMMpZ4mVWHTGFSSd4qbS9Il3ZgrV84+dnpLd9uqE36WHEKpi0ZWLN\nOzzqsBx2wQetZFP0phufc3EJnuuAVzCSIGuoYyaqvwihmCnaZgiyH2MjIcbl\n+tVgyCRbX67q/u/cWNA1uTPPOfWH9khOQC7Pap75bIHOHa+M4coTwNlcKm+l\n+r21UdJQQYpgBcq4jc2zC0BqgLRZAhHSo9IjAWGxcXwzstpYnFQxQX5f7wCd\n9U0H/yCPHGmIFSDd8g8c48Y2EGbC/i4xmqWppixERrhDoYE3GLoHmJhS3zlc\nQn4A6Lj7aXuEqkyYsftF/WPwxYaH8XH+zD3uZY4wvFdoVFzDwKnpfTM9TnLa\nrfqsauiBJDTVIq9pH90H41HwoKCuaxHj0FlOgcDV9VO8rJmOn7bJCei2fSgb\n9L0wJvquNNEWqFY5ULlFCWUHGyYNoq4cG6vbUA14YYkvCfa+5AMcaQat77Hw\n8QK9\r\n=xHI3\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\n[![Publish Documentation](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml/badge.svg)](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml)\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"b09ee5cc1669daf6651f7278579c823078d39055","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint --typescript lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --typescript --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --typescript --fix"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.3","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.4.5","@balena/jellyfish-logger":"^2.1.16"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^26.6.3","sinon":"^10.0.0","deplint":"^1.1.3","ts-jest":"^26.5.4","typedoc":"^0.20.34","depcheck":"^1.4.0","typescript":"^4.2.3","@types/jest":"^26.0.22","lint-staged":"^10.5.4","@balena/lint":"^5.4.1","@types/sinon":"^9.0.11","@types/semver":"^7.3.4","simple-git-hooks":"^2.2.0","catch-uncommitted":"^1.6.2","@balena/jellycheck":"^0.1.1"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.0.21-renovate-non-major-b09ee5cc1669daf6651f7278579c823078d39055_1617238916485_0.479561644334346","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.0.21":{"name":"@balena/jellyfish-plugin-base","version":"2.0.21","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.0.21","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"af0561893eb76be9683f58ad4a81016f113db740","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.0.21.tgz","fileCount":18,"integrity":"sha512-IAPe5GG4w83UsaX9Z4RPWi5p5bOU5aD1iuDqwpxc8H8KxFAQDH5Eedw1kyQin5oA251Il8/xOo1r58xF6COn2g==","signatures":[{"sig":"MEQCIHDY9WJ+5xiTyjfHl7Si6ch6l3i/oGjKb/IaiJfk9X+UAiAm4wqoeGEkOl9epjB9VXL7ycOynTJh3zPV9XEt6FZnhg==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":33314,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgZRxVCRA9TVsSAnZWagAAzSwP/jRv1MYBUwPNMO7omKqv\nUZwgGUjIRIn19Yb/CoklmUks8OPw91Rkp0Fgk5WI9WwT9/ZqIEZ9uK/fMS7h\n2L3rS8Bq0maZqt6A8fni8wvfkGq/lao4mU03OqRHxBVdGtIXWoM9reP814Y9\noAfgo9H1i8kVjFkkyT49Ddnh5qv4ZdPO212E9AKkCmWgqAZd2RCRi1MTg61H\nMre1buTeBHcTqqnCTn8ADP3Ctt5kKccTZVcRzt2nDST4rysASxEMLKYjbRNK\nCjsvUzD4Js/xISCzC0nP8NkWtHTv/u5qMv0MHizsA0BYuOPOSSL2eH7Pnuoc\nQ8I356DPtN4fYGzhdshuo/p0G2Jkmd21zwdGHl7ueSRzWU6mxPngxGmZqLmy\n65jmTI0s04T+nN8CisjJm6YX7HMjCKIrwopCf++d+ytpEjN0cyn0lxGnhaCn\nqWQemMENQTfc08KxsklOzWmhFf5FREa2Spqg9UFj+S/XP+XwKIeGxi0kp/1f\nZ4hJDA8v13PMpsVvZ06+jL5Uf2y/9LXxixVhsCe4ovCi2Fx70Us3U6djw+qJ\n9SaayqY5f4VwoyBto+gqeor5nMi7VkCcW/4zB2AzYGGTvMW6Pr4wJD1pTNiA\nR3GSNnif7d0eT5Etf38Tp4NMbqSPeEOUc+0NJVyGyOfll7ldsIb63DFRne3U\nbElm\r\n=GVls\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"aba3517c5eb8326c5a1e03584a39576cc9c87b1b","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint --typescript lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --typescript --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --typescript --fix"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.3","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.4.5","@balena/jellyfish-logger":"^2.1.16"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^26.6.3","sinon":"^10.0.0","deplint":"^1.1.3","ts-jest":"^26.5.4","typedoc":"^0.20.34","depcheck":"^1.4.0","typescript":"^4.2.3","@types/jest":"^26.0.22","lint-staged":"^10.5.4","@balena/lint":"^5.4.1","@types/sinon":"^9.0.11","@types/semver":"^7.3.4","simple-git-hooks":"^2.2.0","catch-uncommitted":"^1.6.2","@balena/jellycheck":"^0.1.1"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.0.21_1617239124774_0.6589303460467284","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.0.22-renovate-non-major-52428420776f7cdfeb673e9a5118cf55333df297":{"name":"@balena/jellyfish-plugin-base","version":"2.0.22-renovate-non-major-52428420776f7cdfeb673e9a5118cf55333df297","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.0.22-renovate-non-major-52428420776f7cdfeb673e9a5118cf55333df297","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"1b637fbd2c546d3c548fc1d9a141b053eac2b5cb","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.0.22-renovate-non-major-52428420776f7cdfeb673e9a5118cf55333df297.tgz","fileCount":18,"integrity":"sha512-V5+Wk8W+QOVETjJVdZITeru6lsiaHjZU4JIyDPFWryPEz2fSEKEi1jK+GrObJA9NSeUrPYcqx/ZMowWvjyEeOw==","signatures":[{"sig":"MEQCIEf92F9Fz3YEmBtV9XGqTLzf9wnRR9hQrNZ+3UwLfNXeAiBhhGpz13XNWco5gRl0y2P8HyydP+O7vJQRnM6pja+BLA==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":33475,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgZUHQCRA9TVsSAnZWagAAza0P/0+LkGF202W3DAHdgCcj\nrbLdkAu2+4vRtptS/bZizfzMk3/2Z4e7loVcyB05D+MAN3RYXkiw9eN8XEn+\nnT9SYlTL21g6p8U83WRavXbwYIUXQRuIBJrJe15ZKcjrNigzS9C3pabvE2++\nPsbjqXegGrEcHWUJVIMBlr0GZefhXmwM9GNcFYBDYw5qlySuigYRO2MKkHFs\nYTtAwMnNR/nxY9PndxewC50glTFqvfRXz+o/TeoCoO9ofDO2gdqFPsgy2ZGs\nNz22ljrA/HEch9tHYHhuLAnU0OpyKzbtpBUKLNNXYISYQO2EFylE24FEs6SG\nFuRmuyY7klskMamRddyJLaJWDKdkaXFeZVK9bSI7yiICkyzAldjtVxZ0NYLd\nuVna+f48ipyqiAkES+SE+M4R/KLwnUf/rKmGv8YoWe/K2s5641BEaOk/X+UU\n70WkWgoQ4WEmoSYm34XCmZ3MfLFdPhk2Md3k6M1B7wiTE+v6bmlDo1btrigZ\nMGqAYIwep4Ao6lIyhWQxmNGkTPv3RBdzwd8RYOxY/jKXJci3hfTdVZI1onDu\nsEZInr6uY975C+/RfffYi0kem/koACffeCRGAzUidXJqBvkpszQTzQdxAo3H\nia3boiwXxASBXSmtkid4dsfU3yNfscKqSS+/1lh7cZGp0peWVH4082GocVDd\nQUY3\r\n=3hgV\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\n[![Publish Documentation](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml/badge.svg)](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml)\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"52428420776f7cdfeb673e9a5118cf55333df297","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint --typescript lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --typescript --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --typescript --fix"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.3","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.4.6","@balena/jellyfish-logger":"^2.1.16"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^26.6.3","sinon":"^10.0.0","deplint":"^1.1.3","ts-jest":"^26.5.4","typedoc":"^0.20.34","depcheck":"^1.4.0","typescript":"^4.2.3","@types/jest":"^26.0.22","lint-staged":"^10.5.4","@balena/lint":"^5.4.1","@types/sinon":"^9.0.11","@types/semver":"^7.3.4","simple-git-hooks":"^2.2.0","catch-uncommitted":"^1.6.2","@balena/jellycheck":"^0.1.1"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.0.22-renovate-non-major-52428420776f7cdfeb673e9a5118cf55333df297_1617248720034_0.9054576593046129","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.0.22":{"name":"@balena/jellyfish-plugin-base","version":"2.0.22","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.0.22","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"b57dfc240d0293370f1344a04d665c0fc55e78fd","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.0.22.tgz","fileCount":18,"integrity":"sha512-WrfM3l1PMcvohIsvyWCTTTn8qLhRX0665G3JwTEWyiEkYZ6lqNpMGL7A+3tyRhNibejOfwyAvSFukBB1U+CPfw==","signatures":[{"sig":"MEUCIQDxhTgPWJh20AXEQ7LD0OFx0IwBhkxWoRBva/O+bDSmKQIgcxSA8M4+l8lMX6el8elq0P6hV8ltnrvtC75lPOnzisc=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":33415,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgZUKUCRA9TVsSAnZWagAAetQP/ibJZh+7iwMpHRld1nfC\noek7L0rqR/8VTvA7XmvyUsKGGl8D0TjbWBSgcNkqglwSQqvmLK/PDbYf6Exd\n3WwQQlEovVMFJMP3FRCuB+nNBySQEHhPabfeQHIZm1IY97JDyrxo7n+nCubH\nLyXEN0B6G7cvXtBFqheB0iJHuYlsXGizKtWIyXfil7vABFt5E2XufWjumqAG\nUsVF66HVRu/4shS6MjYffWHDoUgtfpPDN5zq2Vi5iJy2j88Gsn+pSKuB/vtC\nH02mgiuEHKjJpar3bk4S5rEyCHiWkesF8txFIKC7oiPchnqYIPZza4/bM28l\n6cxRm0Ym3dlNKgWcM6RLehotO7lLlsCv4VUSHn7oPJ+4HuELAKr7/aV1t+xj\nVALyk7K//rUl9/Eet2ZSutrAtUq1QWxNO3DfnVFuZpdslrPZplR3uoW7KhRj\nr0SrSb8ATJKPnetAknQKemZsA33jBaywD+8v2q5MZamJGoOAN9M7+8BhJNoR\nfH/dEs8I5RwP/aswdA0HC65sO5R3z28OMdMdrwvo3ie5eKIrAl3pf6Rs2PZP\nt2fiVIcjqdFeXQJvfFLOPdNjklkiZhxm+tPnQxXPXDw/51nhqKY2BxWVPixn\nEmwk1qwrdGwYbNPiSrc0FmxihuM9q1AETJ9f2zoM9jAcQqdt+SMD5i+PTUR/\nJY8q\r\n=XDxC\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"d71855c9d7e0b8293781feae30ec630e8c64bf91","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint --typescript lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --typescript --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --typescript --fix"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.3","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.4.6","@balena/jellyfish-logger":"^2.1.16"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^26.6.3","sinon":"^10.0.0","deplint":"^1.1.3","ts-jest":"^26.5.4","typedoc":"^0.20.34","depcheck":"^1.4.0","typescript":"^4.2.3","@types/jest":"^26.0.22","lint-staged":"^10.5.4","@balena/lint":"^5.4.1","@types/sinon":"^9.0.11","@types/semver":"^7.3.4","simple-git-hooks":"^2.2.0","catch-uncommitted":"^1.6.2","@balena/jellycheck":"^0.1.1"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.0.22_1617248915718_0.8315276791821278","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.0.23-renovate-non-major-50628725ffbb76b5a25143a7c560fe155e676e7f":{"name":"@balena/jellyfish-plugin-base","version":"2.0.23-renovate-non-major-50628725ffbb76b5a25143a7c560fe155e676e7f","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.0.23-renovate-non-major-50628725ffbb76b5a25143a7c560fe155e676e7f","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"69bdf3074de912882755c5eb4b1a77e8b5502b11","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.0.23-renovate-non-major-50628725ffbb76b5a25143a7c560fe155e676e7f.tgz","fileCount":18,"integrity":"sha512-f+Xb9Di+n8STzvFlShpdiaL47AE3R3bCkuLFcGV50sJhcj3O9nuKoy8fEkBFoq4F24LfMRcxiU97JWzmBurfkQ==","signatures":[{"sig":"MEUCIQDOkv2AUr3B/n2O3GK59dzTWBP3/C+6q0KlLatFjBAHnAIgMj2HU9wM2Lz+s3Kg1oqZwCZ4HUw1i8Q+MlKaIdoJsDU=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":33578,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgZc+UCRA9TVsSAnZWagAAmJ4P/0COQXIT0QD81OFSRc6D\n5L+HfVTPXD5c5paAUJpqYaadJEAl6IjqWNfOwa5ssdL9boZMHCi5HSVGSD4d\nV8UtLrssOoVzYARSCOoCIBq4cmDmaEhfOQEH1L3U/KTznZ3OUHb9yrXxgply\nsfyhQxn/5vQBQWp7agQM7nDh6TkJ0JIhcc+jEFEbQmrPTgF9MWy1qC87bq3L\nX05YTXl2ATfyUKWBa2SrBm+0ReBGYkaYnRs85gawi1z1SU0kFfTceft4/Yxj\nHXhe/J/xCGT439S6/ky07FxYrQz2nRO1Sf85dsMXmYSqfBz7zVE22RH8kii+\ne4r/eECmIXcR2iEoNXjItc8jF6SRXo5212fGQDcglOiRNcTTVkgiVTQ7F8fS\npbIrPEOJiLS4tftHCA8FoK1NNKDEXchOZgNrTh1bnh/g+QpDwY1y63YdZCfv\nj2vaVpaDpM9ngOLYAZ45XpcUzJfTcgj1FI4TeM9LSYyfROnGAN1QwRR+QHNq\nfzisYdtFHCFzZpI6UxOmCLNOFabyAJecEa5aVPiI1XYdyJNguSDLVoB2wIZR\nGK4QElpD3YRFNooglBOMyB3YgQOHatMP6LCL7YiqJOS+ctaalLSPULtBhaHE\nPHZm8VvQR/1ZCcwzqiB9cmgPVw95pK2DhkA00s12G/CqlwK6NuhSVak5FaVY\nwMI9\r\n=IIXQ\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\n[![Publish Documentation](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml/badge.svg)](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml)\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"50628725ffbb76b5a25143a7c560fe155e676e7f","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint --typescript lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --typescript --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --typescript --fix"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.3","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.4.6","@balena/jellyfish-logger":"^2.1.17"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^26.6.3","sinon":"^10.0.0","deplint":"^1.1.3","ts-jest":"^26.5.4","typedoc":"^0.20.34","depcheck":"^1.4.0","typescript":"^4.2.3","@types/jest":"^26.0.22","lint-staged":"^10.5.4","@balena/lint":"^5.4.1","@types/sinon":"^9.0.11","@types/semver":"^7.3.4","simple-git-hooks":"^2.2.0","catch-uncommitted":"^1.6.2","@balena/jellycheck":"^0.1.1"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.0.23-renovate-non-major-50628725ffbb76b5a25143a7c560fe155e676e7f_1617285011386_0.202768543978729","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.0.23":{"name":"@balena/jellyfish-plugin-base","version":"2.0.23","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.0.23","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"8e1c8dcb504634f11939fb19fc86e27a3181bce5","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.0.23.tgz","fileCount":18,"integrity":"sha512-XRqe7Tql/XoQKkrXvBdAB0eMYlPXAC8A+mIat2pvbY+G8jloUFQ9XMeJ6Iz0CHRsytJj6+I2r2E4xoR9v5a0WA==","signatures":[{"sig":"MEQCIEMHOp1P6WXEN5Km8AtaHvBfz0Q07S54ytT3J9PKZAa6AiBL6D4Tj2Tb6J0MiyMyMWb7kiag1Y5rQmRTayQmOM58uw==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":33518,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgZdBjCRA9TVsSAnZWagAAvS0P+QCYUZUWZEpCJH55L4SI\nszLAhl5TpfnatOlmDJSpcktELsZZQ9Ldm5wV+BjkssXHN/gM0n81amAE645f\nUKLAM1ri+96rrH+PhLaWNWuoCv9NaAvpzs1wmHq2zo1fhWi/tFWElVSKGzyt\nL8HKkkVkJCM452C/VgUlqEjJfRWnwQROuOPaWN25Z3cziZqhBeZDuLfsf9bC\nv6JYoLdkN/6E8uvnJs0WuNquj9RYJGk3SIWJkFjjoCUAECV7aeKWMvG8/UiM\n2k5xE35M52hKyWkACwf8yiBBBcsogmwDXiXow4vjVZjD7NZo+QXLnsuzcAUa\nB83hfQLLsff/N88mi3otlkoHv+X5jLjbuGzdqtl6JF4Zw7/lZWsznwCyjr36\nJR7HL17DR5U3eBkZeyfkvWWxzEmcWnOWeEJ1D0ir45gZip8PeLrzs9+GAAOw\n/ypx/6BzGUnE7WtmJiSQClckvO4JcSa6JbJjnJti8tgDnUHq7a6hnilwfRL0\nP5RSqeAWQ9LGPCSQFQjajr2/GGd7aeMluiRb7HUnp4bQmVjbMZV+tkd9IjeT\na4ozmBE8rtEZgrntaeet6hXGlsU4M7iqsMj1RhYxRNy85OsXPrTbUp7xYGt2\nDYmJc/c2Yaj7W6/Q72jlur4TQJmxdsejnh8vEaydORcr6wzM7N0zqIkI0jbH\nVY/q\r\n=VAlq\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"453894d44cd6399866364fdf49b3f4c5a1ffc967","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint --typescript lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --typescript --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --typescript --fix"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.3","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.4.6","@balena/jellyfish-logger":"^2.1.17"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^26.6.3","sinon":"^10.0.0","deplint":"^1.1.3","ts-jest":"^26.5.4","typedoc":"^0.20.34","depcheck":"^1.4.0","typescript":"^4.2.3","@types/jest":"^26.0.22","lint-staged":"^10.5.4","@balena/lint":"^5.4.1","@types/sinon":"^9.0.11","@types/semver":"^7.3.4","simple-git-hooks":"^2.2.0","catch-uncommitted":"^1.6.2","@balena/jellycheck":"^0.1.1"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.0.23_1617285218967_0.1484272682246801","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.0.24-renovate-non-major-1457e9c0d3ce34363235843b60ac7818e3950830":{"name":"@balena/jellyfish-plugin-base","version":"2.0.24-renovate-non-major-1457e9c0d3ce34363235843b60ac7818e3950830","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.0.24-renovate-non-major-1457e9c0d3ce34363235843b60ac7818e3950830","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"ba0520cde8460857867ca2aeb52b1f3c99597a48","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.0.24-renovate-non-major-1457e9c0d3ce34363235843b60ac7818e3950830.tgz","fileCount":18,"integrity":"sha512-ej5ZEGdliiW2rEUtsyDsShfDuCX2Zecm0vaRz8A5x4dprD8Z/1FYttUeSN0421pjLbCt4fvr94+jH8wn62Ln2Q==","signatures":[{"sig":"MEQCIGgqRpjzOBeIdCmV+eEsAAKO5L9uGttu2jfbz7LQWd69AiB7Sao9s8oilU03OLm4JOU7QybJpleTHylcSaBKNyfBaQ==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":33679,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgZk7ACRA9TVsSAnZWagAAJFQP+wT6NptVjN/hpRUyfvwl\n70PcD1Ksg0MEvlxgSImIaFS8fgdQ9fx3QJqSz52lQzsJLuM4aha9QryggvnS\n9IgxeFSKj6OPwTSjmuLrUgp7b9N/8qDIAZIltZPI5aXc90yz7QW7PcOdb9Gg\nMyLkWZVoUEl8HPTfVjaHpST/YweL/8x7Dj1m0/nMhjzJHzDTM0pbVAB+N/Cw\na8ZWos/knrZg993sjMCQXhXhV7i/CTghM+Lw6Z0kCIiUyRudZcjsKnrZ11wR\n4E8gzJxS1NhdDfKP5l0bqOsinNRU6YJn7rH8ZS6XuxusfZPNFedkyhOAWQDO\nua5+XD5Mz1MXftdRkGH+HcO05MXjeTcyiZnnxmVsQ4lLYRSK3qXZx+0iTBGO\nsZpfMhW2ufH20w4acittveVxN4OekeDPLqE+FO273yQnJ1uPo1R0s8ceLaT0\nqfmaCh2to8d+KaR1d8IYWVQwmjJsi2vBjecRWFmCTDRTuTDa0R+umkrMv+yz\nnBkPfABH3SaHNLUZ9fxalbDCWQdjdG9f91g+SZgR/9C+qr+vEIEk+5G1Xh3N\nqzdocP8vboBcGszPO8R4bw+/ZdALw7/0VlOh7PWfsM83UOBNJvJBFS4kuWZi\ntFMn3miooqcBU6+3bNOqKQtHhTnhFBHEDL2X1w2O+U8HLQTyPXA4lm2zq7kM\neszX\r\n=P2QU\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\n[![Publish Documentation](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml/badge.svg)](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml)\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"1457e9c0d3ce34363235843b60ac7818e3950830","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint --typescript lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --typescript --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --typescript --fix"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.3","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.4.7","@balena/jellyfish-logger":"^2.1.17"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^26.6.3","sinon":"^10.0.0","deplint":"^1.1.3","ts-jest":"^26.5.4","typedoc":"^0.20.34","depcheck":"^1.4.0","typescript":"^4.2.3","@types/jest":"^26.0.22","lint-staged":"^10.5.4","@balena/lint":"^5.4.1","@types/sinon":"^9.0.11","@types/semver":"^7.3.4","simple-git-hooks":"^2.2.0","catch-uncommitted":"^1.6.2","@balena/jellycheck":"^0.1.1"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.0.24-renovate-non-major-1457e9c0d3ce34363235843b60ac7818e3950830_1617317567547_0.8100387331563319","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.0.24":{"name":"@balena/jellyfish-plugin-base","version":"2.0.24","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.0.24","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"7f6eb0e2c9e2bdef382e20414f7505a7b1e298e4","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.0.24.tgz","fileCount":18,"integrity":"sha512-fp2nf/4lNnCfHkv2MHiEuCynKxFmpM1p5yMY6WTaY9abZQOoAuhbkn7ZDL05m60AqSOKuCC2yGYUh8upEoYX8Q==","signatures":[{"sig":"MEQCIEemyp09/xZJ7rI7dkdwF/IZNV1uufv5AAJPi7gjBdXFAiB0h2LbDQbUPqnPmVxxc7EbEBIhkzOMfIAywybVLYBJRw==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":33619,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgZk+/CRA9TVsSAnZWagAA1aUP/R9xxJ+8jAKXO3ZSTSX6\nq9m3O7zxKCD3txICJn0VEPLB6b+/nwHlyfuDyKmFAUVD3fiQOyePdne6DrN0\nKxV35SEa6FKwZCimsy1SiErGeimJyD/NHI90OZsxoE++K3zae5k/vsQG5Ed1\nTLVFSnfPdL7+QX/95N8jlFnl1jThlOTQiaWc6tz1MWBSXDdNHulm1q5V0x8G\n0GZMlAX4/PqcqwxLV9+3Z/j/AxiAY0UOUMk+9TR3gBdvm/Ua7zk5cCDUEWcD\nYQWqvCYSgIv/tbPNHC6qycTkciepWD+G13/VAkGSYylBpVYbep53aLisyNkS\nl2pJUn2J98VVvKapVGSO8wg+2AaSkuPTRHIpRojeOj9bNQp6toFi4fSaB2Cm\n01agEy1p0/bi3FYvvObek2kjBxgmD7W7KRGwikGjiUF1m6sAMBXjLRedjFzU\nbT0cwBQm7c2PqeMhFhYfZvy/M6bPsE1FQmHHzmPEOhEFlBz2OIvCt4fjVEC8\nMkPR2vl2oOD8VopXd65CPWTkORdLOZyv9glCbQKYtFf6xsFmpBVXB5RBAp8H\n9wagk03c5dFSIP2mCdAu0JAapK4VFOK3mtPBp33qLESvCPWn9eGqtm3moXV2\nrfe2YTfkyD2dLx8uVzpbwHOFTvj9TXx2RrsdovQD7PbYEv/4gokU5t9zwSo0\nAkj1\r\n=Bswp\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"86a6f74d83ab12b614169eff2e1493eb1b3da163","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint --typescript lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --typescript --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --typescript --fix"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.3","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.4.7","@balena/jellyfish-logger":"^2.1.17"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^26.6.3","sinon":"^10.0.0","deplint":"^1.1.3","ts-jest":"^26.5.4","typedoc":"^0.20.34","depcheck":"^1.4.0","typescript":"^4.2.3","@types/jest":"^26.0.22","lint-staged":"^10.5.4","@balena/lint":"^5.4.1","@types/sinon":"^9.0.11","@types/semver":"^7.3.4","simple-git-hooks":"^2.2.0","catch-uncommitted":"^1.6.2","@balena/jellycheck":"^0.1.1"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.0.24_1617317822726_0.3167258658684322","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.0.25-renovate-non-major-74dbb7c6e5d007eff7956ce69c832ca1e00c1900":{"name":"@balena/jellyfish-plugin-base","version":"2.0.25-renovate-non-major-74dbb7c6e5d007eff7956ce69c832ca1e00c1900","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.0.25-renovate-non-major-74dbb7c6e5d007eff7956ce69c832ca1e00c1900","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"320fb6b4ae867daae5430d3a5275cafcbce90991","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.0.25-renovate-non-major-74dbb7c6e5d007eff7956ce69c832ca1e00c1900.tgz","fileCount":18,"integrity":"sha512-8fR0ztFNsnNBb+30qe1ZeKL2WCBwVAoAfgNUpAOh8hr4L7KxQLfEkqpuNXisdG6myZ0GPbYzWzSh+L1dDlA2jg==","signatures":[{"sig":"MEQCIAMmMAYE6TouBVYt30bWoY2Hzvy4n2Siba3iE5MXyUxUAiBP6Idh1E8k5jZCDmMezpDuPOYLlVXBOpCV0xs/ZWejgw==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":33745,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgZ04jCRA9TVsSAnZWagAAmpcP/27N0h0ht/MYv3KlpdeM\nlsZXJMTuFayEaG3cABKn/EtQK0YVl7YqIGupid+UaQbIvwnPHsAOFPR0jefB\nGhH1kjAaEMSUsyhflyn8RqXvNnt0UnY4MXPK9ih3sWeNUzruqFwAMkQj/crL\nOOj4Wibbz5BVtbqVFJOm7uvR1mr5Vne5XESlPMQCdP11DNEsBovC+qkptAyq\nSjZY4kel5cioBC4tuIcbX+++NWJEBaTUZkfb2/rnTqnas1Qd/jdeYIKkllps\ntAPhEyBHtfcnt7ShcLmd7nBCB7wHuoB0Bqi0BoaljW9sqtt3Rpar+q1xosH0\n1aIk+OKK93eQy+/jqYZBIewpgy/VOWY57HcZuXbUBQImyHwRJkDUhZzMvrQO\n+OpAEP5XE9Dciy7zSFCHstFaI9Fkvnf2q1HEm8HtyD+eT2L226EOR77AB5WZ\nsPi3LjnDtTaGXGeBQ+6yxtr75dzAMWv4QoWxPwFelCkyzwD4rq6w1V0M1Sg+\n7feXdFIRX5HjfDxcJlP0YQyWGgdMWhSlKtqaCRCIfdqmHecAs3aaqHBciYPf\n+ClRyKg6xHIblRzOAqhnSUHZDR1p0sYo9756g7wShAywINf/7sOdYmW846uw\n5VfogBjAnZ/6sDl6eJFzRcEBZX9TTiyrZXDYkB4MV08Me3tY5k5Hbb/U7deW\nPgza\r\n=dh+W\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\n[![Publish Documentation](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml/badge.svg)](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml)\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"74dbb7c6e5d007eff7956ce69c832ca1e00c1900","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint --typescript lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --typescript --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --typescript --fix"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.3","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.4.9","@balena/jellyfish-logger":"^2.1.17"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^26.6.3","sinon":"^10.0.0","deplint":"^1.1.3","ts-jest":"^26.5.4","typedoc":"^0.20.34","depcheck":"^1.4.0","typescript":"^4.2.3","@types/jest":"^26.0.22","lint-staged":"^10.5.4","@balena/lint":"^5.4.1","@types/sinon":"^9.0.11","@types/semver":"^7.3.4","simple-git-hooks":"^2.3.0","catch-uncommitted":"^1.6.2","@balena/jellycheck":"^0.1.1"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.0.25-renovate-non-major-74dbb7c6e5d007eff7956ce69c832ca1e00c1900_1617382947409_0.6914813844102745","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.0.25":{"name":"@balena/jellyfish-plugin-base","version":"2.0.25","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.0.25","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"413e7e4f0d34e99e7caf987f95d1ac748811d63f","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.0.25.tgz","fileCount":18,"integrity":"sha512-/Zycr5mpVjg+C4h4TA3vtRbcWxN8Mvxm32ikqtvnMyr5vljWwgTySyFAwo9pdTi5sw6aPmS7fJab5VxULcDb5w==","signatures":[{"sig":"MEUCIQDxp5VrTeEhIqJdVYUtFEw7lZrLb9OE5wuiWZ/nx82A/AIgVsi5uvakJT5xJNlgZU/GUXAU04iwE4fzhNVz+5Pf+Dc=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":33685,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgZ073CRA9TVsSAnZWagAAftgP/0PURimRhrWhwlMq2uuH\n+TFrv254Kg9XyDV0LVyAzKtURntBS1GVm0P4/JT0Vk4Q7XPcchxZP8F/DR6l\nyL3kHquwlxhFrjhWAX7DIA+x67Pg+bopS84Hsk4b90hWipAEQsbxM7SKZ5G1\nQHQ+3CCfHTUC/3TQCF8xijs6B3RdMMeoMkgBm/cOB2vFI1X9mdOPLdwTCKYF\nNh0s6JESErWkuBKZ0JmcG7DzXPTbo2xxztY7dr2VPPI4Uk3tkatb75FDhgre\nxlZ2Dom0zBrAxIa+PGn7nO9loPB/9ClSk3Yc3RQgSLHfu3ASW+Dl3c+3/sag\nUOVqrfvkshKeQ1oN1oOmBEwKTb9P1nsrqNO7OMBFW1b/kwE8L65BPZ72qUpy\nyWrblA2jxTZmMqG+s4XVkyRjuHJ4RhD15HWnRY1j2OOXSZu7dAZggAh3hsHC\nFcjGc3ususPd3ADI+aEQng61vJYiHJra8EGF5I6dSMcFbnrTtzTR+2eO/xyD\n8GNZBvDnqfyamxKO+ORwn1oj83nk7XTMwiIzdvc7mqe51+IyetsuF855A82W\npme8GYC2Y6r19ibqjQA2Ah8hRWBoWNfUylu8kb9vuHgaKm0Lgcu67ujdu3zP\nNlc82caz0TDPR0Vnl7Ss7cp1ozQhOiKuRCbxzTXW5FOdI/SBRPJtXM/T/F68\nMaHn\r\n=8qPE\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"db7ddb710101ceccf7f0ad309a37b70b20dd1c8d","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint --typescript lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --typescript --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --typescript --fix"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.3","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.4.9","@balena/jellyfish-logger":"^2.1.17"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^26.6.3","sinon":"^10.0.0","deplint":"^1.1.3","ts-jest":"^26.5.4","typedoc":"^0.20.34","depcheck":"^1.4.0","typescript":"^4.2.3","@types/jest":"^26.0.22","lint-staged":"^10.5.4","@balena/lint":"^5.4.1","@types/sinon":"^9.0.11","@types/semver":"^7.3.4","simple-git-hooks":"^2.3.0","catch-uncommitted":"^1.6.2","@balena/jellycheck":"^0.1.1"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.0.25_1617383158823_0.8336333423879061","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.0.26-renovate-non-major-04cb0ca99506b35d60cfa785ebbcf2317b01c77e":{"name":"@balena/jellyfish-plugin-base","version":"2.0.26-renovate-non-major-04cb0ca99506b35d60cfa785ebbcf2317b01c77e","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.0.26-renovate-non-major-04cb0ca99506b35d60cfa785ebbcf2317b01c77e","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"3191fed6004bfd5bf4bcdf73af13a3e4529d5557","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.0.26-renovate-non-major-04cb0ca99506b35d60cfa785ebbcf2317b01c77e.tgz","fileCount":18,"integrity":"sha512-vG0vdwpAD08D/iFSabmMGOPqGkorheCrjm4aKGyT37+yLGXqg600zJrxhzflBc+9eslPJn/XUNULHXc4KduVUw==","signatures":[{"sig":"MEUCIFqJlCNqPOrJeH92S0RgbR1V4JL6iTZ9udi65dReB4gGAiEAmZF+GI+7vIhmterLab8MyGRnX50uO1wHpihxvAqWE3s=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":33812,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgZ2pSCRA9TVsSAnZWagAAPvgP/iwU5E7nqf+xf97GQHfU\npTm6jRur9p5oHUzDJD5m3Dm+RX7IFodmAEvxwbCjJITyz9dpHjCRWNAS/ZB3\nNmaAnTl1RF9rQJp3zv6frkCnwMB/S0UXhKbU96bTT9IljOlRagFWJtAM992+\nz+Nm0NsSxJp+qRasZjOpiHEfUMNUrG/eeS16zVOSOobBypCowoucXSVtkpcx\nK7sJH0xVfMA98gpuomffH6gECOymzG40BDHnIk9ymjQXqNYSTo1RjgQbPlK0\n+NiLWt5ZoO8P8erHd1u5smjZn4xM0mRWJco+09/QWEXoGwHOgDi21oCVUdr3\njolVf22QHAAYNMdxb5Or4qK5LfdcZvfcb4SjkdVDpKXrGT9/sdUtaMLoyCkB\nBmQr9V6tcs//iQHe9hkFmnkyL6hqPF3gvUL+22U76FgbTWUDMdrLzFpFV7we\n+FsfGnpR4VdLMoP4Ns1QqPkEMlfbsebw48JoXY5uLkdQK9wczsx/VTc7KPG+\neHQSQijL3kG+lNvVy+ezhErR9d6ArMZWlEqbQqEAJ1wFxxH4+ugm5FmkL1pi\nX87Zj18YvlnWINvaqXWMWVEh7dcNK8FiPFjUR0z9zKkE0hEWRNFck9cZ8nYW\nBYGZ7BzFu61+0r4r3dfCcf+e0FDMzoSCxiK7V/SiYU6lh7iNtgtA09bngBfQ\nBYj0\r\n=COM9\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\n[![Publish Documentation](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml/badge.svg)](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml)\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"04cb0ca99506b35d60cfa785ebbcf2317b01c77e","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint --typescript lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --typescript --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --typescript --fix"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.3","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.4.10","@balena/jellyfish-logger":"^2.1.18"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^26.6.3","sinon":"^10.0.0","deplint":"^1.1.3","ts-jest":"^26.5.4","typedoc":"^0.20.34","depcheck":"^1.4.0","typescript":"^4.2.3","@types/jest":"^26.0.22","lint-staged":"^10.5.4","@balena/lint":"^5.4.1","@types/sinon":"^9.0.11","@types/semver":"^7.3.4","simple-git-hooks":"^2.3.0","catch-uncommitted":"^1.6.2","@balena/jellycheck":"^0.1.1"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.0.26-renovate-non-major-04cb0ca99506b35d60cfa785ebbcf2317b01c77e_1617390162333_0.3175342667598666","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.0.26":{"name":"@balena/jellyfish-plugin-base","version":"2.0.26","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.0.26","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"9e7cc31edb530e1281b5a36292cae4ca391b854d","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.0.26.tgz","fileCount":18,"integrity":"sha512-PrmtzpNVDga0fM33n2cuBQdfPtxPX6bbk4wqQF9r18zSwFmmgsjdIPhdb2XsPwrNNSE0foaAFxY453+qRpnKFA==","signatures":[{"sig":"MEYCIQCRiuoeq33ouyDIa7K3wDoMTZJbH2qY4HCDvk+HGjfW9wIhAOWWkke00ZQUo9HoBc4zk7dyClmViQ0uMOTLffkGqmwi","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":33752,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgZ2s3CRA9TVsSAnZWagAAifkP/3Kv2fecUnTk77qMlESy\nyiFhxIEwASTBjmrDGM4jQDYIYZmu8Jd8YfhJdj/V0DjxGvc/OIpYI8THJv41\nYai6BJgCLqIywf6/ScCgYExiN6+ehH9URhtHOoVYBYZIs7BmAKPKzUeUB9d9\nDOCLMK8RO2SDBIMxAqM11ZarLTzZgZuGQIlW2K7SFOYpM7BWSFJjw6G2qzSW\nJy85l2/5BqaRg6ry9qsp294ja0uydt8IeBKgkL0MjEgA7xCeMFjZ4bZABAkT\nJGtINHFeJ0eQVsVGt9Ybgmxxkv7CHHlLUWFIZU9sCViuKHadKAw09sNZer37\nIFGtnXQ73Sm+EBI+lKg/cKnKYH0NbRvSVTlReMWD0U5S0hhXp665Wwi2xCfg\n4pbhjCLf9w/tXL840XwzYyG08ndv1tdKlfhqt+fCofOphcqtKe0zeffXiOhK\npRFrSziZ+m6Eau8ozpDzw15+6zaA8U6t9h/Zo/s4iA23jQWjgyZjA0DtJMNX\nCuFgz22EAm5J/roQAn/lIW0w5jfJu9GZon1ciYbwB1FaaJDTZSxa+Cppwp0R\n2CLcnf6+Sj/T5ZMIKPiC3uy4nWTPx81u5UwMEJ3epMnd6O4ps7tzUVnFpL6m\n+j/g/qNgweCn0IhiDjt+u/fvlEkNALGX3KevZOra4QQXVg5UY/QdrEatnwgL\nO+3l\r\n=3S7O\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"cb354f740e1bdfbcd45b2a62550e2551b7e53fc1","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint --typescript lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --typescript --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --typescript --fix"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.3","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.4.10","@balena/jellyfish-logger":"^2.1.18"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^26.6.3","sinon":"^10.0.0","deplint":"^1.1.3","ts-jest":"^26.5.4","typedoc":"^0.20.34","depcheck":"^1.4.0","typescript":"^4.2.3","@types/jest":"^26.0.22","lint-staged":"^10.5.4","@balena/lint":"^5.4.1","@types/sinon":"^9.0.11","@types/semver":"^7.3.4","simple-git-hooks":"^2.3.0","catch-uncommitted":"^1.6.2","@balena/jellycheck":"^0.1.1"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.0.26_1617390390956_0.16531352823034262","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.0.27-renovate-non-major-7a6e2957d5a83de4a708ac06f6e50dcb61c3196a":{"name":"@balena/jellyfish-plugin-base","version":"2.0.27-renovate-non-major-7a6e2957d5a83de4a708ac06f6e50dcb61c3196a","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.0.27-renovate-non-major-7a6e2957d5a83de4a708ac06f6e50dcb61c3196a","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"5cfac94798b283d267d82ef63f11ff73a6557fc8","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.0.27-renovate-non-major-7a6e2957d5a83de4a708ac06f6e50dcb61c3196a.tgz","fileCount":18,"integrity":"sha512-qsac0kkIl+NrIlVF9Ewvtce1bUP/DwPYG93g08b00OffzrGGkxpfUJwDxze9oRbOa54vGi5d8YG5JCL9i1XoqQ==","signatures":[{"sig":"MEQCIBv013PGc5hW64A16AHsRfXnuzZXegsIaSX4WNFIF3/LAiBhEKrMt870KIyO1OO6QtDC6CsBChUg6jhrIOFzcokWEQ==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":33878,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgZ4juCRA9TVsSAnZWagAAnYEP/RYP/X0pbkDyhQxYWbMu\nI7hej5gCpdqd2sbQ2MxT55smGO8Ce5Ez3KDBIEQX5nFLvmfqo6Nd1Vil3gFE\nCh5XmfIYZ/hdBnCT8LVYbBCXkOmS+F3d4WCj5pdq+xtg0sZQ9EGohMIFJo/X\nZYvuJhswA0JHsg39u5pB9d/K+1k/0cA+Z1Zcpi4sZUi9p8guFNyS7MAbhDk0\nSXAmqHo5GCNdas6uB99cy0IM0ODCJDi6GOO99d1SP/QJfiZ9cF5WBmyZ64VL\nlAp6JU/7cBuU0Jf25g5Q35kXMqLnzeI7E3mI3C/VvHpu/8Dalrk1Wd49YNR9\nu+B3Gni1HFU06QrD1q6QTGYesb39vaWBCRY9sINe62H0nLK7HCUzCEa49JOQ\naBuDcQ4pTZW7wvXLpniLUN81EHn5F04G7zrPd0/OscZdR/2K1Cj978zkvqoV\nZs4vO+DlPNgOyZobJt6IM52rcQ47HrqDWZWLtp1oHLPgDBoHlZaT0ut+ng+l\nK35KWgSkwK1RnPYgz9TWjsRuZF7Q4miD9mCvi51MWRc4WG+So5ZpMu1pzsDA\naYHIC/dzeTmEg+wYG1C0UEWduP5UKmfYyGA5qTCjsdf0fHypPxQ7ZR58DDMB\n0QCbRlhuvk38cH4OQ1CHQqUzbkiRAUtaE3CwAWKN6Q9BmWj4maxh75zjNzO+\nuqn/\r\n=JZ8v\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\n[![Publish Documentation](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml/badge.svg)](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml)\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"7a6e2957d5a83de4a708ac06f6e50dcb61c3196a","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint --typescript lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --typescript --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --typescript --fix"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.3","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.4.11","@balena/jellyfish-logger":"^2.1.19"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^26.6.3","sinon":"^10.0.0","deplint":"^1.1.3","ts-jest":"^26.5.4","typedoc":"^0.20.34","depcheck":"^1.4.0","typescript":"^4.2.3","@types/jest":"^26.0.22","lint-staged":"^10.5.4","@balena/lint":"^5.4.1","@types/sinon":"^9.0.11","@types/semver":"^7.3.4","simple-git-hooks":"^2.3.1","catch-uncommitted":"^1.6.2","@balena/jellycheck":"^0.1.1"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.0.27-renovate-non-major-7a6e2957d5a83de4a708ac06f6e50dcb61c3196a_1617397997486_0.8090469258895121","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.0.27":{"name":"@balena/jellyfish-plugin-base","version":"2.0.27","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.0.27","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"3f3e0f7a6a0bda994f52cb15aa26eaa7c742107e","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.0.27.tgz","fileCount":18,"integrity":"sha512-OKWF7r87znjwq6ZPLprNAEawI0RUP1dy9cN/tzIFZTOOJNzct9rczSvrw3FMmfnmDxSyvvgcgz0vfVLHAl3C9w==","signatures":[{"sig":"MEUCIQDFr4MBbed+pODpd4HP0txGRbYrwC0y5enXlTpBPBeMLgIgKxDHpoPa2dM557UKAQ3qxLCY0fapxclj0RmGGOCZCmY=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":33818,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgZ4m0CRA9TVsSAnZWagAA+DoQAIE19ss6Rdm+8fOmRul0\nRrL13AwFlTsN/5pddPAe2E1FRetU/mfBU/fa/s2JIzxFBoaFdL2qfh5t1A+/\nIVhQ2Gj9RLScS5naVqaOTi/z6Cf49h1Jxa/hNKmSEa4QZvfvDghLSNiPZcpt\no7u3BtCgmGWsTSmXs2nh1+fLkP9jHqBgs7HYs9TpNd2H3PcqNvKXgdGV8naL\nN/ozoKHpTINyWW52VfCKNNEg/Cjt18yTZ1CEixDcaLQylkyswSsgULrV0C+v\nEMNGeF0e9jAzGVj+hZRaz27tzMyYlwSgRmAvYnyGFW9feIum6hu4x3UjM2mL\n/cexLF6fBSuBxEoAauUSl9MevfXWRgIAWEyxbajNA0+GK0jh/QpgbL4YhRGf\nh5WoUdj/XvmkVp0ZC8+EdBpc/clcpCYqZH+jmz8PeXT9BYzUFqysWsNzTffI\nflD9VUhsxy5nt8pdfzxOHOSw26CBDT2Yizmq2MUpOpVLxKasDD0n+tF9O1C4\n1dbL9SJJvGgn8HZt4IIghKbwU5PANPBrXK8nD6moaKTnMYuTLs4AQDX8gOrE\n24COEiLfJOODD4Z+W/GGQIhz4sohwtLLZq2rBOhz5J+R3yt/UnbhFdPieGCW\nNtKH01v2xDGXmSbY8siq8gsgjr6aRObKlizMu1wviRB0aaZeMRZ3CGM1LzzL\nSQuR\r\n=cHCs\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"1135cc13226ccea49532e61ac879e6a24a6adaec","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint --typescript lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --typescript --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --typescript --fix"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.3","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.4.11","@balena/jellyfish-logger":"^2.1.19"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^26.6.3","sinon":"^10.0.0","deplint":"^1.1.3","ts-jest":"^26.5.4","typedoc":"^0.20.34","depcheck":"^1.4.0","typescript":"^4.2.3","@types/jest":"^26.0.22","lint-staged":"^10.5.4","@balena/lint":"^5.4.1","@types/sinon":"^9.0.11","@types/semver":"^7.3.4","simple-git-hooks":"^2.3.1","catch-uncommitted":"^1.6.2","@balena/jellycheck":"^0.1.1"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.0.27_1617398195854_0.36733624338338133","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.0.28-renovate-non-major-30c5e59bb9838140b6665b77152721e6202e71c1":{"name":"@balena/jellyfish-plugin-base","version":"2.0.28-renovate-non-major-30c5e59bb9838140b6665b77152721e6202e71c1","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.0.28-renovate-non-major-30c5e59bb9838140b6665b77152721e6202e71c1","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"a28981044c0200265819cc9ed44849586e984dfe","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.0.28-renovate-non-major-30c5e59bb9838140b6665b77152721e6202e71c1.tgz","fileCount":18,"integrity":"sha512-OLS/chjdIT5hNFiH7hxeUafLB8x5L4Y7Jva4+EtgMhwHyGMpFGlfAhP35QlRJ2lo2eRXMqQNHJWHFxIbCPE3Yg==","signatures":[{"sig":"MEUCIQDMGiVLcIH2LaEkCDQ4phr6au3+x5g1HT3XrSAlFDOxtwIgCsEdNvw8MzDrGN12TR4B/LHWazI3Zf51Pni/lH7dNMw=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":33980,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgZ6UACRA9TVsSAnZWagAA0qcP/i2fOIfyLQjXyAyHgXz7\nYCiL/NZQ/JN3iD8XMAcjEpezhKbPQu/sYO+VYkhCypkYxB62Xll9YtrriZ1z\nJCtJppTs9GCStVEj5dAmm1uaoZGwgsQzBJYGUn/N8GP4V7FeJ9Hzusvcj9lf\n0rmxZlM2rCLwNVaZRVBGPzHGZ9baZwYdJRMQgoTT+DqOtMRZBJLNod8ofpDM\nYEk4dOZbBNRkUdbYDd0xPUCqCBDME/L7Wclz/geK+hQfpFrzOXDnDuV8/aS+\nlwP5Sl0BTYdq0jvNUXRCT3pPZ3vrpR45PVavgjBVt6DeqSSxWxN+IQiJ8U4G\nnppOjB7b3YzFFCEYXqd2pdlXQlVktX736L6J9HYGa8Lz4hA4amMgxi4mPxFw\naIRTuWj2TnsHfs/SrFG3OHlmKmCPcvkjylTKcn6xob0lT8WfhcWWdRruFnDD\nR5cbY5J6jnRn4EiVxgSKkYHFYsCJWQyyJDo3UFhiOaWa62GEgRv7lUQ3LU1y\n3exQGUJyuAC3j6pNozW6deUIAdCjs7iuSRhIkMfTikJBDOtJguMJ9wOjPg8U\nZX1MAuxcJtjYf6CGtvn9P/96ZE8SnCB7CjtOA3Hu2qfXWf9dvHsM+A+Oxb3T\nkQOlIgdhMvTo8k/SlmDfoGRxF9QjDEJPJv3vrfLQBqqlGiVnqz+/fTHUhMVf\nxTiO\r\n=itJ0\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\n[![Publish Documentation](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml/badge.svg)](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml)\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"30c5e59bb9838140b6665b77152721e6202e71c1","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint --typescript lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --typescript --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --typescript --fix"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.3","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.4.13","@balena/jellyfish-logger":"^2.1.19"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^26.6.3","sinon":"^10.0.0","deplint":"^1.1.3","ts-jest":"^26.5.4","typedoc":"^0.20.34","depcheck":"^1.4.0","typescript":"^4.2.3","@types/jest":"^26.0.22","lint-staged":"^10.5.4","@balena/lint":"^5.4.1","@types/sinon":"^9.0.11","@types/semver":"^7.3.4","simple-git-hooks":"^2.3.1","catch-uncommitted":"^1.6.2","@balena/jellycheck":"^0.1.1"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.0.28-renovate-non-major-30c5e59bb9838140b6665b77152721e6202e71c1_1617405183908_0.027493419075588665","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.0.28":{"name":"@balena/jellyfish-plugin-base","version":"2.0.28","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.0.28","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"29dac040852ecc674122449aab06ab3eefb3863b","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.0.28.tgz","fileCount":18,"integrity":"sha512-okDvrzc1vWbawHH1zlpeZ77Tl7LiNKhRZxJOUGxzfkx4H1kBKgKQ4fdV/VTw895rjhGCKs/345AoeyFTG45c9A==","signatures":[{"sig":"MEQCICl6iZ1RcKsxFDReLSi389iynrFLIk5X34PWptTX9KD9AiBpgz6zKV3RjpJfioRuoWdOmUA5HHngvR8MAa+VDdl3hg==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":33920,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgZ6XXCRA9TVsSAnZWagAAXH8P/jyq2pFxcDg1tj7nsaGH\nIqZTHHIIMsZEVG8TxuetOw9BU8klndjo+dSquRSWwx1e6Qq7ZAhUH9lF3lPr\n0e5ObsnXRu0qi3bzUZ6vI771CnUUsjoeIx//T1zjlgbHbkBlNE/W2+L6wq2r\n5c7wT0Y9k39JPqT9D5lY0ZMGxORi77iFq+sdb39YX7sMRAexIhREvHmyK3cS\nslD1cSzyrIIDL3FeTCsbGHRed03IZjrUqUHhcub5ouFKj1DyqCM2iMUeopAY\n1AmBq1sbBm8XGT/EufDYCDenhTV4NvU+8OSTrePhnrr3QTEH1YFwlRvHfAEM\nCslxjA2Lzp7GU/QNHRRrtgZoYH0jsHm8A08BExZ3RZiUrmKQYlqkLygKDeyp\nmyGjNW10MkEmyRtbHL0xC1Vnsa5w8y1TIKBmstZ+XqUu7tQtoKDajsrPJXA3\naG89hC9Y7J5M4E8PfkknAKmYjDAiOYcc5SUGw6qO0zPsj4ZaBBEuOAZYO41G\nn94UM4I1kuWQmCeB2r5YR+AbwW4GF8K4zV554fxeI55CVIcDNVCcayne8gQT\nfEExZn7cX2QnsPpkocJKLLe2sX1Sfw2pmuAK80emfTSSLWPdMBtX4vrpve/u\nSmD5s2XdERKkDGEof/Rt/Lf5UUTlKgZ1lcg3URF2shRj7Pme3H0z+5gBe06h\nfaYj\r\n=UBZq\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"0d1d46a27079b06641545f3daa88c09ee8f9abae","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint --typescript lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --typescript --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --typescript --fix"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.3","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.4.13","@balena/jellyfish-logger":"^2.1.19"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^26.6.3","sinon":"^10.0.0","deplint":"^1.1.3","ts-jest":"^26.5.4","typedoc":"^0.20.34","depcheck":"^1.4.0","typescript":"^4.2.3","@types/jest":"^26.0.22","lint-staged":"^10.5.4","@balena/lint":"^5.4.1","@types/sinon":"^9.0.11","@types/semver":"^7.3.4","simple-git-hooks":"^2.3.1","catch-uncommitted":"^1.6.2","@balena/jellycheck":"^0.1.1"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.0.28_1617405399074_0.44468716094029626","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.0.29-renovate-non-major-2a5a46d9d63aed2aa4c335857e0f71f1ff0806cb":{"name":"@balena/jellyfish-plugin-base","version":"2.0.29-renovate-non-major-2a5a46d9d63aed2aa4c335857e0f71f1ff0806cb","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.0.29-renovate-non-major-2a5a46d9d63aed2aa4c335857e0f71f1ff0806cb","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"5576fb5c55a48ddaf48025b337cd4b80a765cfa5","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.0.29-renovate-non-major-2a5a46d9d63aed2aa4c335857e0f71f1ff0806cb.tgz","fileCount":18,"integrity":"sha512-pbFEV0vYKOBCta5ZHevwtwYx4KfgSFK8xMasdV2aR70sqMZbqmArQVKu7yYfClxMgXwMuCRwxOuH4neR/qpqTg==","signatures":[{"sig":"MEUCIQCcLAYvX9GqGdQoxu6v1TY3W0za/GbRjR6SHoJcwm1HogIgFx6Gb0nBD7SlLyKlF722mpnFnkk4py3wWoqmt2OOAiY=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":34082,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgZ8EhCRA9TVsSAnZWagAAvK0P/jrvUlNf21cmcjb/78o4\neVMkJnQ2BAp5tVPxvvFxXJSYtDwv+E6IrF7phEg31z5mqPQq6BvzTWFrv753\nXltc1rzCsBaQ6efZrqt97sYr2aehpqOnwCaMDZV895pa7ZFbz+0jcwGCB2mq\n5OyGIg1C9CThO7fcSTu5itmSSbqxkpY9dFCOcmDHF0+YWx7BM3zRJKbXPgpt\nGk8RmOuZkHJe4KihVdb0MIwvw3pPqPvZgDm3dkeBGtUtHg+v1oKMYIXxX2JJ\nLqM5cgCHPrFBB0zHmzrY9d20h7CiLpS5vzlExhWrRw6mRU+8v0dQsSW6QSd3\n8GSGanajObg4IIsW7a2xZsjWdSbjpLwKH8ynuSBOO1au98L+HaS+53RvnVR4\n53IW+rqfdyaAJoSBmAfFcmd9tUnak4oHwXT6j6fDEZE9J8KpBBAoDPWdeDNd\nnUWyW/Z3+BXw95sML259U7gkmWLq8eR8KmhcZ+csYBk/+W5kkRCpoXe8pCuu\nOeLvTZ/Ug/K6xEroi6tW34/h7XeSBB+3Q60G9LJl6wLSWuLzVfXvpVdorVFa\nY6wFyuDo7x54j5JO6ifVvyKGNYWnLYV3tGiTelP5dmPwTmvYps+K404xyG1x\n/StubCS/Y/js/BLoHnubE6CYrf8U9gKXsyLhkacv43q6sX9zE3eCjdv79m++\nnvlM\r\n=zFJA\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\n[![Publish Documentation](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml/badge.svg)](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml)\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"2a5a46d9d63aed2aa4c335857e0f71f1ff0806cb","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint --typescript lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --typescript --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --typescript --fix"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.3","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.4.14","@balena/jellyfish-logger":"^2.1.19"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^26.6.3","sinon":"^10.0.0","deplint":"^1.1.3","ts-jest":"^26.5.4","typedoc":"^0.20.34","depcheck":"^1.4.0","typescript":"^4.2.3","@types/jest":"^26.0.22","lint-staged":"^10.5.4","@balena/lint":"^5.4.1","@types/sinon":"^9.0.11","@types/semver":"^7.3.4","simple-git-hooks":"^2.3.1","catch-uncommitted":"^1.6.2","@balena/jellycheck":"^0.1.1"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.0.29-renovate-non-major-2a5a46d9d63aed2aa4c335857e0f71f1ff0806cb_1617412385319_0.6835820432974069","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.0.29":{"name":"@balena/jellyfish-plugin-base","version":"2.0.29","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.0.29","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"327a663f3fa0266edea5f5476f278008d1f54df2","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.0.29.tgz","fileCount":18,"integrity":"sha512-bBo6GnrvVFaZS/WYNkdZOSGyE3QMufCDq7xYXZjP6dpGBW9/35vGjZYk2TVNxDZo8WBloS4KYe7sFrwrMm1qmw==","signatures":[{"sig":"MEUCIQDLs0rEL1HBv+JpyMq97wPMghLYeSkDvqeNSd63VcZBRgIgEFVV3oO97x9kRvHZPWlq6wH86jbzwhXsEiWe1S1LeVI=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":34022,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgZ8HjCRA9TVsSAnZWagAAEkoP/2hehcTvNKmabMFTXPSz\nVXTyhMBwsV940S/PYjRMhWbtobcDb0MDRA7HlLXiHT9qpNl6MJp9a/MBrDYE\nFqsBcp98/Z7P1sdyXTAdPWPJxIhB1tRElLKJRlY3HfsD1ptnLplDJXkbMNwz\nokM2FSW9uDWC771yUwYLy1iPwFPeGB/srld/YcLbvNUzA8U1viMWSHZyob5N\nHkYvoEdXyN84XpziIAcRUN4mBeAq3sSbM+bYGgeb3uGmVhWJLfJf2p5BMXk2\ntPFfNsGuWsO/6qdmjC1AytlB7PqZ8fUMTcbRwicFbuawK4NawU2dGnKv8M4C\nGPEBTDzOXzi8zjeUN4opVXUQHhstlBd9/Nr74CxBYcfzTXX3w6Gyj7flbVjZ\nkofBAhCYv15dHmQO/9ZFYf32Tq3OmOXR/dYLScS2ovPYH9PS0KEgYABbDOI/\nFS8kiSinsuQ8dWvLfxlL6M99LnPtgfu9kQSwGEWYwBAgrwdHtfW/G+XSuO+d\nsLZ7KT1PaZl8aVqHJZp166eLIffqwbzzMxzQoWaWZovHwF9OR2BvtZ3FHZQ5\nxzqO8mDDuVNzTxgqe4LQ2g4LdF/41e72RtqqLpJGfYjzbVV4Wk1CsM533o2H\nhDre/iawaIwDfjaZiWHr93A6VztcDXayWHKBtKgybjIsWJrCFgPBabPlvhhp\nTrqA\r\n=keKl\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"c7351d6751d122ad7c64ae55c52a7be60d087cba","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint --typescript lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --typescript --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --typescript --fix"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.3","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.4.14","@balena/jellyfish-logger":"^2.1.19"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^26.6.3","sinon":"^10.0.0","deplint":"^1.1.3","ts-jest":"^26.5.4","typedoc":"^0.20.34","depcheck":"^1.4.0","typescript":"^4.2.3","@types/jest":"^26.0.22","lint-staged":"^10.5.4","@balena/lint":"^5.4.1","@types/sinon":"^9.0.11","@types/semver":"^7.3.4","simple-git-hooks":"^2.3.1","catch-uncommitted":"^1.6.2","@balena/jellycheck":"^0.1.1"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.0.29_1617412579514_0.0938732429040281","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.0.30-renovate-non-major-c0b35c5094a94fb45f2a5b85d9c4ee7aa8871641":{"name":"@balena/jellyfish-plugin-base","version":"2.0.30-renovate-non-major-c0b35c5094a94fb45f2a5b85d9c4ee7aa8871641","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.0.30-renovate-non-major-c0b35c5094a94fb45f2a5b85d9c4ee7aa8871641","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"b20463c7b6cf2b36fe83ff28c5b90ae2436085e3","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.0.30-renovate-non-major-c0b35c5094a94fb45f2a5b85d9c4ee7aa8871641.tgz","fileCount":18,"integrity":"sha512-raYvdRlYZfBfMpUc/CE5IHwJeuwSh0gNaCbtUtm9fNLmr4WmwoFoT2k+2LSSdauIzwNI8G/2iBdMS6yILRzpXA==","signatures":[{"sig":"MEUCIBC96UHaFHKWGmSesz8i1B6r8kU+SY29mDKbsK3FseRcAiEAluTMzohL+3bnHJqhEzuMzmRDi/ACg+gmuoLFms+3ihA=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":34185,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgaF/xCRA9TVsSAnZWagAAVf8P/16UeW+5qRo+5AMLYWO3\nupTi6Sq4n4tOWs94LNkXKSRY+NkN2aZT51xWuQ3nHbMaQlfhf4tXse8Thij1\nlWDRUEbSqY3oytIC5RFor9PQpnJlWJH/8GyjPsq/x6cusv3uy58pfzCcEMWu\npCY09i2JeGgCAVgHQanTbhe4Qf2UKHRF69GtbGzhch8SshVuuVpI0CLX6c5E\nKqqPOKdCcWCtk0LtFY5gw3OvS5WZ3Da4UWynWnbGYio0fwQ5nGU2Wo5gqk6t\nLV3bht3VvjNjRugrT/szVOLLroj5SjlwR+WR9xmEr24VJ/8pFY/f9Jkvgqoe\nxucm786vfJUm6mFIc56LRS8ZhHtlgJPsZuU+HojpMtPueif8T9jBViSlxK4z\n27FxpFJseonQz5fvo6UdqFrCu/1U1rxqSaASneWSvqbOuk5t5ejgS8UgFi3T\nJwuY89XDUYgdzhZgWG50aEJFGfMgOYVsvLMJ7MyeAQFItAUPDLCgFUtumFJU\nE4MTtUqNhW+dbGaExdqoAQdE6aciCVEr0KwEH5Qi/DcY5O91JpjHq2IHpn4b\neVCCyD5ulXFboUaD8xjEH/gbi4tL5ACxddjw0S6ztKjMGsoMTLsEEA486kKf\nm7OXEGRYAOyvU/854WRKXre177TX2gBqBp5E7IQ+0Etz5tGnBBCbQl/wz4wA\nMw54\r\n=zTmC\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\n[![Publish Documentation](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml/badge.svg)](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml)\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"c0b35c5094a94fb45f2a5b85d9c4ee7aa8871641","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint --typescript lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --typescript --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --typescript --fix"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.3","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.4.14","@balena/jellyfish-logger":"^2.1.20"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^26.6.3","sinon":"^10.0.0","deplint":"^1.1.3","ts-jest":"^26.5.4","typedoc":"^0.20.34","depcheck":"^1.4.0","typescript":"^4.2.3","@types/jest":"^26.0.22","lint-staged":"^10.5.4","@balena/lint":"^5.4.1","@types/sinon":"^9.0.11","@types/semver":"^7.3.4","simple-git-hooks":"^2.3.1","catch-uncommitted":"^1.6.2","@balena/jellycheck":"^0.1.1"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.0.30-renovate-non-major-c0b35c5094a94fb45f2a5b85d9c4ee7aa8871641_1617453041009_0.0518006433222955","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.0.30-renovate-non-major-edb24c740896de5008841c69211fb01062011c76":{"name":"@balena/jellyfish-plugin-base","version":"2.0.30-renovate-non-major-edb24c740896de5008841c69211fb01062011c76","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.0.30-renovate-non-major-edb24c740896de5008841c69211fb01062011c76","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"212c95aabaa0b3d5ac022246de4772547a5693fe","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.0.30-renovate-non-major-edb24c740896de5008841c69211fb01062011c76.tgz","fileCount":18,"integrity":"sha512-BqizfKpJ3cAXT4YDyZajv4qXFRXA4z08foqEbyw0uPQ9f4YplaSkF19vx41BJyQxX5M86RmhWZBOLH1cdqFgPA==","signatures":[{"sig":"MEYCIQCW6ccskhHMB/tyxbBtGcexVe4rkVeq+bju4FccHS2YPwIhALWrpbAOFHCOYqS9CqE66Wm7VBiETbGVw+utyPTyDir3","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":34148,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgaGEMCRA9TVsSAnZWagAAE0AP/1UqY6YP3+9o/CirkskS\n5zj4ovttbkTRzOWxlP6h6TIAFKHG3zuuB/z776k28xTz3uTcoljJeV0U47Uj\nLLW48Pquz+poJ4/EUkdLWe6/DMR9u+AaqV2csOToyuGk9CoNJ8GbaVYyWl9H\npzsiH06o2jKCAPR2eLGAzO8wBCPMe9bNgQBtDWJAUvucCnTp+Fp1YGSvs5H7\nwqVGaJRNJR43kwxLWs+cziaymW+QOZC2053drlhTiFZZN0s7d4GPyhyE3dqq\nYy97I74h+Sle1Ygf0W5P3RwlLqmAHgMlWLsrDJW1Cje/8w1k6ICgt2vgqtY4\nTBM2p0VxoUQIR190Br2y46r8RDIyYZlxd7u50zIgWC7wokb0ToYsLthiX666\nTFS2QG65NNHU4GBky6BSG7lBe8oYezxhXLmEDb2NLZLZyQMOAyXwf/iDa83H\ngbXLpnnqcdprNpMbCdGrcyNBAWIcPhiB7xx//BOUoRSL2dIO6KQNmSQYDs7+\nybux6StMSmQe3DccwpqiGrJs5jAMlN1phaDpVLiBwDHROyJk+9UWo2v2NfmW\nLkMFaSYr8Y5rByMkmKqaJSALZn+KPDzU+xOEcyyNdi85OvoBltpgPrLj757w\n/2+1bo1g1GPaRD1sCY+dfpx8YIeZ2pyz5pDUGTOAG4u41T3G90qvXHzjnGIj\nOvzr\r\n=Vf+5\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\n[![Publish Documentation](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml/badge.svg)](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml)\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"edb24c740896de5008841c69211fb01062011c76","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint --typescript lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --typescript --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --typescript --fix"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.3","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.4.15","@balena/jellyfish-logger":"^2.1.20"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^26.6.3","sinon":"^10.0.0","deplint":"^1.1.3","ts-jest":"^26.5.4","typedoc":"^0.20.34","depcheck":"^1.4.0","typescript":"^4.2.3","@types/jest":"^26.0.22","lint-staged":"^10.5.4","@balena/lint":"^5.4.1","@types/sinon":"^9.0.11","@types/semver":"^7.3.4","simple-git-hooks":"^2.3.1","catch-uncommitted":"^1.6.2","@balena/jellycheck":"^0.1.1"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.0.30-renovate-non-major-edb24c740896de5008841c69211fb01062011c76_1617453324195_0.4759131744182079","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.0.30":{"name":"@balena/jellyfish-plugin-base","version":"2.0.30","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.0.30","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"e24a09513063cd93be1be3ae848aa5460b62ca0c","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.0.30.tgz","fileCount":18,"integrity":"sha512-AdMPcwL/493pH2DmhXyIBmWLQGm+G/kVWgANiRH8nKuYK7arUwqTxYPNdGgHKc3PhfPZfZ1M1+/mGFx0bHELKA==","signatures":[{"sig":"MEYCIQCc9jGBjZ4u2zELx4LfHv5/URlThblW5DvEcUPoTNSXQQIhANtOAjV2HRFlbGgAz4aMJZkBVNHkd93/dblVRt7xhfIZ","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":34088,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgaGHjCRA9TVsSAnZWagAAm7wP/Rr23HMs/27XfFAk8Dg7\nysGdWXCq4jYUWEo7XLrP6q+6o3hd1Y0eKHeCT5FU86CP/8KAJSAkXWEdA360\nlJGJ3NDlTWcn6Hl2auLZrAmJD3r7bT1NhFOACC72NB0gaiQe5W3uudRvhkOD\n2H0Us3qEhC1eAZJSX5RjBiKYFRFILYLSj1vwIEl7CZN45w8SycWmweIpQQJi\nuBNRPxRLPAHP1kozs4iKj2R+NkvKMdpS3byn9tseqePq9kGkVruQoJut+aOn\nt8gY4md/yGOGbYaBcXJPSdxfSSDd/kBKH46I3bLXX/V8IT7Le7coon1ysKKS\nvnzOTLGC+noWLT/WCB0j+k8daSYIzryABb3kdAu4AYc4Qce7UvYuyRnnu6jB\napttbPC8VunOS5i/y2Id4QuQsg6l6DwH/3MF2ondjzvHvtEVUoif2jc1kLo1\nUT1kC/eYzTx6Zs/EWR90iydDCFj2bfMahQQCyGAonh+6AKxsGFyFegkRUDW0\n1bx91oOQmsY2Y2aNCULFgeBFcZFrTzXbTmm6L7FBeuIJq2DAPLalPCDl2xa+\nOlUidz0C7Qoq+qAadbqmCvzKe70o9QB4a+Nvb3/Wv5tezBy8m9wHIeo8pp1A\nwFVvsp7PZITrGraohhMfiaPtb34xTsb2GvEvjMjf36LJS2v39OMnKqcPD9zA\nKKoR\r\n=McXe\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"a6ef37a9eb9b7a85cf0b1f524a6fd2b37cf411ba","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint --typescript lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --typescript --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --typescript --fix"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.3","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.4.15","@balena/jellyfish-logger":"^2.1.20"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^26.6.3","sinon":"^10.0.0","deplint":"^1.1.3","ts-jest":"^26.5.4","typedoc":"^0.20.34","depcheck":"^1.4.0","typescript":"^4.2.3","@types/jest":"^26.0.22","lint-staged":"^10.5.4","@balena/lint":"^5.4.1","@types/sinon":"^9.0.11","@types/semver":"^7.3.4","simple-git-hooks":"^2.3.1","catch-uncommitted":"^1.6.2","@balena/jellycheck":"^0.1.1"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.0.30_1617453538651_0.6164297955489502","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.0.31-renovate-non-major-e8e77dd42106788b36d17799128c25b904a8b17a":{"name":"@balena/jellyfish-plugin-base","version":"2.0.31-renovate-non-major-e8e77dd42106788b36d17799128c25b904a8b17a","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.0.31-renovate-non-major-e8e77dd42106788b36d17799128c25b904a8b17a","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"f3cb229ebd706a7aa55f749fa2d8f850fbcc7022","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.0.31-renovate-non-major-e8e77dd42106788b36d17799128c25b904a8b17a.tgz","fileCount":18,"integrity":"sha512-lksZw5SCJnULffXoMvDYGM+LN2ei2K8svUZ+nV3EfHfB1nzV1BZ1sclxfrXwNlhbGZ0hgg9tbjmyOy9Ge4ravg==","signatures":[{"sig":"MEUCIHavAXEP8J9fXOh4dwZGZHxgmMdlbDV29aA+BieW9wr7AiEAnLq41dYzE0cLDQOIiIf73wvV7DsQ8vr9V92MyH2BQRU=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":34235,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgaNWnCRA9TVsSAnZWagAAskoP/ito+i+Pah7tApJX1ejh\nPt+KrMpMIytwwRljH2pI8ziBIuNl8VPHxnz4HFdKYYGHdhDERFUmO8pOqLZd\negHpuuiST3SIjAhbsVYg3HqOOUpjfQfabd1KNwEW32YsXmUk5X/q5kDJ/VNE\nCsQwVkzXV1nFfkNGdstvynz1NRo9ffxu4pKM4cRkOtsaCT1VTYkVIlQv/g6s\nLzxYMwXACs2Viisk/E6RpTB/a8qpBbZa41sF/plQFch+9sJEx2SFyyU7XPVw\n2lpJD3we+GZaOhKvAiQvf8g3rSxXPvh4OaSfp4KXNnb9nFV4R6s+KMvFmYW3\nbCQmBd8CzPPoupqT7OgUvBCmk0tRSG6+69GPOh5S9mViRfZeDMrL6AVcYB1j\n6g0viKgh4pTxJfTTIv5uD64oemWHnWnKGCxIogtvX2jemCJOTav2IzbMdmmX\nJtBgbxPyPkWEzD4lp2vKI1uHAigKJ7ukSBbwRdy7IKIbaetYziJMmH+QN1/i\npSa1FX5izedEyO5DQpXQuPd24b7iPjFtifeuxnRNqTrWDfrM07wKlV0R4VVf\nUJ9+3GkvUC56B13OxmFaLYcSwcsqmx2ViV9MOTzEibxQtOf1kI3Bw78gRpC1\nduoZtBmavyjT6ieKJnAE/xVp+obXPyrR2nf00fCHYzEpz7OFDal4Nj9/hkxc\nCb+4\r\n=KoT+\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\n[![Publish Documentation](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml/badge.svg)](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml)\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"e8e77dd42106788b36d17799128c25b904a8b17a","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint --typescript lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --typescript --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --typescript --fix"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.3","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.4.15","@balena/jellyfish-logger":"^2.1.20"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^26.6.3","sinon":"^10.0.0","deplint":"^1.1.3","ts-jest":"^26.5.4","typedoc":"^0.20.35","depcheck":"^1.4.0","typescript":"^4.2.3","@types/jest":"^26.0.22","lint-staged":"^10.5.4","@balena/lint":"^5.4.1","@types/sinon":"^9.0.11","@types/semver":"^7.3.4","simple-git-hooks":"^2.3.1","catch-uncommitted":"^1.6.2","@balena/jellycheck":"^0.1.1"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.0.31-renovate-non-major-e8e77dd42106788b36d17799128c25b904a8b17a_1617483174533_0.9091991624631401","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.0.31":{"name":"@balena/jellyfish-plugin-base","version":"2.0.31","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.0.31","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"e57a61b05ac51793714ebce4119cd0b63acdff49","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.0.31.tgz","fileCount":18,"integrity":"sha512-BXmVpY20ZFWkWMauzn1J3clqAksMGInvrOfofd0q9XNuEJyFlp2B0RDGieckiFcJ3trdIwGL3R04goBX4MI7AA==","signatures":[{"sig":"MEYCIQCT6GjMfynLocZ/gLbaUdqbDjLItMTk7pSbS6iGeUbZnAIhAJG9DgW15HZx1rhnnQf2DcnYSc0v7k8DgRi8yM/3M+lk","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":34175,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgaNZuCRA9TVsSAnZWagAAoGQQAJTadN68I/9UYF6ImKk1\nu2kAkliXU3FlkEdzMnUGl8cV+L+wFObWHZqhk5aOqwhVcXdZeR7SRGmxq2Pi\nfPdiR6wDC/oMhK3J9zkwpz3gxyNEJW6EhuTLtO/KaWs7usB+b/igdM6vLqdh\nvbijMnhtpBh/h8V+XrwMIz286F+tyxn11JDHC5wVpM+QJid/+KvHP2ft1wks\n/UWOpo5Ku8uUHeSDc+QeVL7j8DYYH61kMqK+mG/Ma37QgOJNDP8+ba8/lKUD\nboSXiMhFIqIk4KrVVPDP/NHpY3pIIXNcCn2/4yCQC60JzVJqugQPjVKPfk2F\nW4JAu4ma2Z7TjBsDiwWoN6oJNg98Y6BTz2vMahWs7Ys5D8CKIdLUcdK4fnZ+\nXm0AX51ItB73Beu5SBtt/+H2XvE2+KzW9zlJ6a/+nZL2OP4xAJY0MKx5R05b\nTJax/WNO+i0DUI7zWu8etrKP7EQqky+LtozepPEBhu39xDY3lxrthHRfcVWr\nOpKRwnQ9ZWU78zTdQJu1Lrf87IRZ23cGkh3HU5BP1MMSNTGalv2rdZX2cad6\nWONzyCD/qgz30rYCjhfDu/6oK+f+5XIF9pbl9qXP9bk1gk5lKT3e8kRKJPZk\nxCBU2PrJOBF787x26CSwORoDyMw6+IGWf7oK9wTVbWzrWzYnd0WpHUMMQ2ND\nl1AB\r\n=pvg1\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"4a8f75d0cd985dc40909bab1adfc438c1ecfdb94","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint --typescript lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --typescript --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --typescript --fix"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.3","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.4.15","@balena/jellyfish-logger":"^2.1.20"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^26.6.3","sinon":"^10.0.0","deplint":"^1.1.3","ts-jest":"^26.5.4","typedoc":"^0.20.35","depcheck":"^1.4.0","typescript":"^4.2.3","@types/jest":"^26.0.22","lint-staged":"^10.5.4","@balena/lint":"^5.4.1","@types/sinon":"^9.0.11","@types/semver":"^7.3.4","simple-git-hooks":"^2.3.1","catch-uncommitted":"^1.6.2","@balena/jellycheck":"^0.1.1"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.0.31_1617483373551_0.430087351670164","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.0.32-renovate-non-major-3cd775ffd32ecd6f60bb84fb43bbe4fe400260b9":{"name":"@balena/jellyfish-plugin-base","version":"2.0.32-renovate-non-major-3cd775ffd32ecd6f60bb84fb43bbe4fe400260b9","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.0.32-renovate-non-major-3cd775ffd32ecd6f60bb84fb43bbe4fe400260b9","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"4811f38fd4b646d35b71c94e75fa697fa9bc4243","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.0.32-renovate-non-major-3cd775ffd32ecd6f60bb84fb43bbe4fe400260b9.tgz","fileCount":18,"integrity":"sha512-HpHu6tT4sMj91QKVQ065MFTkfOHitoVL0IepLCL93pw38PdDdevN0bR+c44Z3P43nJowRrIP9O8SyVIV/X+SsQ==","signatures":[{"sig":"MEUCIQCrJts40FaB/t3yW8rHQ7WDm1ppMwXFZaK5MN1ttDOvnAIgFCUINMUSe2sAM8HFvddL/16w6ad/PdCCdFepem0Ng3g=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":34301,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgaSJFCRA9TVsSAnZWagAA3jUQAKGD/gxwRoTBIUly+2nD\np11ECkxTzRQEvYfxFQRi0Ut7c+dDC4BC90Fzus3Z09u7GiYljCuDBlEg3AJ1\nUTvDGYO8XV8+3e0GLbobXh06h0tTwHzoXcrCwMEqR1JP6E5tzBn7Taq4NxcK\n9GDs07FJeDsF9Xh5+qsXRIl3nKrx/P67fXdWhbiagr487gXObihZ7hK+8gqK\nbUcOC9fZBp9GZzHkvMg8tSsi4ZhgpHQXjXdT3t/4bnwNnN77V+Xz2Z2seLtJ\n+cT7TgOb5viZHtrYfEGMyENO08iYc6XUGeDl3eackL6FfhW+DxhktkjVpz54\npkAsN9zi0rVHdW8z6gmN4Ziwl4PgydIXRsnIUn5lgeAx5+TTi64XvJQ82anV\nN4BXT1xrGlTPQHKExqbLNCfclHRDK+d/vUrXlyo5+BU6Sfvu0p/nLV6OKBa3\nDY1MYSEzhF6twl3Bw2ixpu7XBY12E5xQSp9hxL6d+sjfg4gM5KaDSeLrU9HN\n6BAtcsQOUwRg8B6QN5UU1bY9hu9RNj+aoynUCEYxupEC6LRRAVpxbPrBs4eb\n0SS26TwbawdUZfHcSwsLZ41wZYCduX43aikpwaVgRfR1CucqY/ni1QMgfGWD\nWvqR1orki2xCxfwzllRarrZPI5caV0SlArS+vNJoUIBB3LhkW5CH2J4vsaWJ\nD6Dt\r\n=2v/y\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\n[![Publish Documentation](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml/badge.svg)](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml)\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"3cd775ffd32ecd6f60bb84fb43bbe4fe400260b9","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint --typescript lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --typescript --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --typescript --fix"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.3","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.4.16","@balena/jellyfish-logger":"^2.1.21"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^26.6.3","sinon":"^10.0.0","deplint":"^1.1.3","ts-jest":"^26.5.4","typedoc":"^0.20.35","depcheck":"^1.4.0","typescript":"^4.2.3","@types/jest":"^26.0.22","lint-staged":"^10.5.4","@balena/lint":"^5.4.1","@types/sinon":"^9.0.11","@types/semver":"^7.3.4","simple-git-hooks":"^2.3.1","catch-uncommitted":"^1.6.2","@balena/jellycheck":"^0.1.1"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.0.32-renovate-non-major-3cd775ffd32ecd6f60bb84fb43bbe4fe400260b9_1617502788688_0.8449848157968811","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.0.32-renovate-non-major-0ebb9a035b58dcaa1f5b3dd5c75d0991cdcd9dd3":{"name":"@balena/jellyfish-plugin-base","version":"2.0.32-renovate-non-major-0ebb9a035b58dcaa1f5b3dd5c75d0991cdcd9dd3","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.0.32-renovate-non-major-0ebb9a035b58dcaa1f5b3dd5c75d0991cdcd9dd3","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"7ebdb777839d7170b745b51537abff2fc9c92602","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.0.32-renovate-non-major-0ebb9a035b58dcaa1f5b3dd5c75d0991cdcd9dd3.tgz","fileCount":18,"integrity":"sha512-mQLXITLLjutMeIBwor9wOrc89bPJanNH7yDhiQmsxRFSuJDMB+wN9Ek4hCvjgqAsuMhulMUHnIs94sdXEG3O5w==","signatures":[{"sig":"MEUCIQDBhrE1R0mJ1Y4nKQoZ2xRlVm1Hh/h4TFj7COD7zOc65AIgTF1DKPibqw8M1JUtLCkadXwaaTdhl9E8mYT5dB0/Xiw=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":34301,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgaSOmCRA9TVsSAnZWagAAL6IP/jnRGEXz2gCJjNhf/Sh0\n8YNDrUrHG0oT9Pis/p586sLaQu+mvQ419iy93h3ZJXqAqkRDMLdsdET3Zj0Y\nAh/xIoUnheyooCI8Rw+xdvJjPf++LVcCifi9e0ZmY59Cq1DRfTef9aEL5GyH\n3FhgBi2IAjG01gYo8/exbL/IlEYU40xw1UTOf5Oyie+u1zu2tbUuzBlWbW7g\nDpS6vnmYbM4LCX0jBZalokh1W+5llpltZzQEowLg/jKxU4498ZK3SpL6Mg8y\nwVFUHdJ5a9Q66A/xb7Jaq6DsMTnsqyFNXtcBeB/NGjvWUTPXFoF5pwgbzIze\nm1KdDQOHv47ww81fDL4m7fH4Es8x6OCVup9G6ciPzsHbZGcRKgQb3A8s8wpA\nBsUU7pHX89TIal0MYPNdsK5znpZ+4howbwf41c13Qf4LIUQiy7pWG6Pihchp\n5R2lco1WmhST/lGQ4QXwgy0W5n31UkjdwzKFF010+OhmonV5njgwSY8J+1jH\nYwPwiD8COddgRrVMJNQyzzBg+lxQlSNTSe6oiNUC9T629RQxSbgy1jyKO8jM\nPGUudkgg6EJxaTP6D7ttl3fplussp+37ylCygiRGU+hyNEIL3wStJ+7V5+KD\ntro+qSF24r0BN+BzQUHRp7a5Ok2/T41Rs/IZ4O6IFls0TBMBWmGaTWY5lnX5\nMnxi\r\n=Lfed\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\n[![Publish Documentation](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml/badge.svg)](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml)\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"0ebb9a035b58dcaa1f5b3dd5c75d0991cdcd9dd3","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint --typescript lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --typescript --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --typescript --fix"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.3","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.4.16","@balena/jellyfish-logger":"^2.1.22"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^26.6.3","sinon":"^10.0.0","deplint":"^1.1.3","ts-jest":"^26.5.4","typedoc":"^0.20.35","depcheck":"^1.4.0","typescript":"^4.2.3","@types/jest":"^26.0.22","lint-staged":"^10.5.4","@balena/lint":"^5.4.1","@types/sinon":"^9.0.11","@types/semver":"^7.3.4","simple-git-hooks":"^2.3.1","catch-uncommitted":"^1.6.2","@balena/jellycheck":"^0.1.1"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.0.32-renovate-non-major-0ebb9a035b58dcaa1f5b3dd5c75d0991cdcd9dd3_1617503141586_0.8792255594661551","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.0.32":{"name":"@balena/jellyfish-plugin-base","version":"2.0.32","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.0.32","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"99051f538d0bd7186f93c4afea5d70813caecb25","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.0.32.tgz","fileCount":18,"integrity":"sha512-R+qbAuhAAYphqzPG6tlMey0kHvE4RGp0Lrn9M8vIfJNQfvJ+JhGWMUHGEy3uI1s8Vffj9f8AX5PW6KUQEOCNQQ==","signatures":[{"sig":"MEUCIDUj4hxdqYikTIlhnlXK3jHhRohKqvuY7Tf06unVsvtUAiEA0vTnjlpIgJURxne5RkgcxckE687KWGq+GLZj1DYHJ9U=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":34241,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgaSR8CRA9TVsSAnZWagAAD1gP/RzNUlDyRKpfKw026Dgn\nGxvi+rcuNsufX63HOL6gZbqUyOVS4AExPlextQWdKICU2WE6AcdvUv9y58nI\nyGo7a/gcedrvqmOUb1rUtGwRdIPV9nBvxwrSd4aEsy3H1VJW9qWnFJvbYGc1\nWYRfKcqKgViQySQSnbyS/sMh+95Iu/7+Up+pvthgWb04PVVL86S2ngpm03vf\nc8HPtJOqCCZaDd6vh3wmSu940zZgxglEsF88QreAkFvv6k97++ijC7k2oTMc\nOmwBlNJsCugTGttn6ZPpfSujfumbKvLWZ490ZvAw+noMRha3BjmBFkDSzf+L\ntQs0RIQL2VQ+3p2T74k3eq9bqMSHBd5tWyrBMvrorOU1a9cbD8mvHjmUoXqe\nPz3X3kaAH7jZvdiJptRDgnLz7TtCOgfmp0RTEFqanb1ZTY5R3R5+hmokrvlv\nGREiweOe/j0uV6zqAFTu0CdFwAWWYYxP6KTsIQ6DxWV3RUsa+Ci7222mGMKA\n+44fmkG+FgawxTW5Cyvd2ZBNdL5AAMkEfMRjJ3PgBPXo5qbhaZJbq3xqEhYX\nevtqUShIsi1MsQG5Dq6JvWbrrKlM2m7k37WsR8nIzDAcwLjK6zDnzUR4J+ry\nHXmPXbSn+QuCnN1MF/8dhcPelxcAP3wc25N9vEqHyT+2jeJjQPzWtlVHQErQ\nFUYI\r\n=5QON\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"f2efb449da543a6dd3bf8e748e45bda097d33048","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint --typescript lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --typescript --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --typescript --fix"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.3","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.4.16","@balena/jellyfish-logger":"^2.1.22"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^26.6.3","sinon":"^10.0.0","deplint":"^1.1.3","ts-jest":"^26.5.4","typedoc":"^0.20.35","depcheck":"^1.4.0","typescript":"^4.2.3","@types/jest":"^26.0.22","lint-staged":"^10.5.4","@balena/lint":"^5.4.1","@types/sinon":"^9.0.11","@types/semver":"^7.3.4","simple-git-hooks":"^2.3.1","catch-uncommitted":"^1.6.2","@balena/jellycheck":"^0.1.1"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.0.32_1617503356334_0.3806060147007235","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.0.33-renovate-non-major-5f57d799cafbf95664db2ceca930b1e388a4746f":{"name":"@balena/jellyfish-plugin-base","version":"2.0.33-renovate-non-major-5f57d799cafbf95664db2ceca930b1e388a4746f","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.0.33-renovate-non-major-5f57d799cafbf95664db2ceca930b1e388a4746f","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"9b3ce9b443d335c78b79e3f4545160d946a851a7","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.0.33-renovate-non-major-5f57d799cafbf95664db2ceca930b1e388a4746f.tgz","fileCount":18,"integrity":"sha512-7Z8cDWludbHnPyTm0GnVEk3aEH+vlx3VDXafQho15lXtqNUO6rsgYTGdkviDJoqvbyqxoqa8V+jFUiRxCpCRmg==","signatures":[{"sig":"MEUCIQC0rQn4zetVfJwgIMvprGIn1uZ1D3KRe0chu/O+mKAHtQIgOYr/9JTAK0b6fe7LjiJjU1KiDpRQAJ4qZ6K8/JDEv6A=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":34403,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgaUpMCRA9TVsSAnZWagAAyasP/jZeM/Xd2eovX/S57XNu\nYyn8j6Y1wvOR2nkq7Iho7zxDyb4bNYawBQ+dPQ/a+EDVY+VDhaAVd8/qjfZP\nWsucElVIeZF4wHrNSN3LDKX39jddGhK3CjPTQYOFkxfUooHMDIFRbSzRvcM7\nc50PPbRkn0aDQ8hOb/0yOgAgTK/rPixbfcFni6yFHaN68Hv91IQjVksjNkFM\nEK8OUndKsVDn0ijlXFhQ103tJN9ATlwKRS2AsihtCUNj8sp68jtksJHuOvc9\ncqmz8X34dS1s440du4WmNuQShppwPbDFnmuTCw8LdFIv1bqRa+qIQu81gY/k\noWkLBsoUqUsxo6Tn6ZCZKUpn2ogGy4sQ0bglJCtKi0DMLHDB2oDvta5XaCXo\nuHM1/g7EbmsswgJD0CKNHBVTmWfZI2Cw8bYSqzF+QCfxdM3Qt3zFznL7vIz8\nPNawLDvNOqjBzBNHh/AzjK/5Phtd6e/LUnF0bgnCxsAHBitSRpR5JUfqy3gp\n9Ba42V3DBL+uSS0BKoP8A3aZ/lIITJRjKwSARxs09cK9bklFshpa/o6FvDk7\nJnfP/xRNWK8quPJ/NnfYHLUXvvRG0sbwLRQfWxYzoQWRn8HxpV/4qL0SUxAz\n+4v/+AQd2Ulw7o4z0czULQ/N0BVJhFaJ2sngQWsWEitDrWGE7MM6UPLa0KZO\ntUeJ\r\n=DrNc\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\n[![Publish Documentation](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml/badge.svg)](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml)\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"5f57d799cafbf95664db2ceca930b1e388a4746f","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint --typescript lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --typescript --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --typescript --fix"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.3","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.4.17","@balena/jellyfish-logger":"^2.1.22"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^26.6.3","sinon":"^10.0.0","deplint":"^1.1.3","ts-jest":"^26.5.4","typedoc":"^0.20.35","depcheck":"^1.4.0","typescript":"^4.2.3","@types/jest":"^26.0.22","lint-staged":"^10.5.4","@balena/lint":"^5.4.1","@types/sinon":"^9.0.11","@types/semver":"^7.3.4","simple-git-hooks":"^2.3.1","catch-uncommitted":"^1.6.2","@balena/jellycheck":"^0.1.1"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.0.33-renovate-non-major-5f57d799cafbf95664db2ceca930b1e388a4746f_1617513035650_0.28233500876717876","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.0.33":{"name":"@balena/jellyfish-plugin-base","version":"2.0.33","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.0.33","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"2751e1ddd70e109a8d626502e5189499a93c3c23","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.0.33.tgz","fileCount":18,"integrity":"sha512-qRruFSgvb7CYOCSsm/hKOGorMV5gyIYh+M0LEJ8WFdMmHJYP/BXT6o5pB/8ij9yUReXmCnjsFnzrZs/zvzdANQ==","signatures":[{"sig":"MEUCICmD3FBrmjC+t6PEQcvyOP9TS/7aByPNCsMPnmpVwuutAiEA+3vvCEKC/h0c/dSh50GXhIv34l1eN7ENu7qK0pZu2Q8=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":34343,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgaUr+CRA9TVsSAnZWagAAg+kQAJ5LqpFQ15K+k8AueHIS\nhNXJa0F385SgkSYYZzerHJ48xGKlvKCnR/ByLxb7lvtHtAGlzPH46a6kHDu6\nS8VtnWAC/y2gQQ6DCzLjJQ3ZXhsYSSSY5dM4yAMUyDniy9KuWjSX0IDtFtiM\nvO3okb/oiuEVLTBs3F/RdAyQUriFFudBBVsvtoaeFGYUnHVzngji+Yhustr5\n+KoaxkJu0j6UMkFsbdHpVEZy82uwUy7kfuq3Vfk6T05abo5Aj9WFTiVOPrn6\nEiOB1cRLqtD2EuEeA12BpQsIsBeSMh0a2QuaFoRpaq4AYJY6n0BYgoTiYRIQ\nmX1+IOuaeYCQOIV7T9s5x6qEpayZQa9gkebAxq0QqMCl7sUjm6uIhorDR7bM\ncZoP5hSNVCKAIOuaKV7cSKdJJTIr9zeyV/Ep7Vttw7k1zUSyTxMvmwqXvu7F\nfAj9UWGkQWODqZw4hI2t3HZvKc+dd+cx/GDAVGvHCQu/16FILYcKxclxSvfX\nyHnwjaqDv38VWd7hArYbdAi5PWhPJX1Siub3PesOtLRYTJxBW/BXZhDSB6jZ\nDzPl8QYlG6Ux1Ya5pq/j3jy3epix5cDd7R64urI0HcwyHUbAeIMgb09H96NR\nP4hzjLSC/uFdHrovC+WddvW2P0/oeZ7Co0+wM2FpQt73btlnpjoy3/D+NPQe\naL1K\r\n=sb1c\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"bf5c7f43025014ab616c087b025c6b0ba6683de5","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint --typescript lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --typescript --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --typescript --fix"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.3","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.4.17","@balena/jellyfish-logger":"^2.1.22"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^26.6.3","sinon":"^10.0.0","deplint":"^1.1.3","ts-jest":"^26.5.4","typedoc":"^0.20.35","depcheck":"^1.4.0","typescript":"^4.2.3","@types/jest":"^26.0.22","lint-staged":"^10.5.4","@balena/lint":"^5.4.1","@types/sinon":"^9.0.11","@types/semver":"^7.3.4","simple-git-hooks":"^2.3.1","catch-uncommitted":"^1.6.2","@balena/jellycheck":"^0.1.1"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.0.33_1617513213951_0.6541860235395034","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.0.34-renovate-non-major-8a3be60d17f3f15119f8f91374559ef4bcc2def8":{"name":"@balena/jellyfish-plugin-base","version":"2.0.34-renovate-non-major-8a3be60d17f3f15119f8f91374559ef4bcc2def8","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.0.34-renovate-non-major-8a3be60d17f3f15119f8f91374559ef4bcc2def8","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"852b0d02122447332bf56540b0e84baf096550ca","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.0.34-renovate-non-major-8a3be60d17f3f15119f8f91374559ef4bcc2def8.tgz","fileCount":18,"integrity":"sha512-jvvxU0EoduvyYh+XCBqrWM+DNq8fxWUOgToYX9tBfW7vR3lakr3aKCAGjJFoLLP57zASJKe5UFq2LWn045X5Fg==","signatures":[{"sig":"MEUCIQDT3ZLRTOv13hvUPkGBwlnEIRyZfsAOxyxEEabB1gc7EAIgCWKh7IscQbNQ+u3KhiVo33Pqf+kA4jBObZFCT2uoUN4=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":34505,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgaXfcCRA9TVsSAnZWagAAR4MQAKA0r0RJYBZ6AVzVv2hM\nfZYiqZ/BwNXoeMwke8TXZOjKazCm5ey17HBKSgVXFZ1gE25VxaXwOMza0eSO\nsTWtqJytmNUk+rFF+qagBtOk2QXpxVaFCCm/v85Y2ycow89s2EJ7D7+ZHxZP\n5FaRl5LiS6YNGzOI8vwUnacPavzbAi7856aHh77i01zBI6Ty5KRi5M7OTcZ/\nM/9GRubuqNf7XJQdoekitmJc/ssPA6IT6PRfkfpGrtfGysK5XvIfhIlw4aR4\n82HbHrPPwHAjEOPZ2Ec1k1AtZeOtWYCPfosqhIJrbevF9I11E82pM/HQ8I8D\nEshLmH9Tolasrn6NiyxtTOED8rgLwAsQrh61dCGInO2/yIsCK3zUEfO2A8AL\nmpBvC33DEz4cmm0HZCGnBVLX2yylrC7G7BmaX+gxX+nu74KZwm8ekhN34HDi\nULmf+UgMlMIdqZCVDfumvU5qak+SPv3hTr6Su8JqCYUOtf/pN2O6fb58zF11\n6PQbpKXv8Im8bL/tTtJg0eoh/cC5CHik2gaEunajrCLrdomEMfqnLqeZVPjK\nkGyGL1LJFArQm3LNoWQbWYZ0IskSfMvO2QNEADAqg5qaGBugVEq4c0s0qK6W\n/60YhbRLfyOtt5DT+RguWlwP1bwcNzyvoWM/SncEC/gSkK7Ymm8aJYh8x7ZE\nwyND\r\n=Mrft\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\n[![Publish Documentation](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml/badge.svg)](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml)\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"8a3be60d17f3f15119f8f91374559ef4bcc2def8","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint --typescript lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --typescript --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --typescript --fix"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.3","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.4.18","@balena/jellyfish-logger":"^2.1.22"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^26.6.3","sinon":"^10.0.0","deplint":"^1.1.3","ts-jest":"^26.5.4","typedoc":"^0.20.35","depcheck":"^1.4.0","typescript":"^4.2.3","@types/jest":"^26.0.22","lint-staged":"^10.5.4","@balena/lint":"^5.4.1","@types/sinon":"^9.0.11","@types/semver":"^7.3.4","simple-git-hooks":"^2.3.1","catch-uncommitted":"^1.6.2","@balena/jellycheck":"^0.1.1"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.0.34-renovate-non-major-8a3be60d17f3f15119f8f91374559ef4bcc2def8_1617524700067_0.7502584193165862","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.0.34":{"name":"@balena/jellyfish-plugin-base","version":"2.0.34","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.0.34","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"51bfcd71a8514b221af63251c093249ad73f7f22","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.0.34.tgz","fileCount":18,"integrity":"sha512-3exZvwp2as+whDgmIUbbT3w9uI0VTr8sXlCxKnYlJtdqOzAz3CNN/NTtdFoVJ7aRE1vV0MWeC8f6b908w5PAaA==","signatures":[{"sig":"MEUCIQDSuHUa6BmTYcMF5Qq5Hk3o0BHVJtcenCFZpf5D4uZRGgIgaFh3dkOvSonb9JAB3gvthV1IEBx5uB0qKkB1y5P+mfw=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":34445,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgaXjVCRA9TVsSAnZWagAASCoP/jXO5LqAYRCPCxN5iP6E\nyyBEFW7ZEaJhyoDndPiwYYAAp/FoqBDIWK03ZVjPkBuuLiQpJysldOj0Oyf/\nqyXxIKsO6BZOXlawvHMz9C4f/H/2J1cAMeEgLS0upbv0I74h3WDfmbea3SSd\n+LYq1Gr8+vEhBUpkKLFRnxyhpw5xheIPJcXW6wHtzZO5rEwpoMROL969hGB5\nnsNg4n9jmwbCHF0E6TM4yt+Q7rA6bd7bVtFKcbuyIOpcmWyMg4qPxdCtPW1G\nVbfAHZMIt3WuXpLncSy+IMGPK2bqnt0FOT3AfxPULPv2R53J7L7KuEEb0FQm\nIotvZ7i+Tw4f6ky2AVo32zago9QJPJ7LM906c/+rclIzu5IAiXBmYSRvgxfJ\nn0GX4rTrsQcma49O3phaJ8xSFAjHUz0gFxpZp7zg6HssjAEHTrwTrXeDl0QZ\nZSBebKn+93KfYreUZ0m/J8Qa1KJvokWTSYbbl1kPYjHqF8RcBiShypMKKKhX\nM3GT2L5kxG+Q4z9MpS+1uIxgNbDIf83KgGnHwIQ4JiXxk8/YTGPhOTa/aaiq\naQ9dDfRNN7CRxLye9cOEz6Truj9HdX9J6M7+uehtiyJGtK/WqG45Mi7gcV/D\nw3cZjKvU6Dsg78nKV8qI+MtGg0lPFNEyPQur4Np7pjbnBx7pY7su74Aex5YE\nFG+z\r\n=+yIw\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"1781356c0c614d3202039f31accc30ba215b3d70","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint --typescript lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --typescript --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --typescript --fix"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.3","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.4.18","@balena/jellyfish-logger":"^2.1.22"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^26.6.3","sinon":"^10.0.0","deplint":"^1.1.3","ts-jest":"^26.5.4","typedoc":"^0.20.35","depcheck":"^1.4.0","typescript":"^4.2.3","@types/jest":"^26.0.22","lint-staged":"^10.5.4","@balena/lint":"^5.4.1","@types/sinon":"^9.0.11","@types/semver":"^7.3.4","simple-git-hooks":"^2.3.1","catch-uncommitted":"^1.6.2","@balena/jellycheck":"^0.1.1"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.0.34_1617524948692_0.789976190062222","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.0.35-renovate-non-major-7fc48730f49bf5eff307c5ce6a4130353faf2054":{"name":"@balena/jellyfish-plugin-base","version":"2.0.35-renovate-non-major-7fc48730f49bf5eff307c5ce6a4130353faf2054","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.0.35-renovate-non-major-7fc48730f49bf5eff307c5ce6a4130353faf2054","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"b73566a5b10fbc3f9f7e4f403c4fe5fb9476955c","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.0.35-renovate-non-major-7fc48730f49bf5eff307c5ce6a4130353faf2054.tgz","fileCount":18,"integrity":"sha512-vpcmHs40PSDBS9t/CfaBuSaAEkZzBD7Ej8AOBWnKt/pXTQcFT7qPrrsqtbMmh/7/d98p7vMWIU99XmgtKPeO4g==","signatures":[{"sig":"MEYCIQClrQ9ru+jnDuJc/TPGp82vtudinKgDnMkLElu/lqGx1AIhAM/CvDt69E6fQPw1ZwcI4t8uAk1RSIALNGOX4PtzWUaI","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":34607,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgaYYhCRA9TVsSAnZWagAAAnwP/jrGv9gtVj1YY37jYGae\njbEd3XiKCOATFECr4tTR75qYOhdSDDw7itSlsU4DYjgfAot03nhSfRyqGBTi\neAzpvP1sGI8mGi5yuVhZxAwb1jUZezUob3wQQHpqWD1ir1QAQDnEs3oaRxCr\nb18nI1bd1vQVzpYgiT7/pn4Boa6kZiAqiEDqymmsvslCzotgcWW50FQWRXcN\nrkUh2MPg43L5rjNMhjmMy37sDmXwZxy9TZl/4V23g24dB6IN1Fj9dWaQL7b1\nOx+ElMBZt5AadwhR4Q/pU/l/XfkgxTOWFLT4A7MNPv2IeKOIr+WhUU36XS4M\nOYMhsHoZ7MTLZzhyknbtlpyfURbl3+GIy8+r9YrVGrQ3dMa59h/owbplDodR\n602sZvG7vFx9oJnaVoOw4l/AwzdmVK6MHFlDU6jF86q7a1S08TB2Yv4hnAAM\nOEQjBeaOD22MU4kwQUitQMHeaWbST3D1R6SbqlBN+NLb0Oi+QrI+L+V4oJLg\niB2S8ERz9NcMdl9JGOp7j9rNb8X8mUrto9LgmekftK8h5tDlIzswWRYBYUeb\nq2KuA0BgOLY9O/AiEdGu1mbEOJKVfxnQj+GpIApdL6f6sI5az11ogRBxRQ9U\n/i9cIzDJS3228uYihmQ0rvbkj/yi6ibxchN8Cvgxqc075F2Rm1JBfOfeboLZ\nlh6j\r\n=QqQW\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\n[![Publish Documentation](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml/badge.svg)](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml)\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"7fc48730f49bf5eff307c5ce6a4130353faf2054","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint --typescript lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --typescript --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --typescript --fix"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.3","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.4.19","@balena/jellyfish-logger":"^2.1.22"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^26.6.3","sinon":"^10.0.0","deplint":"^1.1.3","ts-jest":"^26.5.4","typedoc":"^0.20.35","depcheck":"^1.4.0","typescript":"^4.2.3","@types/jest":"^26.0.22","lint-staged":"^10.5.4","@balena/lint":"^5.4.1","@types/sinon":"^9.0.11","@types/semver":"^7.3.4","simple-git-hooks":"^2.3.1","catch-uncommitted":"^1.6.2","@balena/jellycheck":"^0.1.1"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.0.35-renovate-non-major-7fc48730f49bf5eff307c5ce6a4130353faf2054_1617528352547_0.7186137451869177","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.0.35":{"name":"@balena/jellyfish-plugin-base","version":"2.0.35","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.0.35","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"c7c99ff4edaa3ac6f14c9c0c52823e8b8439cb3a","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.0.35.tgz","fileCount":18,"integrity":"sha512-Smc+TVM42U7I7LHBR9yrHGew8nO7gEpybkoqITlRg+hZGm+ifuQyraBSJ3fbZ5qiPSK4SqthUsqjc5Qc8pY17w==","signatures":[{"sig":"MEQCIEGM9ZM3HhLE5iGyBblSa8gmKN4/oVftN3W387eJI4spAiB28qzPrrwfC5vYsk4ebDNEJIlW6CyuSc6ZEjVmANhC+Q==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":34547,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgaYbXCRA9TVsSAnZWagAAGNsP/0ezDHBv2oUTDWI4TFjg\nuRFkqbzJc41UCREiX47UY4UvjPUMeCEVX0VKKedqTjL9lHinZ6UeYEaD+nEJ\nowm4TQHLIyAGqBcVLrOeitM5rKurZS9SXQx5xm6ok32+CbuxF1rEA/XZs3Ce\nmSGg0eYAFk+vZWz3GyTc5E76+bubA4IbNUKUALkWrLMiEUkZOwJJ7A/E81S4\nSOoqwlC+sZRM91DNecOdpvDMgNmqDb7699T5CZjrti1+sRaAetmz7LkNLK+r\nOH2Kxh0lWWR5Uf8Wh0HnEpGLAvmR82huCOFtX/ZZHlMCzi7xhVVtmDD3/Xqm\nTMHLtwJeQYwx3p4hduSoyhwf9UiIssCX8iak1dBwamDTjcYU8mxJDJaUlRjQ\nnI6CygF05VCiW2+SIINO0iq5JymSBn8yOaO4467fRCn6Ts+5e+gU/jYFFStx\nkwftN2etxrt5UQcje4DacMs1j6R4O8IkrmqITR6cohmt57+v6wp6t16BCEIG\n6yBmFi2Nii2rYtjkfU4jSiS94hqIKbkqKC4dn8rE+KMVYj4zXuX7z9SynnkU\niobzsGQa5C9cbL6fbF6mUDBijx8O/5/e4dq9hxcDqlS2cuigltlXCB6xH01u\nzmOPwHF8xluwP4kd6XDe4rPGlq/gWOGQxkbV2DlW1qHKA3DYeA4G63D5Ddzj\nDNLE\r\n=DHuu\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"996372427ea24f7d3b3dcc4bc6d8a4c285cf2727","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint --typescript lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --typescript --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --typescript --fix"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.3","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.4.19","@balena/jellyfish-logger":"^2.1.22"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^26.6.3","sinon":"^10.0.0","deplint":"^1.1.3","ts-jest":"^26.5.4","typedoc":"^0.20.35","depcheck":"^1.4.0","typescript":"^4.2.3","@types/jest":"^26.0.22","lint-staged":"^10.5.4","@balena/lint":"^5.4.1","@types/sinon":"^9.0.11","@types/semver":"^7.3.4","simple-git-hooks":"^2.3.1","catch-uncommitted":"^1.6.2","@balena/jellycheck":"^0.1.1"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.0.35_1617528535295_0.6388967421481653","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.0.36-renovate-non-major-08de2af5151c837599cfd3245e0635f910735e29":{"name":"@balena/jellyfish-plugin-base","version":"2.0.36-renovate-non-major-08de2af5151c837599cfd3245e0635f910735e29","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.0.36-renovate-non-major-08de2af5151c837599cfd3245e0635f910735e29","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"4b4885a1f05b540ff262bb7700c703a1e780f210","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.0.36-renovate-non-major-08de2af5151c837599cfd3245e0635f910735e29.tgz","fileCount":18,"integrity":"sha512-wVjolUzXnXcHmFiTOqw/cjgnPisr5VBa7B8tA78XclbRN/e/EJNu2NOAXRAJdT6Or8wNyClcEJ5+HavA4QVhag==","signatures":[{"sig":"MEYCIQD3Qve4uMVUEwUSn7A0pCgdFkAmcZcCFch7KvB11g9AwAIhAIxNrxCJ04ytKEiQ4gvv4nK21sP6IZg7yLYMPnzO247a","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":34709,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgaac9CRA9TVsSAnZWagAA66YP/R1e3lViCPCtm0mQ9Dgo\n1vhSE0SScWedug8C3a9Wd89ZNjrbqv/ZH/S/P/Mms0Atruhk+CON/MKlHfHN\nopcoZowwX3Wlyj7DX1fap7Kp2Fz5oBqTqarUf9DMirEu+VT9t9KiwnbDjp5+\n0dqBYsRojT5fdGOsD1zcRJ2tJu39es3mcOimLitif6RVoPK3eoW4GYm9xgSQ\nPXkXlSM2ZIjKXDory91EGQsGyz58njlnHZS2JefhVhvZL9X6fBx/oA9A4aaY\nLirHwNEGIyoDPkC6tdshqJCM8BkT3S6RpQ/CxeGtC2PR9iM+CMNKmaNKLGhd\nbSUc91Jkj+D0qqbqCQRhHpCZvg2FBNHbiQk8bkR4S1QbEuzByns8PA89SDgh\nKD88wn756DuSp29N5bq8kwlXKeZUMUOWOvL5hZcWktZY6uhh44zKKyi/p+iq\nrqVFX9ogzQcqwVi2QIB+TkY/zcea9akP52cOBWjj2t5+J89KJ8zLJVaRmdV2\nChTzDxLIjGJYLWYWzJGpdN/yX4UnGPikh0k614/i+QJdN6nydq5LjI/Gdpmv\ntXcFdhFZSWHaWt8rwks2tyZP7RfuvJEZyZgpqOnBpJZSPyluJzDS+HJs8k/t\ne1/eIRcHb/pOAwjlylbh5RR7MQI60fm3UljTgCUN6HwtQIR+SyLMxCeEVUFV\nwSo3\r\n=LOyF\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\n[![Publish Documentation](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml/badge.svg)](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml)\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"08de2af5151c837599cfd3245e0635f910735e29","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint --typescript lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --typescript --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --typescript --fix"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.3","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.4.20","@balena/jellyfish-logger":"^2.1.22"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^26.6.3","sinon":"^10.0.0","deplint":"^1.1.3","ts-jest":"^26.5.4","typedoc":"^0.20.35","depcheck":"^1.4.0","typescript":"^4.2.3","@types/jest":"^26.0.22","lint-staged":"^10.5.4","@balena/lint":"^5.4.1","@types/sinon":"^9.0.11","@types/semver":"^7.3.4","simple-git-hooks":"^2.3.1","catch-uncommitted":"^1.6.2","@balena/jellycheck":"^0.1.1"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.0.36-renovate-non-major-08de2af5151c837599cfd3245e0635f910735e29_1617536829170_0.7670132090962078","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.0.36":{"name":"@balena/jellyfish-plugin-base","version":"2.0.36","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.0.36","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"9b5e07049c86cceda0fbb6986211190c4ea17150","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.0.36.tgz","fileCount":18,"integrity":"sha512-qwKMHma0Tgj3lYsW8VrZGV6jApMu/DgnoiSrhdb6VqrX0hrEGY9nmgL9ThjUu3uPLeHd2PjBQr2S90d+Hx6msQ==","signatures":[{"sig":"MEYCIQDacuVT5EIi2dsCcID6llFBWvV0wzOIDq2ctYGsZM4WOwIhAPeevKTCm6Bi/V6gdH9YdPm7B0bea2MQFWQmdJahPC9E","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":34649,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgaaf5CRA9TVsSAnZWagAAV1cQAIB5mBsjeaTzfhSWnWzF\nBsUwrzdB+WGxfTlC+UIce945nUXqd2WfQLzHhtRluKnN0gPeWFpgUAEbpQq9\n6VP5FiFrsuqDTeY6dsTRZPa4MGB98mRFaDKbB0aUMPz6UUasZyQWoLwhM++b\nVJK8pyTrfHfT7Sf6fh9sgYFUZOOzfJBD9fNTNUTa0aqpBOKnKJCVCGD5pWk7\nj52AJmozktuz847s+8Gd94136pU85zo/kjtg2uFVo9c87wPMZJKhBNJ+j/rr\n8rDGQ83ZBICDW/+4Tf1wfDzzhzRAaJu9WyvNSX7vJDgVrvdvZSag5n6twoO/\nybxiWy/W1IqXv3oT6N7o/GVNx/1mfXYKN2BCmdagB7XzoMZYovRye7hUmh7a\nCO/S6UvKDJfPbC0JSp0Ij8SWpoTr/wCaLbKcd1dYQ8QMUQcxFcYC24h0csY/\npb7FkfMXh/SGYnKWa/Xf0+LXKhGj0rasL5m0cwFLzxt1HxnSgUV0LOy0rf/P\n2PT+INXIKImcLj6VZ94/k9326TEYvZyYRZ34j5ekp6zICblv5L8zJ7Gz+OvD\n06oKBYOGJBravP9cpHdxjvCHtu1RlyDzT4bZ9ocLeKTdbWZaFhYJxez/RQr9\nWzHemP9OCAFpBcqXMAv0LuMM8uPv8GTI1ICdmxRXBh+72cyObnZxo/h65CuB\n8h6j\r\n=xD+R\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"3c8f26f6919275da7be381dd897e6e0aa2a85626","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint --typescript lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --typescript --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --typescript --fix"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.3","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.4.20","@balena/jellyfish-logger":"^2.1.22"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^26.6.3","sinon":"^10.0.0","deplint":"^1.1.3","ts-jest":"^26.5.4","typedoc":"^0.20.35","depcheck":"^1.4.0","typescript":"^4.2.3","@types/jest":"^26.0.22","lint-staged":"^10.5.4","@balena/lint":"^5.4.1","@types/sinon":"^9.0.11","@types/semver":"^7.3.4","simple-git-hooks":"^2.3.1","catch-uncommitted":"^1.6.2","@balena/jellycheck":"^0.1.1"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.0.36_1617537017305_0.11988823094043788","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.0.37-renovate-non-major-60394e447a31c3de829c8fe6ed9c28856b688ccf":{"name":"@balena/jellyfish-plugin-base","version":"2.0.37-renovate-non-major-60394e447a31c3de829c8fe6ed9c28856b688ccf","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.0.37-renovate-non-major-60394e447a31c3de829c8fe6ed9c28856b688ccf","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"dc468945cfc1034a382dfd4214845605060580ca","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.0.37-renovate-non-major-60394e447a31c3de829c8fe6ed9c28856b688ccf.tgz","fileCount":18,"integrity":"sha512-w0xdMfZdd8+rs8DpAcltnhT3Jpo40G8s3AlwRjmOyiuhNslEhnAj/0hze1fLpNUHoGWJl45Ti8dgJlK2Dx5jNA==","signatures":[{"sig":"MEUCIQDuK3Wv4B7Z9hmssE2+wQWUzNOduaLNGNjEQt4coI5Q2gIgXmbVrxGwLN4udc/RXUhsvE3s2sjpUifIqIWCrfQkt2Y=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":34811,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgbGF0CRA9TVsSAnZWagAA5isP/2QvNaZSMqA0tcG06YGt\ne0ApPgiYjkCTNJ5dHSYj1OBz4m95nTpeKvqV4+7pE+gxfSiHCj3BVj1zwiJ5\n8tHptkxUApDATNLntD3cXWIkhr3gsBLFDnfq57zlrySKZT0EcN2yuwZClCj2\nEOST7DtoyJRUM4eZ1M5h6tXQWq+iqBND1Ma6MQ8WnP8RJRj8SvvRd5FHh0k0\naZwpIVg8QG/MoG9VbUyOuiOOuj8/Ukol+ZO4pitVOdyPEksWgJP6jdepCeGn\n5uwNHSe41BYUE3yQ1L4vQAOkHqQUIZ+ciHN3/h9OsZx6np7ZiDJNoT3P7kEb\nVh2cbV1Zunnj+rZRb+oyTYHWjISH5Kk5nGgzT3/hmUfKanS6D5Mb5V5/RSgG\nVPX1TDE78flMG1SUTy7DYgWMmC9IocG14mRSFtTXmmqxs/oUNVEjgRpdPSZk\nbJU71igD3o0FWF/BVkXoNSa3R/XUqyAstgwm3SzQFcJjjdTA8uCtYJX9c4aS\nCFBqNgT038rtDMdpbDXEJKYGbMwCL0vUNn1LY97lKD/dULBhXRUtSPNghF0v\nN8vwW03bev2HDKY7YOw9ImwhC0RVSQ3kT10VAmKJ4C/5VLcsMUpFpWCQEePW\nsq0nbU0uePTCoieV/e6Vs2V1gNBfQFbYeijePqPtbK8zYfrHxj/jSu+Q/ERF\nqDwS\r\n=rjDs\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\n[![Publish Documentation](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml/badge.svg)](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml)\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"60394e447a31c3de829c8fe6ed9c28856b688ccf","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint --typescript lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --typescript --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --typescript --fix"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.3","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.4.21","@balena/jellyfish-logger":"^2.1.22"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^26.6.3","sinon":"^10.0.0","deplint":"^1.1.3","ts-jest":"^26.5.4","typedoc":"^0.20.35","depcheck":"^1.4.0","typescript":"^4.2.3","@types/jest":"^26.0.22","lint-staged":"^10.5.4","@balena/lint":"^5.4.1","@types/sinon":"^9.0.11","@types/semver":"^7.3.4","simple-git-hooks":"^2.3.1","catch-uncommitted":"^1.6.2","@balena/jellycheck":"^0.1.1"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.0.37-renovate-non-major-60394e447a31c3de829c8fe6ed9c28856b688ccf_1617715571991_0.7688986598004137","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.0.37":{"name":"@balena/jellyfish-plugin-base","version":"2.0.37","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.0.37","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"73f15459598d37f1ed3b693151b78b967333cb51","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.0.37.tgz","fileCount":18,"integrity":"sha512-3YyVqELer25dObU5moaOKfZmUikMUaZpHxJn6SWdreOhdnvbF6nsigPv8ysKC5CEBkLTpC7lezqjCs6xrx9vBA==","signatures":[{"sig":"MEUCIBWksB++kUT+yXtqCL+LeoiG+0hQapu7ZsmGz4qjC+BmAiEA0/+V/uZWo0q1ikxbaCINcMb0uzibBi4NvRz/6qLHgBM=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":34751,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgbGIwCRA9TVsSAnZWagAAHRcQAIvIS9ep8HJLazs8qzcP\nU1JPWJ32wIbUd3Re/2QfwCCiAV2ZE71L8NbSALrEdWEAz9Kki66/kqAfQ1rN\nRbw+Jio/xC2X0+2DgGbqmE6LRuDeyHfhh2ddLAn3vXqHQ14TMN3lASHekP6A\n0WgKXvUAUGP5m8aPC9bebDhK8AM7cYZ7ZtvvOLbjHypLJ4s+GUpljULtHRtJ\n3ojmbtk+lL85ezUX6dvnhqHYn7aDo+qzWBjutynAzkn+AUGZSAR9vQkq11r8\nEnch5hdsAgbmYtz9N/xodhst4MWN2/fFXqkEfBBGMqNjZTMcKxy++N/1TM79\nBMH5/g4CoObjfYtV3oitWd+tzhOzD7+CPmklf/+a0iAGvE/b0HMJ66GQGyp1\ne45iSJYm1LsJSeQmDyCZOUSzKUkDCs1Euan5TbV3o5Zp01j9F8P+W2htL/YP\nbdKY6A0ZXCzskDruybdZxBcIEtiF8RihT2A8LSPlXyVDbME4OyrXtQG3lX3c\nqdEUpK+X7Dko8XKPjUsy3A2IhrEN78OhW45OaqnIf01v9Av6K5QVUkyjXoHX\niirxRB9IkdED+U0E7VyRKnsfUL8Qi9d1msD+/bk8fdMSmx1qjAmdxvHpNhea\nP0QsjAdNn4qGW4cxpuQk8ESgJovvtGgx8FTEQws6UIaTNIlelFt4/gwWWV7/\nVhss\r\n=6LiZ\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"e091f8ae8fa59f053b0435951285c488fc78fcbe","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint --typescript lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --typescript --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --typescript --fix"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.3","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.4.21","@balena/jellyfish-logger":"^2.1.22"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^26.6.3","sinon":"^10.0.0","deplint":"^1.1.3","ts-jest":"^26.5.4","typedoc":"^0.20.35","depcheck":"^1.4.0","typescript":"^4.2.3","@types/jest":"^26.0.22","lint-staged":"^10.5.4","@balena/lint":"^5.4.1","@types/sinon":"^9.0.11","@types/semver":"^7.3.4","simple-git-hooks":"^2.3.1","catch-uncommitted":"^1.6.2","@balena/jellycheck":"^0.1.1"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.0.37_1617715759694_0.7225181474832578","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.0.38-renovate-non-major-7131827dd80240a15c74381b27ba66529937d418":{"name":"@balena/jellyfish-plugin-base","version":"2.0.38-renovate-non-major-7131827dd80240a15c74381b27ba66529937d418","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.0.38-renovate-non-major-7131827dd80240a15c74381b27ba66529937d418","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"16fac9c0d30db80ab72821e0e38176c4a715577b","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.0.38-renovate-non-major-7131827dd80240a15c74381b27ba66529937d418.tgz","fileCount":18,"integrity":"sha512-efZtHM1GZ0PDxPL3GvbxvGiMnC+sUoBOr1AJVY95arAbrluJLS2OuPyRCp/i9dxxB6YXKSpvGnFn+fctD+6bFQ==","signatures":[{"sig":"MEYCIQCXaoH047jwrc6FylrYyA6FMLrCPuI9tkNCPiIJZwpTfAIhANxSEXdfuHGR5NdUPbjqyBJvKpi/hIV/TovXKaaUEOyU","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":34913,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgbHvWCRA9TVsSAnZWagAANAIP/14St/mTpN1Ol07LRGZz\nBVKBwrPyObKLIKD2YO0gkKWf/j1BNmps90TxYOSsfRK13lMvXQERwUQB5pMj\nRdQ4TR8z/tuZTFkKJPTULtJKTNsociRC9o/bVQDOVckPdasSQ3jTb7rFNNCL\nlgxt1YJDQLKkdlXF086Gina+4a8CYmwQYIJ2a+5xD7I+8tvXxV9pQhsjT/8a\nPJ4fhNJ1PdsTvZaxZ2EyEAz56SIBIAmaK3e6yrGydpNpkMCZsLUgj6nbfP+b\nwu9sJMuAb1SaTnt35dXpdtspOyxYJ0pTCB77vK9MTKc9ti33ZCPOUaJWLAJ3\n/W+Tzs1uJGSsw+yeFbyZOATH6wT3JaHNpw/ockOZri31i+v+FGdi4H4h904w\nGe1+zj1dmlFz0nzAjBkbNO7KnnJOhOoXnv8RK4wwvHOjefVRJomyZ9HFsLji\nX6pagvqxNisaV91Mp4nnXJlIo8ZoZ4yjS3zNMSRMTr9FeQ/WgD1qCIPNnBxb\nu+1oOS3W1E/cCPTSU9R6uLI5Vbe9LdKl7haMbQR4AD2q9AG9KKVkyqg62FZM\nRRZ7CWiUJ6mnFMJrEuJ3vnA2K9eVXm36b4vkuWtwRPLXi4XaGPlHVIgvvrRA\n7h0RAtgPHLvw9s9Wf0mKVELiJcPNWMaUbCos8h/I912lz2fkZT93zauzTRFx\nCLf3\r\n=aySe\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\n[![Publish Documentation](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml/badge.svg)](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml)\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"7131827dd80240a15c74381b27ba66529937d418","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint --typescript lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --typescript --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --typescript --fix"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.3","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.4.22","@balena/jellyfish-logger":"^2.1.22"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^26.6.3","sinon":"^10.0.0","deplint":"^1.1.3","ts-jest":"^26.5.4","typedoc":"^0.20.35","depcheck":"^1.4.0","typescript":"^4.2.3","@types/jest":"^26.0.22","lint-staged":"^10.5.4","@balena/lint":"^5.4.1","@types/sinon":"^9.0.11","@types/semver":"^7.3.4","simple-git-hooks":"^2.3.1","catch-uncommitted":"^1.6.2","@balena/jellycheck":"^0.1.1"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.0.38-renovate-non-major-7131827dd80240a15c74381b27ba66529937d418_1617722325589_0.30713823736998713","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.0.38":{"name":"@balena/jellyfish-plugin-base","version":"2.0.38","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.0.38","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"6b904a099f8c58e2551119dcd4370b2aea312697","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.0.38.tgz","fileCount":18,"integrity":"sha512-nPqEXMyFMJWLuaxvwTZF0PAKixP51vz45iELMR64JmMqKBmuG5/augvoKR+1CYTyDdjR+DNWeBlMswUoIAtLsA==","signatures":[{"sig":"MEUCIQDJw6uvZ9gjEsfANiOA5+HenuFQFD8HsqlcEbQu9EVuOAIgd5xit5gYtp5s2svBgAM8TJvmfPa8ZS31MVlVpoFqnsE=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":34853,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgbHy+CRA9TVsSAnZWagAAgUsP/1qsUHjKPpIK+8i8lKaV\n9WfVY6qwXzlqKhMyiIp3hOK9zeIvoLT8Pnp8hvmJbUM/VqhVkq61gvVwzzK1\nl+/8391s9JqBvaQ9pfqkw7WYo4a4109s4N2hTUkGvAOt37i3fRS3L4/HMm0Y\n/rVc9v57wxSLCQVLn0GA5jUGeVWap7Sgw36ZKdhF6Ok9UKOPztVyF8icDUdh\nfRl+FmjAduRwt2+SKaDTttSzrku0JtrnKZAhP+vN56iMTOHiQ8GvPQadUHKQ\nmX+zikPdf5syF8AEaO6uLoP04w2Iduk643wNyVaVVc5vIk9LBtNTiYgDNGSn\neH6Y25506FVfbMKfgNQWVi7AMsfymAs9co6cz/Bdu0NCTpWD5vKbJiuz2A50\ntUrJx5MGtqPHPN9xKLon3qkUSGFYDVpFAXeQ6iN9XyaYBXG+Xp2tidw9h2VS\nbhU/ja7adMAJwTPZ/Ydt2rchUnKzd0+KF3A2RMb0dwYi2jKsvqlz8zGk35Ne\nOzl3iUJpxIlxqi+ooO3sC5YpqjNNR7w4jTe8T8AUINh6HFu90idLQakZKDJI\nxeY0EqAX5hNfO7XckkYlJwWcfla1woGOPDhbinYhmjoJxGBtNOEHYSTj06hv\nja3hVJH7wxY+2R2Al0D5ymYdCtrzFTFBve0BfDMSTLfwv3QKuyB9NqRkG/FM\nTT1u\r\n=9dwn\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"ff15f25e84f7fefcce2678e8360f4092f2d68cbe","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint --typescript lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --typescript --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --typescript --fix"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.3","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.4.22","@balena/jellyfish-logger":"^2.1.22"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^26.6.3","sinon":"^10.0.0","deplint":"^1.1.3","ts-jest":"^26.5.4","typedoc":"^0.20.35","depcheck":"^1.4.0","typescript":"^4.2.3","@types/jest":"^26.0.22","lint-staged":"^10.5.4","@balena/lint":"^5.4.1","@types/sinon":"^9.0.11","@types/semver":"^7.3.4","simple-git-hooks":"^2.3.1","catch-uncommitted":"^1.6.2","@balena/jellycheck":"^0.1.1"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.0.38_1617722557992_0.34340909687087295","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.0.39-renovate-non-major-f8732585616a9b34c967f6bfe224043d664e4679":{"name":"@balena/jellyfish-plugin-base","version":"2.0.39-renovate-non-major-f8732585616a9b34c967f6bfe224043d664e4679","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.0.39-renovate-non-major-f8732585616a9b34c967f6bfe224043d664e4679","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"6c50ff12acf3908eee2035f28c48b55a062895f3","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.0.39-renovate-non-major-f8732585616a9b34c967f6bfe224043d664e4679.tgz","fileCount":18,"integrity":"sha512-qcXsuxqvkCHBeD12TNBOwLz7bjR0Ftu/wT1BjzI1bUgtpXFjKsvGhyRrLt6pwnsICyQ9CG6fWg88F1yKKOtAMw==","signatures":[{"sig":"MEQCICdZf16e7ym4kxMJgGjo7mEfAhPhg7Cf5wpJP+x2VFlkAiA6FjoAKCHn+0KaYmm+T52vGnd+ElUsOxXa3ankhvmFBA==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":35015,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgbK1gCRA9TVsSAnZWagAAxVoP/iI9l6KzLVVUjSHXNPzM\ny5R11ZVjoN9TO6vKL7EP60V2sZHYop730qsSRqeafuYNEgw1HbwgF9oCWXx3\nSfMzpVmjqSMDiS1CPfT3S1lQOQlEdbuxxR89fqAfZN6itnZEXP67AAoTwfr3\n8BXwrtAOTW5J87MzKCQygrd+Df4A+HbT1Q/U0mkYOz+5Pgbu5iMRt+DZgONs\n0WvM2YGVXQcdT0MiRFfJ1PVhu79S0rJXJrZE4DA5q4aSP3avUg7voc7LDfPG\nmV1vad+GysdwUfdMwpyTliOP/4td0o3GToIkVy9lce9Ir5XaXpSOgzfkHYyv\nTFzVhzU3uBhTwmzu2OBZ9/14GKXpU7BoVWaK5k6Tm47XMHvZ9hgBOVNkcfoc\n0Wcg49ZNJulN5UlsxINK16yr8IUdWHWCte1Bx29U3Cp3r+ILdRwhOdYqKGtY\ncrW+Tk7J7qhYo153XG4wGArn1OUbYugWl7lhHBp4AloTTa7GcYOGHVp4eiwa\nP2+QO4uOXwgilyCas8G96Xs2FKZPDNEff/Ra3Hg0QVXVoC2NtDP5WBxqw7gu\nWPDJMRo+UlBLmfZXASUq6KranHaUuyibsifLr2YziftDF3R/vMcrQStwoj7B\njNjFYxvWaJPEBvJDvIvy6tXL5/2/ePFMsxlAqcCdU5ETrJyc+Nov/KhDe7cR\nyu3/\r\n=7qlX\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\n[![Publish Documentation](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml/badge.svg)](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml)\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"f8732585616a9b34c967f6bfe224043d664e4679","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint --typescript lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --typescript --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --typescript --fix"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.3","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.4.23","@balena/jellyfish-logger":"^2.1.22"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^26.6.3","sinon":"^10.0.0","deplint":"^1.1.3","ts-jest":"^26.5.4","typedoc":"^0.20.35","depcheck":"^1.4.0","typescript":"^4.2.3","@types/jest":"^26.0.22","lint-staged":"^10.5.4","@balena/lint":"^5.4.1","@types/sinon":"^9.0.11","@types/semver":"^7.3.4","simple-git-hooks":"^2.3.1","catch-uncommitted":"^1.6.2","@balena/jellycheck":"^0.1.1"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.0.39-renovate-non-major-f8732585616a9b34c967f6bfe224043d664e4679_1617735008297_0.7273095456605385","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.0.39":{"name":"@balena/jellyfish-plugin-base","version":"2.0.39","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.0.39","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"9549ac7c7a2a7497a5fdd6f63d1db671c9c33960","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.0.39.tgz","fileCount":18,"integrity":"sha512-u8HP9PS+fYfbWIIIdz1KZieArUAs3rxZ3afz3vKGrd0m2MizNzIDIGe0pu2cDB/9zEZa9PK8dNWw49ZPV2wOqw==","signatures":[{"sig":"MEYCIQCgf6MI+4kSC+8XdKpke1RxADUCmrXQKOjJRI0a2uE17QIhAPhYDpXM7arLzfMhXu4syMYsjdQhEQu0bG8nyeYtc1NG","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":34955,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgbK4XCRA9TVsSAnZWagAAhZ8QAIfS3t8O3pf49df8ClSQ\n0WF9EZvH9gtUi3JwluK8DTgQGlOZzC+WRDfKLjnNA+Dawgq4agmhiq1bMcjJ\n8y4tskGRsLlWpaeNJuaiNfofrxJHJfhF0WNxx3PpnUXGBbKxMJjj3MWzIBji\nFdtdvVNoHUul+TeQHsXINbj/MWp0bmQuE3BSu0KX7QUpTcXVy3ktEpANbnSu\nrXBzEpJw019DAcKaNVMuR4Wdla44c84MR1FP5iQZo5zrhgNadrNRq6AS+QQJ\nTfa4fEIZuRN0SrA0S395TLbrzmTHha0dZt/OiNm/+G6XSpA648HfKR6dN7Xb\n6FQK/h/qW4FOsADmo8qO2FrDQRCtTzTLMJygbDszv4EMoRYww0QZ8Bph8+Dd\nW9ucWUF7KhL6o9FgI2BGzu+aexEVs6o5uNugY6h8Vqr30diHBhZAislmCQZP\ns9UKAvz6L06zy2qEt6ubIcBigw921B4xZ6btsAJM7eFaENiUzAHJrCxDsu5H\nnwn+3lVZuGUxNo3aCtDFrhP/gsx02Fi01mCgGFniNXBXql1YtkxQp9E20uaV\nJSuM1CIHl0TviWgkMSHj1RB+rP7gWFJDKtcddFtZdgDI4Zrg9nWBv51IbTtX\nL88FlWj7dr+/9WlDoYz5B17zrciOsz7N52ZNOFVrCM6ZV1MRdBO2ObnAzV0S\nqn3Y\r\n=a22w\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"2b0f09dd73b46f1fcf3c7ff54bc390aed504a4a3","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint --typescript lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --typescript --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --typescript --fix"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.3","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.4.23","@balena/jellyfish-logger":"^2.1.22"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^26.6.3","sinon":"^10.0.0","deplint":"^1.1.3","ts-jest":"^26.5.4","typedoc":"^0.20.35","depcheck":"^1.4.0","typescript":"^4.2.3","@types/jest":"^26.0.22","lint-staged":"^10.5.4","@balena/lint":"^5.4.1","@types/sinon":"^9.0.11","@types/semver":"^7.3.4","simple-git-hooks":"^2.3.1","catch-uncommitted":"^1.6.2","@balena/jellycheck":"^0.1.1"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.0.39_1617735190640_0.3961603065214401","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.0.40-renovate-non-major-0b60aeda7a8b85f9ce315efff0765e454e492719":{"name":"@balena/jellyfish-plugin-base","version":"2.0.40-renovate-non-major-0b60aeda7a8b85f9ce315efff0765e454e492719","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.0.40-renovate-non-major-0b60aeda7a8b85f9ce315efff0765e454e492719","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"e6b6df40a209363544ea13e4de230bd25df67e6b","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.0.40-renovate-non-major-0b60aeda7a8b85f9ce315efff0765e454e492719.tgz","fileCount":18,"integrity":"sha512-8QFiZq55rw/oGdYxUIVJDQoOvz30F95sEaNaOGCiVqRwwXk0godCMij6THWUm/Z4P2fp9tar70Y4pAFUggh4MA==","signatures":[{"sig":"MEUCIQC7hlQt6IjYIkHvvMY5+WBM4/9zCw3dqJffl9dxqIAo6wIgBpcy5+25oL/CvG2wNVMqS0xoTb7m/OHl7IfDnoTXTA8=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":35117,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgbLqlCRA9TVsSAnZWagAAl5wP/336gYPauiTiXV5Igq3M\n1DTj91nf+B3nOBw62EKkQqBUAIE2M+YfdiES7eyyJ3A5I59fOuSuim8IhDaf\nlNwnumU8a3m7P9i/ffvhymHRhiaADSSEIJSomlsagTplR3yh+0larc4BLcDD\nA78r1d+itgevO4BqLz4VIpTaBhMxRgczBmTLakpj5X4IUB8P4nLfTeoXpnPs\nGU4x+V4fbiot833Vb7C3mZJ55bCaG/j3Z+ZU9H3NQ/1QTJJQG0w+pwbJzX72\n0bxden1H89041k0H8zC+bgDRSKUA8BOOiRhXpmFcNHkPOJ9buozoiI+XZl3c\neObQoLVKjZuaArUdg9LRpd+a4A+FdPPBbnPnpOyORK3dYsvmykPlAqEzNHJx\nrrEU8i6PbOI6/6pde7jds+35eqyAIUBZNyeWoOxYrwWpWUewxyH/ofnsp6T6\nnS3Iot3n+dlsn3/NkQLeuLLs38P4ITJXL6Qu61oQHU3EggFa2A6UuTsTLl6X\nLjlvinuUXq1lXWkWQte7RHzd3cHyyATv0yEOT5O54nY3PybubwNo8SCl1rq5\nytzaZeyGEB6zfDHecXhBPiViM0msEzAdKjJTF70cmu8WE14RlW5jug/3EfDB\n9LTKsa4jE50OuPHl/3lhx1pEuDU1V0xnWi2DyEWcji7p5mQLhGwzrHZPZpHa\ngLP7\r\n=P7Rv\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\n[![Publish Documentation](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml/badge.svg)](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml)\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"0b60aeda7a8b85f9ce315efff0765e454e492719","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint --typescript lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --typescript --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --typescript --fix"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.3","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.4.24","@balena/jellyfish-logger":"^2.1.22"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^26.6.3","sinon":"^10.0.0","deplint":"^1.1.3","ts-jest":"^26.5.4","typedoc":"^0.20.35","depcheck":"^1.4.0","typescript":"^4.2.3","@types/jest":"^26.0.22","lint-staged":"^10.5.4","@balena/lint":"^5.4.1","@types/sinon":"^9.0.11","@types/semver":"^7.3.4","simple-git-hooks":"^2.3.1","catch-uncommitted":"^1.6.2","@balena/jellycheck":"^0.1.1"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.0.40-renovate-non-major-0b60aeda7a8b85f9ce315efff0765e454e492719_1617738402706_0.9084190803905572","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.0.40":{"name":"@balena/jellyfish-plugin-base","version":"2.0.40","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.0.40","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"05e2cf8136ede30e5837a6d211018967bc66c1e4","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.0.40.tgz","fileCount":18,"integrity":"sha512-KBLQDm8mtgvwovVOg34u8rOYv9GsbG80SnLMvIOlLCR+dtj+1xLI6scjumUNiYW0yAHTogrIGHX/wzZUPaZINw==","signatures":[{"sig":"MEUCIENGbtW/1qkjcA9NqvpV/uLfrj8xV3BrpWmU+nYB5wO7AiEAhymlSXBGUi0C2cubzW7auyMeMAeI51gCGeM/cUA4SSQ=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":35057,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgbLt8CRA9TVsSAnZWagAAVoMP/1bebmsH2IizzTk6XSXZ\nKdUGx/H0YmKZkPyWbKSm/uUTjhr9QXyOHKd92TkLfg0q3eebPQBX+5u46eEw\nnoBiItYXQAgfyFcHcgmJS8TMSzlRKfWQFk9u22o5+4Pfonk5savcdAOXMENl\nZC4iepO2gWsiOYSlYeMoy2+EI5VwMW+Ajf6gDLmhA89LvzWpQM9GcdqNUtuS\n7Zz9ZYni13es9LvC5XNZl3ZDW6uYhIRQx823KmnqKdD0J7bUcCtrG+KeHutz\nDul3G0EW3abYWcjZT4DHhx4Qf5WxhB4prf3FHScxpx2+eE3NY5rxgoqrrIiT\nxbma5id0dys3Vg/+2BFUGt3tcJ9Ru6ep8meiu54LPKtXXVK47AQ7dC24/HIo\nwjER8KzXiBxDG12aKzU2f6s83tD5YVtw3ORZucqIaYMckAu6zpOZmt3vDIG+\nHCXyzN+miD7vp8TxXq8Fawepita0FaMiI4Wkx8SPgise2XBN9v9/Vi30Hadq\n1seMjb0lOvsG6JX7yoPUq77e4TNjDXn7B9Oq9RoZpMrphRLByJC5YKflGKim\nzy884KHB5V0F+pSVoukO5EZUoCmJKs2LNXd2epvWDftl/AWQnvHVX4z+t0aV\ngaEKfVii7bD7Tkik6iks85BQB9dZYlBULvpITIzhfZGHCuuxuxsOOjj1/7E0\n4Wii\r\n=uQfS\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"d8a6d58a7f1cbeef05b33c3d43aeee843ae45642","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint --typescript lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --typescript --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --typescript --fix"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.3","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.4.24","@balena/jellyfish-logger":"^2.1.22"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^26.6.3","sinon":"^10.0.0","deplint":"^1.1.3","ts-jest":"^26.5.4","typedoc":"^0.20.35","depcheck":"^1.4.0","typescript":"^4.2.3","@types/jest":"^26.0.22","lint-staged":"^10.5.4","@balena/lint":"^5.4.1","@types/sinon":"^9.0.11","@types/semver":"^7.3.4","simple-git-hooks":"^2.3.1","catch-uncommitted":"^1.6.2","@balena/jellycheck":"^0.1.1"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.0.40_1617738620211_0.49798957834578284","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.0.41-renovate-non-major-a0bb0e120c54254a927b1fa5ee617723cdaff638":{"name":"@balena/jellyfish-plugin-base","version":"2.0.41-renovate-non-major-a0bb0e120c54254a927b1fa5ee617723cdaff638","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.0.41-renovate-non-major-a0bb0e120c54254a927b1fa5ee617723cdaff638","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"816bea96ffb57db85adb381673f4bcbbe17719d1","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.0.41-renovate-non-major-a0bb0e120c54254a927b1fa5ee617723cdaff638.tgz","fileCount":18,"integrity":"sha512-VK/3/YXjSJ5p4Y/AkhSAnkhYj2JU29wbhwwkboLzZ6U5vvYfBl4OS2Wlcss1zWoOA0QkspAZihdz5o0j6x0BBQ==","signatures":[{"sig":"MEUCIQD4Bim6Rp/doDVogpcF9K7rehpH4gjLZcGQfTx9ifVLGgIgOeke0OBdTJDvyJgS7ru3BzlWms7olUQuIXNnBAdwuFE=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":35219,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgbNefCRA9TVsSAnZWagAA3IIP/0kVlUJ8e5W3xcmZ9M5X\nHN4D4e+jr+/NvxPDWp/gYVEQpCRi34UDdufMXFIUizSB/6D6CC6rR9r0DF8c\nkZdnHhYnpb25PmW/zU9usBg5wSgZH7SNIgJiLLrgQVREkr5wb5nS3N2JP6xA\nnx/5BCfZANC8jNDwaEeZwiwsfuKEFwE5vUwvWI2Ivly2f4fqWYXVm5VaekU1\nHIEzA6zKI9mSPVuV5D176Hb6pdw3Q+Fp9B8NsxHg1Q/zqeyRU+sWjqS3/g8l\nvcf4HbJIvRG+7zafPEPOqCZ9jJp3OT9XWn7wYlpfI1PPD0lnuxJLHT2jXGBy\n6zABccMIMinwbqgnPmocQAs3hkLWtBNCChjePxtrARwiGMZ1sppXKUjFDM4/\nWVPv5ZWERWRZ03hsTJEr0Mz2QyXfMMYegnYZTN5mORjDvuC2vWElD5YkKhNg\n/jOcicGtEMecUI+bPjC8S/y8Vin0dupqb74FdIEs0Fm1NDtU+Sg7EuP//3mj\nGZtB2CVgKLP+3Y1dzC0mHEabGvlqO3OOJrp/ALqX+64IWKB+uxsadGrqn/Ld\nt2x8t0Syufo5K5StYmDl4kuiulpQCXwBG8WbazSxznlwlsQPo3M6lkVxspGP\nue+VhD0KtCq804enkHj8K6OL7jRu2AiqpyNfymn2AbTBGCFCj3pOsn4cyGas\nQl3P\r\n=Ip+b\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\n[![Publish Documentation](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml/badge.svg)](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml)\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"a0bb0e120c54254a927b1fa5ee617723cdaff638","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint --typescript lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --typescript --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --typescript --fix"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.3","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.4.25","@balena/jellyfish-logger":"^2.1.22"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^26.6.3","sinon":"^10.0.0","deplint":"^1.1.3","ts-jest":"^26.5.4","typedoc":"^0.20.35","depcheck":"^1.4.0","typescript":"^4.2.3","@types/jest":"^26.0.22","lint-staged":"^10.5.4","@balena/lint":"^5.4.1","@types/sinon":"^9.0.11","@types/semver":"^7.3.4","simple-git-hooks":"^2.3.1","catch-uncommitted":"^1.6.2","@balena/jellycheck":"^0.1.1"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.0.41-renovate-non-major-a0bb0e120c54254a927b1fa5ee617723cdaff638_1617745823254_0.4353991913192139","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.0.41":{"name":"@balena/jellyfish-plugin-base","version":"2.0.41","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.0.41","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"d54a500fa2c22b9bfee6166016dcc3517ef5d4de","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.0.41.tgz","fileCount":18,"integrity":"sha512-5Aj4urDxioATO1ji1Zezp4auz10pMf5unytlVsISV4XMO9UBtlFc3F3TXIOj2z4I4hqx/T4Xirnv+7NhoGpmpw==","signatures":[{"sig":"MEUCIQCuyq67cmeQ9AiN7yb9JGWvdNpBJAPJuNr4a6JxKpfOnAIgW51zjXIajFUDxLokvwrQVx4BNYjcoEX1zH/S0/OVktU=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":35159,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgbNiLCRA9TVsSAnZWagAAiZ4P/j8QKzHoh3PO8AkJVZVy\n5SGg/PEQWJjWJpx3A3Y12MUrG32/MCdDwRICdNpoA/NuL/sF1Uj0TYVT3YAS\nutRnr1dP6TBOrn7Go8wk4AI9PTrJsgSmXO4TA9cNdjU2q7zSSvMr+Mn89E/5\npZscGcREMUi+fnA+RISyZm+EitkJSS8gYpkkSkxvhdh2NCdnJ3EvAETh4sQn\ntvuLosHQAB7cMHW6wdNPg9zno1vtabrXb3Cq0v73ZJdZSjRRa96QI6g5sK0z\nuSXdB37pkZ8QOE1chLx2gSN3zqTlZPf65XdeSyc/PemtlHAWZZE/7bXoDUlu\npTs1FFX6cjalKh3fT+ahQGJl40PaaPjT0Hmo+mJQjwPxterZlCgt8kikG7kS\nGrJkc4YbHZlQ4RBBFzQn+0j8YtZS2ycchqpM8h3rN0nZET7sICrtGXacNNEh\nbqgMJLZOy/lHN/10/eZ7ne9/CrqA5AzJG8R/PTkJKbkyYMfM3MkI4ol/ObYJ\nTyw3TizF4v3Jsuy6sTRODZN4tIBM3dTiLoFnykZoLn/fA0FQpkdlTKHza/li\niAI6k/0T1zCPwdrCE6k8e79EdmB1LzbB2j5Ccxw4s/pChlZ87VoXQdpA+UAt\nJbyh111wpjcexNEUMatdgaFur7XSLv/TBIcBHtWN926oOw7z04/o/V86/VcS\n5qc8\r\n=2DTP\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"0aefec84340db4cc1dd7185883116c2125d88786","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint --typescript lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --typescript --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --typescript --fix"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.3","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.4.25","@balena/jellyfish-logger":"^2.1.22"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^26.6.3","sinon":"^10.0.0","deplint":"^1.1.3","ts-jest":"^26.5.4","typedoc":"^0.20.35","depcheck":"^1.4.0","typescript":"^4.2.3","@types/jest":"^26.0.22","lint-staged":"^10.5.4","@balena/lint":"^5.4.1","@types/sinon":"^9.0.11","@types/semver":"^7.3.4","simple-git-hooks":"^2.3.1","catch-uncommitted":"^1.6.2","@balena/jellycheck":"^0.1.1"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.0.41_1617746056066_0.1969389539212132","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.0.42-renovate-non-major-7f50b3b4eb9057a0c74fe544b98924874e742393":{"name":"@balena/jellyfish-plugin-base","version":"2.0.42-renovate-non-major-7f50b3b4eb9057a0c74fe544b98924874e742393","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.0.42-renovate-non-major-7f50b3b4eb9057a0c74fe544b98924874e742393","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"cebe3c50efb87dde5c63161dbf9dea81340b3984","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.0.42-renovate-non-major-7f50b3b4eb9057a0c74fe544b98924874e742393.tgz","fileCount":18,"integrity":"sha512-DTu4d/AKpKPXzKOtwDudwMQa8MlVZhY0Vi0S/CbGkwCbu+q7mZSUpNX6MXPWhX2T9Frkzv6TY9tG6Hru469nAw==","signatures":[{"sig":"MEUCIAs/PLlMGrqCRq+260zy6h2pmD19rt96JCbCXczmIGIKAiEA8Ww36eIyjuW2n5iTsD3a8kwcIzbOzHiNDlTCmF/BVwQ=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":35321,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgbPsBCRA9TVsSAnZWagAAnJcP/1bCOYvK1rdmPqGu8UZv\nPd3ZWL+gUqrSgOboR1hAv9Y1lAqFGWuHhV47XfmITQKG9Ok5zGKdoXQDX24c\nQwwB7e6KUhwLUo9IMIJOz2p1IbxnF9199hZGSCpsq2C4YpTVTxB7WZuH7P+a\nlJwqovMlxyb2yjJTOiDs3ii0tPy7IXrhUkcQs6MrFMTLMPM6jH4PQHZNVtIy\nR1Lv48iaqLPVIfG1Rola8+ndAN1hESKe1JtRZZtqlUFCPzZWuFDEPfjac4c/\nML6JCUt9OApCO0XBETmSHFommJy2b3/Z8apBkKi+hFY9woisZcySXFzGzDS0\nPM3qpSIqD21RvlDwqCorx50Bha4l6qZiHM9fJSQHEL7EQxnmvc5c41IDOwCR\nR/t8IVVrofbVv+dwz5BuGzz3tGdIrspjK9bICVhUpLIuY2AWDigD55B7ukKj\n2a9nloEKIJOZd+52BoLnTHs5fv9WlBxcskZeFectdiTqInxy/ClSTJ7bnZum\nVNrDOtgVLq3ah6ez7dPq9a67u0U2VLmeRv4SNmtmIidhPuiJaUXhC+FHTOA9\nD2E1yzbMaX5sbpczAeRwAEhCco+6ETeLvr5litxUKoOf+QoNCVEzYUPIJD8x\nZM0qcnWkEKolQAxqTnYEKc/WkOcW85D7NsWGhtltoi/Lk1kLozi1lxmbjvb8\nKu6U\r\n=RLwE\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\n[![Publish Documentation](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml/badge.svg)](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml)\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"7f50b3b4eb9057a0c74fe544b98924874e742393","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint --typescript lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --typescript --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --typescript --fix"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.3","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.4.26","@balena/jellyfish-logger":"^2.1.22"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^26.6.3","sinon":"^10.0.0","deplint":"^1.1.3","ts-jest":"^26.5.4","typedoc":"^0.20.35","depcheck":"^1.4.0","typescript":"^4.2.3","@types/jest":"^26.0.22","lint-staged":"^10.5.4","@balena/lint":"^5.4.1","@types/sinon":"^9.0.11","@types/semver":"^7.3.4","simple-git-hooks":"^2.3.1","catch-uncommitted":"^1.6.2","@balena/jellycheck":"^0.1.1"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.0.42-renovate-non-major-7f50b3b4eb9057a0c74fe544b98924874e742393_1617754880617_0.34564475555118634","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.0.42":{"name":"@balena/jellyfish-plugin-base","version":"2.0.42","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.0.42","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"8590eb115a59c449992c578f9d578a577dad5f6f","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.0.42.tgz","fileCount":18,"integrity":"sha512-6Jw359fCvIBcp/MkwhEtfT5c77XZLKIKG1Xawzu268OhTEsi+27NmBGjaPf5fMa6eKi7Kz0ofHxPiAHzpPQZKg==","signatures":[{"sig":"MEUCIQCJjaVWKmkxrCE37Ts7XrSetFiERo7fjmKgoYBrD/by7QIgIsuz762A0mxVF6jCJXX2TSC7R0pFN63+gm5QKvGDnpY=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":35261,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgbPu8CRA9TVsSAnZWagAAXP8QAJiywzhPJh7BsmPIXY9U\nZy6PDBL/TA/xWbbQq9vJdHqof+j9Ge8//XsSCb95oR78tIPUHxZiaUQVe3Ey\nqo6tPl16iY8Hjkw0fnGF/6HWDzsxc0SCBbXxZF7C2auQRLTUj5v3Hv7iq8Ab\nk4pr9b4UQdKj4CWRiXsD5sL42bntfDoTcv79GQeef6RIekvavd1Qh/04sqTq\nVHP7C4jkmlaXhgH/KJE++oqrvuiYKq/CxlzQcPbs7AzzQ5x+ulJUp4cgmfWH\nKlFmLRTFtZSwmYKoOWL0AznMvaIMdASnZRJmCLpWSIYDAOFlsR1L6UAImeX5\no2Y3Cm+W6dc4SIS16KQ+ZSna1HHbxesz0f+haIe5inbGG9HX70V/LW7kDhMK\n6Z/u6v01mQfgs1SZWAxpJ6/rUICKtBzFjgU9NOK+YpHcRvqYpLG2JJWENUUH\nbRPX2iym+nDz+28cLGKRhIeO5knLgIgesJHPqJ29UGg8GrSKTd13uZbHnxBt\ne4uqQuLi2aMQUxgSHlAeSsRew2fTTtkpHgpmD7SFhbT+NoYnfBpraHY5v/Hx\nEvcCZlHe8YuV9oVewHlleM+S2FjANGVP10qMX9Pu4SLu8TE3KoQBc2hiUmhn\nhB2wW5EQU/pgnx32beJsot0dBDKoSuy7VPUiuHs2Alga1mcFHOgr27bXTX59\nPVSp\r\n=Gcf/\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"69a7b0e2967486ed0d349ac75ed882bc929c7275","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint --typescript lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --typescript --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --typescript --fix"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.3","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.4.26","@balena/jellyfish-logger":"^2.1.22"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^26.6.3","sinon":"^10.0.0","deplint":"^1.1.3","ts-jest":"^26.5.4","typedoc":"^0.20.35","depcheck":"^1.4.0","typescript":"^4.2.3","@types/jest":"^26.0.22","lint-staged":"^10.5.4","@balena/lint":"^5.4.1","@types/sinon":"^9.0.11","@types/semver":"^7.3.4","simple-git-hooks":"^2.3.1","catch-uncommitted":"^1.6.2","@balena/jellycheck":"^0.1.1"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.0.42_1617755067841_0.9818873970659705","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.0.43-renovate-non-major-d08d9dee316ec23733e85dc40a633a06335c9563":{"name":"@balena/jellyfish-plugin-base","version":"2.0.43-renovate-non-major-d08d9dee316ec23733e85dc40a633a06335c9563","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.0.43-renovate-non-major-d08d9dee316ec23733e85dc40a633a06335c9563","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"2979b04f596d1d8c8fd3ef651e28e39a598be6f5","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.0.43-renovate-non-major-d08d9dee316ec23733e85dc40a633a06335c9563.tgz","fileCount":18,"integrity":"sha512-nBQYgLx8wkaHbPWUJMg9Euxf8rKc3kg0r8w8IT8ztPhqZk39KKCzDDayFxr1OIQcflsN8NewY7vvOEO7b1VKcw==","signatures":[{"sig":"MEUCICicn3dVjuEj5TeEMY485Di9azakhA4gOOOXbJjsqW/eAiEAmspq/J8OYepgDkACCYqnsnXa9JOeKg0XQ+g2jvh/eeY=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":35387,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgbg52CRA9TVsSAnZWagAAgtMQAJC3Zk2O2eWCl5EgSyhE\nT/z3R0DJtcQ2NaR/qwFj1R5gE7b+eDKVM0AG7JDbsR5xBBLJ7cNXk3bQxPKS\nsq0zW1cXJfM7fVlh6AvrrI/NGc59MRnoyiDyRQ7kgR6ybYGcRGoGfsAWKQn0\n4STBHQ2Upe7xejyVuBjCtxu4M/sn8pWD6nDZ0stcnovP8TEUEzZQ+VyBT0Om\njndN7AjdrP9dWhqNhFeaSjGPGcFmWRv4Zegy7PSDe5Md5M56HrcCBT+orlNu\nhwdrGuYuq6CqCcalL99YjwNTccJ2gOoMWzKf9CS7mI3wIWMvusD3h7AQz2oV\nNJJRHMIRikTjrm0fMFrs6M5tHQ8/wq7sn21rxGZFyWOS5iyx2OTXiBw6MboF\nqKRdaWkBcsNKcyfAEWOu45hnwkte5Tkqrgx+LyjXZzPmj8XwP5F4/R+lqDZI\n/l5nrJR752lKeui4Pfw50jprn/sLIIEWHZ5TmKk/mXbJ9eBp/EC+Ykf5Llog\nzftP0y/rtzIIaoWX7oIFHwqANWntl90zFx+1k8IuexYIuwkA9pnUFlrrtYku\nd0DTlI7o0qhmH0Q8ZAFQF7kLzkJW66E9MtQSGS+UT9NhS7IzBLu8lTh0rDzx\netyWKePvUc28wE78AzPUnpNKtQfL1aVjeZ7B0xUPjoTkyrNglOXsIr/xqIxV\nEm1I\r\n=XO6u\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\n[![Publish Documentation](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml/badge.svg)](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml)\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"d08d9dee316ec23733e85dc40a633a06335c9563","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint --typescript lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --typescript --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --typescript --fix"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.3","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.4.28","@balena/jellyfish-logger":"^2.1.23"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^26.6.3","sinon":"^10.0.0","deplint":"^1.1.3","ts-jest":"^26.5.4","typedoc":"^0.20.35","depcheck":"^1.4.0","typescript":"^4.2.4","@types/jest":"^26.0.22","lint-staged":"^10.5.4","@balena/lint":"^5.4.1","@types/sinon":"^9.0.11","@types/semver":"^7.3.4","simple-git-hooks":"^2.3.1","catch-uncommitted":"^1.6.2","@balena/jellycheck":"^0.1.1"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.0.43-renovate-non-major-d08d9dee316ec23733e85dc40a633a06335c9563_1617825397969_0.13189886093165892","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.0.43":{"name":"@balena/jellyfish-plugin-base","version":"2.0.43","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.0.43","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"e042fbef7ea5eca3dc1cb33a1dab1a36f528d968","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.0.43.tgz","fileCount":18,"integrity":"sha512-vsXKYTNAXnK+tM2JbkWVup6XSPLyULNvsCsCwEooLyzdv4eRx2S6U9TiczpgX1trZxWucU50VJ3BXa3BggjxXg==","signatures":[{"sig":"MEUCIQD+JmiCE0AX/l/ZeevDsDrvh/zxSAsDajlaN/iGQK+zKgIgNvCU660QPejwQI9gL+5jo3MHCLXm4IwIIy+XNMO667Q=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":35327,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgbg9FCRA9TVsSAnZWagAAJWcP/jWw4EuIb18RQpEwW8dQ\nVlbsn51M9xbAdVgYCrKC+W3S+2/7JyGqpE2p1NDPTN3kKl7WppSKwhNt1amY\nw514+njKiYQz6lGB66665weaTFm3oONew9maD3/+5g9ln64LvzVk4nZrCrVe\n1r36Yh+Qj0DU3dY47bMnihhZSOib2QARhb0UANKQgUStKwGZ51y56P29kpJt\nkneih/t8JAtw9is/EM6tQmsquYdPfGqetSSN45MQuvHaKcEw46ObVP+EBjSt\nKP05l5I5/gbpk7c8hFTyh8wwvtqp/87pET36CdfvwqDDIqxCGayZdaAR9wZU\nxX1WRR+d+BCev141iHZqNb4kOv2wrSOdnK0KY1tyCoJArVShsNzf29gecPcm\n6h7dzoJekJCOpck7wOjPTDMsJiWzm2x9Tq70wen+pC+jZDjktmqSryIdqxxK\neJzA8N7LGLG5snxcMohnnL/DT9f2BIj1C+dqIPoTxm9r9HIp5bQI5mTLm0JS\nDlP5LWzEORaVmZ5cYZU/VulcTSOYBJ6sV4cLQKF77PPDywdq5i5R+NVWgRTC\neMOVUz1ASV2szdhjgDqg6awN8z6Ts/I9EyByNrpQbeEhElo7NmtqnH3LKJ8g\nqgrEf6nmvGnxgux1Brz1malgCTxIV87kyPddmxmlkEJpy8VPngP8/rhGbY0K\nNcgg\r\n=pkDq\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"636fa95d04b9db5ea44195b56fd69cd14847500a","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint --typescript lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --typescript --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --typescript --fix"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.3","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.4.28","@balena/jellyfish-logger":"^2.1.23"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^26.6.3","sinon":"^10.0.0","deplint":"^1.1.3","ts-jest":"^26.5.4","typedoc":"^0.20.35","depcheck":"^1.4.0","typescript":"^4.2.4","@types/jest":"^26.0.22","lint-staged":"^10.5.4","@balena/lint":"^5.4.1","@types/sinon":"^9.0.11","@types/semver":"^7.3.4","simple-git-hooks":"^2.3.1","catch-uncommitted":"^1.6.2","@balena/jellycheck":"^0.1.1"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.0.43_1617825604986_0.4730193139561947","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.0.44-renovate-non-major-323da6103eef0196eb06e368c5c4715174a72ec0":{"name":"@balena/jellyfish-plugin-base","version":"2.0.44-renovate-non-major-323da6103eef0196eb06e368c5c4715174a72ec0","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.0.44-renovate-non-major-323da6103eef0196eb06e368c5c4715174a72ec0","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"26a9596e6f4837e56951bdf182fc7297f30c72c9","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.0.44-renovate-non-major-323da6103eef0196eb06e368c5c4715174a72ec0.tgz","fileCount":18,"integrity":"sha512-oitPuSvrm8No1wzFQI3bApFzr49Px2Qf+rXQud89IFEO0U0ikH9/SJxuHNRtx8Jlh4frrsl/0HzWWfWAr7kCnw==","signatures":[{"sig":"MEYCIQCfUaDDK3rIpkyW6tKOBSSxf4UJn0F/id1TfjelEopm+AIhAODY0PRVMSnd/1iqD0mqAEwT8h/aYiIpblH/GxGlFlOB","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":35490,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgbi5fCRA9TVsSAnZWagAA/csP/3W7VhjdA7hwfsAZmkPB\naB+Q6uVvLBndiMg1O7556r6L561ktuhhHJsyGR13oS5UJBZquEzFhRpoCHj8\np+SLPiaC9AKIsQY/jiZDLobA8y1wMHsVjaw28hua8zW5Jm/DPMDfOMny4uQp\nvtOAwLoDPd34O1AcRG/2Lhu/D5DjYDyN9mWqwFMB/zTidPtwqeqeF1V7yOgJ\nb5SEYfjQ+Nlrsp4/WWTx84PUQvd46VPXY9LREZPK6XaqHP/+pJMz5BB/nLuH\nV1rkzkpu/GYMZVm84xQOWtnxPGQFKAA7tdjeY8iiewk6FMWgQdndX8MpJS0R\nWhElURCCNuqYYqHmmu30lI+mT6TPSy7C9lwqnQHJofsz52v2w6vN7JbzMh8b\n1pFjKI3hPNLcY0O359Eeb45qWctpLJHeJ/pF/CXGVAuKNxlwWgZjS/ijC2Tw\nalgbPN6XuXJ4Qi9qFTroxADzLm2Q7HFaUFbqOybPhY0jn/YWsGbK5/tvDhgp\nEBNsu1VwsLdg4hyX29/MtzcBBqqtoV/DF6G1IRbSkKdAvD3F+dKQg2zhUBL4\nzuJEweYczfC49BMyTPsWhYS9PwKj3N6T/rWe1b6ZvhoVo38QlHpil5gymhNu\nRoIn0iTk/vvE04JmVmw47xJiN7fO11tR5Lj8+1QD2EB5ooYIjU5Pto2/WaNt\nzFDa\r\n=NPHz\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\n[![Publish Documentation](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml/badge.svg)](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml)\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"323da6103eef0196eb06e368c5c4715174a72ec0","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint --typescript lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --typescript --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --typescript --fix"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.3","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.4.28","@balena/jellyfish-logger":"^2.1.24"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^26.6.3","sinon":"^10.0.0","deplint":"^1.1.3","ts-jest":"^26.5.4","typedoc":"^0.20.35","depcheck":"^1.4.0","typescript":"^4.2.4","@types/jest":"^26.0.22","lint-staged":"^10.5.4","@balena/lint":"^5.4.1","@types/sinon":"^9.0.11","@types/semver":"^7.3.4","simple-git-hooks":"^2.3.1","catch-uncommitted":"^1.6.2","@balena/jellycheck":"^0.1.1"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.0.44-renovate-non-major-323da6103eef0196eb06e368c5c4715174a72ec0_1617833567313_0.2236557410245985","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.0.44":{"name":"@balena/jellyfish-plugin-base","version":"2.0.44","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.0.44","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"7529826ce161a352353ed324d2def2e5e38cc7bd","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.0.44.tgz","fileCount":18,"integrity":"sha512-W6z5JIyLh2sTjBt/6xI02XDooT1MHoI1ZmU9bfSBkeTcj05E5dPQl6fMZx7wA4eeywhJB8Od+SW1VNaWzSF7pg==","signatures":[{"sig":"MEYCIQCyC8PX4INXfR+Hd8epQfgxJ4otL9aNIFDyxtXooG4sFQIhAJRJ98RHsoSyG33gJZMOFBwhdOYrdhI74jWLYssOgLyl","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":35430,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgbi8fCRA9TVsSAnZWagAAcO8QAIuhYy22fq1cihJx90H7\n5ih/XROmpYCY55b1+JCiaGwzW9xYYziixAS26wBWXJ3YXPHvK13oeH89qSMK\nPXUxnT7DJJf6KjO9Lmf/qoLBmBZgSWzcmMAVwWp+ZgAih/nP9UIqoeMMWuv+\nEPAzYg01K/BETOkXylmBTPRc3RuP4kOOCZv3csWrzPv3/RSVWsSS4/jy0Vxa\nBqQirhOYoaMqb6+NoDpvwdFYo003oniZ60P4m98MQk6vYCIDsunDb7vBqC7u\n1CMZUJarRG/GXzMmkm+js8NslUfNfFkM1zwWhOkjYbDwgYe7gga5YAQX0+HB\no2zBkbq0U4gGaAbDtklKS/bFPafT016gFtaKiEPJ0Kc5X2qzmNTX5UBofo1S\nInSzWn2Gt3nAwKpK4i/z+B2cJTWS0uwjvw98I7rWNk7aH0gOyAmVRVMDwxlQ\njYCMYvTdqw9iIh30Fs7een7QFW7bjBs7yyJH5+CTwxo3ffT4gqPf7++vsWP2\ntgxSWw7/zkJBfqYaAoL4Mn0u4P1WgjGtRoC8iYu2NykQgpdZxX9V9kyMLAwo\nJ20xIw8cTAwfQeY0ut0GQUimxQBrjZkuaii0WF9MWzPoGus8Wd9qvKy0WHeY\nMvd7fkM/GP7apVrsEGc/TTWKR29e96gchGNOb+6P5ptglYFDPo+m90S0J9Du\nw6eU\r\n=r1OM\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"a21a98ef64911fdd7ebd5c3514e35c0b8cff611f","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint --typescript lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --typescript --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --typescript --fix"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.3","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.4.28","@balena/jellyfish-logger":"^2.1.24"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^26.6.3","sinon":"^10.0.0","deplint":"^1.1.3","ts-jest":"^26.5.4","typedoc":"^0.20.35","depcheck":"^1.4.0","typescript":"^4.2.4","@types/jest":"^26.0.22","lint-staged":"^10.5.4","@balena/lint":"^5.4.1","@types/sinon":"^9.0.11","@types/semver":"^7.3.4","simple-git-hooks":"^2.3.1","catch-uncommitted":"^1.6.2","@balena/jellycheck":"^0.1.1"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.0.44_1617833758877_0.7225763353574883","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.0.45-change-pre-return-type-3a45ac68d580810f3fa21368a716307eafa6cc9a":{"name":"@balena/jellyfish-plugin-base","version":"2.0.45-change-pre-return-type-3a45ac68d580810f3fa21368a716307eafa6cc9a","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.0.45-change-pre-return-type-3a45ac68d580810f3fa21368a716307eafa6cc9a","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"0dd0ff5060a9d2794128ea297733ec27d40dfbd4","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.0.45-change-pre-return-type-3a45ac68d580810f3fa21368a716307eafa6cc9a.tgz","fileCount":18,"integrity":"sha512-qhtkPUIta8ST0FTeZn0v6UqOgCldNRlxAs0HysaJc4D5afRRVOJXJWHRT5rPQ0QcBt+IDzwPE22yzGh5WiQ/Vw==","signatures":[{"sig":"MEQCICX3ePI7UoMKmBx91KG0rGCoLZ0jArALPDDVdoy0InbzAiABCFZs2h4JdwY2OTg5UmGWAZ0tJ7iKR/ZsbCbF50u5hQ==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":35570,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgbpPFCRA9TVsSAnZWagAA3DUQAJeezVlcHpUZtZgpPD5B\nZGJFv2jFEVRdwj98lbPr3N1x1io7ohHOGRfjweBSC31XWRmw4V0Mw4pfF9ok\n7GOG5hZpgZR5/NHb3+StQiCi9qHSax1OzyzmpRb2b9crHRXBQXOASNk3WdQ3\nu6vQsOGoNeTPEHRgxeweZ23F3Bnz5ghuF3W4g9xajt9jAdFUS4H/dQLP29xi\nk6Mdvqf86pssp+FjN4vn+W+NcqcbtzB2FLDGSj7TJ9ZV72oJQeetkCLADBfx\nfUxZGdqYpm0Y5/u7Dcq/gc0dDP0VqYsiWYc97VnFmY3PjnUEA8DO91E7gXN1\nPTToirhQe6qdX8ULY1S0zR9pxjO1EmRveFy3OGWVWv5XEv0GtAdlJnMCI+uJ\nQA9X87ArJtECBv1zKTZMFfSbaGN2qb1VMlhq2suxf2k73YBhuULcwHoqhByO\nuY+XHMhbJ+JGiliIxChYTrNut6+3AMgmvZbXo5mxiu6Eaw633bhtwVdjo3AC\njKFNDAVv8LlG+lKos3RiJXuf+bf9GeUQhC+3cq440vpyB5L+QUV3LxEB44Hi\nqd/XjTuWfXRBFMtSzxvw67b+cOsBBtBmwBe4TS0Aeya4q3V6mlVTbx9y02bd\n76bRSJPK/ggGN10XWC+jgoDU9wHoV+Mx7Ugfto21ILGrLcJHFDdcYscg6GZP\nfScx\r\n=kRz1\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\n[![Publish Documentation](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml/badge.svg)](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml)\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"3a45ac68d580810f3fa21368a716307eafa6cc9a","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint --typescript lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --typescript --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --typescript --fix"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.3","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.4.28","@balena/jellyfish-logger":"^2.1.24"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^26.6.3","sinon":"^10.0.0","deplint":"^1.1.3","ts-jest":"^26.5.4","typedoc":"^0.20.35","depcheck":"^1.4.0","typescript":"^4.2.4","@types/jest":"^26.0.22","lint-staged":"^10.5.4","@balena/lint":"^5.4.1","@types/sinon":"^9.0.11","@types/semver":"^7.3.4","simple-git-hooks":"^2.3.1","catch-uncommitted":"^1.6.2","@balena/jellycheck":"^0.1.1"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.0.45-change-pre-return-type-3a45ac68d580810f3fa21368a716307eafa6cc9a_1617859525109_0.6789924215656657","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.0.45":{"name":"@balena/jellyfish-plugin-base","version":"2.0.45","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.0.45","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"b50c357cfe0d172d22b634bcffbc10e074253733","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.0.45.tgz","fileCount":18,"integrity":"sha512-xdW9ANO35bSAVscWd3GHXB0SHcMCd+W+SFFAfvRvbqGK+WkF5MHp19uKp8S60U86u2yrva/5nVKJye81qhUvSA==","signatures":[{"sig":"MEUCIQD+odTD8cOSj0xcqpoEtVivMJEJpiJWx2PWGSIxEOJxewIgFwGEXhDVDkRBg8v7T5xsDws+SKKxDPjd6n27Gra8g/k=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":35506,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgbpawCRA9TVsSAnZWagAA5/IP/3vlU8JdXra1Xd2x/RyK\nbaQ5NK7W6Kkjq3ObvVl3ko9Xu+ce5pTxeqWAPVsC6hlQAUmVnsqFkQhl9G1a\nWLCE8SNgCz/fttbvvXnqScZg+wMZFD/JPlPi3soW+S1ybFu0KKYKBG2Lgvqk\nMe8jLQxVizQXjFKHNUue1TPPvjM61913T4G+F3uKnTWK9vjVrjQV/lLVPYsq\nawV9T5tXD8PAV0syV0KmU+Bhoq+blGvwxp4BmpbNOOeKTDRpYaLEMtrh51p3\n38kpATFm7i/G/qN9m3X9AHZPYuLUYbObVqeHekWxrqERH8i69EFgVgYjdcUi\nAgUZenaoCxEtkHoP1deOki2E6JOCaH0d+Z4AXScq8yM/+41UAY0JhFfkBm/6\nCmZna/Pk2pq16j7W9U9Ku92vB7jvD7xpfN6fUXATxyte9LeqH7IyNyDkjdWs\nTa+SJ7CIlyDYH4goTRw1qOk+Lq5tdjiqrAd4ZzqzMqwcqvcHl4iGd/yRcPsd\nXETM1KuOuO/qIDcAU4LccztwRQ7ad8Xp4gsUFl+d4SbFTS9oEodAcI3xSikk\n9OMvYL/nA3a4sluUAS8gsJCFY9oYB7LrL/Mhs1wL/70ltDwmXIdyd+x7hKUc\neQAEIoXK/SBaq5ed+/cv52qZ0iV5nCtN3MHW+Zum0514up9W/sW+sswTm54U\n62Vg\r\n=mk8Y\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"4fa3dfc5d88f387875b8c01129526509a183ca4f","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint --typescript lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --typescript --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --typescript --fix"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.3","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.4.28","@balena/jellyfish-logger":"^2.1.24"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^26.6.3","sinon":"^10.0.0","deplint":"^1.1.3","ts-jest":"^26.5.4","typedoc":"^0.20.35","depcheck":"^1.4.0","typescript":"^4.2.4","@types/jest":"^26.0.22","lint-staged":"^10.5.4","@balena/lint":"^5.4.1","@types/sinon":"^9.0.11","@types/semver":"^7.3.4","simple-git-hooks":"^2.3.1","catch-uncommitted":"^1.6.2","@balena/jellycheck":"^0.1.1"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.0.45_1617860272435_0.3548824404947972","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.0.46-renovate-non-major-f1ba33d984bb196fb17c096e5348586f90801c91":{"name":"@balena/jellyfish-plugin-base","version":"2.0.46-renovate-non-major-f1ba33d984bb196fb17c096e5348586f90801c91","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.0.46-renovate-non-major-f1ba33d984bb196fb17c096e5348586f90801c91","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"f0cd6031b6a95553b643910726f911ac1909f299","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.0.46-renovate-non-major-f1ba33d984bb196fb17c096e5348586f90801c91.tgz","fileCount":18,"integrity":"sha512-bqXCX+EV8kDEQsEcnmLL5hEBzh9BKaDM5t+J0Jpd1nP/7kDXaPaYNmDc+GD+Kiyqc+cxqWyF47lvNMvBejWFJw==","signatures":[{"sig":"MEQCIHFXerLWKEsgqfX79NP5lJJX/11qOlhjbjqZF5Ds9Jg0AiBEEu4tueTaKC6RCdzYl8naDppUrqa3cyX9YOomrDv/FQ==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":35668,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgcXdUCRA9TVsSAnZWagAAprkQAKCtuPrcOk3jrsSRQ3kP\nJnWbEsNJny+trp+jWsSrLjd4cQE/9sg5rewEgxNul3tnq5ufWGyNjtXL/f0y\nTb1lzhfqA1u+09IruMwgS+xSv+plungAYyH98Ekb/W3x8KqXHu+bhD3sgA4G\nWTDpxhVBk12qeDbTE9MM/ElGmMlHBbYZhv+0AEB0ZvPC4oRYHLOG1YbMsmlN\nDsDgze8nx2eDtnK9c5TmDze5Ezb/Q1b16JRzDJHkPmkM8yWXb1lC5BnIN0Sy\ndJzGzLhJbqwBgN3/l5Pj8M0GPOwOCDPCZIDaDYkjV6NqnhBGbC5xUpoyiP2/\nEquoCYvA6jgA6trV0Dinwa1aDV4bDIt89s+xbyCrhaVpN/UZhBlUSzvJ7Csh\naDi3xQxq/kI9F3hWNkm+GBigEj7/d9laML9trLspE36dWWhcI3Wk70YvuyR/\nCho4D2/bXV+Z7VncEt8YjuQXPsZxetP0Zk5A8jeeKTdhIrr5B/b0eRQ31sQl\n6zmfzkriNT+6Kn4YgdZxSUXj0L9uk+qu9rPaxxVOF2l66aB5a30Vag8fMsUC\nDg97C8JKROhSChPgH7Gve7bsq2gaFX5WE3IlPl43FxM3H/WLTcDo6YoKnY44\nbRHavyHxFTJZCaPygHZCe15NY0bT6ws6gxbIqOt48uZfX8e737Tuhof9zBKe\nyvub\r\n=xVSR\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\n[![Publish Documentation](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml/badge.svg)](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml)\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"f1ba33d984bb196fb17c096e5348586f90801c91","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint --typescript lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --typescript --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --typescript --fix"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.3","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.4.30","@balena/jellyfish-logger":"^2.1.24"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^26.6.3","sinon":"^10.0.0","deplint":"^1.1.3","ts-jest":"^26.5.4","typedoc":"^0.20.35","depcheck":"^1.4.0","typescript":"^4.2.4","@types/jest":"^26.0.22","lint-staged":"^10.5.4","@balena/lint":"^5.4.1","@types/sinon":"^9.0.11","@types/semver":"^7.3.4","simple-git-hooks":"^2.3.1","catch-uncommitted":"^1.6.2","@balena/jellycheck":"^0.1.1"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.0.46-renovate-non-major-f1ba33d984bb196fb17c096e5348586f90801c91_1618048851851_0.7871580823619284","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.0.46":{"name":"@balena/jellyfish-plugin-base","version":"2.0.46","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.0.46","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"85ae32ab53bd3c31d1f4c0b4d164f622e3e5307f","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.0.46.tgz","fileCount":18,"integrity":"sha512-J9Gd1tGg50vlHf9kIakWrQaZ1Yh71GAn4NTKc6cgYzrFNE/W3GY6zhytFTJXMf7tDFUH8Lafk36T+0l+Z+2HAg==","signatures":[{"sig":"MEUCIQCtz4aJL29/o/vGsit20AZG+hUyYB34RwAkOlhFnTjTCwIgDZ/tbC14F1xWHdHZhY82C5pi+RUSWIzd/JMltYxaXjI=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":35608,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgcXgsCRA9TVsSAnZWagAApicP+wSAB//f6EE5q4BdUZTA\nXeAxnphuXT5m6aFYtrlL85Fma+oBxYk4PmGxj4h5tN+MS3W02IuQWlIY8Uea\nQWXYlhG4tzog1g9yuN8QGo6TZsmx62bIrLzRTfudFzuix8rhnra0F/I4vhTI\nIzCYjHFxSRcWo6A6E0Umx1HVuL7vrnBIxHLGhUWYBQQ/LdHBqsYBAzM7J8aK\nv7gcCfZasQC+xYJAtwWeIctG9kfYd18zyel5DSzMjIT12SCfUh4AaivJeV7a\nta3Txx8AbZt6ODduKjYwHZi1dXeiXNrE4Qhpx9KNY0I4gG2VUzyDBpqRuMOF\nh9BWtO9lW5j8MDBN5/cMX6SI9EG5q9LzgvsZXrkwY0jIXdTq2Jx/PA5A1n64\nAA/BHs/RkRsIn70vSXjNGc4izAFvj8IzB6aojD+h+jlPw3MFDHCi7ogPk//1\nk53oCNsaTFo2hVHtDhvmTdqZ4cskT2p6O2y9sQuPmqKUI5GOZzjQFLw6mj+b\nHj/HoAxfoF9m6bv3gXXh4mYFKLzGVQ54d5QCkAXYoPECg+wEgqLmx7UdNlAa\nZKLED3+NcsPSh4GXz8xLvVmrgBmLx8zEqJO+xxLoVq3bHgcsGJjqppnsQQHx\nR+vB5U4BjjkF2g3fzTTlzm4cdl8p7sxBgwrsg0Bf9NCKX1Qe+CcAaeV4/87N\nWdTD\r\n=JyjU\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"f55b176f1ba34275a79acee5aed37dd031cb652b","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint --typescript lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --typescript --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --typescript --fix"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.3","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.4.30","@balena/jellyfish-logger":"^2.1.24"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^26.6.3","sinon":"^10.0.0","deplint":"^1.1.3","ts-jest":"^26.5.4","typedoc":"^0.20.35","depcheck":"^1.4.0","typescript":"^4.2.4","@types/jest":"^26.0.22","lint-staged":"^10.5.4","@balena/lint":"^5.4.1","@types/sinon":"^9.0.11","@types/semver":"^7.3.4","simple-git-hooks":"^2.3.1","catch-uncommitted":"^1.6.2","@balena/jellycheck":"^0.1.1"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.0.46_1618049067765_0.39197499626525145","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.0.47-renovate-non-major-4e3d976e5600d9350ece39bd92072381c1aa8351":{"name":"@balena/jellyfish-plugin-base","version":"2.0.47-renovate-non-major-4e3d976e5600d9350ece39bd92072381c1aa8351","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.0.47-renovate-non-major-4e3d976e5600d9350ece39bd92072381c1aa8351","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"11cc6d9d195bffbbe7eece3a02890ae772935744","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.0.47-renovate-non-major-4e3d976e5600d9350ece39bd92072381c1aa8351.tgz","fileCount":18,"integrity":"sha512-3IqGgoJEDckNSWySijwVSxg1RAJzsnNMk8GBjqGAqnEx+3DaYtolj/sVswlbR1PUKwJHi0zRzxKxX7iq9pGUUA==","signatures":[{"sig":"MEUCIAtygPnqnzUJtL/YhAm+zWFkC+bAovhGtH8qVLXI934uAiEA63g/cLsHrdkv6a4N2LemHi5Q2idY/BUscNH5csAOAxI=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":35770,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgcZSDCRA9TVsSAnZWagAAcdAP/iKoN6aF2QyYN7E8bLc5\nzZQi5XFefmCMqmBAiAj0V0NyOfIkGTDHx0BnjDcFzAAUcB+N4iRKslSXghZh\n8+K0+jc2IHP1bQd/LQRcESXaZYyQJZ0hyTUZYyNGHbP4p79RhrGu4hSR2QCM\nP5MUmaq3q+IjQ4TZRb5AHx5Kcjgi/jCzvrOjnu8jtpU13hKwzyTMgV0QvSo3\ndqxZfcXGefGbbbWb7iOEOug5oQ9ezYDb8WdyBeMvQKPDKahHVmAurdk2Du+I\nc8BwqO/THmJrnWcifBdk874uK/eOM/fvkEb9c2qlhTpnM8w9olRZq19BAjnV\nUc5LIQVf83QNrt0QS37e1Kg+HAWBmBwtuOOI5FRhf4QNIQVPuZITp6tfXn9b\nwoeYMDDQTb0K02kiAggD1xmsSXEy62uquXFYFr/XpwGidOFXT68qs7I3wnlK\nCOqtZfwFaZUC506HwKrouJU25pdp0v4dL1glifsShpIi0B4cT+mHF5u5uvrp\nrPzw5u9p/0EhieWTv48PvjgKGDgU95X9USELPSnrw2W416uhX39ThxMg0QUi\nH10+nKH3EzzlO364c9NoslELaKkydREX5QUj/0IjgfDQngkN5a8nARhVG/n+\nkJo1cfz/eM86jenk7avOCO4/dpUtbeb1RiVIyDMc52X6Ne5GTynpYtLHsF3S\nyzs3\r\n=uLet\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\n[![Publish Documentation](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml/badge.svg)](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml)\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"4e3d976e5600d9350ece39bd92072381c1aa8351","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint --typescript lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --typescript --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --typescript --fix"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.3","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.4.31","@balena/jellyfish-logger":"^2.1.24"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^26.6.3","sinon":"^10.0.0","deplint":"^1.1.3","ts-jest":"^26.5.4","typedoc":"^0.20.35","depcheck":"^1.4.0","typescript":"^4.2.4","@types/jest":"^26.0.22","lint-staged":"^10.5.4","@balena/lint":"^5.4.1","@types/sinon":"^9.0.11","@types/semver":"^7.3.4","simple-git-hooks":"^2.3.1","catch-uncommitted":"^1.6.2","@balena/jellycheck":"^0.1.1"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.0.47-renovate-non-major-4e3d976e5600d9350ece39bd92072381c1aa8351_1618056322731_0.6317245880556281","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.0.47":{"name":"@balena/jellyfish-plugin-base","version":"2.0.47","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.0.47","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"81c6c7165ae60a129d12369d10efeb9061f362f7","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.0.47.tgz","fileCount":18,"integrity":"sha512-WwOy1t5r4gHojF+m+Pu7FxBZ1MhZc0lAFb0sbrrhSoUJtEU1fDr7pU9dBPxiwlQj/qqQ5s+Jv2PW7o6zXPQ05A==","signatures":[{"sig":"MEUCIQDAj1Sw71E0ZvPnORe7E5+ivn02I7uQdsZtnB9mD98rNwIgIkzGG/hwCj2CsUyJgAwWNyGgjmKO6/aXiOb5uSBrwEY=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":35710,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgcZVXCRA9TVsSAnZWagAA7AAP/iei2t2AP4N7LH+el9TR\npcnZtOwdk2N5XC2JkRXSSPEYb/lWCHHYFS/YYLCQWhGeMqUONNejPHyskQDR\nCrZgX+zdLmgjlHVxTnarBJG6in6y7yf/jinm3uCYnVHqvHhFFf9lYGJMR6mq\nfNXgT/10+gFqMVMdf3Yw/x/hbQl1BKJJ3yh1D7Op7Aow7voJ7Ry9ZjKqZ92J\nqRcVA9YxczKh9Q2Smq0l6YeKxVrWk8bn/mn/IBpY/bg8Nbs6kVSe5f8/eeIy\nWZEbYzFw9r3ome28dgvPZeLchCMhUiJsc5aLEPw4n6GGrBlc62twOzM6+ihW\npkBOwPsSxrNTp6eoFpwSlFwPrQsw4hE0BuI/K3JqYtZ+XOkm1msp8TWwwf0G\nKZzPKBqbjoAsYboWbOQJ658K20qVJ80cK4yHTqnGmyeKny/tOtnxKUT4Gbvo\ndgV7UJg86hTNj6hi9uzw7TIKlS+3AEqL5m7jv2QkZD74Z2aYKhhB6UCBRcao\n9EwaYB0SGJelhaw6TKCjbPQxuClEWOzcEGyETe7bWcKEXq+fWMOAB9aS4lov\nNPrg+2vsD4SCTKlLirHLwvdcvYq1KrqISoZfQtkxfzv9rPBDKlJco11Aa+sQ\n8Wz8L42jl7eOcd2VGYilI5d0xEr2aIChDymbCWbnC0iewXuP/WxzImXt594X\nUTEi\r\n=+/jf\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"afafb009381f8b49d31cdb4b1f3d48def59cd97d","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint --typescript lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --typescript --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --typescript --fix"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.3","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.4.31","@balena/jellyfish-logger":"^2.1.24"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^26.6.3","sinon":"^10.0.0","deplint":"^1.1.3","ts-jest":"^26.5.4","typedoc":"^0.20.35","depcheck":"^1.4.0","typescript":"^4.2.4","@types/jest":"^26.0.22","lint-staged":"^10.5.4","@balena/lint":"^5.4.1","@types/sinon":"^9.0.11","@types/semver":"^7.3.4","simple-git-hooks":"^2.3.1","catch-uncommitted":"^1.6.2","@balena/jellycheck":"^0.1.1"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.0.47_1618056535346_0.4986011014553402","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.0.48-renovate-non-major-dd7003b49269f4d1ea2ae34f969a3daff1c06a67":{"name":"@balena/jellyfish-plugin-base","version":"2.0.48-renovate-non-major-dd7003b49269f4d1ea2ae34f969a3daff1c06a67","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.0.48-renovate-non-major-dd7003b49269f4d1ea2ae34f969a3daff1c06a67","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"46650f6bd937e4116ad2a82a73b6f38a77d59ecc","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.0.48-renovate-non-major-dd7003b49269f4d1ea2ae34f969a3daff1c06a67.tgz","fileCount":18,"integrity":"sha512-qZRXJqC+ZTsdMF0Pz9t/bpBxxMGEHUrxFXPrWFeKYbCOIOcVNYjpGf+9tK2YzrJkEwO0o8gAsArFvQ7vKZWhoQ==","signatures":[{"sig":"MEUCIEI/ikbyIc33f6fnI/QXbQRJDV5Wr4rcNuov2mTFku8dAiEAyvTSJg47i4CUx7XpbSW6LblKXrR+y7LZ74k+0Xy7VwM=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":35872,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgccDACRA9TVsSAnZWagAAGk0P/i2wL62HEAkLyv6rcAC1\nylFaSv1wZ6hrEIYV1uGpdGjAvzyxgUSDzYF+Rm6019cZNHmFvFs4SJwM5+nb\nlx0/0tApH6jC4bzkGgyWr0rznXrgJwvUll5StH4VWyXrXZli+rzZpYzNGo9Q\ndGVytgkaQsqdTUC0bzTx1IM1Te9E1gg7+95NIdy9SFHQ79ey4ObpreU856/V\nDoZOLdaKwgl76bVJQlgb8zbzYsSNzcK+cOU2a6Twz93KNoLItaf9pqsugUqN\nC9QZ9cMWhwxDq4bfcziI6VowT7fYD5BOn7DNH0yXRtgJH0viST+M/jtGRxhD\nL4VtAnFBdqGQLasB858l1nyMZeLUICH2nkhfGMKk1gKon38IJuH5wvkiBt1a\nEJ0Q8w3EkAnDc5CrlBDqEsVbZJwMpmIKflZIUpW35J/s5ceeduZB27Nu1buT\nODqc3ghOM//Nji551IpZcm1y/CRZnq/tX4tb1DFlvDri+dcIiCd0b7dHffOA\n3DDGoEPwG2UvrZIgzrsp8zoikkRzkHuX+3WITqkUQW6+Eov5jt3O/ybKzaZ+\n8KxmHX6xUopsBqPMmZQikRCuTFN2OSDl+D7peWvTTNwyQpYhLN2VQu1FBe+P\nzxfC2vk4qlofNg/wFfXd9HOcgh1Ax+w5qTWzvOHhFxoNNQ+TSkkPQjM3gp5X\nbIby\r\n=6WPP\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\n[![Publish Documentation](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml/badge.svg)](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml)\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"dd7003b49269f4d1ea2ae34f969a3daff1c06a67","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint --typescript lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --typescript --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --typescript --fix"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.3","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.4.32","@balena/jellyfish-logger":"^2.1.24"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^26.6.3","sinon":"^10.0.0","deplint":"^1.1.3","ts-jest":"^26.5.4","typedoc":"^0.20.35","depcheck":"^1.4.0","typescript":"^4.2.4","@types/jest":"^26.0.22","lint-staged":"^10.5.4","@balena/lint":"^5.4.1","@types/sinon":"^9.0.11","@types/semver":"^7.3.4","simple-git-hooks":"^2.3.1","catch-uncommitted":"^1.6.2","@balena/jellycheck":"^0.1.1"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.0.48-renovate-non-major-dd7003b49269f4d1ea2ae34f969a3daff1c06a67_1618067645111_0.8365637133710231","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.0.48-renovate-non-major-acee374e935ca7c0a4e3673e245ecdcb7792eef4":{"name":"@balena/jellyfish-plugin-base","version":"2.0.48-renovate-non-major-acee374e935ca7c0a4e3673e245ecdcb7792eef4","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.0.48-renovate-non-major-acee374e935ca7c0a4e3673e245ecdcb7792eef4","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"5e22b46949a53493ef30f75b591151d9e4b7c027","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.0.48-renovate-non-major-acee374e935ca7c0a4e3673e245ecdcb7792eef4.tgz","fileCount":18,"integrity":"sha512-cIFxmzBwq2tGIOF1myuB73MewWf7aptSNdxykYEU3Y3noZuvq4vKxM7VvJhmvZ0WZrBoY2RcYWmf6RIURK3pcA==","signatures":[{"sig":"MEUCIGJk9pMMS63G43PVR4/OUmrcDa6kN3iDw5s7E7kLjTYaAiEA/DzEFF998NxkWrHW1FnH4p033RA1DAisMMX4yyg4v1g=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":35872,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgcdUxCRA9TVsSAnZWagAAV2IP/1C3DIpPszJEuVlTdF8F\nT53G+La1PooY7UBaLSljcqNzDVShYJOUiLQOFmRFubw17Hved4Bp9wkJaHbE\nOujwSjNO89RRdUMr5mIOtjCxfzg4YKHo7DALnRXH0oe8teQWOd9xt+sRti5N\nGbtqffJrHJlC6lMil4xa+dB9XzMqHont0uqxOD9tyiwfuwP+YowqD6bORuuG\npTwvZTqu/ihJrVwoH3D9jGeUIMYsJwC3DxiVZHxPApf7eZMCFV+BwSa37bo+\nPQOAE4aPFs0qegBGZSy3tmTpUoe7YOa/Gtdaj5wkbLKgPax5Tx6KZHJBB4c+\nVk6VbZJ+yujp1m5D4FUb/lTZQgWNCfib2pa7DgYNV8s9Z7nC9989481lNpHw\n31s7Vq0QoZAnteKpuiPwIgfTb8053nwQfFHRpxoxOb84W3JzoBZfsK1gPvv0\nIouSunZVwFaoMsAouzk3RS1BmRwHJ81qq4bHIuFUwcfXunBU+q6I9unIwPDA\noWTg2MpeicXnxzDnV9h4bX5gxqReuyXQ6UPWtL6ZZXvma1vUSyLrljDIvM58\niOwPxJqmh9d7j6YayNAVdLrG8nSZx5In79tJS37EZkX24VUXxBGv/x6oaWWX\n/h2bN0iLw19rUmgJtBNComGHa+8233yJHCchQb1bHzr35sLLWI5s+LMCUwyX\n3DuR\r\n=Izo8\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\n[![Publish Documentation](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml/badge.svg)](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml)\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"acee374e935ca7c0a4e3673e245ecdcb7792eef4","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint --typescript lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --typescript --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --typescript --fix"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.3","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.4.33","@balena/jellyfish-logger":"^2.1.24"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^26.6.3","sinon":"^10.0.0","deplint":"^1.1.3","ts-jest":"^26.5.4","typedoc":"^0.20.35","depcheck":"^1.4.0","typescript":"^4.2.4","@types/jest":"^26.0.22","lint-staged":"^10.5.4","@balena/lint":"^5.4.1","@types/sinon":"^9.0.11","@types/semver":"^7.3.4","simple-git-hooks":"^2.3.1","catch-uncommitted":"^1.6.2","@balena/jellycheck":"^0.1.1"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.0.48-renovate-non-major-acee374e935ca7c0a4e3673e245ecdcb7792eef4_1618072881069_0.2759177108110271","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.0.48-renovate-non-major-c9ebaa50e5f6c1015bedeaa49c2ae39da7e5d9e5":{"name":"@balena/jellyfish-plugin-base","version":"2.0.48-renovate-non-major-c9ebaa50e5f6c1015bedeaa49c2ae39da7e5d9e5","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.0.48-renovate-non-major-c9ebaa50e5f6c1015bedeaa49c2ae39da7e5d9e5","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"97364ea77cbfb6ff5c95b6d0c718dfe81594b7c1","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.0.48-renovate-non-major-c9ebaa50e5f6c1015bedeaa49c2ae39da7e5d9e5.tgz","fileCount":18,"integrity":"sha512-xUXB4eHXqbW5HdS6YPYlc3sHJJMwPBd7ST18exGsvetQwjmMb6YRI4RmAEP32YJwVpzFDyuQnvqsLjqkOKAHqw==","signatures":[{"sig":"MEYCIQCf5HmfQ3sxRNgPyhamossZNWidE3GAuz+hyvkuYILS6AIhAOV0BOO/MoDr3Gox7LkJVuE92eT9Xy9IBzOsbqWyvNHU","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":35872,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgcew1CRA9TVsSAnZWagAA600QAJKqiMHDyWNvj/FPU0fH\nAgrQN64XT6YnCp43K/7SxGUH7xcO0redNsfbp0XCHiEwqk+oSEWdO63SiLRz\nDCgGZQrakva+zd2kI2hHY9vxoL8rxF1qNo0M4sQIVSEEvRPoeukHMACiYi4q\ndb5Gjr9MkzJXS4M1H5XsJj6I5kZLGJ4qjqIxPy5uaS7jVdtAx2tdDD6lPOdr\nncFudmzOyey0ck2MJPDnx7Q+Ru9dppTRsEGT+agNPx0i1YgT0Dmg3zm56Qas\nBd765JNnwNQ4P2Io0354JgSHc3vgt/7uVm5tRxo3RMiLdwWyc89LGreaLiNF\nRs0/JekxyBwJXJLT5JJ1ZSJT7yI3X/y031YGP+JLDD4VzUxZIp27jRnvkxQ0\nhdw1IHo5GL15V/WLJknRr9Nc6Mf4XVG8gchBNG3v/hWTqEcb+nYBcz0X+sfQ\n7zeJJcTyWyaV4ZNv3YCbvkDPDTh3bqWEuJ85fr8owudKRZ5Ad6BqckZ4dXaf\nM94X3Z57Irk+zwu47tQNiiZ+Q02uDwSzZZ6TAVJ6hyYcdMhM5x7i+Qs46Txh\n7Coq2S4Z+2p5WRADQUtEKO4zAfiaQeabggud9BVM8gqbeWP/na7c1O8yyOHj\nWBP5ZZyx3PGfh8/X8dzs05Z+NmunUWdTqiaCYmQtueZSpx3eZB1g1QewVm7e\n7Ec5\r\n=05vV\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\n[![Publish Documentation](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml/badge.svg)](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml)\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"c9ebaa50e5f6c1015bedeaa49c2ae39da7e5d9e5","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint --typescript lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --typescript --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --typescript --fix"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.3","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.4.35","@balena/jellyfish-logger":"^2.1.24"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^26.6.3","sinon":"^10.0.0","deplint":"^1.1.3","ts-jest":"^26.5.4","typedoc":"^0.20.35","depcheck":"^1.4.0","typescript":"^4.2.4","@types/jest":"^26.0.22","lint-staged":"^10.5.4","@balena/lint":"^5.4.1","@types/sinon":"^9.0.11","@types/semver":"^7.3.4","simple-git-hooks":"^2.3.1","catch-uncommitted":"^1.6.2","@balena/jellycheck":"^0.1.1"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.0.48-renovate-non-major-c9ebaa50e5f6c1015bedeaa49c2ae39da7e5d9e5_1618078772596_0.46876995248876563","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.0.48-renovate-non-major-25b70c9cc861ff64cb533d14ce7e460043d0b211":{"name":"@balena/jellyfish-plugin-base","version":"2.0.48-renovate-non-major-25b70c9cc861ff64cb533d14ce7e460043d0b211","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.0.48-renovate-non-major-25b70c9cc861ff64cb533d14ce7e460043d0b211","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"95e96a1b818e4b71c2603bda2213a3240b2e7333","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.0.48-renovate-non-major-25b70c9cc861ff64cb533d14ce7e460043d0b211.tgz","fileCount":18,"integrity":"sha512-QhLbwcQ//1PvUMO8bI/F392JBWhlt6e8iGMvoPlOapHZjndatz3RzsCE8NOvIF9iBdziNEYOIzmUT4hTUMF8jA==","signatures":[{"sig":"MEQCIEi060wPckRhrqo1AFGZNRkxh4nM/9rVE3XOxZsX7oqcAiBiNKP0OWwGwXgCWX2/TEcK9vkEc4Qvh1r2BAYk1KYr4w==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":35872,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgchQTCRA9TVsSAnZWagAAmf0P/i2XXB5xs3sOyKsb26UT\nKO9auw68JV1N3Hl81j/FwLMbruqxLfmunk+Z5r2AbL44U4WP9BoR3yxKgQkc\nextYBgi2R8zSJLEFNftxCjU/T+/Y0Qkzf1N4/INk9sz//v+Zc3/9y7d4Phjp\nJo8AEbb//19EqFyuf5Pel/oRK2Vtj1IkZfxDDdaBn0pLrzrsZZKmfr+0o0gA\nqS1Z2PvdOVh6xrhsLoW2PNvoiG6ZVFZuqNYJVzWtpp2+5iLngM9BF3U62x2Y\n0aqN17awR2B1gNXs1SlQnMY96bfVIUoyd+hYYnDxuWO009sNjf8Y1fpuNYpQ\nHMJ4ElZ9sQ4O+24eITYVimCxDEOQjRQ//9s7i6gLgVX7tHXZQ27rKxv2z05d\nSdZYYJEjm/0pgOf69DXkU/AUbLl5XDdOdUHTmc6g1EDLRRrQtMi/DTTCMaXw\nc/520U5rDyE9782CsqLSfp3AfSd+wpGDV+rmdw4yyqrnIwsSH08V2/4pmpS1\nEDPkSzUPo+xr8OBAwmt38UVKutTF4b0KkPoUd/JV39cL5Yw3nmMiQAyajc9d\nxlKyb26WLvMBPIEhkyzHXuOUekCmKa+QY04DudDrLHbK8EgNvwRw0xBEs4dB\n1VHJwppwNfNljk+h3LEdRNp3pMBB5wDTJhaar37jnOBeylKUTwyx84sOk3z1\nZxuZ\r\n=DMPV\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\n[![Publish Documentation](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml/badge.svg)](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml)\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"25b70c9cc861ff64cb533d14ce7e460043d0b211","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint --typescript lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --typescript --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --typescript --fix"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.3","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.4.36","@balena/jellyfish-logger":"^2.1.24"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^26.6.3","sinon":"^10.0.0","deplint":"^1.1.3","ts-jest":"^26.5.4","typedoc":"^0.20.35","depcheck":"^1.4.0","typescript":"^4.2.4","@types/jest":"^26.0.22","lint-staged":"^10.5.4","@balena/lint":"^5.4.1","@types/sinon":"^9.0.11","@types/semver":"^7.3.4","simple-git-hooks":"^2.3.1","catch-uncommitted":"^1.6.2","@balena/jellycheck":"^0.1.1"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.0.48-renovate-non-major-25b70c9cc861ff64cb533d14ce7e460043d0b211_1618088979356_0.22986207876959486","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.0.48-renovate-non-major-91b607a3e2d4acb03b101231a3b9a4b1351ae5a3":{"name":"@balena/jellyfish-plugin-base","version":"2.0.48-renovate-non-major-91b607a3e2d4acb03b101231a3b9a4b1351ae5a3","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.0.48-renovate-non-major-91b607a3e2d4acb03b101231a3b9a4b1351ae5a3","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"e732bc8cbc11c3df675bdb33b7e534bcda74833b","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.0.48-renovate-non-major-91b607a3e2d4acb03b101231a3b9a4b1351ae5a3.tgz","fileCount":18,"integrity":"sha512-17jobadnK+gFneG8HQqmaQHCJeMSf6jhw1bkmlG3QRLNWRM4p4EvElj1yaduHntADM9nlqJHDmUaUBZzsEZSbQ==","signatures":[{"sig":"MEUCIQD49vlW0O2VVb55E1fW3YUJWgeRmXHITxnALwde1El28AIgI04kcfwS2YiiOb6cymvqaVaPkQuJYums5wECnJGmlag=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":35872,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgciyxCRA9TVsSAnZWagAAY+QQAKSub0RJnDPHnFnMpH1F\nqDWIoBVJhNU6lRlR4ZAfKRCt9y7WTcOfl0+uhUI4d7fcU1hhA7OOM9yvE4tU\nEX45I2KeFR8+CH9laGorykcStqe1hrqDy2PWpQgGPlzDpFcMZzzlc5FtX37x\nInk59qwcegI44VPxkjuQU/AyLMEvaO1qELvu09yyDJOc6mhueRpvA4KgmfPn\nzYXT9KbWjac9Indmf6uu6VPS3x0UbGD/YRCMsn4QGcBsZTq4t5lY23eEnkIf\n9fB7hF1RzlpHPHBtTmgrsSJAAGpXUB3oGMqxaz1JV4KKc5SpjKQpvErXc0dS\nRuz9ekOLTpB/mlJjAiH5nOGOlSrYdWb9hOC2dABfrtJDdzBhHrCshx3VPtk1\nOH+qzml3HhTEYM/wnw6RMWtHQABeraDm+NISVnLEiX5XKhNeV7gxCkVrSjSl\nSiX74H596aFTkEQgg5zDrN6jolDCf9j3s6ZhKg00nteKY4sGR1XyMQdps3iV\nveNyM+4Lrp9dQlkNgOSeSSGmmstH+LkbgdzxAe2Tk/6OFMhMXvMwu5rGj8/m\n7LZT8ehK7AokQHHABNeOFELNUxJBQXOLUISjUBrAUAwz3/Uf6i05mfjGHcvY\nNZUVr8+fejiilTOV7AYqXSLWp6Irdoow4m+yWo7gKLsFgHZW0ZZ1q9/JKd1x\njSd6\r\n=7kHR\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\n[![Publish Documentation](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml/badge.svg)](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml)\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"91b607a3e2d4acb03b101231a3b9a4b1351ae5a3","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint --typescript lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --typescript --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --typescript --fix"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.3","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.4.37","@balena/jellyfish-logger":"^2.1.24"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^26.6.3","sinon":"^10.0.0","deplint":"^1.1.3","ts-jest":"^26.5.4","typedoc":"^0.20.35","depcheck":"^1.4.0","typescript":"^4.2.4","@types/jest":"^26.0.22","lint-staged":"^10.5.4","@balena/lint":"^5.4.1","@types/sinon":"^9.0.11","@types/semver":"^7.3.4","simple-git-hooks":"^2.3.1","catch-uncommitted":"^1.6.2","@balena/jellycheck":"^0.1.1"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.0.48-renovate-non-major-91b607a3e2d4acb03b101231a3b9a4b1351ae5a3_1618095281364_0.09406295653461849","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.0.48-renovate-non-major-d86e873d1557f5a1dc30b2ed640e10eaf3706bfe":{"name":"@balena/jellyfish-plugin-base","version":"2.0.48-renovate-non-major-d86e873d1557f5a1dc30b2ed640e10eaf3706bfe","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.0.48-renovate-non-major-d86e873d1557f5a1dc30b2ed640e10eaf3706bfe","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"927d6b982b127339923f61188d02b4081fa7cf10","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.0.48-renovate-non-major-d86e873d1557f5a1dc30b2ed640e10eaf3706bfe.tgz","fileCount":18,"integrity":"sha512-Jne77D+scp4RAUyG0axZ1kMb5n2eGp+gchRV0i9OPQBi4Dakzq7zhaw2b/lHt8h69gQGoQUYRDuxaLqBd/9U2A==","signatures":[{"sig":"MEUCIFHw9Dfiuw1+WhdJNtwx4OVuAwhMMtQt7mDeMgpOVzzPAiEAig9e12LRbpL9X9A2+RPNo3OrMLJF92SaMrmRjvrgIWM=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":35872,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgckWrCRA9TVsSAnZWagAAjIYP/jWVdYRYKSqQDZouvNMU\n7zpaAj9aBz1kPsWAziPpv4lqOxINN1JjPONqN8T0bJo75kPdftON9R9Veiw1\nRdPFCvB8wkwvayl936UKzzBCD6097II13uncDftbAm2/weyZIoVUx+fXgDB3\nKYu/0kEqWnpSvgIN0g+Nf2tfUa+8gM/50UirwORII4Xug3s75NCf4L1XvSqw\nwovO6YDY8mxN7jPKyRYGpsC/P5kRXh/AwZ3nOpV6NiVb/6iOmVHcmNXnb88R\nbBgx2SXQm+sF8khy/v2O+wlvu+hahbnSr/56YOIyA3fmb17pNSL5JwtvQHo5\n6OUp132yRwwfGozJifwTMufRjZt0bjg1aBSpys0RBHUlMe1rU390pxEuRWvo\nwMWoYLKtbnCh4JbtSqEfMptrFnRlqsmFjI+elUmbakWrY790pAVimoRb6Hxm\n+1QmeXbAk/tnvJDffRM91rhqK1g5WVR9RCZeZr1EhccQcQpL1he2MANA40rI\n87wUd+sg5yoDIocp9cxxpS/bI862Bx1M9jusoq2vLhdr4OEjYpD5rmSn2ZiW\njvTYQcxPx0xICnu9W8mQEAbRxPmO22v8t4WTEl0RnwsdD/SzDm9gQ3cMDiCU\nPIO9psyFYM2S5bKXol01XHn5+vM5ropl+O+97V1jZafTeeUB9sjZy76XUruH\n+YEI\r\n=1pdu\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\n[![Publish Documentation](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml/badge.svg)](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml)\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"d86e873d1557f5a1dc30b2ed640e10eaf3706bfe","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint --typescript lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --typescript --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --typescript --fix"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.3","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.4.38","@balena/jellyfish-logger":"^2.1.24"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^26.6.3","sinon":"^10.0.0","deplint":"^1.1.3","ts-jest":"^26.5.4","typedoc":"^0.20.35","depcheck":"^1.4.0","typescript":"^4.2.4","@types/jest":"^26.0.22","lint-staged":"^10.5.4","@balena/lint":"^5.4.1","@types/sinon":"^9.0.11","@types/semver":"^7.3.4","simple-git-hooks":"^2.3.1","catch-uncommitted":"^1.6.2","@balena/jellycheck":"^0.1.1"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.0.48-renovate-non-major-d86e873d1557f5a1dc30b2ed640e10eaf3706bfe_1618101674841_0.9714636112528761","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.0.48-renovate-non-major-779f02e05e83bb03bbe705038945b25526fffd44":{"name":"@balena/jellyfish-plugin-base","version":"2.0.48-renovate-non-major-779f02e05e83bb03bbe705038945b25526fffd44","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.0.48-renovate-non-major-779f02e05e83bb03bbe705038945b25526fffd44","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"e5e22a6cc3a9541276c1ce6512db1436f8b3d845","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.0.48-renovate-non-major-779f02e05e83bb03bbe705038945b25526fffd44.tgz","fileCount":18,"integrity":"sha512-/hK8T6JrobHP95L99cfMuEkfVpD+ugRiRAFlxNdiZd1vajGBjQG75/tq/7BsPkomfR7tH85j+ie5tHL55dn2OA==","signatures":[{"sig":"MEUCIQDVWDQx5phk952cDV8Jsip3UhbhSvovQwbZwISlUqqykwIgUJXdpmxPdK7aALKqepRB6AuDnTeZtOKXtrrPKXCn2co=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":35872,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgclbgCRA9TVsSAnZWagAAfFIQAJblCRFN4STSFXqIZda2\nA5448JzKh0GtDJDaskBihc+tONmCTXxJo5+qd3GLUDmx994MIizxqjywqd3m\nMv2WXZP6p8+sqiVTt5v8Y7XO6tD1tlchN4/fjCnM4NzPotKj86t5RhpvmZlB\nSBwb3KBslxO4TLjTk/lFKrYc76kRno6nsWP/My2aERoXq4gXAE7z0K0VrnN6\nRp9CAGMgS2tcvJ4PRZ1d2AAJSDgMkPFqrQjIjNB5XY7pDZ7X0grJrWaCjPCy\nJOy/SV6ZFN6YiBV27Asqi2dPyUPobAWS/BeqxBHQuXYyD5cc3Y8CjFlbT7Ba\nknTa7GAxu1LC65zCzu2iEg5Vzoq6FQvKnU72Bt5fdXbVWHhCHU1wIvJrdPVh\npRxaS6Bz1b5+LEroBtcFykaFmKq9Bl8hC78EvnbW0tsUoFB0dTrNilUqLXuv\nHCh/vsqzShggapiPNgZV8+K8YQuDLwpenSOV0vuv62RQ2X7wNABnFrYn/hm9\novMADDq2+8OFU6V67x3xpLD4cAPbrIgucBh/sfqlCbiwgo3w0mw+dQqcA4tb\nc3kZ6k50XQCz41UnaNHRL0GgXx60n+Nswpq8dmGpGCWYioQMHZUCVPNof713\nwY53CkIv38RlQ/j38ox5dl1iqLXJSg0ECfI//vJ91jN/i5E2kLFly7R9IfP2\nQDff\r\n=ZJUv\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\n[![Publish Documentation](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml/badge.svg)](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml)\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"779f02e05e83bb03bbe705038945b25526fffd44","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint --typescript lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --typescript --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --typescript --fix"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.3","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.4.39","@balena/jellyfish-logger":"^2.1.24"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^26.6.3","sinon":"^10.0.0","deplint":"^1.1.3","ts-jest":"^26.5.4","typedoc":"^0.20.35","depcheck":"^1.4.0","typescript":"^4.2.4","@types/jest":"^26.0.22","lint-staged":"^10.5.4","@balena/lint":"^5.4.1","@types/sinon":"^9.0.11","@types/semver":"^7.3.4","simple-git-hooks":"^2.3.1","catch-uncommitted":"^1.6.2","@balena/jellycheck":"^0.1.1"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.0.48-renovate-non-major-779f02e05e83bb03bbe705038945b25526fffd44_1618106080399_0.7452872222258673","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.0.48":{"name":"@balena/jellyfish-plugin-base","version":"2.0.48","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.0.48","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"a8d3576bc1a8144c0e8613e1cb70ab3a455615d4","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.0.48.tgz","fileCount":18,"integrity":"sha512-7aqaEL+NB8kzbd4KR02T/AjWgJbHexi0q3oXDoRcLbxrBGz1HRsYAweuJKumy7KWQtAC5DpZrpmoEgUIOmNFsg==","signatures":[{"sig":"MEUCIQCq1+DTAa3w3wiIo9a6wbLRFIsEnga5gUi8tuyK1pb3cAIgHv9VH6NuDsAIMyIjU6Pi7hZ4Lm4FYEgwNLITpiPDeOI=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":35812,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgcmAFCRA9TVsSAnZWagAAB78QAJswjXO1AG/olmfOHWWX\n3G4gl69P3x4Hu1sbtfWqM7q2zBQDDszs7XpvHr45CbKTrhrS4s86OL671a0n\nAVrd7cnr6ss2eKbZvn9hiub08HjTBLyTQg6rLbRcl94+w+KGKw2zAoGUEXZS\nX69KFMIvw9WmG1yNH0DFpnSMP2xhqYEB6kdmaKJ7rJi08aHqAe5+M9TtLqvt\nENhqXVc2un6S8l+0tg47m3o/zYYQgccHB+7dTOJXuadYQ6GNWEuEesI+PJEL\n8PoqYlcPP0ircLTzZPyLmQ+34CYcQ6u/U39ur6ULaviNqrGYgoVM/37uwbYA\naCTRbNcegwVzVs5vcOygHV5nQtcZHFbSVRBW8gynEA1vyGchb3XzsMNjEv+w\nZv2gCVjUGlh8Xt86hKgha3bbQaiIAYazdzx1dshEDF93RkX7ldz5nEE7ipdX\ny1an1eztEYS7rmGms6emYNUyZ8HwSru8Uv1lV4B1uW5Mr67/A0k/Pf/BdvOy\n2BtS/3BrHo03peF1W3Ck1+gQ6/O5vfk/9ub0/pYFWI90j0ONAsQLKv4R6QsR\nl9IgmIUMpXgiMq5x4WTklxDwijMm+NXNHuakwFcFQOUuVC4YaM3yJmnaQCsS\nW82UezNO+XacycshzrTa6JlkKK8C5TVYqgBOOSPaGUDCU208ORoXkahnsdf1\nr6E6\r\n=bQZ0\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"8fdcc8de3fc95de167ffca5c70d72e294409b938","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint --typescript lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --typescript --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --typescript --fix"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.3","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.4.39","@balena/jellyfish-logger":"^2.1.24"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^26.6.3","sinon":"^10.0.0","deplint":"^1.1.3","ts-jest":"^26.5.4","typedoc":"^0.20.35","depcheck":"^1.4.0","typescript":"^4.2.4","@types/jest":"^26.0.22","lint-staged":"^10.5.4","@balena/lint":"^5.4.1","@types/sinon":"^9.0.11","@types/semver":"^7.3.4","simple-git-hooks":"^2.3.1","catch-uncommitted":"^1.6.2","@balena/jellycheck":"^0.1.1"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.0.48_1618108420505_0.09675268147577087","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.0.49-renovate-non-major-fb89df143786bd6bf5f3f95f6fae0f25335a6fe8":{"name":"@balena/jellyfish-plugin-base","version":"2.0.49-renovate-non-major-fb89df143786bd6bf5f3f95f6fae0f25335a6fe8","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.0.49-renovate-non-major-fb89df143786bd6bf5f3f95f6fae0f25335a6fe8","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"f9c5c04ef346f4faa64df7594ce208500823e8da","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.0.49-renovate-non-major-fb89df143786bd6bf5f3f95f6fae0f25335a6fe8.tgz","fileCount":18,"integrity":"sha512-IUD2VxLfyQvIuXYp7ZqpCkzyS1rNoHM0pvLVcVIVv9RwowSdHKsjMOhVu9NGXRk2GS9ngNC6DqYHPfcVwn0Pyw==","signatures":[{"sig":"MEYCIQDDSVrdQN4KrkOAN63HG5DijgxsmVYkjtJr0fDetE+tSAIhAPp5ytWucjNfFek5L1itlWs0NONf0/o+9F4mAf7qwNXo","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":35974,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgcnVcCRA9TVsSAnZWagAAZX4P/irkuTHUwLvqyOq5wkoH\nyiExptUCH68rNXgpDUsMdDeqKGZUJdVxnYFqTv6FOcxPtArPkctgamfMbMoL\n2AetogAm8mOFEmlUg5Lbk2glaJW9DhUQ//NDurz/D6t/66jdzJRVxJ/5xL+w\n6prWLOt0Je007ftqzOMe1chIA/nK3u/wrMKdlIEo/C0w7bITvOjXn2STqBIS\nythCCy6TmzNOyqXyCo+2dJKlGvthzzjeku+BMVc7O6GOCUqeNsWcN4XgB/xz\n9jGeIdj7/0jihot3ZEJujySWqX3DdyjnfPhx39g1kO3nAN3+8tva6XS7d7To\nagFssSa69yyK1+/6Cui0bJVJ1AMJRe9FbpFcKQS3DwXp/EeMhgJj8c0oYJ9s\nkKNcV701REwlSjuAUmFfp6FSIth5+IRe1Fwk3iD5J8cVgNJ1eSkRnPENI8L+\nvW5fjK+kl921OvikG9/oGX6FNHuO8SOS/bRtmQbUa6wecddWqJoPOeK0fBH1\nqUEb/kAs5GZ6/6pgcCrE1ebygCaSOle4GVIj15qwbdyJEMaLdaTFaHQwAagX\nw2u/0oy/Zja/Zhb7yz1cpA3QM3T+8twH8l8odkH08pGRd0YfXx5VNxYrBzbU\nLFl02WCMIMPvuMWgR8AnGwWR5ij0cvu0eaVkmOU3XvU1MPciRURsmghGZpAC\nM4FI\r\n=1KJ6\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\n[![Publish Documentation](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml/badge.svg)](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml)\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"fb89df143786bd6bf5f3f95f6fae0f25335a6fe8","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint --typescript lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --typescript --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --typescript --fix"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.3","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.4.40","@balena/jellyfish-logger":"^2.1.24"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^26.6.3","sinon":"^10.0.0","deplint":"^1.1.3","ts-jest":"^26.5.4","typedoc":"^0.20.35","depcheck":"^1.4.0","typescript":"^4.2.4","@types/jest":"^26.0.22","lint-staged":"^10.5.4","@balena/lint":"^5.4.1","@types/sinon":"^9.0.11","@types/semver":"^7.3.4","simple-git-hooks":"^2.3.1","catch-uncommitted":"^1.6.2","@balena/jellycheck":"^0.1.1"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.0.49-renovate-non-major-fb89df143786bd6bf5f3f95f6fae0f25335a6fe8_1618113884001_0.039651730503758476","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.0.49":{"name":"@balena/jellyfish-plugin-base","version":"2.0.49","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.0.49","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"1138e03881af87af51b57072edf1cfe2401cabdd","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.0.49.tgz","fileCount":18,"integrity":"sha512-y6Pq3H6ngb6nDVBIud5cZA1mT/yXrwbt+wmgHz3OUpoV68FCLgunoqk8dRmpmOKYQvO70GYAd+AnGn42w0icWQ==","signatures":[{"sig":"MEUCIBtyd7pdICJfa5kSy5HLqNtKLVFlX1BrPN0QyI4HILAxAiEAp0cmuG7Mfqj+PDgsSRdHT8ZrWqdKOK4g0mrhe5rhnLw=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":35914,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgcnZuCRA9TVsSAnZWagAAVZ8P/2O3BlKijd0J7WsHXCpR\nSYDUqxgTpfxefgmuVPKkXXDQsq/YKIBc8eEoTVc5X3aUKF6q+ax808IlyVBu\nU+Fzv5Pca8LbcZWEUY2Tv4oH/o4AXOehFWx1ZTdHHl3S3xROvyf6jawH5GU+\nOydFtRQvVXOKUlg6E1hWiyrzv278ViWf0884WKW8u+t+aLi6/ocndkYZEF+A\ng7DHYf2neQMk8OBGo9IcSvxmZ/r3YOR3GsURXytPDGf87iPOTzvhREF1lZza\nY5XWtu3FjVbTecuIgbhcCRQEwFQBlkxnoqolNHGQGuTp/ParOTWb3LwwwHxc\nuig8FwC1E05rTWrlNkGhpoNxqKlwIimMdWyzikuV0JaglS3yfVAUGwnpt/8F\nl37OegqmFdkpjPJbZf6X+0Bw3HpSCuCjuT3bvRqbiXKvHy8UeHDtrUA4NiYI\nqViMC3ZnxJfYja5MEPSU8CQINYT5Md7EH8KC08R42ryVq059Y44nA6M9jpFx\n+N1L4N3EJBq+kzfV2o3rW6CS6tGFXfYf4jufngsfAbMeygN2vr+uKk3HBHYD\nBeJ8k4yVzzhAAQRyofmSLZ//wmAXExJqUCvm4GBMxDan1WTn3pYB2JI53ooL\nHwiv2RIFHM7T7mmBy2Ad/HO3uZgoUHZbTd/eo2/ILmaD6mOaFQT3wc/554X6\nOOD+\r\n=bvZw\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"35147ae484216571a63071847472f0d7a4fdb1eb","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint --typescript lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --typescript --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --typescript --fix"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.3","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.4.40","@balena/jellyfish-logger":"^2.1.24"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^26.6.3","sinon":"^10.0.0","deplint":"^1.1.3","ts-jest":"^26.5.4","typedoc":"^0.20.35","depcheck":"^1.4.0","typescript":"^4.2.4","@types/jest":"^26.0.22","lint-staged":"^10.5.4","@balena/lint":"^5.4.1","@types/sinon":"^9.0.11","@types/semver":"^7.3.4","simple-git-hooks":"^2.3.1","catch-uncommitted":"^1.6.2","@balena/jellycheck":"^0.1.1"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.0.49_1618114158310_0.847557242274356","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.0.50-renovate-non-major-1415dfe9a675bd0922646caa2cb7499d2ff9f5e7":{"name":"@balena/jellyfish-plugin-base","version":"2.0.50-renovate-non-major-1415dfe9a675bd0922646caa2cb7499d2ff9f5e7","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.0.50-renovate-non-major-1415dfe9a675bd0922646caa2cb7499d2ff9f5e7","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"fa3c22fd94f64f0a3378f2d4948c32637ab56edc","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.0.50-renovate-non-major-1415dfe9a675bd0922646caa2cb7499d2ff9f5e7.tgz","fileCount":18,"integrity":"sha512-FKx2fZaZ5brh/ObPAav6c+HrkBjrhVBGkr3yBOu6c7EzGFv55bRGewsrZipE4Wz7rXCrGBkjlzkCwbOY5XJevQ==","signatures":[{"sig":"MEUCIBdZ0oRZkz9SUd14FU8DuQ0r8PN+GuMGFfZgnMYv0nR2AiEAyT/6ylp2n/pk69ZXjOPajdiNQ8XM81XsqnUr95uRWmY=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":36076,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgcoraCRA9TVsSAnZWagAAkAYP/3rDnWSllK5RJQSAYIo9\nDE1IZ6rFPjU+RLCe/OZonBhU4vPIhtE2S4hR0WahrTsWJcPwa3EbXJ/fJ/ZK\nq1JOspts7ZHw2mYxYOYYH3JR2ZC1RJ5mDGfnqLNfPEM705akeN8jY7iYbmWJ\nXaPrN+zMugNWKkAV5hTDUnjhHVJlBBP9EsheOImEuPsRK8iPdnBT1BV/wWxD\nrOXz91FilYZR1q35SebifHVF6UuKq57r8WiXlZRA3+XsJr/WZMJkvPiIfune\nKhlQWnl4em0Cn3gP7Phe40DAo+EcdjwIEx7S7IdbON874G6deYaoTkdYcWr3\nIqiYQmSQ1z30k9iZOfUVBRyXyx8wiu3/RyPZUHyitaVstH2jV5q5d081k1xr\nzCd6C1M3GIyLOfLEv7SGKSLj389kWvRIpvuRXeH8ydZ6C3Wa37DlXyz5izNh\nlBjOr1NGiY1O1pYvoJpokVzX2Qhpo/njNSUa+9wTvBo/YDDjkMocaNzvhcAJ\nRBxBG7GUkGI8PAiiWzh8DMYui4KznTH0WTjHsgCD2UVMC68j7Sz57kx7j3Id\nsAq2RNXQDug6ep22U2e7pP9+g06Ziq9SQu/dKOgc94DNaM8uxW6c0zou7YNt\nAHlAd+GsMLeqxp44tBAGNcvEMWY9LvVa6kCi04WPVMtRo4pfkHCJjwCswlEz\nd24a\r\n=sSw4\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\n[![Publish Documentation](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml/badge.svg)](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml)\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"1415dfe9a675bd0922646caa2cb7499d2ff9f5e7","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint --typescript lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --typescript --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --typescript --fix"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.3","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.4.41","@balena/jellyfish-logger":"^2.1.24"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^26.6.3","sinon":"^10.0.0","deplint":"^1.1.3","ts-jest":"^26.5.4","typedoc":"^0.20.35","depcheck":"^1.4.0","typescript":"^4.2.4","@types/jest":"^26.0.22","lint-staged":"^10.5.4","@balena/lint":"^5.4.1","@types/sinon":"^9.0.11","@types/semver":"^7.3.4","simple-git-hooks":"^2.3.1","catch-uncommitted":"^1.6.2","@balena/jellycheck":"^0.1.1"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.0.50-renovate-non-major-1415dfe9a675bd0922646caa2cb7499d2ff9f5e7_1618119386288_0.7242443008116068","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.0.50":{"name":"@balena/jellyfish-plugin-base","version":"2.0.50","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.0.50","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"8366317f7ce7520d8b66e0a52b0830a14dd547db","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.0.50.tgz","fileCount":18,"integrity":"sha512-umvXDJ/HKSpRjWIXVNZl0M4eNW6pSnFoewAjDjtQkVGuLt/8a75PGgennbN2JjoC+gEK/mBKkoep2sUFXU6AVw==","signatures":[{"sig":"MEYCIQDId3r7PcyTanR8xB/4j57HL/BpSGqMjlmx5hwDs5a9lQIhAN+knBK4zvIvnbuBiwvGrtmcjG6o6f1K0fJ7t89vrnD0","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":36016,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgcoudCRA9TVsSAnZWagAAJ0YP/2c0FD9Qw8rth1Wz8jIC\n4tzQSHDe02uSKxUomdDX1ZSm+yGrJiA5NdUXo3s0qVBq2aXm79IRFoek7esC\nvGXKDaznR9To1/0Wr6gNt+bYHsK6ucROQc6jmSxWi33P5YKwHWmcOUR384FZ\nRjLld25ImiRK/yMQabZCwEmk3xo1z2jLgrAWrfZ3kYrLcDxlhfweO/t1sx58\nIEAFztXDV3atGoRXSYDZxEVWVtDgUFUiB+jpqY0dk/nO+Sg+ZgkC7hG/A5eZ\nTMWizYLD+e+uCrb5X+5fFoJiebfiyvgdGqk0sPWdvkXyim2aP5yy52hNs57M\n59JiBBudXNWGvePlP24IjkBZuFEblaR/OeyRtaaNbviCkShh1c1r6AEb0PtJ\nmqbwpRQcz7SYDt9TPmB4Rp0HbS1XkLZimObC8162Ci8R5Fu53sLBj45F6lNF\n2gVRmibODIGPGCIaJY+UuQ+hGc3aV/PFKVFeZ0PRchLA6f9YUEL4ukcO37IP\nIUUZymFdLE065s+/wyTHMMd0qpWB50IxEBloV2W0i55FrmAVlZCMX5jR/er+\nJb1YfLF/4JgQSutaaIU3y8GT5OXBhbAtm3q2KHvJWH1KLacUc3utvkU6z7sF\nBWsvvaEwQZ/NkBTycM2sPM9kKfzlASQEpfP5T5lgbiIPLfVThN7VnJ136ZP1\nLgfR\r\n=QasJ\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"04666b8780195bc74b83231733c4d4a3da86cd79","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint --typescript lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --typescript --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --typescript --fix"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.3","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.4.41","@balena/jellyfish-logger":"^2.1.24"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^26.6.3","sinon":"^10.0.0","deplint":"^1.1.3","ts-jest":"^26.5.4","typedoc":"^0.20.35","depcheck":"^1.4.0","typescript":"^4.2.4","@types/jest":"^26.0.22","lint-staged":"^10.5.4","@balena/lint":"^5.4.1","@types/sinon":"^9.0.11","@types/semver":"^7.3.4","simple-git-hooks":"^2.3.1","catch-uncommitted":"^1.6.2","@balena/jellycheck":"^0.1.1"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.0.50_1618119581258_0.4383685248761304","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.0.51-renovate-non-major-f44f3a88e02b2de4cf98c81263798e2496a1b0ff":{"name":"@balena/jellyfish-plugin-base","version":"2.0.51-renovate-non-major-f44f3a88e02b2de4cf98c81263798e2496a1b0ff","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.0.51-renovate-non-major-f44f3a88e02b2de4cf98c81263798e2496a1b0ff","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"4f4c1ac33f90932cc8d68ccc9fc291d986033e25","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.0.51-renovate-non-major-f44f3a88e02b2de4cf98c81263798e2496a1b0ff.tgz","fileCount":18,"integrity":"sha512-R/YgN5AsACVSO24HozI0AG6fQNeaZsMIHYjKjmqzlsWtap8VzdL9SrezZntO3ZpZRLLcEMSXbzNDslGHAKm92w==","signatures":[{"sig":"MEUCIQCdSs1reqgIFE5g6gmNZC23OFpjXDwsg6YR59kPtRW1OAIgS4a/BiFieiGddjOa2jbmDFpqQKXbdXfzbHoNhBe7ums=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":36178,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgcsOwCRA9TVsSAnZWagAAKQsP/2QAL19rqD98jDayvQqE\nq4oupPMJDZdRYXK5K1hIET6pCQ/Kk3niSRuXytc/oCwXzsiJaw1FKkGCpUo8\nt7nY8Z4jLJ4BF3sXNg9QJCqXGNtCbAg+Vl0bHar/XZw/7bGFBlzs2mAy1D4m\nOc72lJtqtLn2FB9LC1CK6BsTXL8zVe68E52pYTrOFP9beil5ff6SA01w4QXC\nzmNryPPfftIwGb6kdR2tjkRxZnRN/abWnPd5q0VtqUeIEQ5+9BqOGjfA1Mbk\n4TUs0stH2rA42JT/Cwxa30Pe0R8lC8KGHy/SbE+LJas87YCAtZfPu3VHx0Ac\nJIe1NSMAkQQ6cIQgvzcsrKkfPpKJ8y2PuP50lFYzx9lIJz0gqGkZ28Hh2Enf\ngJQU+vaBU7QRnmeuhIAMLhYSRwkTTofpMID4lI5Lqjpt/FtrwzDT+utXEi2H\nNNvAUKE080WgTppgCGldeArYseCtZEeslmVso/LyYfrOlu8MGh1JwloRv48E\nPEyioexx3spcpngQSiJvF0571DtfQ3VYsJLKKLVGQh220TRr2W2vVgev6j7t\nsvqTlF94C3LREZ9nqKNEKGwSMPaSpRXDiVWdEoS8NZFfyrQKfkrcACvNO9Ge\nHeCw+d0mK8eJRnyrdBxvTYuc1hc0wWCdWb0IjeYl3DH0VlVsjCxI+XVT6ZQU\ntw4N\r\n=7t18\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\n[![Publish Documentation](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml/badge.svg)](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml)\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"f44f3a88e02b2de4cf98c81263798e2496a1b0ff","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint --typescript lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --typescript --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --typescript --fix"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.3","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.4.42","@balena/jellyfish-logger":"^2.1.24"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^26.6.3","sinon":"^10.0.0","deplint":"^1.1.3","ts-jest":"^26.5.4","typedoc":"^0.20.35","depcheck":"^1.4.0","typescript":"^4.2.4","@types/jest":"^26.0.22","lint-staged":"^10.5.4","@balena/lint":"^5.4.1","@types/sinon":"^9.0.11","@types/semver":"^7.3.4","simple-git-hooks":"^2.3.1","catch-uncommitted":"^1.6.2","@balena/jellycheck":"^0.1.1"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.0.51-renovate-non-major-f44f3a88e02b2de4cf98c81263798e2496a1b0ff_1618133935476_0.9273394783707143","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.0.51":{"name":"@balena/jellyfish-plugin-base","version":"2.0.51","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.0.51","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"f315098328a5e6fc9a3e800c0ecd160a7b69e830","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.0.51.tgz","fileCount":18,"integrity":"sha512-Q3E/BhJ/soYrJxesPN7MTyStIgecwZBxhzilfLYQXwgqVDq+oRrmt3ZA9qmTbp918VnpYPBPBYT8jbSp+luqtA==","signatures":[{"sig":"MEQCIGFBuJwmt4poRRd8DhI9yNWdqgdt1OCko7gv4kHDO/DDAiADOVqt0osAk1qtr4I0zQ1qHgQXFNxgpI0SVRwzcZTRBw==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":36118,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgcsR6CRA9TVsSAnZWagAA2dMP/3YRr1Nmhj6rQkZyCj1z\nuWmmvzINs0Gik4i8PycKqqvjt59XmgzkXu3fHBn+mji0XxbUyLyPjq3RmCfm\nzOgMYq63HKUaqeKlcSSVO79AGMa3x4Cas2aDH4b0IazlniBWgpCGW826azzz\nnf6EPBPx1E1vLIE/gudJNr09szbFC/I3YaEiQS9gwN3a3L061vsQsBLvgYaf\nDsVjb4LmgXC/5urZlcWF0I7xEvWcRWihRaG3U38dbhgRAzHYD1BdGlj7F9uQ\nhQj1U5r8aztucU9xGmCbUalSE78Bkhw/fYZZy4RDq9H/uYIr3Gv2H8Zqa39q\n5HrmSkbU2OKhawmJHmd7J3am5kt/mwjX3cSMERktpR8afWHa+dLoN/IslklX\n8XkTDlb9kZtJ95P83sKu4JVLHa/K+xNURcDJFw3ioqG+ne2rrrp5aA1D2nb4\n/uZDPR/udUJQpMdZso665iKTr8LfqCAX3czdweOqP2ojoj8PQZqBotN0nNhV\nwkx4qDRCvSpEXj/KWj8WJGuQoHhH2Wm+uzkgP4bHKlB2z89Uq81J6+RFXtxx\nCB7yPP3F8wWz/OiOGHahTPipXUJgvQYBrrJNUGFMQgqR3WkOpbds9gBKF+kk\njzlGGETWix2aH4FjSMsvDeVsYhbHAlOCR7ysmLRFTvg+6BM6id/ERo7aWquD\nKS6V\r\n=k1Zk\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"b1b56d1f0e624c2a531e22f9728d7be42ef019aa","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint --typescript lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --typescript --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --typescript --fix"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.3","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.4.42","@balena/jellyfish-logger":"^2.1.24"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^26.6.3","sinon":"^10.0.0","deplint":"^1.1.3","ts-jest":"^26.5.4","typedoc":"^0.20.35","depcheck":"^1.4.0","typescript":"^4.2.4","@types/jest":"^26.0.22","lint-staged":"^10.5.4","@balena/lint":"^5.4.1","@types/sinon":"^9.0.11","@types/semver":"^7.3.4","simple-git-hooks":"^2.3.1","catch-uncommitted":"^1.6.2","@balena/jellycheck":"^0.1.1"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.0.51_1618134137983_0.9167616984073079","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.0.52-renovate-non-major-40adba63f6a03ae5be5145834821de30f077bd8b":{"name":"@balena/jellyfish-plugin-base","version":"2.0.52-renovate-non-major-40adba63f6a03ae5be5145834821de30f077bd8b","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.0.52-renovate-non-major-40adba63f6a03ae5be5145834821de30f077bd8b","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"e66ff7280195268b4cf15abaff3e2413fe8aec02","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.0.52-renovate-non-major-40adba63f6a03ae5be5145834821de30f077bd8b.tgz","fileCount":18,"integrity":"sha512-J2OEbbtPS7fS2JHB+I8eAr9Rnr+/gABFzPmmhLBdzUo4+9YMr3TFkWgPannzz7TWVcXxuzaMoldsls6WbxbcSg==","signatures":[{"sig":"MEYCIQCyU6noUj9aMGjmT9Ndm3GtUPGH+haZG4GjAY3RwdKQbAIhAK82Q85c9KQ24z5kSEr+vcu2ozOtT2qIl2P7cMn7gLD2","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":36280,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgcv4RCRA9TVsSAnZWagAAf78P/Ru7UhvT11ffTKBt1Muq\nBrD8q7/l5OWjipimUmYDF9KHWqVk03Fvt//QRflzuNTW/zFQyi6GetsNBbZp\nOihcNXv/K3mkRIQ++7yZf41Pbrvi+c34uzYLnH91LGyhwshbawX6ApxuAJ4+\n5v/8A3lZBOxsnDSF0Z5kKvJ4OTu66+p/apB4gdajU6DXIwoaSMH3a7oMOEar\nIzg49n3+1Gs8ToLYrEtkG/RuRgjTg2fvKrOG4haodWC9/9r+3HGHMRkSerFu\ni6OeM5RZAz+9CG7NrrDdZCV2zkgAHusRYRPDJkzDfhSBMw1Nz6PAy+84Hfo5\nnqj5zNt84v9p4/wtBtW/z0BoMwaELyRSvsO/OiamyptYl8uDaII0UeotR9t5\nMnpOykGUOOU/+F1uM/7bCg5W4hkrQ2fGrVQzJ5EKzddKp4YQ+5LSLwhj1nCZ\n0j5O0C+DD4vM9j5JJHVcFsQVoTcsw3PIGmfM2omwUCSN13GVLPn/TRMXQ6P3\nsQDi5yYhkiDRaA9n3/O/Fe1PP4MDfgmXH/PZCoP+JFykpQahUBGiLVIj8GN8\nlYdntIWK9BajDnBXmUb99/vlT/cMZJSOCmEFkN6MApqiKFvlQxvVZNxUz9hD\n2WBosXi6gV19b+dAGpHqNpsIJvmmoyq/xmelgQEnFGzG6FXvPt5kv1C1uzL+\nNbxd\r\n=oCjN\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\n[![Publish Documentation](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml/badge.svg)](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml)\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"40adba63f6a03ae5be5145834821de30f077bd8b","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint --typescript lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --typescript --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --typescript --fix"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.3","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.4.43","@balena/jellyfish-logger":"^2.1.24"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^26.6.3","sinon":"^10.0.0","deplint":"^1.1.3","ts-jest":"^26.5.4","typedoc":"^0.20.35","depcheck":"^1.4.0","typescript":"^4.2.4","@types/jest":"^26.0.22","lint-staged":"^10.5.4","@balena/lint":"^5.4.1","@types/sinon":"^9.0.11","@types/semver":"^7.3.4","simple-git-hooks":"^2.3.1","catch-uncommitted":"^1.6.2","@balena/jellycheck":"^0.1.1"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.0.52-renovate-non-major-40adba63f6a03ae5be5145834821de30f077bd8b_1618148880806_0.3865166465242751","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.0.52":{"name":"@balena/jellyfish-plugin-base","version":"2.0.52","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.0.52","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"1977ebf8007d8af45593391876bc22a4c346956f","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.0.52.tgz","fileCount":18,"integrity":"sha512-RdCYLFZGBK5sjcPZBdROIX3syXYD8DU9uQ69Q6cusfRF2XfIerx6CRCnruTdoXnElZd4irlIlQegnpD2bMteYQ==","signatures":[{"sig":"MEQCIGqS5XC6fDYkuH0dJJzfW1aX5QVt2/X6aFZP9e3ncBpoAiBMBS9rbrdAo2zOnbNsgpgl2MQ4HLozQPOIeUlrSugxHg==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":36220,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgcv84CRA9TVsSAnZWagAA1QIP/imKdjUiVeaPsTj1e0XU\nQXB8zH9WnsB8WqYPZv+ATvp5Nk88wN4KCS+rM91XhjNvGeSGzYPD3vRzVteT\n3J60nSq1a+HcZd7ajcasqdVOK190pfwhIhYtVPlGisc9bcHmZCKOCjl5PVSf\nh1QgrwA5qCU7iRj042potJTbLpn2WOpWeMvWdFRl3Jlm/u3XaJMzgfKbPZMq\n99EMEmO7Aiui6ODiUVjUQTRlTYkEaeRiPM0K+3f8lkm3LxuiohLBOcBcELq5\nJWcnYt1Bds3zXQneAzFUJpNiMtrJCyG+4Rs1RYgf01o6fqI9oO4C95v8mGim\n3fi9ltTy4ugSyb+lq1GGLRN4VzojygWpBMWUscUFcXhy2ytXxzJLGnV5jT46\nsJUgPmQoLB0A+yR10aicX5LfVNvFnCYyVXQMbsUKpxyU5ItxoZgQVUrn00JR\nwVl9s35UyeTK4Wzb1uWX/4Erfz3wF6GiTe7zvRuj+KDGOWYmnFoSW+BOtbxZ\nd8TmxxiVQxp/Sc5Sbwsn2kbJovKwmA0u2d8NzXibJnIKxzgChNew5lEoki+R\nA2sHQIhx3XHnuTCY/Lvgb+br8CWlCLQt4xDU5Ut+9teEfOH9y2S9hgoaJuZi\nP+tGWOzx1XiJoXLYXQAoiaz7GR1hiOf3jqcosDXdPEJ8TUp2SoGNPN/AuNh1\nU6eD\r\n=xz9z\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"17a7235fecd80ff99ef34000b960fd302957a525","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint --typescript lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --typescript --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --typescript --fix"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.3","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.4.43","@balena/jellyfish-logger":"^2.1.24"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^26.6.3","sinon":"^10.0.0","deplint":"^1.1.3","ts-jest":"^26.5.4","typedoc":"^0.20.35","depcheck":"^1.4.0","typescript":"^4.2.4","@types/jest":"^26.0.22","lint-staged":"^10.5.4","@balena/lint":"^5.4.1","@types/sinon":"^9.0.11","@types/semver":"^7.3.4","simple-git-hooks":"^2.3.1","catch-uncommitted":"^1.6.2","@balena/jellycheck":"^0.1.1"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.0.52_1618149175950_0.5688948713708435","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.0.53-renovate-non-major-af3d1c93c71e44a4edd993333d02d21917b0eff2":{"name":"@balena/jellyfish-plugin-base","version":"2.0.53-renovate-non-major-af3d1c93c71e44a4edd993333d02d21917b0eff2","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.0.53-renovate-non-major-af3d1c93c71e44a4edd993333d02d21917b0eff2","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"ac6f19156d18a12f894d7bcf4e6c05b07875eeb0","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.0.53-renovate-non-major-af3d1c93c71e44a4edd993333d02d21917b0eff2.tgz","fileCount":18,"integrity":"sha512-WvcOXTpOUoXodRgxzEfAiMsByBJAoSDL0lF2uZ1tC+LmWOAyCoE6X8iZCWgegqa4BZGbwAnckxf7TDSJLbyLqw==","signatures":[{"sig":"MEQCIBpDTBeAxJV89WzCdVzbaFN227ejDLcF0ltI3qI+Bg7lAiAukFYB4QjnaP/DFR9osYcVaEV5/7ybnUyWuP9uU7DpiA==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":36382,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgcw/ZCRA9TVsSAnZWagAANCYP/jxO9aKX3+9M4Anfsmqt\nNdW1qhGBgGBSqvolRhArGHySo97Z0Z5QsTDda12i27wLF8oX8EQIF7kdiOLp\n568YZ+7bph1UXVunuwuJ/5b7DHWXjwCJj3rkAgqq9a6raLhJzgNw9RF5kpgG\nMyvWXUYkDPY812KtI9HMNlXHko9CJIlUcRuc6uXBjOxE9/LO9ZH2X1Q9HCz9\nSfzlY2JcJ/BmTROTfZ/qvXPAR/dCTpD+wGiT9h2aQBa1TWeL9CDbxmhbpKM1\n0tohfvf1adeHXDs3H8ORiBjFbKjDk/ibrY4lELgmKEcHWg3fFRSuXrxL25Hc\nFXP0KuzquImATCwWZFZ3mJBDuZgL+4XHYI3XuRscCs4ZUfXIqMi0Dq6X3Vlw\ni2PhDODvJvPqTErz4M1U2zS5kGBjoWsgztjyuQDc8uimJadbCgTKoLx5SUjR\nzA8aRNHLFu0PuaI2yzF+Vro4LTPoYRXeIIlZV6UeLg82GoSdwLhhr4aF20Tr\nb9PJSUA0XuITeunYayr+0k0vq0+Ix89VyRhmzzx+zBBhgL6+tO90wr/R2ecc\nzWEH+daj18LHtZKb0bsFRqWcTqIDz5f6Smp4asMB9P2LMtrnkYKiEUSNESL6\nx/fVmF6qsfaw2LWrrERhWveVQO90lD+Mx+FSfJwJ/zYPmqg90qnIuzVYskN9\nCPwS\r\n=bdZS\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\n[![Publish Documentation](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml/badge.svg)](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml)\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"af3d1c93c71e44a4edd993333d02d21917b0eff2","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint --typescript lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --typescript --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --typescript --fix"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.3","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.4.44","@balena/jellyfish-logger":"^2.1.24"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^26.6.3","sinon":"^10.0.0","deplint":"^1.1.3","ts-jest":"^26.5.4","typedoc":"^0.20.35","depcheck":"^1.4.0","typescript":"^4.2.4","@types/jest":"^26.0.22","lint-staged":"^10.5.4","@balena/lint":"^5.4.1","@types/sinon":"^9.0.11","@types/semver":"^7.3.4","simple-git-hooks":"^2.3.1","catch-uncommitted":"^1.6.2","@balena/jellycheck":"^0.1.1"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.0.53-renovate-non-major-af3d1c93c71e44a4edd993333d02d21917b0eff2_1618153432630_0.642494665587191","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.0.53":{"name":"@balena/jellyfish-plugin-base","version":"2.0.53","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.0.53","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"0d8820ef74f82ce5de5c22d600c58258fd668872","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.0.53.tgz","fileCount":18,"integrity":"sha512-am64cTfJPG1Cj24tJlw9wxq0kElbPqBvSxq9o/7chhcOamhNgo1+UVTGcaIXPxRaxpQmexETAUoIp8wRp24cIw==","signatures":[{"sig":"MEUCIGurwgcMzMOwlfevWk+Re8GKclgqQD/xVYIiDr8/AMMBAiEA9iCX26btjsW1jNOqXlC7j/MlC2SQ5xheofUbuh/PPVw=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":36322,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgcxDACRA9TVsSAnZWagAAP9EQAJ403cQaqr4M+/lBHypr\npszaxhHCpIbV6JcBiI/WdgCCQvidNoOFGr0KmN+X4nE32fqaYAODWd6VXFPD\nMp7T7fHaaGXbTU3lKjbwYlhEYwlk8OR5VXR1uk39mak5mnWyWBdOk6vs0b0l\nR1oZv2jj7A8Wh0RNM7o3TF0xxVDTigaiPXC2Ra+5eeJW2xnsxoeuoMPqT4QZ\nv2DqFz5VFixDvDJwiO3FqbRNieCo05Ahx591PSOCPyC59xQ311C0v5pc3Ze7\n8I/RbQ/f1+2y5Bu/cjAmv2zRunySeTHygWzIk/EBigTuQGPh2/KRs9bCcdWz\nPqwXJIrp+l7oNPwKQ2nnPssQXsnZDSS+Lw7gXCmvwYyrF9zTINAaIDD+cpMG\nSdvswkpC8CqJ0K39VwXHTZNBfAW+6g+iyvbXRSLjvmpCh1Eh/0+oDnGLhHM6\nt55aTjwyYvmq0qhwydioA5KfqQmEhIQTRfTHmKG47ZEdZINuQ5wunbbCxtG7\n8y57Yzuil7cyxBrgScPTSFDvhfNLuo0f9Ruy4RpqkPQnhMlB/OlPDUUQzsC5\neYI/Vwb+xXXQaBbkNGNLyWwbC2XjmKaoGahiDFpRvavgbH4gV4OIMdtpjqO1\nCgeUCv930mdyjfwCcw6nNGJXSW9Zqe/Oaj56UPabDi8Wb+o5U3q53v3NyagQ\nrOE0\r\n=/bsd\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"03d6d9a0253ddf65a73641a0c79098324f605920","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint --typescript lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --typescript --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --typescript --fix"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.3","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.4.44","@balena/jellyfish-logger":"^2.1.24"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^26.6.3","sinon":"^10.0.0","deplint":"^1.1.3","ts-jest":"^26.5.4","typedoc":"^0.20.35","depcheck":"^1.4.0","typescript":"^4.2.4","@types/jest":"^26.0.22","lint-staged":"^10.5.4","@balena/lint":"^5.4.1","@types/sinon":"^9.0.11","@types/semver":"^7.3.4","simple-git-hooks":"^2.3.1","catch-uncommitted":"^1.6.2","@balena/jellycheck":"^0.1.1"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.0.53_1618153663544_0.04361960872584114","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.0.54-renovate-non-major-0576bcccf034009fd472e1d9a13a0c8f6e3cc582":{"name":"@balena/jellyfish-plugin-base","version":"2.0.54-renovate-non-major-0576bcccf034009fd472e1d9a13a0c8f6e3cc582","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.0.54-renovate-non-major-0576bcccf034009fd472e1d9a13a0c8f6e3cc582","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"00f6268fdc48a206e8945fdb19a0d7c8c083e5c6","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.0.54-renovate-non-major-0576bcccf034009fd472e1d9a13a0c8f6e3cc582.tgz","fileCount":18,"integrity":"sha512-8UPEfarqkPOqmnuJLTmN2arArbv2nTsuuucL3VUBy6DIPZUZtiyWVuY5I4fLd6zm74S9dRKPwjQmYas6nuUUKQ==","signatures":[{"sig":"MEUCIFTpgIZT/4q4jf7ajnYRyFSlYGvSswhgQolByabD8CMdAiEAqPy3AC09K40Zvjf6YCuZA0nPJ1wqEvTwYJwlWM3w8jE=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":36484,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgczTpCRA9TVsSAnZWagAA4fsQAJG8cMHDl6BbrUq1J4S2\nSPRtcpzvEVrNc//X2Ch7wGzPnlrJlYdzlkDDcVn3NZsZrU2jHvFtBLTtKyzX\nxWj6fp57/SpyGmtLhXUzQs2mTdHLQ9DfwEvCIH6O4NqRibaeP5NXNp5SD96L\nFelaYjzfwXfuHdAOYIfQe6fjWjJckdZfpEfEc7kPtfDFtRNIVIDt+Ni4HVrY\nsahuSeCfRS/mTIVlszTQ0e5XfrOfGB5gf+l/epbfYIor9ab3TDF3mhrUCnEe\nuljMMhFpvVd9j/J/h/bHqmkD8MAp6fcF1xURiI/bMZ0dyWWY93i8/rTE2sCO\nqZPze3YqoW3cRNjnW4xvztnXrS2kmVlsrz34IgYUHIj8WxH8MzsLgkQIRQPN\nepWbePBXV7pzz6usH6Ez4I+KwQvJ+tnrUspqFZBLeSezp5jSZlUtrIyQSXo+\niNbnbW+X4ENXc1vGIeSqKAK+08qq6ZG+wKKg2J8DKUprHwjaTlcTjaBhw4wB\n5BMORcUfdG+fOLjHjLjmgrZ8hS/goajSSecvM/JHhSikBNRekkaPs2mvRWV/\nd2CLkbc1y9F1nMdM/cDLQhAN+EnB+e5Ka3lENabonPd3cdYe8CPSSkPT+afn\nb88lnxvZMelZTupA5o1DDSDjFWt5GoPRjmnTztWiuf663JbQgK589jHTPSgF\naRGl\r\n=xM7S\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\n[![Publish Documentation](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml/badge.svg)](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml)\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"0576bcccf034009fd472e1d9a13a0c8f6e3cc582","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint --typescript lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --typescript --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --typescript --fix"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.3","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.4.45","@balena/jellyfish-logger":"^2.1.24"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^26.6.3","sinon":"^10.0.0","deplint":"^1.1.3","ts-jest":"^26.5.4","typedoc":"^0.20.35","depcheck":"^1.4.0","typescript":"^4.2.4","@types/jest":"^26.0.22","lint-staged":"^10.5.4","@balena/lint":"^5.4.1","@types/sinon":"^9.0.11","@types/semver":"^7.3.4","simple-git-hooks":"^2.3.1","catch-uncommitted":"^1.6.2","@balena/jellycheck":"^0.1.1"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.0.54-renovate-non-major-0576bcccf034009fd472e1d9a13a0c8f6e3cc582_1618162921255_0.7372623855136051","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.0.54":{"name":"@balena/jellyfish-plugin-base","version":"2.0.54","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.0.54","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"19383909bb4f9e6380f29ea216646e61f0a81a45","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.0.54.tgz","fileCount":18,"integrity":"sha512-8X6Vr2srsyPKffxCX5IxkKxeaz1GNXjtdqE0uFpXmNMvomYFu2gVgkpHeTlH6MRumJfBXWqwgWKOx6xJfTsh2g==","signatures":[{"sig":"MEQCIEtTF/LnyzbntSujKGslz5XgCpiy/vHdQoaaeP1oNxv6AiA6VLW+s+I4JdX/gRzhrF84GsF0gt2NRJmMVKklCwZDFw==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":36424,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgczW8CRA9TVsSAnZWagAA+3kP/0zfybmgdxVqy2SMf5Pl\nXIOhA4k+BPH4pFZfDTcjY4NkAgDK/XUvBPdPkhRjOusvoOFTeFP/jSQaraR6\n/TnHmCtTV0HxAGVo7bE6xx47muBK288AUivXxs4YIxF0i+kpZ8++BQrfVQ6C\nm9+uFr+5JWPNLuvS+TM66wj+1yEizE6sRXY1A483ZAq/RobrvLn/JDd3yY5c\nvRyrOrCxE8WlfHOLWcquDy5aSMQG4easKR0TOWYdbTlG64/hs/Non6EqNvyy\niO8YU3Z+x5XMpJ+3TyOGHy9TQBkG57s9R9ykSdXVkbYwuIBdeCFKuCLscFXt\n4AS6Dsx5/iuB7AdH5jrb5gIZ7uqOYaCjapxiapb8v2zVrVsdjGMkLU+0dHHY\n+yxNSamt3c86QvCyJ1kCwCTG7uppJcOkcAr4nXw3aGFmcu/LZnYMnmxJy+in\nKhyWXsTx7tyhJQey1J+8kPOr5dJ/CzPy5/uFvFC+LS02wWMzVsIBY3VDxknv\ncUudWBgLkLiWbEQ9EB0Cs7j+5UUOnBOIs188GAYiOK+x1J2h/1hjAFamX2IR\nvbMAzxgcH5yB8fZUm5odlKjhgczuwO4ClOoLEHpVyi6JvQsAcYdfTUCVGakV\nbZ+uqGBhpLY4SS5Pwek3v5//hAJVisuohPvCDzXGgCiXe/ttF3zeznwagQ5F\n8pis\r\n=ECyR\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"3f0264267d8e65346e2f88bbcd8ebe87b96ce319","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint --typescript lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --typescript --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --typescript --fix"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.3","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.4.45","@balena/jellyfish-logger":"^2.1.24"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^26.6.3","sinon":"^10.0.0","deplint":"^1.1.3","ts-jest":"^26.5.4","typedoc":"^0.20.35","depcheck":"^1.4.0","typescript":"^4.2.4","@types/jest":"^26.0.22","lint-staged":"^10.5.4","@balena/lint":"^5.4.1","@types/sinon":"^9.0.11","@types/semver":"^7.3.4","simple-git-hooks":"^2.3.1","catch-uncommitted":"^1.6.2","@balena/jellycheck":"^0.1.1"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.0.54_1618163132328_0.9223939205936955","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.0.55-renovate-non-major-e2cf3f18ba17a79dd0384c1eca8329aa1126afcd":{"name":"@balena/jellyfish-plugin-base","version":"2.0.55-renovate-non-major-e2cf3f18ba17a79dd0384c1eca8329aa1126afcd","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.0.55-renovate-non-major-e2cf3f18ba17a79dd0384c1eca8329aa1126afcd","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"424dd8718ca1e1222c827623783ab7c99c85a6a7","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.0.55-renovate-non-major-e2cf3f18ba17a79dd0384c1eca8329aa1126afcd.tgz","fileCount":18,"integrity":"sha512-u+szLIwbCagt67ZjTmntW3n7DWkB6j5FEvpOHDWPurlLs3GK+AnbR/tOHAvWrqKpw8y/kBh9c0Y0mxV6cAXVXA==","signatures":[{"sig":"MEYCIQDWNjUfNVBS8l2hpLolrdwWhd7i8aneghZF73ahQkHwsgIhAKL/q3z9v+eqHSz6/07kg9fvE8p6m6/0aksXU3RGbZTf","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":36586,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgc04YCRA9TVsSAnZWagAAE50QAI9NL5dcQpRnCbcA4uo+\nT3d2dh6WUS/s1jAGraXoZIPYG0EYzY+2sAVZS9bQW0AHYPj/oBM2g5VqPuOQ\nIszYwiZ6iSl6KC/Ftxdrx3GmpH/63+Dgn3s7HVl5ACe83hN5+NMODDhHlatj\ne5ELj9GgtdTGLfx/VrW8XRKOjQ9k9zgNGlqvsl5WMMDd7vZ834i/CkeDXfZi\nYgu8MlHoefEuF/Gp4gyPDhkbqnh46e+oKgdv1+VdqfqnDYJ2XO6eF8ipC2Yg\novNjtpc4u6Dw4oYWQL4V50ZZJuT53lFQ0QGXNnuc1EwosNpfZZ80/upOSFUu\nbg0p3dkYmfOF+GVTXIlZQwiMOW4DAoM43v6YhKYPbALl+j+wbitZSkihX/JF\nK81KnSyXVI11o5N0hgb9cCARBCSTo6xC7PwNSCkVcq/xRXJX9UdIxdXKnWym\nh5VACEtxvHWsnw0ui0+1n8Wzz4vOQ4KWWBJF69wA45lrD9LJnwDqV6aafBwu\n+ac8iqer4Sj00tTH9naO73irA5hnBUxC18b5aEXCuUfP3bXNyW4vqCUsghyI\n2RnH5i3xaFPmj+4dnM8O8gW4ZU1v3sBU1hlJ2pBgJjhBcKhZ+rwOZZorHqdT\n168hCzEf0uoh8veGlzTNeaw1DKgUvUSoiRSW9NHeGBE6WClL/rsmffDWkxcm\nBNgW\r\n=nacy\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\n[![Publish Documentation](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml/badge.svg)](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml)\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"e2cf3f18ba17a79dd0384c1eca8329aa1126afcd","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint --typescript lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --typescript --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --typescript --fix"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.3","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.4.46","@balena/jellyfish-logger":"^2.1.24"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^26.6.3","sinon":"^10.0.0","deplint":"^1.1.3","ts-jest":"^26.5.4","typedoc":"^0.20.35","depcheck":"^1.4.0","typescript":"^4.2.4","@types/jest":"^26.0.22","lint-staged":"^10.5.4","@balena/lint":"^5.4.1","@types/sinon":"^9.0.11","@types/semver":"^7.3.4","simple-git-hooks":"^2.3.1","catch-uncommitted":"^1.6.2","@balena/jellycheck":"^0.1.1"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.0.55-renovate-non-major-e2cf3f18ba17a79dd0384c1eca8329aa1126afcd_1618169367589_0.45867838473988143","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.0.55":{"name":"@balena/jellyfish-plugin-base","version":"2.0.55","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.0.55","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"5e4be087e2506362ead4cc4d87de64cfd88e7b24","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.0.55.tgz","fileCount":18,"integrity":"sha512-t3bg5A9ucRUbaUvveiKD4DbfywITe+UYojKPknAyRs8w8x9fWWNjFbE/vHl186TFrEl8w/qrO/dRU4HQrGsdJw==","signatures":[{"sig":"MEUCIDrVmzwKsQnob2qeQkw40hn9dcUDZ5FWPOEwfPYZqtrEAiEAiSAadhJiSY2WAOuK7bNLhMLKQSOxDrYPF7TK4A0jCGM=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":36526,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgc07TCRA9TVsSAnZWagAAbtUQAKKwcaneJlcoIIp7dukH\nxAsU4KbnCV0dTSweoXZzcDAMjMyrb6YVWkXY76dVevVgzbGGyBBSfl94f9P1\n/LQ/SJVomv1xyp47IpLdIXD1bP82UyfQxc8oAmKshHNk2Dm9tMk5PJX9FpvF\n18Ew54TwbPeishAy/iGm1lxFMNj0Az4J/ci6TBMFMpdHIHh1F75vAdwG5EYZ\nbj4ZgsMvOdJx+62b43hVAxf+98p6oQdHFXAAVGIu+r4cxEDuqEbPlOilOOAq\nVyZ+p/NeNp/F7z6Lg4OxxmKK4+uHSZ7OauDWQQ8NMdQgrPBH/CpHZ57HZHPS\nuJ9RyOc80f3breNqS+lCgkA2uvwPlQyW0/uoV08ata0xSYq/6XukhJ3aA4XA\nzyspKZqSlqTaoaT4tSC2yRTb2fC5J56ZJaP4Txvk7zSygN3Xh7BQ2AqoC+jq\nT6uM2XE15tTbH4IJqk5U75EQAzykiGpjbhU+ME0Nzmf+NC2MWa6ZJE+wXDi9\n08QSf6BLA87x1T/nAnkxn+VETHA1HNXIUowrQ3TBdPBsl90KCC0kAJHNY3/T\nTfT+iFkj9N/af8Bqi/MAUCNo+mACm7GsHtfHKbg5avUZfiC1ie9RfcG4nZ4d\nKn8yoeE9ixmywVCt2fVu2STT45erp/X4x4qx8W6G1oif3Tue9SuRZ7lIWxs+\nI9fl\r\n=H14e\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"3aea2575ffcaac8b2dda046c7a985982935359af","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint --typescript lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --typescript --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --typescript --fix"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.3","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.4.46","@balena/jellyfish-logger":"^2.1.24"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^26.6.3","sinon":"^10.0.0","deplint":"^1.1.3","ts-jest":"^26.5.4","typedoc":"^0.20.35","depcheck":"^1.4.0","typescript":"^4.2.4","@types/jest":"^26.0.22","lint-staged":"^10.5.4","@balena/lint":"^5.4.1","@types/sinon":"^9.0.11","@types/semver":"^7.3.4","simple-git-hooks":"^2.3.1","catch-uncommitted":"^1.6.2","@balena/jellycheck":"^0.1.1"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.0.55_1618169555241_0.9350637190998485","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.0.56-renovate-non-major-bee28242baceda16015e75f89f1f1762e80ab1ad":{"name":"@balena/jellyfish-plugin-base","version":"2.0.56-renovate-non-major-bee28242baceda16015e75f89f1f1762e80ab1ad","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.0.56-renovate-non-major-bee28242baceda16015e75f89f1f1762e80ab1ad","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"4ee3aaea87985e90ede7f71ca1241f3293df9109","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.0.56-renovate-non-major-bee28242baceda16015e75f89f1f1762e80ab1ad.tgz","fileCount":18,"integrity":"sha512-9SkzUpaDWqPWmapq1CbT/zMOqq91Rh32Ygphbq4JopzDcjOWs57TZpcwx6IIqwUwKx+bbRIDrDErSt0rLHilfg==","signatures":[{"sig":"MEUCIFJaFDXlWfPHbz9cLnw0BwSfDmg7qrIcubh+5sLGd+39AiEAxg0uBgJEpKtN/oR19axPZDRlp59kAe6kGGuUaGn9ItI=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":36688,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgc4YMCRA9TVsSAnZWagAAH6IQAKJZ+aJSRVWnd/tWuCiV\nEDsd0T8ZtA6wJLs7tM3kZhjFRvkBHXtLqOubRY5+mXYuDF7R7g8vqawpO+XH\nRdI73ym8SvgUDu/+JWn5ZjO+IvargEkvLjC0A5jS76VjFLfT8W1soMiaLubT\nVFkKxRNzTZz7TZXmfX2l2c/Td4j5QKnq5GBPiIBXYx/52mtNwCFWGriox4wO\neOvztI/zBeWam8lszNNM7PZbqu2S/pQJ2LIQpCKyBhIBgCZDmx1zmlAD+yGX\nfmDm9ZqTnFQKH1kWkmYyL2i0Vgx6xkHmuRqjMKKZuYrdtuYL7Ahb+0s7sz65\nF7zcEEbp2WzvfwFt8YoqATHB78a5G+f79MRB0mFO7h1UjrwAbos04lKGfosW\nwDx22M2zA1p/HsJr6PR3KFJuE97f2DNGyJS4QX8db2IP5u+ohztyeTvi0FCZ\nCLinfhS7QjvSX/tqoYrL+t9yNsVpDURJnGO/jiQLWOF/E4QbtgdhgK50gBYr\nl684e8vOkHdSodeZSJ/oCbRbti2zI5mg1sdJQs6YVZjo/1Fij81VVGIH2UGN\n30dEPMYFMO2h7RKljuIXqwnngXUGbd1RR6ZNLWkaZPiiQ67v6sc+ovYNxC5R\ny07fFIniMdhs7YFrAnhzGqum1Jk3W3pesP8tY2nlvELen7ZWRn1QJe661FGT\nwWBT\r\n=LCgq\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\n[![Publish Documentation](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml/badge.svg)](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml)\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"bee28242baceda16015e75f89f1f1762e80ab1ad","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint --typescript lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --typescript --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --typescript --fix"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.3","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.4.48","@balena/jellyfish-logger":"^2.1.24"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^26.6.3","sinon":"^10.0.0","deplint":"^1.1.3","ts-jest":"^26.5.4","typedoc":"^0.20.35","depcheck":"^1.4.0","typescript":"^4.2.4","@types/jest":"^26.0.22","lint-staged":"^10.5.4","@balena/lint":"^5.4.1","@types/sinon":"^9.0.11","@types/semver":"^7.3.4","simple-git-hooks":"^2.3.1","catch-uncommitted":"^1.6.2","@balena/jellycheck":"^0.1.1"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.0.56-renovate-non-major-bee28242baceda16015e75f89f1f1762e80ab1ad_1618183691637_0.22290618161825115","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.0.56":{"name":"@balena/jellyfish-plugin-base","version":"2.0.56","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.0.56","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"7bc30fc391394f69fe54b3386730d9b3a3a4deb6","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.0.56.tgz","fileCount":18,"integrity":"sha512-2fAgb8BdJX54pHcF3KHBreeN1gIzawmPwP+WNSjVitfUKywT2Cm79yc+UL0O8OCX9E+/Y7Mb5hxNhBxkqeBBHw==","signatures":[{"sig":"MEUCIQDpOcbkOEyVnG2C1AplvVUDPmhZD+3nRETlbIY8850GHQIgd+0mBReReR5F1FaGognx+4w/kaR6MJaNoX6mrrFNhc4=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":36628,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgc4bYCRA9TVsSAnZWagAA+sYP/RlmkKdGf9f4M0d+d1AQ\n7oIWca/solrIQrQJkB+wriWU/UAUtWwbIsmtarUIz6Z6EIMB3eaoRYoKfvPZ\nvxvHq0LydheXVHt0eWnYEDHFPgLCpYGYq1QQjbjPSI38pPQNOZGU0MqC/zRF\nBPi88WNi5Zx1P0AMd3cj3gSv1ASS5HIWU1UqPMjYFT7Kw7B/hRjbRpv5HJp5\numawua5KJRhZNAlyl9qBC89zfRuRBhpiY7Y4QKijGinPUU7N6fzMIKFllbKf\n6oQwM1F+A0yNfLquPOIa32m+YGMAykASifQ1xnHdwpyH3g2J02QXh8Bx3b3y\nBwewxKJgClGbz+2vJNizSf8YFJ+B7+M8KdGV3A6vKKFQNAlghIrMoAd9LRnJ\nHrmbmPJE97kvp5Sn2xd2IgeHlYtr8rK7B7+sR3THqwfkDd6gRn/q+HqKlKSm\nR8sl7piAU6HaMuHjfayWVAkR3hPXI3l/g8vLkE5GGF3n5lWx0BPgJ9RZSDgi\n0otbH+ZlH3pQsYQr1Wi2nXpDlL4AFziZ1yri8kR1TLCNj2k532Z3Kfw7Kfp+\npN4xFnkby04tuF8InU/RGIoYN/8DuXJXrMMHKSsFm6idFqMOkg+wGBujTn0j\n8eAl0uSO6IN1tWeRb9DeVXidgiAiduMgNRkkjWvkeayD7e+MiUmuSfQSILhL\n1jpm\r\n=JIgE\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"008f7c7ee7a2ec395e3ecf02b3e87fc83552bbef","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint --typescript lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --typescript --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --typescript --fix"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.3","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.4.48","@balena/jellyfish-logger":"^2.1.24"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^26.6.3","sinon":"^10.0.0","deplint":"^1.1.3","ts-jest":"^26.5.4","typedoc":"^0.20.35","depcheck":"^1.4.0","typescript":"^4.2.4","@types/jest":"^26.0.22","lint-staged":"^10.5.4","@balena/lint":"^5.4.1","@types/sinon":"^9.0.11","@types/semver":"^7.3.4","simple-git-hooks":"^2.3.1","catch-uncommitted":"^1.6.2","@balena/jellycheck":"^0.1.1"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.0.56_1618183895771_0.5144386848005915","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.0.57-renovate-non-major-2b3cd1d0920a51424d016d313fcdacd59e33e244":{"name":"@balena/jellyfish-plugin-base","version":"2.0.57-renovate-non-major-2b3cd1d0920a51424d016d313fcdacd59e33e244","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.0.57-renovate-non-major-2b3cd1d0920a51424d016d313fcdacd59e33e244","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"79da2a0e67f5a38773045a399f01280b87f5bce0","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.0.57-renovate-non-major-2b3cd1d0920a51424d016d313fcdacd59e33e244.tgz","fileCount":18,"integrity":"sha512-+j7dMRv/+ileGJcZNlEB4cuTEe93+PPdjxrC4wTA2e6IJrg4R3tVD7J5su8lNKVlrNQhvtdr87+Ve6S4Sl73vg==","signatures":[{"sig":"MEYCIQCfKa4DO98vCf4GLyrVhvVQbJSI1dKQxNHQw4P3uii+WwIhAMDNRHvSBY44WlKQh72Kr4dc0qq7K7ApOoVaCT2w1r9T","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":36790,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgc77hCRA9TVsSAnZWagAAOe0P/1phWDOcI0x1axYo+rTd\nnPvP5TzFK4ltqknPgO55YjA5knp1CAwdTpUM9saXsNEASeaQj9jlaxUqkXfI\nbeGbtczfAvKTvdc+T5/FCyHiUSvXx5U68d74FGLafDZf940a/O1E0ywWAgJT\nO+U6UvVujtCswiPTwM5WC45iTVupBJqSqRKaSBBUgqjSm3kWXtuuY8pLj/Y3\nfSzkqXEuPQ+6xJbi+SEPQV+rd70sLm+jw/S2/BBFdM/N8+JjMAjt6z0vSLvu\n1Mg66PFW5nQFZpPZSKZkPi8BAe2vV3vr6+ULWgsMuz6aIi8uNIDc9XYUiuJD\nLAu04ynR5Ot9qYafmAk2bi+Y+3VCM1/an5/k4hB1BIqzH12wvmkNftk4qRF4\nS/mW0gX+C76VEsqPo54DjYFcbnGXctvZU/qPVivRronxmiwcIXl4HcGzQAAT\nmsDoTe9LMUvPHZhSf6uH0U4f3dJ6ceHMWB2aBDThGm7WBWqm7DnWzSfBDFLg\nQVVUzLTnVyJ785AArQW7sNkp+IIb0oAl5zuz85EM6Bgyl6wF3uXpEcfnL3jJ\n3g8yE42dnxZJ+WvSleTEASlZ9hC1ij9BGGcl1zNnlTEzqBEWbYdZUes54Xyk\nsCH7TeYxbN3923ldyeEmCHm5FSc1pZf9u/4omQ8Y9iiX7/j1fax0v3rtHWXK\n+Nxt\r\n=qmlp\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\n[![Publish Documentation](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml/badge.svg)](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml)\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"2b3cd1d0920a51424d016d313fcdacd59e33e244","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint --typescript lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --typescript --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --typescript --fix"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.3","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.4.49","@balena/jellyfish-logger":"^2.1.24"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^26.6.3","sinon":"^10.0.0","deplint":"^1.1.3","ts-jest":"^26.5.4","typedoc":"^0.20.35","depcheck":"^1.4.0","typescript":"^4.2.4","@types/jest":"^26.0.22","lint-staged":"^10.5.4","@balena/lint":"^5.4.1","@types/sinon":"^9.0.11","@types/semver":"^7.3.4","simple-git-hooks":"^2.3.1","catch-uncommitted":"^1.6.2","@balena/jellycheck":"^0.1.1"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.0.57-renovate-non-major-2b3cd1d0920a51424d016d313fcdacd59e33e244_1618198241054_0.6405402704280192","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.0.57":{"name":"@balena/jellyfish-plugin-base","version":"2.0.57","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.0.57","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"f6de95c59112469b272e2b3bf98968cb66ad8568","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.0.57.tgz","fileCount":18,"integrity":"sha512-ok4u32/OnW2m8TNloCfAP3DM2XuA3dAkCXNU3L5GP/unh+Y461+dJfK/+9X7FaHuTnIJ218A6zSamvzAWFwx3Q==","signatures":[{"sig":"MEYCIQDBIXuwlAYWz5UMwUZsKOxCdvG/8kUGvwZ83TdSl7YsIgIhAJLhZX9HmTk9RBb0OImMAs5Mzwb6nISmOewczJpvWegx","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":36730,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgc7+YCRA9TVsSAnZWagAAku0QAIU1Jil1HKKzme6V2wOu\n1sYQXmeCWBXUK5Nmd4HqhGqMAGw8GEpoP7snf2rHxxRei1lvQRUvsuihiFHe\nfSCaLQBXio4BDqijTRxJMpogLcZjI0eD3fbEx64EWEEzxHQIe7oI3lr4f/2q\nFko5JmLCypUFt9LAavX2WWb4tsQM8kpgt3RQKLAH2DcrbyURypAgrHlrZTs7\ne1rQUFT+AyT48fT4tdrcSCaY6cmen7WfD7P1SQpIoqkpQK5c9eoPzt+lGOI3\nG6bVcAQiM/3Hd7KJPt1Jo+PA0pKSrs/kpLDpfFNj0FqaGJFMOjHAa488x6WQ\nB9ryPgRIEyR5apTPDO/n4Gs8S1lx8E9jSfdBlCZ7es/AfiEF86jt79SDLjFf\na4FKpTltEDu1sKIDiC64A0dkvDItLEhdhFtcHPK/WSy8zeLCW+6rkYuUtCG9\n+t+cZddqywSQ/ch5L9TwKoY9r1SQrS2b2ThdYXNylsOt4eTIe1BPLxbjAAkp\nXGKBC9JeyhNEwAiFoiK2Gl7g/slMGc839T0E2ch3oQRlhNo1OefRIV1sxyly\nyw3TO8y4otO8IpADaHGS+Om/NPOl32A/Qtei2OoezmHvRN1czsw+/F5YWrNn\nwjN+1jzdaW360vriciOD7KZbu5r0tDPedgta/iAJBFG+Np68euovygZmnzJa\nE6pa\r\n=GRJL\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"048a12eff1f0bee9888020a385ffb525a3e8ece7","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint --typescript lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --typescript --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --typescript --fix"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.3","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.4.49","@balena/jellyfish-logger":"^2.1.24"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^26.6.3","sinon":"^10.0.0","deplint":"^1.1.3","ts-jest":"^26.5.4","typedoc":"^0.20.35","depcheck":"^1.4.0","typescript":"^4.2.4","@types/jest":"^26.0.22","lint-staged":"^10.5.4","@balena/lint":"^5.4.1","@types/sinon":"^9.0.11","@types/semver":"^7.3.4","simple-git-hooks":"^2.3.1","catch-uncommitted":"^1.6.2","@balena/jellycheck":"^0.1.1"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.0.57_1618198424526_0.7445110033457996","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.0.58-renovate-non-major-92098a37390c84990d3b0e9c4ede5a567daf8255":{"name":"@balena/jellyfish-plugin-base","version":"2.0.58-renovate-non-major-92098a37390c84990d3b0e9c4ede5a567daf8255","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.0.58-renovate-non-major-92098a37390c84990d3b0e9c4ede5a567daf8255","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"f1b7bd0fbb6803278828f3c29a1a63f9d12aa7d0","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.0.58-renovate-non-major-92098a37390c84990d3b0e9c4ede5a567daf8255.tgz","fileCount":18,"integrity":"sha512-v8/Rc7W1ims78vodbxJbEWLn8uv8G18ROcbLo/GFKw5YBkZ1z81pF+dumUlpMsDGelbtxrQxJHDw0d0QmEnnaQ==","signatures":[{"sig":"MEQCIEzQPDqoZYzjwpHZQ7LG4+d3j0Ua9UFgLrRIHNt8BPlbAiACyA26H+1lDzva62BAs+yZH5BITHY49Lo23rFmdjQG9g==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":36892,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgc9ZGCRA9TVsSAnZWagAAEqgP/1KgSeXnm9MGxiQXWjN9\nfjOzzOyoPUAw/vblBC1tPv+WstyHCw7cL4T5SX3JThroR1V2pb9fQj4Oefwb\n+3yXaEqh2IcZ1QFVP3CCHlc9UMNnDuaFd2CQfHskOpgBSw7RLtI+fAFfvwAH\nUR9FXKMw8FqoCiKznfGMvUNu+LpSDwlAYDcq03N39UI50/1z0BRG3WmFAwE/\nSdevJFJSF6aOqwpUpNeZcMic6ELIbokbQdS6oMfO3IukPFSzJxFL7wgp7v4q\nt4hu1DRGNYkTcnEZab2PrQRNsap/jjYy7TgakKfGKPaSKDQirH+pLJJiQpu/\nIaSn5gLlsmmjGaNNX3R4m96OUShl4jUgCinfPZH/jkqJJSpqPYwUCddsy1YG\nXfBt0laiRe6ULafckBy+zfA3PoQhsttqFTX55ZWPKSzsGq/j4d/Wfo3E6OaT\nqMiLi02aoK8e6/O7QIYrlsmWNm3jQ3kW/d9M2n/Xzu3VrzDQpU7U7C/G9k3Z\ngFbVvSe06chh5e5VMWRASpuwZ61Ap6TPb1O6txtI7mnKEjXypCIe2exMTCQt\n1pIJz8vVDTaouqfb2eUjKOfQ6VAuFqxcww9TZaVBi6AoydU9STL8dzz06vEt\nvuHWi2G+0RkznsTZGD/MwOMH3j98TQKX3JgqwiUfmt0coSqwx0Mz+QdaD8zd\n/o/u\r\n=coE4\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\n[![Publish Documentation](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml/badge.svg)](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml)\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"92098a37390c84990d3b0e9c4ede5a567daf8255","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint --typescript lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --typescript --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --typescript --fix"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.3","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.4.50","@balena/jellyfish-logger":"^2.1.24"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^26.6.3","sinon":"^10.0.0","deplint":"^1.1.3","ts-jest":"^26.5.4","typedoc":"^0.20.35","depcheck":"^1.4.0","typescript":"^4.2.4","@types/jest":"^26.0.22","lint-staged":"^10.5.4","@balena/lint":"^5.4.1","@types/sinon":"^9.0.11","@types/semver":"^7.3.4","simple-git-hooks":"^2.3.1","catch-uncommitted":"^1.6.2","@balena/jellycheck":"^0.1.1"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.0.58-renovate-non-major-92098a37390c84990d3b0e9c4ede5a567daf8255_1618204228768_0.30351954220850397","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.0.58":{"name":"@balena/jellyfish-plugin-base","version":"2.0.58","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.0.58","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"d0d1ac4c458e9cd18da7ae483035348e2148fd58","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.0.58.tgz","fileCount":18,"integrity":"sha512-6lgVTuHYds2u/BqrT78YSJqldlkXLIl717gdiK/w5KuKy6J95d5DOcNTFQUbz1EygZ1VPF/lJ703hgmCW1UiCQ==","signatures":[{"sig":"MEUCIQCSoaK511vJjhkp0Gs+1bPTa/1H8VG9E6Ab83TgvZUKIQIgW9c8YAdvaeXWKsaAJkOZqiRoPEp8VeTlrWQM7FAJv9I=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":36832,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgc9c7CRA9TVsSAnZWagAA8AYP/1NhOIBRYIDnsqh0yIi8\nttB7uEMG5JfXDK+MyuzrOHPcp3CR3g7JJ7VxY+fxZNwHDwf8uzvX4/VnGPQ4\ncLVy54K3TFQApL09HB5RPXnQBDOfJXswnmHXqFyh+DZoh30k1tnnIff3YQFc\nS/xEPJNDz2l2ARB0JAVnHhWB3579PXWF8CQ83sitIVVRfY8cjDlckQ+iTay9\nF6UAWv0N3f4DmULIKYfNBfwlt5CC07divv03E6iSHChlHVfXIfS8khEmFW3G\nWJKdxtf5RHjLPlU2dGxkoyNJnPtaGw7/HfF3m01Ps3+Y19XizG1pD6U2TxVI\n8vxBSYlJNgA9+O6+WTYOA+YPDwtCSJbOgVfm1VGSpzB3MgoivHIEP+krIttZ\nEUTolQ3J1vrKDFCDNA5rcrS2fnnKOThJ+Qq1lAvljmI4E3+BQW7RRibZk2Ku\niPaHbtq4zlAmU9R+pfk2xht+VQq42x7T1stzhmEEvQZsXnKoIztyYyjsY1eq\npwu+ZWwV3Mb8db/sbWhl2szL3qMIwnq/NVaVjTBjOhHYcNztRRt1PHpk44dj\nLOXy8c97weSBM9ORYbCHzl11knKaUB0xCxubRP49qiWZCz94Pbve0awXcocw\nBD/3Nwyf2WBjnUFqpUrhBIcBxCx75rVQfyFowReLsshAENRt1lZS+2YAY2o4\nDBSw\r\n=fELy\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"f03cb16791d38d968df77d29434f351df6db32fa","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint --typescript lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --typescript --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --typescript --fix"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.3","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.4.50","@balena/jellyfish-logger":"^2.1.24"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^26.6.3","sinon":"^10.0.0","deplint":"^1.1.3","ts-jest":"^26.5.4","typedoc":"^0.20.35","depcheck":"^1.4.0","typescript":"^4.2.4","@types/jest":"^26.0.22","lint-staged":"^10.5.4","@balena/lint":"^5.4.1","@types/sinon":"^9.0.11","@types/semver":"^7.3.4","simple-git-hooks":"^2.3.1","catch-uncommitted":"^1.6.2","@balena/jellycheck":"^0.1.1"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.0.58_1618204474923_0.737543077731992","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.0.59-renovate-non-major-37f42181f3f42555a8048e198e34b7664a579f98":{"name":"@balena/jellyfish-plugin-base","version":"2.0.59-renovate-non-major-37f42181f3f42555a8048e198e34b7664a579f98","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.0.59-renovate-non-major-37f42181f3f42555a8048e198e34b7664a579f98","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"3c56ad2d35b121242b0c27ea01e18189598e99a2","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.0.59-renovate-non-major-37f42181f3f42555a8048e198e34b7664a579f98.tgz","fileCount":18,"integrity":"sha512-0D17o/MdHo90eZ4AVdm19XrxMz/B9W3VxjH7Avx9afEgt3nBDw2W8TGrxfaWjBjW/utOePizDzhaTPznCOzJPg==","signatures":[{"sig":"MEUCIEUoqCCFbeF1OrnYNuPW/iRO3I0uwuecrumnDs8ILiczAiEAlL6PdhdSp2F3anzR2tbfXAeEX3BnoxDzeEl+pQ8YcE4=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":36994,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgdBrICRA9TVsSAnZWagAAxRYP/1EqPpGUaQu5SUhudwXn\nIOBOZqC6EK8ageg7dAMoaAzN8/kL7eRPVd6awg7JaXaW3lDMj0i1rRE4jQn5\nVYR7ajofEiXLOjl/Qoy/8fVymXRUHqsBE824qGiqVDmOrWIn9CIPTbMNGx46\ny/OLJEVmTHnjtbU31NEIhw/3pXOUI/U3dDby9ezMETLgC3cWFULjK7tbltsT\nS4R56qXQbTwpky0IKA19w3UGV35PTVwwoe2b22WJzPHVsHMtrZ6wSDMB8cbQ\ndW3qdR8hRRsCL/Cw6op1Byf/KgLVxfNwLiBjlzLPyZjDtTrbzgv0KK5gc/FD\n7clv8c/uQcaIMqON5OyzmRPIVsv5MgUxQDmJFuyKuzv41BN14s2irm0wVt8C\n1O9x7hC4on1QewUUaOnGJ7gzu9/O2Z8wrURdJM/mEkDuTH2fPRJnXZEy3k/7\nqoNGpKNmwSPiobbtXCG+XK/9oeYNCBYXAu1D7DVZdWMa1bHWjlxopNMjbi6F\nD3oVdNVKJU7gW4xw/GgaZObSV4fVlg/jMc9X+eDnVDzN8AuB9MZpVDmrF5mc\nkyXfioe3ZXQJcW4294/2COTDDkLtdI8S0+Qc5ewVxvPGLA3C4VjHqpoHqSPi\n6N6mPpKL/3RwY3b9kueLlN44fCqRa2shDzdhTI2VEa8hJuaEkZ10hzfu+biw\nX1ye\r\n=Ip5s\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\n[![Publish Documentation](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml/badge.svg)](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml)\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"37f42181f3f42555a8048e198e34b7664a579f98","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint --typescript lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --typescript --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --typescript --fix"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.3","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.4.51","@balena/jellyfish-logger":"^2.1.24"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^26.6.3","sinon":"^10.0.0","deplint":"^1.1.3","ts-jest":"^26.5.4","typedoc":"^0.20.35","depcheck":"^1.4.0","typescript":"^4.2.4","@types/jest":"^26.0.22","lint-staged":"^10.5.4","@balena/lint":"^5.4.1","@types/sinon":"^9.0.11","@types/semver":"^7.3.4","simple-git-hooks":"^2.3.1","catch-uncommitted":"^1.6.2","@balena/jellycheck":"^0.1.1"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.0.59-renovate-non-major-37f42181f3f42555a8048e198e34b7664a579f98_1618221767808_0.08135625402369939","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.0.59":{"name":"@balena/jellyfish-plugin-base","version":"2.0.59","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.0.59","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"e41fa1a520c2c5e349a9d769105d2cbaf3f720da","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.0.59.tgz","fileCount":18,"integrity":"sha512-3cfbAfRxZ2B/oONutj/nMfFQPLUaZ5v+N7IUtlgUsA6Q1Khur8z5KYb6bxJnGjz3qene0e6wjRgK9pUcw84SRg==","signatures":[{"sig":"MEYCIQDnWE7XUpmFnCEMaJPYgXC/ZKgdmmz+chpTWerKTjCIOQIhAKfy8J4cNdqDt4Rb0aytYHchJeljjUB5qfhWn1mRjyCD","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":36934,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgdBwfCRA9TVsSAnZWagAAhwQQAIhqHlx/XDk7fexEmmkz\nc1vN4JtrIn/Y7iVeJ5jGd/NSp3e+oNaL/eHoQpwZFgzo7S0w9TqtAXgDOXTU\nTYjhEzkcY1jix01YjwKFnZdQsVLyAyMhlM9jpY1KgOHDoc38ERYz3ZF0Zaya\ndQG3bCXp5WA0XgaeaWV/4SDVQKJhf/jFshpSX0A+oYATYsPsenIPHVR9tPFC\nuhQiBDgQxmEACTXZgjaiEXeuI07WY7lCpASJHkVsxxY/HpQnwzWiswD2svDp\nMb9OOLXD9gllK7XE8Y51Vg2QwPPGlEovmYa9yYkE5FTAxMQGY3I3jRK0Tvqu\nBfTSzcPmp8l742hsUm9qeCeglfbUrIMwsMdEO7CYNXYuaaGgW1VdIBscZylP\nDweYdAqHjpzUCK9vbuRREc7fuGTCg3SvsSrdM2eVTdgoRG5yOCUEivg9mMeS\nYx76qEmOFSLU7E8XocvY+5vYhlDbG1DQQ+Bn2cnBqpW9wzAqQ+QKttH8hsxw\nMCSR1KJtrfT+y6iUCavF5nXlCZkN4ZYPvvyC4h2YhYAogxeic31aVtOo3Tmc\nRjadEyz243jNOuzYzU8j90UMqW59jDlblcypL3l3JRuTjYsLfuekzh53F943\nWO+u3NhgpvJ0UnTP1/SoE1P/47FCVNLP4baMGnEZ5BTAIr9FWsmMBq04uy+g\nEFnd\r\n=pGOA\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"7e5a86ec3a472984541fb9441c478af859905f3c","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint --typescript lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --typescript --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --typescript --fix"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.3","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.4.51","@balena/jellyfish-logger":"^2.1.24"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^26.6.3","sinon":"^10.0.0","deplint":"^1.1.3","ts-jest":"^26.5.4","typedoc":"^0.20.35","depcheck":"^1.4.0","typescript":"^4.2.4","@types/jest":"^26.0.22","lint-staged":"^10.5.4","@balena/lint":"^5.4.1","@types/sinon":"^9.0.11","@types/semver":"^7.3.4","simple-git-hooks":"^2.3.1","catch-uncommitted":"^1.6.2","@balena/jellycheck":"^0.1.1"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.0.59_1618222098287_0.700610260521942","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.0.60-renovate-non-major-70bd9c9a14690bce7037dfe65e18dedf1462fe8d":{"name":"@balena/jellyfish-plugin-base","version":"2.0.60-renovate-non-major-70bd9c9a14690bce7037dfe65e18dedf1462fe8d","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.0.60-renovate-non-major-70bd9c9a14690bce7037dfe65e18dedf1462fe8d","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"af80b38b1399e4ab3761683824eacee7aeaa0184","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.0.60-renovate-non-major-70bd9c9a14690bce7037dfe65e18dedf1462fe8d.tgz","fileCount":18,"integrity":"sha512-tQZRk9MixNbTRHkwUoEsN5H8k/NgfVKogPOiBtm1n7IQ/wefzkmtE7mjw3i00JnPJzCF7ZXZviHWNwD0r56v5Q==","signatures":[{"sig":"MEQCIFXRxReBJ9Oua/k/qnvXR9qlOn7h8bQMXCkp4z6dhgHHAiARXB+ZLj1wWiihtuU+Jx7y4rsFg0DbmduugHqVXWoR+w==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":37096,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgdB0tCRA9TVsSAnZWagAA2h4P/1wjqgVEqraAkKr3IUX3\ncwh5ISqwWAMmylOX275V7HECl0E9Cpk1OJ4x3IL60pja2gkFpnp04Ir3Gk+J\nmtCYCEZM/Nm0FJxoNW86dt6QX2yPfyhEq5nxXTQwshIJ4e3azdeFvKUW0RSI\nvgapjnYpizq1E2W6awXbqceX7CA/FlEnNVngAEYNpBQ2DHiWpdXoQg4b3p5x\nS9iWHdWL6gCOgJmFapVp8R9FyejG2veggV2tZYObzFh6aXKW8LJuvesrYVyk\neveA9heC3odMBkVWIxkzNvvMNISMZnBoLOkadkX1fE4PrpazwMxxDAAIF7hb\nmwQiiIlT7thBXX53NP++3QTXhiCuFOiaWmAPbi0XkCAwGpYNZBZTuQwFqBR2\n+FJKi6YK3+C0zLhF4LOkDTI0G3vp81tJMX4+tv8HsdrIH905Y+NSdJCEWLQ1\nJT/4xnJ6XkGyi+oiBMWx+zOAnAJ4nsXbLg4bkQNipRHdU8VxTEj/TBeaAtnN\nH55jFwJOstSRASIkQIIR670ibkig7ntyj0oAprkm1glJocvD9ne9D2TTSdi5\nsnnBrdJ3V4mmzpJdiP/0EIueQE7tmXAOKAQemEIYZwXIushPLQv8xvJr8W8x\nu7g/0U3y83WDw0CD/XmPQ7gJyOioOU2F/QUL0CvszhYzZLCfXoJi2vV+J1Gd\nIvce\r\n=qgQH\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\n[![Publish Documentation](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml/badge.svg)](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml)\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"70bd9c9a14690bce7037dfe65e18dedf1462fe8d","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint --typescript lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --typescript --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --typescript --fix"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.3","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.4.52","@balena/jellyfish-logger":"^2.1.24"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^26.6.3","sinon":"^10.0.0","deplint":"^1.1.3","ts-jest":"^26.5.4","typedoc":"^0.20.35","depcheck":"^1.4.0","typescript":"^4.2.4","@types/jest":"^26.0.22","lint-staged":"^10.5.4","@balena/lint":"^5.4.1","@types/sinon":"^9.0.11","@types/semver":"^7.3.4","simple-git-hooks":"^2.3.1","catch-uncommitted":"^1.6.2","@balena/jellycheck":"^0.1.1"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.0.60-renovate-non-major-70bd9c9a14690bce7037dfe65e18dedf1462fe8d_1618222380923_0.9142447454969702","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.0.60":{"name":"@balena/jellyfish-plugin-base","version":"2.0.60","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.0.60","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"36ae1418c402940bfa05e4311f2e12b88270bc9c","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.0.60.tgz","fileCount":18,"integrity":"sha512-np7V+gEYy8phgrRtXuvRaVDmZm7aZgX866EDhjG+mnQg8V2019BkWt14CKT4euhdgaR3aMx73DkiRe0d3a4bTA==","signatures":[{"sig":"MEQCIAhCnWdI8temS1FyCFrVfdA/mcutONcoKJ/e5m5YcqdlAiBlsCR6rrifa4UReFYNsGwkqvpya/rH3ArC0RzmgcAw9A==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":37036,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgdB6DCRA9TVsSAnZWagAA3ZQP/ite72cUhFugMPu0xTAK\n1oO50/F3yu7oytYaR3BYAvceBv15xQPSe3uyp9YNVQ4adDk/j/TlofE1jyHM\nTzuYkzAYrfbrB5O8173wFITsalQqRuYwZQ+qEBzvGYcGv6nAZZgu8L4BjwdA\nW7u87ZxagoPK+HnFxSCv41VoXrvEYHZQ3kyZEO3CuHTIif/WuZSHVXFLeweC\nKXg+UV4NjvJaRqVTVfgZycKAEbT313yAAQIAZ8pF41FnXW8I6KImyyrbqcGJ\nYI2GaEq95TVyuOin7ss4gXo/iCpjAxQyjf9BgzgqkFWAIzuJK3YwGjrWMoVj\nqJuZ5nOHWJBDC8bQWYWTj5qhX+n9CpeIeNnyVS6XqPvJ5b2M1Wq6zgEYA9ci\nGFOugt2FWhvOBUWCogYYy6NU2AEFbyC9UazYGGjLtRLQ3/TxhqRTNquiR1h1\ncBGFgI6vh1av5usuniujT45CK/vWjRxnwZOnsxD+b6yXASofoRPzJyZ//Hbk\nbQrBfHSmRSGglZHQoqu2v+JmKn9EljX5kmDkKia7Zm5HqhigieOWuznjZYuE\nHFWADiOenbNjIQArMvtOowUIXbie+TRZvaSIeN82+i2NIQzxpgR7nhdsp+Fr\npMHZ5Lt9Y+shVJ0/40PjKjT4p591sGHoV2Qexd7bfmskLBdikB5Je6l8wl3I\ncjTh\r\n=tfLA\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"13d1408f57005f64573c54b384a594a8d1795549","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint --typescript lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --typescript --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --typescript --fix"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.3","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.4.52","@balena/jellyfish-logger":"^2.1.24"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^26.6.3","sinon":"^10.0.0","deplint":"^1.1.3","ts-jest":"^26.5.4","typedoc":"^0.20.35","depcheck":"^1.4.0","typescript":"^4.2.4","@types/jest":"^26.0.22","lint-staged":"^10.5.4","@balena/lint":"^5.4.1","@types/sinon":"^9.0.11","@types/semver":"^7.3.4","simple-git-hooks":"^2.3.1","catch-uncommitted":"^1.6.2","@balena/jellycheck":"^0.1.1"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.0.60_1618222723308_0.3433927687975442","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.0.61-renovate-non-major-6b40fd4c8031afd3116710a10cbcff73a0b9d11f":{"name":"@balena/jellyfish-plugin-base","version":"2.0.61-renovate-non-major-6b40fd4c8031afd3116710a10cbcff73a0b9d11f","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.0.61-renovate-non-major-6b40fd4c8031afd3116710a10cbcff73a0b9d11f","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"f3821cb1f4353a390f540aa83d01e714e2de75e1","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.0.61-renovate-non-major-6b40fd4c8031afd3116710a10cbcff73a0b9d11f.tgz","fileCount":18,"integrity":"sha512-b8eDqHAdyyBVgONmQRdQzpaJ8nC9kXoAPvhSbWHBMq/7frBBNXEXy0rnPbCR/NS41ExooBybUHJQ8+uWxdeftg==","signatures":[{"sig":"MEYCIQDfde1fDjQvjxtSh97KqH1v74YAUJruTJKlP6dbeU0fuAIhAIspZ/ZJjesE4xW5GKajLurlEdKFP4nX7fg06xzmrMVt","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":37198,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgdEifCRA9TVsSAnZWagAA54UQAIZgTzDW84j/Iqrb7BfD\nDCQ+HCska7Z4aSfhUjW0TV97UvwKifj60h3pENC+UDUOK8cuNpGtvnS9j1da\nhMx22XMT5RpVTzfMm1GrVMWcFQVVC0DXn4CrAFYKdrVHWIRqEUUFYxNExKGI\nMmhWiCiY2zuB1jsqQY/Hsu1JrhPTmI6Cz7wPweVSWiedYyWY7Rt6IrDn8iJc\nFkC+aumRT8aBQwKIo0Pa0lzxmb4E9YEok8XfJBKJD3pe7U10Hi3F30JYIVpw\n91zHib22LykcCDfGkYnOuF4ykIZcCM2/AKf0RX1+CdmcQiBmcWAzoKhtb1D0\nvPUzSubZxj5hN/ezuBnTQ96TA66F7gCbdZAEHFaLUY8kFjFff8kaKN4G9mjR\n+1y2j3SvWXjkQz+LP2dlQEtNy8NGEO2AU9HIYsIWMHkZE6wIi2oDyJfprdq4\nmiSFLyIZcqH+8d7+r2wUTVpAwKzAOcMjpAmUnVsWvHJx97zbXJ1AU0juJgVs\nrhGyFqNkZcikPVekmKo6UKV4v9kV0QcO9ftM0qR2ITQ0JJmqdrH06Azxle0d\nOA9hlkmebWVANJOXFgNy3z47MdscjI3QdN2WaNaXWAwYtHeab6Sd4ZMYuoEf\nR03r/GJzvFT5aDcma9Z+fba3CwSbLRXqYuJ9JFc9Ae2ianQlc80vHxoeO15T\n6aWy\r\n=giLU\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\n[![Publish Documentation](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml/badge.svg)](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml)\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"6b40fd4c8031afd3116710a10cbcff73a0b9d11f","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint --typescript lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --typescript --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --typescript --fix"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.3","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.4.53","@balena/jellyfish-logger":"^2.1.24"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^26.6.3","sinon":"^10.0.0","deplint":"^1.1.3","ts-jest":"^26.5.4","typedoc":"^0.20.35","depcheck":"^1.4.0","typescript":"^4.2.4","@types/jest":"^26.0.22","lint-staged":"^10.5.4","@balena/lint":"^5.4.1","@types/sinon":"^9.0.11","@types/semver":"^7.3.4","simple-git-hooks":"^2.3.1","catch-uncommitted":"^1.6.2","@balena/jellycheck":"^0.1.1"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.0.61-renovate-non-major-6b40fd4c8031afd3116710a10cbcff73a0b9d11f_1618233502991_0.4542688129845158","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.0.61":{"name":"@balena/jellyfish-plugin-base","version":"2.0.61","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.0.61","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"88ec2405a1aa0ddd071cafec726d48e9e4a02501","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.0.61.tgz","fileCount":18,"integrity":"sha512-1ezVefH4Ho/4xxZLozmjxl0guf6MB1X7yn3wLaJlq0ivQdkktAbxOx7GJO/vN6xMZOwuJm4k2ZPMGwN2uM7NVw==","signatures":[{"sig":"MEUCIQDBHDcg2dkLcyaj1ocrOsQWZMTa+4q+cE94y6dWl/762AIgQmtX/QIC4SEACpBfsWTevaBSaug3Safx2SznJqo7+UQ=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":37138,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgdElqCRA9TVsSAnZWagAASTwP/1x4tFPFYfxInEkcCbx+\njqBH1j1d1VcoZz1wLRO9lNybyCw2JSFYn8ZDloCKCFnPT2HiYa2rvgP0w0Wb\nm8OKBCjJD2HKMuFZciK6gstiBX3juDfemySOr6YCNv7VdP6qfox1oo4+Kl7X\nm9UEh5hzTrq38wkWLuMFpf+2bGPNtB8HCYLm6xa81j+ORZfMU3EVmLw0Gsvu\nKRJfkhzPEzCnivWI/Gi2pkpj0ZwZS3UVxPLcGXoRs9pAbBIyReV9juvHipBQ\ncNjpDDtO44wVAGfiuwPhZ6qGrW3bNnBWCLl0DuabQcJ1AzAxazdi6UQ3hB/v\nxiXKvUICTBeLcUVgSuQacD8yHLiNhJTjN2j9FWinDCJOnvUPc1VvoiNzwqy+\n44J8a07hpu5Y6zgV12q0cu6gMDqW9LivEIFg1xqf/Jgh2MIbQdhMZInH6dn6\nEXJEzqsb/MR57jlGVlnH2fFfSaSY8m57GDVwRi9uQ+lQ5lvuLKbKcox2DLyC\nvoTLgTO5Brm3YDmWjd2gzectkK/UWVv1FgvcA1RI331TYPMdbrsBN2F0XTQ9\n4pGwjlsMAbzuRrsGXQWf5i5rX00ehrnO83iy5DrAvbw2zcxsVg+xrwF+pJ9V\nk79qJVlJje/O87m4l6wEHgrm5MHPy5J7OoyKBXuqqFR7cOtQXbpG2RR1LZpm\n4t9+\r\n=V3/9\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"076680548c7eb5fbce2c3db6b09fe88d57ab9d74","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint --typescript lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --typescript --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --typescript --fix"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.3","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.4.53","@balena/jellyfish-logger":"^2.1.24"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^26.6.3","sinon":"^10.0.0","deplint":"^1.1.3","ts-jest":"^26.5.4","typedoc":"^0.20.35","depcheck":"^1.4.0","typescript":"^4.2.4","@types/jest":"^26.0.22","lint-staged":"^10.5.4","@balena/lint":"^5.4.1","@types/sinon":"^9.0.11","@types/semver":"^7.3.4","simple-git-hooks":"^2.3.1","catch-uncommitted":"^1.6.2","@balena/jellycheck":"^0.1.1"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.0.61_1618233705605_0.038037422735747395","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.0.62-renovate-non-major-21d09fbaf9e763e9489153a28cbbb2c8783beec0":{"name":"@balena/jellyfish-plugin-base","version":"2.0.62-renovate-non-major-21d09fbaf9e763e9489153a28cbbb2c8783beec0","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.0.62-renovate-non-major-21d09fbaf9e763e9489153a28cbbb2c8783beec0","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"a4f1c51c339986eb99c1f8556d710be86963a7af","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.0.62-renovate-non-major-21d09fbaf9e763e9489153a28cbbb2c8783beec0.tgz","fileCount":18,"integrity":"sha512-yxLudhkGizISNgZz8hiY5IU5yiivNgczKy3IGbdrtssbcxqlVyJQkc9CxQAevNyrzyQzVCesR4IZurHxHVXynQ==","signatures":[{"sig":"MEUCIEpkgu7zzvAnEb5Sa40rlSRggr1jv3AwGpdFWpGJ6YruAiEAyhEGzMlTXn6vmkkU5OCbgJBpPo+XrtVuG88/NwFxyc4=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":37300,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgdGuzCRA9TVsSAnZWagAAsLEP/inEAEuaQyDF3jGrfE32\nuofKK3zkQNgGmCYFXN7UGZ/ZwWGwFSpyV5OzeucOBvgyypCQtd+jxEd0JDNt\nQjB79/E5HgKS0xFxzWSR9sr1Lp47izSe2lg8+seSw3Yad6b3PsKJls6PzWd8\nN3biqheWxty7dva5E3X5EeTLerIRKXV6Nfaauqv3S3vFQ7dhUxQiiOCuDadq\nq0s5TkD5gjd3nyWeW7GxOOgoRV5gl9ID8TzsQXX/SG563/Slrl/hoY8/osuZ\ny0EuInfZApuj1h8IkJ0wisSCIeRJ5rgmpZXLtgzukv2Q40Pw/+cbeWnoenPg\nJs6xVmYc+DsXMVmEcxeyhBR8APv+U+KhmY2qngTC0GWflEEq5FrGZ/dy8GkU\nMQeO1lcAnbJkWSEmMmOqUe4uIMe2vhVOhUdVVXi4q55+wYf09RK+w2JRS7qx\nC69S4uGTgpKlJzoxoYPhKEoY/U7KvlvpdxZxV8vwik6rdJ+oJBNLgETxsJd1\nhnv/QXVShaWMBqLXbwH/RmeHNDot92gyKla8HD9gPDbc4SpH7kf/ByYpvtgz\nMxRJVLt4WNUZl8hr4lDR7IgMB8yebQwvioqACJ3g9LeWM011+Vbun/Xujunp\nYY3A9nRaceeIe6hYrUU8OEdJu4YwBRJwDwapVHJFaEYLPjkoPoez/i9v177v\n3j8C\r\n=fjJ6\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\n[![Publish Documentation](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml/badge.svg)](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml)\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"21d09fbaf9e763e9489153a28cbbb2c8783beec0","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint --typescript lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --typescript --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --typescript --fix"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.3","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.4.54","@balena/jellyfish-logger":"^2.1.24"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^26.6.3","sinon":"^10.0.0","deplint":"^1.1.3","ts-jest":"^26.5.4","typedoc":"^0.20.35","depcheck":"^1.4.0","typescript":"^4.2.4","@types/jest":"^26.0.22","lint-staged":"^10.5.4","@balena/lint":"^5.4.1","@types/sinon":"^9.0.11","@types/semver":"^7.3.4","simple-git-hooks":"^2.3.1","catch-uncommitted":"^1.6.2","@balena/jellycheck":"^0.1.1"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.0.62-renovate-non-major-21d09fbaf9e763e9489153a28cbbb2c8783beec0_1618242482811_0.1332998732559576","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.0.62":{"name":"@balena/jellyfish-plugin-base","version":"2.0.62","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.0.62","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"11da9f6938c1ceb2505ccf6a191a33793e3c953e","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.0.62.tgz","fileCount":18,"integrity":"sha512-hA/O+zOAXO8Erz5PS5c812XMHgrUvJkIWCKbWuvaPNd5Ymby+IVeDLqcePRKB5bMG2scEjgyhVKCsgL+AC7PHg==","signatures":[{"sig":"MEUCIGXB2CuYPGZdV6wi+9J8EcxYNkhVteivaxnVOG14W9MLAiEA5/JFAJGCSQ8cGm4+ZAe4fudM7XVGYx38iw8PbcQf2aU=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":37240,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgdGyaCRA9TVsSAnZWagAANVIP/159fd8ZIi354ECS+0DE\nFoa2MKD+uQN+UAqL+V/YjOXDNzv4nPym+OgFwbwJzCNxdI41n1xWwH/dA7MT\nnEhQAKT6LsABuwQW1qi//M+qEIGs4rip9ujV0NnMVEU7PoaRlOVRLyVHK7Xi\n16lYUqjOJgxQ6yDIciBFYCtBzwZS7oTwSwfAXMb47hviE0Bpu2QIRNeVR4RS\n7reaTGSKltXkgEkifO41SOk+viDSZPEYjaNhaUP/F4j2ocNAoIj9+vPpHLvh\n9BKTxt0nQ1Wxx433RkBahj3KeVHukmopQhNwEdtdD3Yyk+t2afVJE5JvUcaA\nwM96zjKm/dF6gbWd6WEmZ8NoDEBxj/SkAb2OZG+8kh8msnMU+JqRMPqIiIzG\nertnhXwVtzbnZnbnj7uPr9PItSC7LL/B8824NT09nNzN0JL4z55+K1ylDV33\nzXor1mclbQTC2K9cGrriFHinD9EeQjsYkZlXpErXBwGoyNNiUVAjhTnbAvy0\nevE7dwbwGU5VIwK3KNMFDfuRpX948soTXPH6UM2UnySWXXZfuzt0yuAHaDAA\nL59RZHfKHGS4xjFx1aEXMvSowiTL58wryJQ13FvaSztT8Jifgm+bjGCgbZHd\n1w/cX6IGzIKJR/zgjWMpEcKMResNaY5LtzV1xRUtFg2z/kIzcVxLvnlpAPQT\n5Tno\r\n=H5+2\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"905ddfa66f3fb05d7d14fd3f8a590f22fb3b19e8","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint --typescript lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --typescript --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --typescript --fix"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.3","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.4.54","@balena/jellyfish-logger":"^2.1.24"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^26.6.3","sinon":"^10.0.0","deplint":"^1.1.3","ts-jest":"^26.5.4","typedoc":"^0.20.35","depcheck":"^1.4.0","typescript":"^4.2.4","@types/jest":"^26.0.22","lint-staged":"^10.5.4","@balena/lint":"^5.4.1","@types/sinon":"^9.0.11","@types/semver":"^7.3.4","simple-git-hooks":"^2.3.1","catch-uncommitted":"^1.6.2","@balena/jellycheck":"^0.1.1"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.0.62_1618242713746_0.6847231252908432","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.0.63-renovate-non-major-f4fb3acca4543af79a6839445ed4772670a8e2df":{"name":"@balena/jellyfish-plugin-base","version":"2.0.63-renovate-non-major-f4fb3acca4543af79a6839445ed4772670a8e2df","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.0.63-renovate-non-major-f4fb3acca4543af79a6839445ed4772670a8e2df","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"93b37614e5d6d8df461cccb976a1d16ce5b3fbef","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.0.63-renovate-non-major-f4fb3acca4543af79a6839445ed4772670a8e2df.tgz","fileCount":18,"integrity":"sha512-2FRTn43e7ou7C4IVFGO00/2tdvkSlnvs815QTgFlKLbRtMyyPgdzveWScZ/piuz4q39pijasNSmQ/rK49GJQ7A==","signatures":[{"sig":"MEUCIEJK3AYZFNey9UcrLu1KQSmkc5AhVOXdzIzRhrsXH32yAiEA70B03C5gMP+kTko2FZ6l8+MATLcIIoRELQO5ZH6i7qU=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":37402,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgdI1lCRA9TVsSAnZWagAAmiEP/3soe3231Dr/vcCOhgQL\ncMSYNYVFzOTDyjlTXwLPu4dnyGt64rmPFETuHtYscE2p59mDTs69TFiV7qGl\nJgarHrFxQk56tYf48kegiGWyaIGyt8vAuOnRKXLXs5JXsfg9h+jLYcW5dj48\n/Tm9uf09lqVbqYJJIG6m5GZEN+9evHamwdPH7vSlL/T0Arb7ge/uOg9e3XtH\ndxZlAKIjxyfIxyMDfK2UwykLf6XM6+Jo8qjPIbN6wJukfqE+6LZhcF4EQTXb\nAWRF1WyuUgVyBNnXqReeNuOsfVvZ/wn6DjNnwiso9ssTuic6yVuRrh0K24bt\nhv8fIESJG1pe0DnQJJ3/z3c3rlFjNhXvrjRkLM9b6q75y+xCAW8Z+ccStuDx\nM2TXDua05sQmxZAg51i9dkVt8/pFUvBFmLUHIcQh580Ux3NhwmJXetQMHG64\nX34mHuTVCX3RGdaioNh5J5ytuug6iz5pYstcm0d4FIGlLKY0HIWj5p8nCUsF\n4Za4zVksJuyprMbh/0bspNj5gFuASPk9fXkBTcmmiXULBzD0tXG+ZpdjW56i\navTp2Ja76/Y/3OJjjwE+fnAxrwcJ4S09QCFJotZ8lHXc9NmPAV+J+0Z23+tK\nq+AjwOf59WXlXuNDHtp7eoEkfMpDVupfaTIpTL92mXD7Baa6vWOyHsCP/AQN\ntFql\r\n=Uzls\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\n[![Publish Documentation](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml/badge.svg)](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml)\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"f4fb3acca4543af79a6839445ed4772670a8e2df","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint --typescript lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --typescript --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --typescript --fix"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.3","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.4.55","@balena/jellyfish-logger":"^2.1.24"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^26.6.3","sinon":"^10.0.0","deplint":"^1.1.3","ts-jest":"^26.5.4","typedoc":"^0.20.35","depcheck":"^1.4.0","typescript":"^4.2.4","@types/jest":"^26.0.22","lint-staged":"^10.5.4","@balena/lint":"^5.4.1","@types/sinon":"^9.0.11","@types/semver":"^7.3.4","simple-git-hooks":"^2.3.1","catch-uncommitted":"^1.6.2","@balena/jellycheck":"^0.1.1"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.0.63-renovate-non-major-f4fb3acca4543af79a6839445ed4772670a8e2df_1618251109364_0.4109330557719457","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.0.63":{"name":"@balena/jellyfish-plugin-base","version":"2.0.63","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.0.63","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"0245b5942251787dc6280abc5e95e3fee708efe5","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.0.63.tgz","fileCount":18,"integrity":"sha512-+aToPDWJ3f8hzs+cN1DjRLIQ65j4A1zYi5M/R8Z+OiFh+iocsqpI6Q8pK2Let3GNq+/y1irz/Eku7WxqqX8xpQ==","signatures":[{"sig":"MEQCIA3IfOc9d+j/wDO7pdWj8EmxAw2Pnym9hSucwif8K/ggAiBGJOCTkmJHSXbEK9jfaUlA0+fPwMuNNTcdr6ITAVFRdw==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":37342,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgdI55CRA9TVsSAnZWagAAOnoP/2jeMLElsJPlooG48wcm\nPB1Juj8dVAm3iT4LIdXq423IbYHr3/oF8Xsxhr5DgIdEjBypY/8J4iWg/PYH\n5zTs4Sbhxts6hBfJXfB/izz9ik8nIhw7Zv9JOPlTQHuyh9ANtHmbUzjMxmlA\nC6oRdq+/m8xIM/+Eb1Aqm1Vw8lnRNigZUrT6iXHkIAnhAYRhrFWyezKtEKys\nY7Ceywsa2lAVAoWKDP5mIYtrpCmibwYwhWwkCYwTCPD78ks4qAaAeTY2zmp0\nQuXMCjVAeJH89cVQpWdClz4yp+E7e10LavHC8S71LWLDttdBee/RY2RV4B4X\nUsR8Br6fmUEv/7WxxBV8nbnl3tMZLCbnz+aNWRq/sNk1yFWIwOS08s5qQGk6\na2x1N7POZP6GaDMfUHZada8jZPGFeS2MeXXPA5lpyRMMWiN+jqLcNtQngB4w\nSMia7sQxbqICzz5jgisYoyzG3XFqbBAkcs9gI62/awS36mAqw1QK6wREqCX8\nfQol8IN9mURwjhwu9UCoRQFmth5esZ9aJsp6Oy8ZukC8mH3kbZXoqIDeSEUw\nSCJFoDCiV8gL2z6QQ/WLv3pBLaISHpytupACfk/PzOqYhFDBjZGptMeiw9XO\nZdkR2yfl/K0vcwQ0tacTll9vxJhUdObwstD9fI/iuHJmCzrY9emCfHiHF3NW\nNk+N\r\n=2JOw\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"71e091bad9e38bd9c78a88ae8a7185576b5f050f","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint --typescript lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --typescript --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --typescript --fix"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.3","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.4.55","@balena/jellyfish-logger":"^2.1.24"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^26.6.3","sinon":"^10.0.0","deplint":"^1.1.3","ts-jest":"^26.5.4","typedoc":"^0.20.35","depcheck":"^1.4.0","typescript":"^4.2.4","@types/jest":"^26.0.22","lint-staged":"^10.5.4","@balena/lint":"^5.4.1","@types/sinon":"^9.0.11","@types/semver":"^7.3.4","simple-git-hooks":"^2.3.1","catch-uncommitted":"^1.6.2","@balena/jellycheck":"^0.1.1"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.0.63_1618251385531_0.1351288275707878","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.0.64-renovate-non-major-3f8da9b86bfb9ff03d27495742760be466a8bb14":{"name":"@balena/jellyfish-plugin-base","version":"2.0.64-renovate-non-major-3f8da9b86bfb9ff03d27495742760be466a8bb14","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.0.64-renovate-non-major-3f8da9b86bfb9ff03d27495742760be466a8bb14","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"3792794cc539f2dc8f3feb2daaa2b3df0360b09f","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.0.64-renovate-non-major-3f8da9b86bfb9ff03d27495742760be466a8bb14.tgz","fileCount":18,"integrity":"sha512-mQxd+82vTrH+lioAWYHe7aS14KrUcfFIg8ra61V4l5AJ8p9umONIbL0SeafBSu659zjLSwLRlehcJgslL7Lclg==","signatures":[{"sig":"MEUCIQDkN3/lboYTdWS1hDpre0cxp4/4t7zhgiWWwGGq6Ldh1AIgLaGElZchNXRG0kZVOTBecQt62iTVVNUEdnWjVXqVGrE=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":37504,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgdM0oCRA9TVsSAnZWagAAougP/3zxgPLj4Bai3N48y77O\nY8N06CX9Bh8OWaW9/xnKvQmWqnkyTeaf6s9UKv2NTjT71p2NuokBZ6vmAtYa\nx5EJdItBCko4PO3rs1+94dj8mkFyBGdlrmboE4Zir21HU+FQNkdbCIKwQwHP\nD++U1UlyiuoRvjCheAe/8EDezJ050E6mk/Rio21LyzQzMWtuoIfZbEoy0ho1\nLeTeatSB6gLB/I9Hu1oEL9WeOa3Q0JB+qR87Y3Otkq92fs1zYxcy6dt4BK+q\nSYzGxE4U9CpYnskk84x8BZq1yBgfmZcUW1Worw1t03B+OIqnKghq00oH5vTA\nwdIjq9X3tpov9b0dyrZCaVq/cIr06Dsp0NyKp0UkXy/gI8WqfaL6KWjAIk8i\nK9vXLlQV5fJdjUdYdY7qNR9UxRucLl93hSJFz7eGf+ZzgIz1pQTdbhoahs+a\n+8Bn6fIBHoP/viuiJ8jfJXClYKKiMdCnOW6khTXVfG2idapg1jYzDn+tj/aM\nlq561PJFf3TfacUpFgvQaIZ0ysRrv0E6uhcwPDXj96QxjElfpL7/cLHJIWNY\nBFqDxXTRndgEMm57XsbdJKdDnWpDBO/YYJijUt61oU5l6Cb7QMUhItG8eFWL\nSU8t/yQt0mYZrjaWZJB9Z6DEGZ+IrBfsxBG5bi9/pI8qBS5fJK7YKLHFXSKQ\nm5OU\r\n=VYnn\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\n[![Publish Documentation](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml/badge.svg)](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml)\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"3f8da9b86bfb9ff03d27495742760be466a8bb14","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint --typescript lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --typescript --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --typescript --fix"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.3","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.4.57","@balena/jellyfish-logger":"^2.1.24"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^26.6.3","sinon":"^10.0.0","deplint":"^1.1.3","ts-jest":"^26.5.4","typedoc":"^0.20.35","depcheck":"^1.4.0","typescript":"^4.2.4","@types/jest":"^26.0.22","lint-staged":"^10.5.4","@balena/lint":"^5.4.1","@types/sinon":"^9.0.11","@types/semver":"^7.3.4","simple-git-hooks":"^2.3.1","catch-uncommitted":"^1.6.2","@balena/jellycheck":"^0.1.1"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.0.64-renovate-non-major-3f8da9b86bfb9ff03d27495742760be466a8bb14_1618267431905_0.9719838283724791","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.0.64":{"name":"@balena/jellyfish-plugin-base","version":"2.0.64","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.0.64","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"b08b5c1d94a2bba778fa15474f39f40e17c0b501","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.0.64.tgz","fileCount":18,"integrity":"sha512-jRwgG3QNYEG5yV3w9OMOb4BSD8F9ODU4mFe1QQWXDeqoNWYyLCB0GEJGXusO+yCjtRAqtsjnDLG2jSLjnA/aFA==","signatures":[{"sig":"MEUCIC7BijvBMjie1ZLOxRFVhtYEi8dGIlR0pBojJWUQo2OcAiEA0p92jZbJi726m9IChB+k7r8qE6x0ZQLA7yCBCZUxjZQ=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":37444,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgdM4CCRA9TVsSAnZWagAAVkUP/0W8pRuCYHYrjAoFxyvT\nGf7ndwmwvnAIKNXHT2c5v/yOwK/7idPu2jIh7qEkuabUSWGD1KGBuSElp1vy\n4JR2fw76tY7i5iYKTPi7ojY498PMSXOocePZOY2u5AbTDrNlk8MlwIiJHzGH\nVSEmD74UKtNoXkeOPtWME87H0Y0CpOHH31wKxY7iSQA/GbwHuFQR9olnrHfF\nTnLl81/Y6u3SMV6FDVezs6qbkahWcBnG852m6FuWCE4ruRDsPAMkY4GvjC2i\nofo6+kgOIjb9J+mMCQot+va6dtLfEGz2nHfym6u7knJtphucsLWWBc70SA1t\nQL8W17ADofrJs+cNNjj78vB7RwN9XtnSxOm5ruEElsX9PvZ4uWm23CZYVHXR\nMxBOpGlblfCJDcjOXdPb8+i4ULrVDkyVpX2Ztkb/M7SI3wmGCMPts/rX6Zqv\nxSKRYKF2w1jwYrFDnV2Eb5A3bnRo93wLu1lSPBMH5aMj90a3DPwJOL0Xc+Y+\ne7xFbaQV/gHm06HauLxOl/02ZgI8ya8zGbhlpaz4akv0ZGTkZPuSnw/rUlL5\nss8cvSQWgw9pHgRGgFoml3jEzB5wRSg+0ZFoxJvoz5n35/c3P3rMmKGGPy/4\nkXw8oEqazb1jutDmciSovwQD098qKtUoKb50voSw4stFQT8ZzQyOnGU3MO6G\ngvuT\r\n=lArd\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"9bac925666a3ea123f42aa3036ea04af1b7a56be","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint --typescript lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --typescript --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --typescript --fix"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.3","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.4.57","@balena/jellyfish-logger":"^2.1.24"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^26.6.3","sinon":"^10.0.0","deplint":"^1.1.3","ts-jest":"^26.5.4","typedoc":"^0.20.35","depcheck":"^1.4.0","typescript":"^4.2.4","@types/jest":"^26.0.22","lint-staged":"^10.5.4","@balena/lint":"^5.4.1","@types/sinon":"^9.0.11","@types/semver":"^7.3.4","simple-git-hooks":"^2.3.1","catch-uncommitted":"^1.6.2","@balena/jellycheck":"^0.1.1"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.0.64_1618267649932_0.5320654839635814","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.0.65-renovate-non-major-4a63b3d56b7358b10a56517d4a2b842af7c2b74f":{"name":"@balena/jellyfish-plugin-base","version":"2.0.65-renovate-non-major-4a63b3d56b7358b10a56517d4a2b842af7c2b74f","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.0.65-renovate-non-major-4a63b3d56b7358b10a56517d4a2b842af7c2b74f","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"c90840a958845f6e1b1e22edb66de56ba7ae003b","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.0.65-renovate-non-major-4a63b3d56b7358b10a56517d4a2b842af7c2b74f.tgz","fileCount":18,"integrity":"sha512-FTeu8o86j37jkhXcPa0wdafq3NU+5rairU3C+wDCf2HqPs732v3gE/WI2oOGml0Rs0ZMYW7oVZgmK+714elXRg==","signatures":[{"sig":"MEUCIBFUYOBRO2g0cV7Qra/uEicIoCpR2KfqCILs/0gGXTHcAiEAzoFZA5WY97Xk8XoVmpHIrDOHQLoaWmlmA7zTLgyzFgY=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":37606,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgdQLhCRA9TVsSAnZWagAAHCgQAJQbKAN9EP2s8eHUEaV3\nS9mWQpD6NFs5K145+7tCPYo1OYuoI6mAeteU/A6BwfdZZJ5qZhviQwveNsvg\nuYbrVsK23EMJM0w1wOKeiF7ZxEz4kbo5mncshtAD/E9qWggPhHe79vXhN9Zl\n2Cw1ZZwWDwcXDAFuW7n2S+XYsuNiTIdPZxBb3BPHEIrR1R4Doq0YQ1vOiVR/\nhCVD0QUuF2Jskt6j9hqSPZ3BLC6GGKEmdicByQjmokbzYNngO1Q6vnByedzB\n+bJTSXdoOMwhXzcN/nKuFX9YOgxMoC4X1jcSCH1f8inqmStCzwgaWvvjQfTB\neQ4Z1YYQESLd0vb91QKj5lKlJdoMu8Tlj1oW9BNq+RroASsV89K2QnwZ5uLE\nh8u7lCMIkiOr1AUOTlgFiBeJITQ5nb8MZUHU1HcpCLwswBQ6vceyJWx+nVUs\nIwrKC9UBpKBwDywQh/D3WvH5idqrrc/pSZRRp4PX4aP7667/nKCx5E2f3+A8\nYT2x9u+ZRu1Od68JGVaR0ZnnFIr83x/RO8EKYHpfJwQi8EfF3ro+IqKmOwyY\n95K8RUdRteTSI3GUMIRw2wHHaZDBbXFkr1PCnDgpBVzCgMeXn39oD5qx/ntz\nW/sYROnE0iLykz0ih1OwgrfDsu3qLAV21OO40EXSra5kH7/9nhyzoTx0jhM1\nop48\r\n=m6V1\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\n[![Publish Documentation](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml/badge.svg)](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml)\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"4a63b3d56b7358b10a56517d4a2b842af7c2b74f","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint --typescript lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --typescript --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --typescript --fix"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.3","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.4.58","@balena/jellyfish-logger":"^2.1.24"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^26.6.3","sinon":"^10.0.0","deplint":"^1.1.3","ts-jest":"^26.5.4","typedoc":"^0.20.35","depcheck":"^1.4.0","typescript":"^4.2.4","@types/jest":"^26.0.22","lint-staged":"^10.5.4","@balena/lint":"^5.4.1","@types/sinon":"^9.0.11","@types/semver":"^7.3.4","simple-git-hooks":"^2.3.1","catch-uncommitted":"^1.6.2","@balena/jellycheck":"^0.1.1"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.0.65-renovate-non-major-4a63b3d56b7358b10a56517d4a2b842af7c2b74f_1618281184774_0.6399829535728532","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.0.65":{"name":"@balena/jellyfish-plugin-base","version":"2.0.65","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.0.65","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"3915f75cd13d61ab2d26db2a00b23d2514a8cb7e","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.0.65.tgz","fileCount":18,"integrity":"sha512-ODoz6oKgJ/9aWDB5RjqNVsnk65sj9+2OmTf5wTwAsHvkadqr8baWt0f28qYUPcf/hhXdcd6Zw10m8RuOhN965Q==","signatures":[{"sig":"MEUCIQDun151NITASKrH47lru+AJ1YDsT0RkFX87oE4xK/UlZQIgPLPYR++HLUdtJjX0MAeNQdEdr/+DVOjFcmwJNzESrUw=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":37546,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgdQPLCRA9TVsSAnZWagAA3gAP/2rgfcmwtjh85mAKs0fO\njlVHH95A2UDCrQnaLL95ohDe4EHOfc/7KO+NrsVPBOQaiibrD5jj0fdV3fUc\nu68lycAVrDsyWViyA4cZtQDYVIUoGcJne1/OiNUEQ+40Glysyk5aFqzSu3Ze\nHpKMGPbSoO29inlwQYLy90z0XNsR9Yj8HmI4EiVfnDh+csZTuRePArq2JZ4D\nANC8IBOInQXiUKG96FW2qWI+BXU514BzZ7CdZ4VlMwOrkPp1j6Msd4ue+sRz\nGQc8wx1A3NupG0t5AbqsTITY3+Tj1zhYKo9IifM/aT3b9nNRDyaVTmSmEkzo\nqddOxBkfqYLOB/bJulDWL2MWuAuGS9IELUw0eY3IbdrbEuJAbS2zUPPDWL9H\ncnCTNoEtQTN2oUd68mb4RNcGJB3Bnd0NPLewD+rkZtVseEY16KiB8PK3BXQE\nMUk26PfIHv3PRdRruXyWy0bihNcynMt9x4oWxhVifsyeMhchTEKRsi/lOvhT\nUIlNicEL73UNtOQWn1FI/D9Uvz1/AYXocvp1+Y+h/A6T3bMowT9ndLAHxoBB\n6SoWPO+0DLnxldKPrOausUq5jqSADoyiAJhDfutQysfGucUpqOQCdJ40DU5+\nB+A6ngXBKELlRGLP9jy/fLaJiBA/VEmtk4gzmE2eMSRcQmVt5XXqNG/hdJer\nosUT\r\n=NxLp\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"3b2ecabe63c9f0090d85b0d08967c7e8977c6107","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint --typescript lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --typescript --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --typescript --fix"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.3","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.4.58","@balena/jellyfish-logger":"^2.1.24"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^26.6.3","sinon":"^10.0.0","deplint":"^1.1.3","ts-jest":"^26.5.4","typedoc":"^0.20.35","depcheck":"^1.4.0","typescript":"^4.2.4","@types/jest":"^26.0.22","lint-staged":"^10.5.4","@balena/lint":"^5.4.1","@types/sinon":"^9.0.11","@types/semver":"^7.3.4","simple-git-hooks":"^2.3.1","catch-uncommitted":"^1.6.2","@balena/jellycheck":"^0.1.1"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.0.65_1618281418988_0.22747014693916467","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.0.66-renovate-non-major-8601bd5edd6fe289e0c75c8213a4117e7dfeb7a2":{"name":"@balena/jellyfish-plugin-base","version":"2.0.66-renovate-non-major-8601bd5edd6fe289e0c75c8213a4117e7dfeb7a2","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.0.66-renovate-non-major-8601bd5edd6fe289e0c75c8213a4117e7dfeb7a2","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"31ce185c96ad5d320bfebf72fa16f83ab422a056","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.0.66-renovate-non-major-8601bd5edd6fe289e0c75c8213a4117e7dfeb7a2.tgz","fileCount":18,"integrity":"sha512-txB0fNoZoo17z/qgUuJ259DqrEuGxIQsIuw3Tx0q4Ec5vc4jvP5ksWN4U41mZ2qR0VcHXlSjZK+ea+GtNQDY5Q==","signatures":[{"sig":"MEYCIQD3/boTrNdh9xesuHsbBa2CeDMXBVpNRuv9v++lBZA2BwIhAPPMJUL2+IwIAguzZZcEH5ltVrE9fLMfixpIdzIAFBeJ","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":37708,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgdS5vCRA9TVsSAnZWagAARlkQAI3PqDBlg6A0xQ5oRK1F\nKVEDhX4SndYGy+8pSqT1kjREqy+j5e7wF9eGS9IVz0AVIVI2TAJMQnnud3EK\nOWuiBZJ7tJW7Te9Fe0ZhX8sKrKbgkYlR9qomILVRcwnN/24g/iQzSA5X55zw\nRRdfcmA6CeGc0EjEWFA1pvaaojlsaswu8tjZa3UJJxgxQZqMN9jfBkWSFrK6\nMvv4ZLPgww/OR0R2stqHW8+pM6kdBX4UeVbfIGl5xw9rkbUs3DVWyciln0DD\nT6D3ltSKIIEJZoL/mHedRzId/9H6nND8hBUOpMHZSkJlI6H1rZiZNb6FVZBe\nw4Sfa/KPsOx3yg7mNU18rFDuyrRrnsuj2aipaMD8D3F4AZsVxFHKNEr5UUT6\nAB8zkro9yRJPK8ZOwPI4ceH8infh2ad10v936a4fzCMheSZrWdGtXk+EuMeO\naaUZ8GwGac8SlDI5EIw7gZqi3XrUWeNrEivQ5CAy4/ONx1XbfE/K/UWtdD6+\ncSeohgXfBCbpGAYta60LJYkomeDi3MbG2OJiqNKXUOH8oQUvqLSQAf9eLzuE\nmRCzdvQhS4ccQSxtGxV13mzCFBJEUnQmRJSIwkKHKM2UApNsdvjAbwSCeKco\nOPI0C+Pvii28TSwR6b7ihECUHck42W3LKFrwVqvpdXku2Wl1/Ffl3KSszaFo\n8/GC\r\n=5TYH\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\n[![Publish Documentation](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml/badge.svg)](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml)\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"8601bd5edd6fe289e0c75c8213a4117e7dfeb7a2","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint --typescript lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --typescript --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --typescript --fix"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.3","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.4.59","@balena/jellyfish-logger":"^2.1.24"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^26.6.3","sinon":"^10.0.0","deplint":"^1.1.3","ts-jest":"^26.5.4","typedoc":"^0.20.35","depcheck":"^1.4.0","typescript":"^4.2.4","@types/jest":"^26.0.22","lint-staged":"^10.5.4","@balena/lint":"^5.4.1","@types/sinon":"^9.0.11","@types/semver":"^7.3.4","simple-git-hooks":"^2.3.1","catch-uncommitted":"^1.6.2","@balena/jellycheck":"^0.1.1"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.0.66-renovate-non-major-8601bd5edd6fe289e0c75c8213a4117e7dfeb7a2_1618292335456_0.8250861976502037","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.0.66":{"name":"@balena/jellyfish-plugin-base","version":"2.0.66","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.0.66","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"4d907e063a31fa571a86945e11504eff224b1be8","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.0.66.tgz","fileCount":18,"integrity":"sha512-kl35WjpxNvmCQVBPROBPmfhGLdc8527PuMBbaEujN9q5Oh4pPik/v+Ca9VhYVULVuDNJl/FtZTWO8PXQ0k8WTA==","signatures":[{"sig":"MEUCIQDlr+O3HzeHJSw2bJ0JYBXWDTyw2RY+xmaU1v0MkRD62AIgLgstG4Nh2+BOjPIEDW984MmQodTlx4P9HNy7Pcy/4fc=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":37648,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgdS9ICRA9TVsSAnZWagAA19EP/jVpmJ8Yh/geaoWGCstD\nYFP0YgEEOClERaDj/H8RPm3AptsbwhikEgNK+79vBtmS25dIQaaOifRcb8RJ\ntF26axaWdgkpcUudhzKCKcrjLKUgSVLXWm4Mr5A1vcpkA/teOgOGg3iIYMpY\nxJhopR+pvkoLsIDqGHhtEur98wb1oZQgRZVEMMSanIjKqVXIVgvkKKTQCEA+\njb6We/nHdghZFJvmYSjI9Go72NV2XRaMoZ9dQG0I9zKih1VKtPzevK7NgJUn\n1ake8rF8F6P72cJsaAz6bM2ICFwV52mKRzqDTp2XDv1OsbofklA4s/o/uP13\nxi8zZ/ud4Bo1gUoQ5DHnrdWsCDSZaACm1PWwlSm/VsH4HKeo2xmnRnjsMA6d\nX26vwcr8AQkUXs1rcrGT06Fc3THjjbiCCW6YhOxGOAd25MjUdZAcTFMUn3qy\noVRMxDrMS2D7GXmj/4zH4U3TcyEogrHda9i3jJzCAOMT7Jxzff34HS8GFKI1\nIGNYb6kSiBHvi6fZhj+0Py3OG+pBsEuPpmebQ3IGXhlQca6uRrETFI5d2C4Z\n0dNTyyeV38hxVhviYGoVIjbs0qRtiH7TNtcRz1oZdZwzokqVJ8YoSYTM/v1p\nhtmywvXlVbedm9v1zbrfdp9m7hrwOA/OVsNrDmjKrBLDli+FA2DbGFxrXM0O\n0NGX\r\n=4G+Z\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"d3c23ac3e02789d3ef7e5d4c9236494eaec6853f","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint --typescript lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --typescript --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --typescript --fix"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.3","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.4.59","@balena/jellyfish-logger":"^2.1.24"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^26.6.3","sinon":"^10.0.0","deplint":"^1.1.3","ts-jest":"^26.5.4","typedoc":"^0.20.35","depcheck":"^1.4.0","typescript":"^4.2.4","@types/jest":"^26.0.22","lint-staged":"^10.5.4","@balena/lint":"^5.4.1","@types/sinon":"^9.0.11","@types/semver":"^7.3.4","simple-git-hooks":"^2.3.1","catch-uncommitted":"^1.6.2","@balena/jellycheck":"^0.1.1"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.0.66_1618292552172_0.5572705122858592","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.0.67-renovate-non-major-9d3083bd3e6bffa048b7ed62aee5fc82ef3598e7":{"name":"@balena/jellyfish-plugin-base","version":"2.0.67-renovate-non-major-9d3083bd3e6bffa048b7ed62aee5fc82ef3598e7","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.0.67-renovate-non-major-9d3083bd3e6bffa048b7ed62aee5fc82ef3598e7","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"462e5a5953f949dc5c7a4144468d0e8034890f63","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.0.67-renovate-non-major-9d3083bd3e6bffa048b7ed62aee5fc82ef3598e7.tgz","fileCount":18,"integrity":"sha512-4Nm0P1GI4kSlO4JCNHJiBXOQ00lPfTXkkD5NX4s5/ylp21EGwvaoFddHDsKWGZ6UFFTrUi/qoRq2ikgTpXJDcw==","signatures":[{"sig":"MEUCIQC+BIzcQACUXoyW6QnTm7z1AuyRNO5pVEinNRQcTl+ibwIgXNfBwRFYV7oX40dGDIwdfW1eZM3OtRvF/cqBZ4zbaZk=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":37810,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgdV4wCRA9TVsSAnZWagAA8wEP/3PBCyEuH+cQqvRRTAdP\n9WJ1nENVx9JTTz4mE1MiHPXwj6isi4VgwDnaROipXwnftlS8mZfQ1Po7vQrL\nPimaJqq0L4dXGlU9m9Yji6duo6ts9E2W9xMi6zhdpLQFaMYYIXcc9xfeKctL\nAQdQsO4q/kML3Sur5u8ANOBRCg206U1xbj7XwvG2He6myWJ1cqaBqXfLT+V3\noZANU8LISbaDUV1PKJ3b+LzBPmDAczMxD+CrZ/fTFZ5haDMGlgkQ1xoR0gVJ\ngxP20NrpTx6T9iIzPokP3Zx3P7IQPOOik8IYtLd3l8FT3OVzcj9gdpddE2nh\nB95oT78Of46UpJtoqUUTBBiivpy/CYQSO5OPywll3E1inx79zaubLiKBHQwX\ncK30X/cgWUiymcnxsZV/BBncWHV0Ej+GUNxuNfB3PLJzmre1Dn9OotZL1TDm\nWfkWKBG62aD4RbUcP4MPIRfv3cY904WFawyOkDW5ZkFa8T6N1rfbwdcKnklB\nQkb7SNIZFyD8yg3cNexx+53gmpfMBKFdIljUUjW+8XiDkxUBOn6V3JExZ9IU\nfqYGv97e/dvzXJ9XaPtvFe6Bqu4D5qE5wkEVjKvutM567m6KiBT5cvKzhXP1\n3w0mbu1NwVjWYGj1rIo4d0Fw2xVfZrJd82VEbTiZeJWbrbJKIw8wkWdtCdG1\nxveQ\r\n=FSDd\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\n[![Publish Documentation](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml/badge.svg)](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml)\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"9d3083bd3e6bffa048b7ed62aee5fc82ef3598e7","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint --typescript lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --typescript --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --typescript --fix"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.3","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.4.60","@balena/jellyfish-logger":"^2.1.24"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^26.6.3","sinon":"^10.0.0","deplint":"^1.1.3","ts-jest":"^26.5.4","typedoc":"^0.20.35","depcheck":"^1.4.0","typescript":"^4.2.4","@types/jest":"^26.0.22","lint-staged":"^10.5.4","@balena/lint":"^5.4.1","@types/sinon":"^9.0.11","@types/semver":"^7.3.4","simple-git-hooks":"^2.3.1","catch-uncommitted":"^1.6.2","@balena/jellycheck":"^0.1.1"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.0.67-renovate-non-major-9d3083bd3e6bffa048b7ed62aee5fc82ef3598e7_1618304559710_0.8564257740933172","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.0.67":{"name":"@balena/jellyfish-plugin-base","version":"2.0.67","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.0.67","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"5356ea63a12cc2d953567803679d292e019c3d98","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.0.67.tgz","fileCount":18,"integrity":"sha512-/imZ/3iGNAHK+6MvFdy/+ABakTYaqbWVxE6IpNr/1z05qw+DWIJK/mO/Gx2GyLj2Mw1aH0U9Bg969b9bIM2THw==","signatures":[{"sig":"MEUCICYkzGBtvBsvaVS/1Ozn94YhJK6tzWg+E3wXvbEX4faGAiEAy9QssFVbOCBzFlgUffOuUVVhxMalScpZzKZCBEPGl9c=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":37750,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgdV8OCRA9TVsSAnZWagAALDAP/jEZmpusFvMSBW3gsO5D\nmS1cHqSAwpsqoe2qFjHQV/leDNy1IDCX2cNWZ/bxp/92/n7XzT5dB8DttDgd\nVsbgg07hH6jsL2tbI+x4v+66GGXsHaN1GytZgzuFniz1Yze6F2dwQBWl1UQN\nzG8mst8TkKh9/TGW3XnD5a+KGKQfO+6kWaeuGhIKSIHmx3uWH6ij7Yy+h7jW\nQ/tmnqCN01f+wdLEUjAyTgCy1AUHV6PxMemMaPGhaYeVmxOK8lUc0bhWu0L8\nwFElZeuq5F4kVsP0xlJZnZoyueakWHfb5UxY838fx8rcFWY4npQX1MdZntpx\nxgS3Y78Vx8EViCTnWEyCX2qzpagd+ZNmqKKPBiR1prlZwAjx+aDWn2AFlvfn\nu3DqNh9o9sbdxCu8T0xTBa0xa3L5Gb1zixB7syga4+4o4x4DToPCWtz3r/Xg\nxdzefHnUYOTOGrtqeeCw8fnzJCnk3kHm18WuFEH0ip5wYIT7DTFeySb9tGJx\nagarLaX47rJxZAEHzgQypBqa5IupSPJ102Cv3U7ssr13/TEAj81OeF5DVa4V\nG0KNwii9RPAK/d3UNvKPrvpKrpIEgN+uUtkJskDePtsexGJzR7eBX17dhOzn\naHrKIANWXZky7wBniQBtKV2cqsy4h3hKWCN2c7GxM5jBY6peHZGSzBhZHqWH\nCG4U\r\n=qD4t\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"f63fdb2613283e82191712e27628f685961a01ba","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint --typescript lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --typescript --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --typescript --fix"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.3","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.4.60","@balena/jellyfish-logger":"^2.1.24"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^26.6.3","sinon":"^10.0.0","deplint":"^1.1.3","ts-jest":"^26.5.4","typedoc":"^0.20.35","depcheck":"^1.4.0","typescript":"^4.2.4","@types/jest":"^26.0.22","lint-staged":"^10.5.4","@balena/lint":"^5.4.1","@types/sinon":"^9.0.11","@types/semver":"^7.3.4","simple-git-hooks":"^2.3.1","catch-uncommitted":"^1.6.2","@balena/jellycheck":"^0.1.1"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.0.67_1618304781695_0.3097383588945728","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.0.68-renovate-non-major-297880d599ce273579ae669ac2e50facd8fc4a9a":{"name":"@balena/jellyfish-plugin-base","version":"2.0.68-renovate-non-major-297880d599ce273579ae669ac2e50facd8fc4a9a","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.0.68-renovate-non-major-297880d599ce273579ae669ac2e50facd8fc4a9a","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"b5feec2ed7aa19523f152be338e04c0a8c48c7f3","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.0.68-renovate-non-major-297880d599ce273579ae669ac2e50facd8fc4a9a.tgz","fileCount":18,"integrity":"sha512-tg5VUFx3nYX/34UnERxxhMHfVOdo44yWUVdhUla/nlvUdw7OflHHCI63Re3OZi9/bM6m9QeTHTpa+mKTuRus+w==","signatures":[{"sig":"MEUCIHcwQayGGQ+jTWcA4+MTZvNaZVIJTFDy21Hzck+045avAiEA2LPbLNRdsHco9ksMsEK7LIqYCokP4+pKFrE2+UERSuk=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":37876,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgdm7tCRA9TVsSAnZWagAAEUMQAIOogErDMi0kdtnoXQ91\nF6e65bAMHEShVsJYSxILHBFjKCwELg68Hgf9KNH5ZCOrr/kTwOwd2l+puI4y\ny+4sy5BzyFZnpRhfHMj0rJpUoTkTdrklFpnJ/jamJII2hzjggyPBpkZfmHZU\njV+YttaD4ba9QBTJoFxb5caa/S/my4E9m6KtxtHijCmF+3x/NYe6my34QoTQ\nr3J42GHEWgUGxnpKgWxEf5XD3ANgnf0SkqmUCYyJg7JENjW1jGcpc9vBqnia\nNFVGIWPF6FQR3Mb87TcsU7y0P4fM6GJkXzUNeZFDZvwIx3gK2sjOkAB1L+zN\nLIMiZy1XBoisIYXXvWPccTIjNl2S59vSg9ZyviWYdLaiRVJ8RhYolM9/N3i0\nMb5JLAJfd7WlA9NOfkNV4/n/QB0JCtnfQ5KMwJqQmSVBrOdFPFjwl9EVOV1w\n953sScLGHBKmzDhPftSrMSbpXg4fJNyp/TgPw8uTLghg2q6YHMcob3em5gJ5\nil69exbA3XiqvqZzsznGLjyiaOSoJK4DyF2nsqVuHz/Gp0G61xeKwh7gCpCX\nkq4G1ZrrUE6r2jERZAIdnmYDJKO+bHbDLpzhs8aqV7tTwfH9cuAdxLKdi5Lm\nbWmFy/Wwqk5UxJBddqkoDZmchr6X7XN2PW2AM5XgGjsARlj+Nq+NtaOdDwk2\nAaZW\r\n=KrWc\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\n[![Publish Documentation](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml/badge.svg)](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml)\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"297880d599ce273579ae669ac2e50facd8fc4a9a","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint --typescript lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --typescript --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --typescript --fix"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.3","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.4.62","@balena/jellyfish-logger":"^2.1.25"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^26.6.3","sinon":"^10.0.0","deplint":"^1.1.3","ts-jest":"^26.5.4","typedoc":"^0.20.35","depcheck":"^1.4.0","typescript":"^4.2.4","@types/jest":"^26.0.22","lint-staged":"^10.5.4","@balena/lint":"^5.4.1","@types/sinon":"^9.0.11","@types/semver":"^7.3.4","simple-git-hooks":"^2.3.1","catch-uncommitted":"^1.6.2","@balena/jellycheck":"^0.1.1"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.0.68-renovate-non-major-297880d599ce273579ae669ac2e50facd8fc4a9a_1618374381128_0.014377431197873047","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.0.68":{"name":"@balena/jellyfish-plugin-base","version":"2.0.68","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.0.68","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"0a3d358ded9269f3b3814ea45c5f95379f2902a3","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.0.68.tgz","fileCount":18,"integrity":"sha512-KRMiFECb4/L0iRTK7yv8Fnot+T2KH2zsdM7E0CHvJGPbYfqcJp1HwZF8g4yVAjH2W9Hat9+R79jZHa5qFJTn5Q==","signatures":[{"sig":"MEYCIQCzmHy3pCULTYG9rSsSKoaAQ2rWsNNRifDN9zfpdfzZEAIhAKG/sZbB/VxiFaRPLfi3rWfmnHPObGDAK3/YfRKg/wva","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":37816,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgdm/ZCRA9TVsSAnZWagAA4OEP/0udtmk8ytU95gqo17Eq\n0f+zP+n1ws3dL/ehrBWcqYXrDLPQCaamc2trzm8HGaAWF0EEhT7aiSCpAyFl\n0d+LuHWggMhMPcCMWWep+B9ao6s++9Imsi57UH/fYczIsD31xdjWkS9+jx59\nuP3rYIAoie6dMpXDLB2yCkavhspmDmhyIAuhlgYaPiBwTq5eBKOccd9+CQkF\nOAnyKIe3QuTc1lrlkpJsIcc02PcVUBJ++37EHB236g/oeFRs5ic6re4rpScG\nFwd2oNOzmcbYP+vLG/petJwk98N7xGRseMmCqMGUavUc/g2dSfrhav9x3sgL\n8io86E88v8czGdPkkAYgiTS1u1vW4iJmwBiL4Jt8Xl9TdTqG48Cxl7+Zmvgl\naNDIz2DZWIf52z33qeLUv4CnUJD2o7WyylN16gZ9zT0Sy5hEX1ynf7iP++7h\nHGpC+Y2snWP2hUvYfl+3/fB81JXvZSCWUeJ1rfApFzJzJwpZn7QMicwu3XAY\nMnmjCCVMum7yaZFXnS3ovKrV7O4K295jWq2tILn+/hNiLBdctC2hLRuM0bEx\n/BwMWXH8+fkzaNBDHR9acYCeavhvJye2yc03NN0I4ZTFXUTYZMu2oqU1np+H\nEJfFbncnPh0Oa1+fvWs/5FrYMzypOXkmRqRPOIn6F3VU77ZrLpWARjeIl5FZ\n+gme\r\n=rqj8\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"f40daa679b3105467c200395ba15392aa7072f91","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint --typescript lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --typescript --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --typescript --fix"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.3","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.4.62","@balena/jellyfish-logger":"^2.1.25"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^26.6.3","sinon":"^10.0.0","deplint":"^1.1.3","ts-jest":"^26.5.4","typedoc":"^0.20.35","depcheck":"^1.4.0","typescript":"^4.2.4","@types/jest":"^26.0.22","lint-staged":"^10.5.4","@balena/lint":"^5.4.1","@types/sinon":"^9.0.11","@types/semver":"^7.3.4","simple-git-hooks":"^2.3.1","catch-uncommitted":"^1.6.2","@balena/jellycheck":"^0.1.1"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.0.68_1618374617411_0.741417539120619","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.0.69-renovate-non-major-de55619dd03cd67e54b056892213cf3ecc254be8":{"name":"@balena/jellyfish-plugin-base","version":"2.0.69-renovate-non-major-de55619dd03cd67e54b056892213cf3ecc254be8","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.0.69-renovate-non-major-de55619dd03cd67e54b056892213cf3ecc254be8","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"dce0c04817d1de9c8f757dbc369a878613011894","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.0.69-renovate-non-major-de55619dd03cd67e54b056892213cf3ecc254be8.tgz","fileCount":18,"integrity":"sha512-JCjtxTGYwiua2x12VU6cXpXWElx8gbYxhGj0L/5c7+GysPOl1fYc87Q7IoKHs2Lfd4+tPmEHyzSNopkiu1s6RA==","signatures":[{"sig":"MEUCICgqVd0ASFD+vHRiAZ56ozh1hDXpW3dTS+CXeTw/S+c1AiEAuh0D17hs+MbMdeBEde0B7xlRRaGMw+eW03fYG6ayBuE=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":37978,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgdraaCRA9TVsSAnZWagAApwoP/Rmewxgm0ZfG1mxRQG8M\nihUextFzgTwK5PJF5+5ODR9I3VFho8aipLDA9qbh3w38Xq/3O2EecpxrWNa7\nmgsAUHvYHmW02Aag7hUxSA+BCHVbdKQhIsi/O546qg89ENcnEXu680Mf37C8\nO/l84ScLav0dPcJtgWLMnGUEUrXfHWef7uG3qvCAKEgWwmUj297j+6gvC6ZH\nI6FvwFFEyY6cBT04ucS2p4oYfpdnO2kkNDHL+w5dH0x9lP+mgy11/P4eGyrd\nLP9AYvLGSskXydYZQ/ABi6FRVNRTFXqoETNESeiCGC8VAMewltIuzLoSW27b\nf5AF/hj3CtjDxOP+7PJRIjztEGJa14ecNBWmpg4js8POewkaOfG1ZIw6ANGq\nStR2Q/7oSVt8YG1EVtz8oi5fIcCIiJahy06rXmg9eardsi+RwzXzlJjl/tU4\nLye1DyeYryrvTyqPEfPu4JlYtS7PvF4nhMEJas+H6HDVydUJ6tzJuuS7GLGe\n2AGnCXluR4CLGZfH0QpM3d0ucBHP+Vl5fNFgD9XjmeU1M0ifj9SsLp6TYe5S\nOrIwWAQJooIv+Ah3/vD/jmJ7k6TyhLsKCSLjP1k5l3QFR9W3wWW07GmwsApu\ng7GqLmBYbT3QqRzmunkyVzaCtamDVtFm7LXimbbKC3DjY6dsQ8zv4k2paIki\ngROP\r\n=1lBh\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\n[![Publish Documentation](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml/badge.svg)](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml)\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"de55619dd03cd67e54b056892213cf3ecc254be8","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint --typescript lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --typescript --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --typescript --fix"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.3","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.4.63","@balena/jellyfish-logger":"^2.1.25"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^26.6.3","sinon":"^10.0.0","deplint":"^1.1.3","ts-jest":"^26.5.4","typedoc":"^0.20.35","depcheck":"^1.4.0","typescript":"^4.2.4","@types/jest":"^26.0.22","lint-staged":"^10.5.4","@balena/lint":"^5.4.1","@types/sinon":"^9.0.11","@types/semver":"^7.3.4","simple-git-hooks":"^2.3.1","catch-uncommitted":"^1.6.2","@balena/jellycheck":"^0.1.1"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.0.69-renovate-non-major-de55619dd03cd67e54b056892213cf3ecc254be8_1618392729981_0.41307610828616426","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.0.69":{"name":"@balena/jellyfish-plugin-base","version":"2.0.69","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.0.69","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"8c352467ad8e64ac6c00c664d24c902315b29956","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.0.69.tgz","fileCount":18,"integrity":"sha512-mHjNGkZyBBDC2YahZB6rjzwW3dENp2n1fTyDJIARQPQbmGnGsn6u8AsSe0qwB4UeimibBA4+WmaMZN+nDfeVcA==","signatures":[{"sig":"MEYCIQCPbRzJ4iYwf+bJzU9WpFLQH7OJ44vgxKC7SONS8EQVdgIhAIOtkzpfO14g/J/h1MXQkXnR7R7lhhPRtvZYpxB2UFL5","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":37918,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgdrd4CRA9TVsSAnZWagAA//IQAJ3Y1KBCkIsdphYfk72a\nu6+1Tbh5t18QqdVZE9jMOismmFwIbdtfBcfO/s4gcB/0xxP4gx1aUIU69zJr\n5d4VthDbmdnpPA5+/bJm5xtCkk9cf3ZnvRz5r9J2VpSKY9WS6tKHsz1IhTXJ\npjdZ0Hl8gSuqQatmpPDs/31oKEfSp4J//ipQ1l98QTk8swE4UE3/GwCtijGO\nIUN4tUCMqenLLXa0wQB6CXgT0IcbdUubYGnSn0tLLr3YcUCyiRs+owXymzUX\nbPQ5GmAdPHUoHbavUiXTAf5EiIRlMr84ApUVFkOjTAWQZRSw9hHmyMPHHohF\nuZBY+PunH4Jm8P+lOD0HoKBsMKQ1g9jXXdhuULmdRAaErGHZzwhhb3b6RQk+\nJPkfthHyMpBlXvxXb1puNa1Joyt7oOPmxCwmAVjAS7Psh55qrMX4tDwFBRMb\nODL8OvRn7pEgk8GImlgOJ7h3MLUMU9rLKyt++rIm73BdWsGb71TbVJqTCgLJ\nM08E1Jt+coM83cVK/lzgnIWodO7URpQ8Djk7P01o44/djvReHAVetF7uCagG\nv8/EhURB1z6eVS//j9r101gXgOiwSe+lL6l1C7w8OOFfugCyfR/pIlF7Y2Gq\nx5F8uNN0jGBDNkFCfwUnNNdgAfEwQMh2LH0JEQukUNUNY7dUcqYUs7eIuf11\nL/Ui\r\n=idG6\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"a5e8b2a2a403ddee9e93b77dffc319ab9298b68b","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint --typescript lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --typescript --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --typescript --fix"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.3","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.4.63","@balena/jellyfish-logger":"^2.1.25"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^26.6.3","sinon":"^10.0.0","deplint":"^1.1.3","ts-jest":"^26.5.4","typedoc":"^0.20.35","depcheck":"^1.4.0","typescript":"^4.2.4","@types/jest":"^26.0.22","lint-staged":"^10.5.4","@balena/lint":"^5.4.1","@types/sinon":"^9.0.11","@types/semver":"^7.3.4","simple-git-hooks":"^2.3.1","catch-uncommitted":"^1.6.2","@balena/jellycheck":"^0.1.1"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.0.69_1618392951799_0.10350058901352077","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.0.70-renovate-sinon-10-x-a8d3bcbac9987c51a8d495ce7cd3d86a8a13de36":{"name":"@balena/jellyfish-plugin-base","version":"2.0.70-renovate-sinon-10-x-a8d3bcbac9987c51a8d495ce7cd3d86a8a13de36","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.0.70-renovate-sinon-10-x-a8d3bcbac9987c51a8d495ce7cd3d86a8a13de36","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"e9ea47a55fc6de9013a2fa93391facbc55f410f8","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.0.70-renovate-sinon-10-x-a8d3bcbac9987c51a8d495ce7cd3d86a8a13de36.tgz","fileCount":18,"integrity":"sha512-rTtVoR/6Bc67b80UMuncC50GzPNt/f/dEbZPOA+LsFrtfqreGb2GMHottiOVTdbhTIaLJ/BLiWWkoMCTEol5jg==","signatures":[{"sig":"MEYCIQCA0P1qZK7OOtozjaDRfsNKk9YzaWJRvtvx7imB7jvx1QIhAPNqtX30H58ZJeRZ8nc7oB+Qhq2DT/YHxbSpqTtymEcJ","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":38066,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgdrisCRA9TVsSAnZWagAAvpAP+wfulwyS4jkmiy/6+nds\nszw/KUzmj32YD1bEy5ogyAshWTQkhrK6y4xiaO+7vcMNeffBmYfscgVWeyfm\n87oDTPIgiiDq6Tb7Qi94H2BcEcimMRBZ/bXhtuqSTPr6AYAl+VxwaeOJIEd0\nxwmlPkWSO//J8m/ASSzkrlVedOj4vtnxXhEWAG/n7gg+PR+PPyfqtdXXqBvF\nlEo5+1mGLIxSZeO3Tm0wd0G3OPi7nq90zXVY+viQPzj7u5Hgwzww0eO7UXw2\nkyTboNW5GzWcbJRNbfXffLaav87smc9Vm6iUX+Id3Rq4Yj7YxYIXZl3PTsGn\nLKLjkgjR1eZeeVx+HvnJTl66Pa8lQGESP79drWjbcX5nNXXltfXNVszLpgwG\nNocHSjoqdzj/D67wqvDEA+e6V7Av5hIYPv30SS9en0E/2Hcvyk437Qd48F9i\njcGcAYXG5m9VFunItXbHr61SyNoHQMymYnEfa9A2JPX+LE7dsmjYnGBmeLpJ\n06plVx8O7sxUBmFkx7KmxJKyqhRCpoLUnB4PISHMAxUYrj/2CrhYrPi6Kwy1\nZrP3RrKBpEedW8vAPHxDXIXMIBJBdH94WfDy1kaDrNO59mBjGSL3y7igUTl/\neQnfFWNLK3WUr2xXXobJOMcDxmBD1FnoS/HcYF9WaZszHh8JmBYBT/mLkNYQ\ncB50\r\n=swUO\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\n[![Publish Documentation](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml/badge.svg)](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml)\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"a8d3bcbac9987c51a8d495ce7cd3d86a8a13de36","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint --typescript lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --typescript --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --typescript --fix"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.3","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.4.63","@balena/jellyfish-logger":"^2.1.25"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^26.6.3","sinon":"^10.0.0","deplint":"^1.1.3","ts-jest":"^26.5.4","typedoc":"^0.20.35","depcheck":"^1.4.0","typescript":"^4.2.4","@types/jest":"^26.0.22","lint-staged":"^10.5.4","@balena/lint":"^5.4.1","@types/sinon":"^10.0.0","@types/semver":"^7.3.4","simple-git-hooks":"^2.3.1","catch-uncommitted":"^1.6.2","@balena/jellycheck":"^0.1.1"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.0.70-renovate-sinon-10-x-a8d3bcbac9987c51a8d495ce7cd3d86a8a13de36_1618393260076_0.7468277507838641","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.0.70-renovate-non-major-922568b751ec306d3cae960c2a8fd7a814208def":{"name":"@balena/jellyfish-plugin-base","version":"2.0.70-renovate-non-major-922568b751ec306d3cae960c2a8fd7a814208def","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.0.70-renovate-non-major-922568b751ec306d3cae960c2a8fd7a814208def","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"33cc560eab650a676ed85a87ac88fe44aeda175b","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.0.70-renovate-non-major-922568b751ec306d3cae960c2a8fd7a814208def.tgz","fileCount":18,"integrity":"sha512-Uu2Ak0cmWpjh7EwqkFptONgGRWtTriHHnts9C+mWV6ZDGYo1typzg/q2XeQ30d8NjZWiR87+6hjr9biyp1gSMg==","signatures":[{"sig":"MEUCIQDqG6q2bYifAhz7B2RCfbzT/5jJE2pPzCrnyNOG+Dk6XgIga6EL+Jtko9lgCAdIjrC6mr1QLJC4pTd+Bc6JR6JtOUU=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":38080,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgds++CRA9TVsSAnZWagAA6NYQAIX6zvTWhHuYhf8HBkKp\n0wwnjaMB93R0isnzD7OrIACjMK2ZWubghIzIyLy7xEodr5kds/Bdbt0eEryW\nrg/E1mxCYzoO4KkSQEqIWrWM8jdu3Uk2+50qum/FOajBa+6EC7oEocWU/GgA\nIyk5Wnna703X9gAdc2Za//uaatobaaYUf8iqsO9JXlFv0zny6n0uafgOkuGk\nd/Aqnsbzn5ZFmWgJMRTIr9a2eugSwMwJuEp8kWVjBBIKXX10/NxO6yJwj3+l\naR1gU2/Kmt69gEeZBjCc0B941geHMdDcKrSwmk9i86DiGXOhW3J3QM2yT4cI\n5n2p8laHsJJYUy4cwiXZM3KxXGvLS+chjo1XtGdNMXeO2iGFC5ZtJIaop+UD\nUrg2SI4IQu57FMiiZr6PXV+Ku26Ef6CIIDLNlXWyP+FdcUQ/Te6gSOP4oVcc\nOq1WFQBLHUDQ449HidaaOQ3LnPhj5nC6Cl4dlUqK5pMuBKwfH87JM4hQOpGc\nlLi3zC1wvfmvMQnAtH5wnNkhQZRTmeiuEEqYvApuF1ODcUTsbZH59xmjvS85\nwv21ursEvxXfwmUxPQi/uyawtwQVmP39SRkJ6VXkO3X8wgjFE51moTjQz771\n+PP+jHqHBM7GuaAsHiEd7Vuc1TDEqwWgbAgrbB0ATy+WjQ3TmnLos3zVCVTS\nyzUo\r\n=ds3G\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\n[![Publish Documentation](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml/badge.svg)](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml)\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"922568b751ec306d3cae960c2a8fd7a814208def","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint --typescript lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --typescript --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --typescript --fix"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.3","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.4.64","@balena/jellyfish-logger":"^2.1.25"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^26.6.3","sinon":"^10.0.0","deplint":"^1.1.3","ts-jest":"^26.5.4","typedoc":"^0.20.35","depcheck":"^1.4.0","typescript":"^4.2.4","@types/jest":"^26.0.22","lint-staged":"^10.5.4","@balena/lint":"^5.4.1","@types/sinon":"^9.0.11","@types/semver":"^7.3.4","simple-git-hooks":"^2.3.1","catch-uncommitted":"^1.6.2","@balena/jellycheck":"^0.1.1"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.0.70-renovate-non-major-922568b751ec306d3cae960c2a8fd7a814208def_1618399165685_0.9125494694708518","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.0.70":{"name":"@balena/jellyfish-plugin-base","version":"2.0.70","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.0.70","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"010bea48bf73d363967355fa7164646c6697b1fa","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.0.70.tgz","fileCount":18,"integrity":"sha512-peptsfebfpABn5VII19+XeVt+Z3Fppu3Lnk3moH4DvyBN7tXSDIZ/uT3MLCm+YH4rLJSSgAt1lxsIT6YWcsPCQ==","signatures":[{"sig":"MEUCIGVbBsRlFd25lp9ZsUxUCGbhrWGQMJxqiu3p47tcX9S9AiEApDYfpOvjs019JjfdNNAXqKKiKo34jZneEDjqXLZVFzk=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":38020,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgdtCKCRA9TVsSAnZWagAAFBcP/1OG770KzEUZkFh0OzGY\nXk5CNH+TpdK6jMvdQSikL5nIlp+AOhbYiS8onCdph+rLU6RXB+rS0uehUx+O\nCn0lfMN+ST+Q/1RavZuBQm3E84YkLaqTTfjU358diRhd2U5QUK0QPxpt6Kad\nieNCq9d+jSvU3ktq5B4l27cdv9PRbNLxqW0QUqtkor6nluvddpYk+iWP+tLh\nOjo1g2JKiFSKE9RHvneJssoVmeb7uWC+BtgxIZEqcy3NXmsmzony2a7tXbSr\nemI3IWvAXwFCBTnINJibjEDWp6Hr1fcXqIhcdt7KCinZmG+wN1+2htq5vruH\neZDc/Di02kgNACeLEEuM7HaLqP6SopTa+MC5kjeJfLnspRTaaD72l2loR4j6\nHn8kbgfTuJLeo/bXiEoiKKoqEf9CUGDq/4oTSktb8StuJ3S94Lzi3W+V8Tmo\ntWEGg1gXGiCTKSOQAa7+7vx+uImejmoq3xQvkDEvQcwNkekBY2hsXEGG1rhK\nfksByR9BAkd+4bnuKuhTg0SVrSNCGJKNucsIA8zXMlTVLR2siyeg00+hIrZu\nA0MkqP97tmWNmbBS3wPwoVGdnzhaS9Bf0UNBXwnY0Zo/ijbH8wuPhGEFFD/z\n0ygPN5CgTQRlQaKTLGbAZNmqvl6nsQXsguXMIxKpMuxFvv8PJF8F+7P1v7fH\nAlqu\r\n=5NDP\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"2e554dea058451e5b35431473b091df6ebb8bcbc","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint --typescript lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --typescript --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --typescript --fix"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.3","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.4.64","@balena/jellyfish-logger":"^2.1.25"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^26.6.3","sinon":"^10.0.0","deplint":"^1.1.3","ts-jest":"^26.5.4","typedoc":"^0.20.35","depcheck":"^1.4.0","typescript":"^4.2.4","@types/jest":"^26.0.22","lint-staged":"^10.5.4","@balena/lint":"^5.4.1","@types/sinon":"^9.0.11","@types/semver":"^7.3.4","simple-git-hooks":"^2.3.1","catch-uncommitted":"^1.6.2","@balena/jellycheck":"^0.1.1"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.0.70_1618399369825_0.8587552670956136","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.0.71-renovate-sinon-10-x-c1f2a4716fadf6a488dade010e57c26a3e4a8380":{"name":"@balena/jellyfish-plugin-base","version":"2.0.71-renovate-sinon-10-x-c1f2a4716fadf6a488dade010e57c26a3e4a8380","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.0.71-renovate-sinon-10-x-c1f2a4716fadf6a488dade010e57c26a3e4a8380","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"1e7728ab8d5eafc0ff6f6d6745eb6aa8aec30d57","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.0.71-renovate-sinon-10-x-c1f2a4716fadf6a488dade010e57c26a3e4a8380.tgz","fileCount":18,"integrity":"sha512-OZSxyWuX9X6pWMyOO4lQJbX5IHG+4epqmkyB1IHS0SaokBxINf81Ze2VCC9U4XWDQxDcnTu3vRUpSewySwXYrw==","signatures":[{"sig":"MEYCIQDEbjzBfxhYSxlBrsc2kvg0fBaU6+2DKndlBmB/2owcgAIhAJzWYv1nSbSssq6p2QkmnpJTlFD0cGg7bWlNwZTqsi6/","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":38168,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgdtGBCRA9TVsSAnZWagAAYkEP/10l1Mt3Rl3HXlrs1ce9\n+SZZOCimTbXe+1oV7wmPjwsMwAZP1aoHyGtnlQHezJe98cKLUmi6m3Tu9PGZ\nilsVqWGWimtJaXIjJY693wxE1vKxOfAcZjyZrhO2e55+zuegV89ObCtnzQOK\nGGS1of1YFo3P95pGY+Wip+LnKlcCMtvYhHBMR6X5S/Atk42OLzU6J19SZgqb\nmjqJqk+R8Shsl1A5gc6AyOOPtRQlz6XEj5UWmxzwp0WHdz8wf4iSdtSoXVVY\n/tWz7wwRtKa8tWBz9+PkDT/nIeKoihcG7OBdl5r2H+/PjpYYh26DW4DY+RSe\nn/K89a7QgdhoLm9KLl6ap+27mFtoJc5sHkYWXeLYjyfaPn8Cwdxqw0Ymu29M\nHg6WJj7+w8g5uEhLhPNeO2dg+KTWcnFCLYLtCD6zhIzO/K1jLH6LDxqdGCAW\nk0kQ1b6pCuUxnWhWfif/BPjx12/i2gwu72jVEJ9SB4bpblo3icRbTdZbviE3\nVDWaMK450d7j5k8fMq/ukUppn9w7kRrzHT+zWSeOSbh1ZTiNKOi6IItw0oHr\nLCImMuf1abTPJ7A1nhVpbpgYUeeGxiYoBT+D457ycB9UNzNR2J+aWwNX6Xiv\n5gqQSfjzJpgo1ezL4N6PKbQ8FdRJsVCGRcARny9FH/Hyv//grLvYA4+9AQnC\nd+Hy\r\n=m9W7\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\n[![Publish Documentation](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml/badge.svg)](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml)\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"c1f2a4716fadf6a488dade010e57c26a3e4a8380","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint --typescript lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --typescript --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --typescript --fix"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.3","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.4.64","@balena/jellyfish-logger":"^2.1.25"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^26.6.3","sinon":"^10.0.0","deplint":"^1.1.3","ts-jest":"^26.5.4","typedoc":"^0.20.35","depcheck":"^1.4.0","typescript":"^4.2.4","@types/jest":"^26.0.22","lint-staged":"^10.5.4","@balena/lint":"^5.4.1","@types/sinon":"^10.0.0","@types/semver":"^7.3.4","simple-git-hooks":"^2.3.1","catch-uncommitted":"^1.6.2","@balena/jellycheck":"^0.1.1"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.0.71-renovate-sinon-10-x-c1f2a4716fadf6a488dade010e57c26a3e4a8380_1618399617161_0.29364995810021477","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.0.71-renovate-non-major-1dcb74b83221f61ee0bf9dcb6561d65126b41d44":{"name":"@balena/jellyfish-plugin-base","version":"2.0.71-renovate-non-major-1dcb74b83221f61ee0bf9dcb6561d65126b41d44","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.0.71-renovate-non-major-1dcb74b83221f61ee0bf9dcb6561d65126b41d44","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"f07df2888f2f38e3f1a7ac76fa6285e5cfd1abed","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.0.71-renovate-non-major-1dcb74b83221f61ee0bf9dcb6561d65126b41d44.tgz","fileCount":18,"integrity":"sha512-C8HAt2wwQLZLpwBlkeXmC3bF0F9ZvPZQZfGzos2LETKy1OXDetmg6LF8dVumd9AZfmDImcZG68wS1JO3uLRyRA==","signatures":[{"sig":"MEUCID5FURL6jirK45p100MvSIL9+EUTrB+1y+iKbIfknUf2AiEAsi+lbmrVf9DOEEEaxHKYe/xSPz1gjrgwPGYnEgjoaDI=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":38182,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgdub4CRA9TVsSAnZWagAA5osP/0ZQsDSb/k13I3V7Q/cc\nDusE+mu4MW1ovioqZwr/HO0BFxWUxwqE5ZS8eX4ZLQXizAJilr75JKQaWTyJ\nQ1liBMDuWO7JVoOllBbkFW9pzxgyRgHQFzEKQg+C5W+6It83sO4x6pIA5ZV8\n0SOkcOKQzVEI1OrWc00DhlI6kuB07MImRfKBS6uaI4b6R8wNMOd7mi0q3iKe\n42Ey4lFK8Xbo4ohslXiNbtSVuMfx7clvgYwviqJSAJDeOpaA9ArMn5oAC/FM\nb2WnxG9ITjkQUyow7WRQ5e9J3bD9jUU8/oOGBHGCv7PCa5UXyKrOIb84Uwnx\nyx5gMIuewLrVzX9Oir1drOPS4NbvDjA8F23gsbZtDilajfi/KqzaFd23dpgO\nSmkz1yo0ttVqryo+7TCyfjolhYLWhZ7JzfXraJ8ah864ey0+u8Mfx/gLqu3r\nsfHv8tnW1Rjbzvn4QhhxGz/yCUkdYfdJ6uUciGcf7HaK0ro7kShHLD6gP9Ku\nJmKzhiSJPLYUC06I10pGhUO13TlFrMNjprOErYo+Ut3qg0Hi7AqKnPvjZYJy\njWbTV8BWLSjfuKDyv1DPfpKcEE4v90t7LvZmrX379p1nsmnWoUKuWieW6/tI\nRTh5I0i7KgwqpnrPexBDk+Uu+spfHRqBicOrLkBAhUNGcw+KbhzHRQxBI1Ge\nsEpq\r\n=1NA2\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\n[![Publish Documentation](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml/badge.svg)](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml)\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"1dcb74b83221f61ee0bf9dcb6561d65126b41d44","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint --typescript lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --typescript --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --typescript --fix"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.3","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.4.65","@balena/jellyfish-logger":"^2.1.25"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^26.6.3","sinon":"^10.0.0","deplint":"^1.1.3","ts-jest":"^26.5.4","typedoc":"^0.20.35","depcheck":"^1.4.0","typescript":"^4.2.4","@types/jest":"^26.0.22","lint-staged":"^10.5.4","@balena/lint":"^5.4.1","@types/sinon":"^9.0.11","@types/semver":"^7.3.4","simple-git-hooks":"^2.3.1","catch-uncommitted":"^1.6.2","@balena/jellycheck":"^0.1.1"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.0.71-renovate-non-major-1dcb74b83221f61ee0bf9dcb6561d65126b41d44_1618405112112_0.5818008089512039","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.0.71":{"name":"@balena/jellyfish-plugin-base","version":"2.0.71","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.0.71","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"720fd1d92b6d6106fe2f16c8ac0aea6a46906f11","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.0.71.tgz","fileCount":18,"integrity":"sha512-SVPE2iBG/S/Y7eziL1f1LYiUO/fYtpHu0wpvc9byq9ynDWexbJvKEI7++BRVnQcN6nl2QbdcdIZWUzyuh98bqw==","signatures":[{"sig":"MEQCIB5q9jL4kBDgqkPZ8ytOIh17/30X9HFyox/pgnv32DDfAiA8fCuVARHIkse047UCCzkOgcw2BSEX55M8Y6jOM85W/Q==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":38122,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgdufiCRA9TVsSAnZWagAAI5gP/0GtBSFvX1s1gCQuE8yN\nmEVIjxTgKHOgkU6bplHuDNAZA/Hy81i/ZGNHdhuYC5cXgs5oIF8sAr1d9jK+\nsg/JNAW8OuvWjZe7lcMfvnE5SChXLL1Qx22tnIScUlD/7aDyTmeaIc4OZDe3\nKOb3fyWUjrgyTx7q+PCxvHcGNQb0TJJ3x9ivpZCS1Rz6h+uNYden0zmpL/pw\n6zA7RN3ojphc95uVSlY1fpH0nVxVZIwMVwr0b6hGMQ62GSe5btM3+V9Wdlf9\nALh2Xh3REvBH++aIrGYy9VceZ17LNVMYLZN4eygHGor1osaEMFLSs3QUiu8m\n0ngUFB2Td4gbWM626OuBbuesAGCUISUq62TNimj1jyhWPDu79OZWOGsUCrBW\nJoigoArWRnU690igPBbLW15kyH2r4Se3pFSScO13ptW5kz33R5rqgsxaP+OC\n1122F6sRID9ZEfxkv2gG73V1/adc8hd6YCEFRRK0o+yH+J3EfTzNuIRRaKTz\nq+yN/90fzcTwcRM3lyf1P94aLEdHvsRgPJnhyMYK+qZotsdBPTYlIq4Itpmb\nbnQ1dNkH4IcDgckVe1HN7+pWcl2JvOQ3xRz9RzhEs0tzbkyw0VV/4aBVlU1P\n1iRCdfKcRPlde+0ou4sEH/BGtggYNkOaAbjuEZvI++HvnzMSm13zH8Mu0qe6\n2Xdg\r\n=v4RK\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"f013e4f127e01df99677c88e4b14c757f39a136a","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint --typescript lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --typescript --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --typescript --fix"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.3","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.4.65","@balena/jellyfish-logger":"^2.1.25"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^26.6.3","sinon":"^10.0.0","deplint":"^1.1.3","ts-jest":"^26.5.4","typedoc":"^0.20.35","depcheck":"^1.4.0","typescript":"^4.2.4","@types/jest":"^26.0.22","lint-staged":"^10.5.4","@balena/lint":"^5.4.1","@types/sinon":"^9.0.11","@types/semver":"^7.3.4","simple-git-hooks":"^2.3.1","catch-uncommitted":"^1.6.2","@balena/jellycheck":"^0.1.1"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.0.71_1618405345951_0.3596013590853553","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.0.72-renovate-sinon-10-x-b633dfebabd700cefc885359eaadfab175d7db91":{"name":"@balena/jellyfish-plugin-base","version":"2.0.72-renovate-sinon-10-x-b633dfebabd700cefc885359eaadfab175d7db91","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.0.72-renovate-sinon-10-x-b633dfebabd700cefc885359eaadfab175d7db91","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"f3e6a0805932a115f1ef6a3aef57ab000e30b174","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.0.72-renovate-sinon-10-x-b633dfebabd700cefc885359eaadfab175d7db91.tgz","fileCount":18,"integrity":"sha512-tDJnxbPHmTK0bTs0A0FXv+FcjXuDBI8AW8FnzMr70A+st0eWJqSx/4dl5veqB6zDHs52xOYjOlaUkv94IXrnBA==","signatures":[{"sig":"MEQCIDoUv6FNAynsTYqwjTAviIKVnRQyDU+QlnKeNzIUGNWtAiB0skIxy34ymzjde/a+pTLNECdW6xjX0k3Ewr3iyFLxwA==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":38270,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgduhwCRA9TVsSAnZWagAAoxAP/RMVeEVGKAOo6AQjatbY\nPDkhOFpGfhWubmdjWIYAqYaDRlzcMt6pB6U5E+bW/qxtV7c+PTicXRwjHeky\nN3Y3A3nJh5NhWvzH8IQYsHNczcfDSGKEzOo3p1Y40YuIQLbXoPSUN56I1Ujy\nrNODAeqHlpuqv9hreeQGpAdApWazi/NrAQG9wV5ZShyo76SOODEruvBnq63M\nC4nhKNJgIhFSRB7pirpfmMcRLOr0p8qlWm99YBA9eKf70+ScmCWOUIizXEO7\nL1dKvmt5CPJmn2YPMTUhRWsLZDhAH5nFwit7v66HJrb2c9TTw3v+GodfbcwC\nmv/a/KMYu09bq4On9gu2BruhjqBVLa8pol4iOhHOD/5sJkRVOfQ9d+01CezU\nMsCe71R3hOdaBr5VQYJMa95x8hUN3DmG2NUlZ3VA+/XJ8XxjoKUWkPD0wIBC\nkgysXI9m6ps/RfYSUwCchthkALGjZwDxA4QB/g3yrAyoFz48PXUEVB44eVr4\nsTp34s4NGNwQmmnuMqwagZjOS8Rfx3wv6yadCR0zwJNWjnkrtEIbRJk0KNPO\nc3kM8f4eAOE9tKmWBFHFRfxsKU/fBE+O/LM9Z5GAnnOVfydOBw88Sik7uMPY\nX/IkQ3B8fKA3mFAQ2Rxp0Nbi7AL761v9uGsYwuZwQNZzAqyoMSopUQKHGB9j\nzAOV\r\n=c5ix\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\n[![Publish Documentation](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml/badge.svg)](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml)\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"b633dfebabd700cefc885359eaadfab175d7db91","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint --typescript lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --typescript --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --typescript --fix"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.3","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.4.65","@balena/jellyfish-logger":"^2.1.25"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^26.6.3","sinon":"^10.0.0","deplint":"^1.1.3","ts-jest":"^26.5.4","typedoc":"^0.20.35","depcheck":"^1.4.0","typescript":"^4.2.4","@types/jest":"^26.0.22","lint-staged":"^10.5.4","@balena/lint":"^5.4.1","@types/sinon":"^10.0.0","@types/semver":"^7.3.4","simple-git-hooks":"^2.3.1","catch-uncommitted":"^1.6.2","@balena/jellycheck":"^0.1.1"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.0.72-renovate-sinon-10-x-b633dfebabd700cefc885359eaadfab175d7db91_1618405487938_0.5852418036820699","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.0.72-renovate-non-major-254cd087ec298ab374b4ab95c94a74c2f9e6fce5":{"name":"@balena/jellyfish-plugin-base","version":"2.0.72-renovate-non-major-254cd087ec298ab374b4ab95c94a74c2f9e6fce5","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.0.72-renovate-non-major-254cd087ec298ab374b4ab95c94a74c2f9e6fce5","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"8b291a67691821b5af551f82a8f7aec137d06dcb","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.0.72-renovate-non-major-254cd087ec298ab374b4ab95c94a74c2f9e6fce5.tgz","fileCount":18,"integrity":"sha512-h/+bZ5Sy9fYm+Av30Xt9zqZ0F5lVeujvLjCFOyC70nRBAJgXw0vHqTB/gx6PR5sdSpOj8dPV5SNtuGGwv5POaQ==","signatures":[{"sig":"MEQCIFVMQqftvtluilBTa4TkHtZJ/Bkkmq1abtN+6/S5A/aJAiAjjv/8bAM8c56ztJyfgescTDqxAE0EJOBLoyj9Y6S8AA==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":38284,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgdxn4CRA9TVsSAnZWagAAK5EQAIOqalaGVkkDCHRLmF3h\nLk9L36Fe+8spR5nNsKxN1qdaFhFFV0q+GvfBWYj04i1EHbzamVmp/n1WsTz1\nlTnz3/Ax1TSBoyUj/OqlXzWytnwmN5Asx0Kje18vMn8gzALUtJ3uWKreRlSl\neX5zkX1/gpEOAAbBwyEwkiNNsOtptL0RxdDhumPftBXIbKsIUT935eQNTftm\nvEvAcoquSikvR69y8OJRhrJPt4xHEt5aYBPezz2DIVBRLccM4qSzv5CONYpv\nBjUe1P7UN+cHyovBhOzj6yDaQXjNpLW7NQZbdYSS/GXv86qWfCkH82Jh9bEw\nN15zCaxUnR+i1Gp/K1SoxrResJUSbA5TtgYbeqojokL2NfHW+QMWSWf0Q3cW\n3ZOcqThbUms9A57+RjSn+D2A9WvHQaMJIIc+zqSW2XrPByd2kDjRlvaA2ruW\nu0WIcb75yM7C5Y4xE8Vif0VvUAeqAWEQh5ZFVPXpF1Nas7q+6/PbQqgXbGJT\nWGhL8WB/fM7MP2FFNAzRb5C28aZsbzQTWOzkMhRW8Qlsi5UqlMirHhQduowm\nN2468vD9FqoMVH46xV59W4ZIMWkv/3wmECVrJYFJjnXZzWW+mH016+ANeqtr\nWLJFzj5qEWMdKTwkhi/Ezw4qIGkIun7L2AE5wtqevOGzbP0xdUtDa13hQup4\nmmdp\r\n=sDf2\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\n[![Publish Documentation](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml/badge.svg)](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml)\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"254cd087ec298ab374b4ab95c94a74c2f9e6fce5","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint --typescript lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --typescript --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --typescript --fix"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.3","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.4.66","@balena/jellyfish-logger":"^2.1.25"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^26.6.3","sinon":"^10.0.0","deplint":"^1.1.3","ts-jest":"^26.5.4","typedoc":"^0.20.35","depcheck":"^1.4.0","typescript":"^4.2.4","@types/jest":"^26.0.22","lint-staged":"^10.5.4","@balena/lint":"^5.4.1","@types/sinon":"^9.0.11","@types/semver":"^7.3.4","simple-git-hooks":"^2.3.1","catch-uncommitted":"^1.6.2","@balena/jellycheck":"^0.1.1"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.0.72-renovate-non-major-254cd087ec298ab374b4ab95c94a74c2f9e6fce5_1618418167917_0.9843513024805401","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.0.72":{"name":"@balena/jellyfish-plugin-base","version":"2.0.72","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.0.72","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"6ddf2339737af7a4653648e2e13d4977a1f8f9bc","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.0.72.tgz","fileCount":18,"integrity":"sha512-IhjNJ6/SltOooNmDP2kZYsUAQdKXpnj3jCWIC84bsfMl/rNhSouEBZNBAa7MTfzhDHI/2pxeMlnPp+hamb02kQ==","signatures":[{"sig":"MEUCIB8vzUVdPFiMeO/d6vtJx12ydPbfJihupl8R6RYnDg0pAiEA0TD6rrTzXmZU256AZy17jF0LMp5e9dTuRI0/bBp5MHU=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":38224,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgdxs0CRA9TVsSAnZWagAA+g0QAJb5GmkY+5FQMV9nv0X8\nnfDU7ifFmgbgnQ9po92UsZHDI7wpQIwa1KZjpYXMNoN0daLoUbKw/6uO6LBA\njXpiK/3i7a89y5Po8ZX73xRIH+qRkVGxmL1QXMBTMfR/+91gYhYZcJIVgR64\nP6fq/6Kxqhp45nNt2f7CHA3dwsHnJxPGUKtFDl+3BKw9Q//puFKN1AqQO3xe\nA37gTHqhRElqIoirn+0i+Ub9AUwxxckMDmAQzK7SBKo9fwTR2kqa4d38itmT\nW7UA6KnO60G+uEek7Wr0NozPlAop6RUV6ROwp/4dYCkFh+JdBOnN3n2rmIyp\npAWvylQSo9wxlP4PkoeXnjwxaWTGVLfWKpMKDlnUoANYBfdil2WL0qlbAOu3\nn1IMUkn8sOXi5bK3NhuLiXVB6EOlfozdCKL9E7qQNtI6o06UW2eo7p3W8Dun\nJ/LNFYucQpzLBNe7LzdZMgZ9NqiBVa3uEed50D1dYp1fH0i0fMkzl+EVLBWK\nLEqhoYel7AhcRGS2Hcp0d5W5TnQ8GF+UBbGZQvOTqNmpZlY+ZmHPBL7/2Hi3\n0AhQ7LvDWrbyMV4iXwrNCy/g7IeqJOzNcEGlpc37DG+Xc06km8vwZhTyJI3H\npY7pD0W8WFyuLXQW9sLyizpHLhe2oHaV1Tba0gKI7l7YN64AwbOoA9JHuYJo\n1nUd\r\n=5/a5\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"57bc350114cbb68ff5b4fa68947fd51f69669442","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint --typescript lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --typescript --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --typescript --fix"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.3","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.4.66","@balena/jellyfish-logger":"^2.1.25"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^26.6.3","sinon":"^10.0.0","deplint":"^1.1.3","ts-jest":"^26.5.4","typedoc":"^0.20.35","depcheck":"^1.4.0","typescript":"^4.2.4","@types/jest":"^26.0.22","lint-staged":"^10.5.4","@balena/lint":"^5.4.1","@types/sinon":"^9.0.11","@types/semver":"^7.3.4","simple-git-hooks":"^2.3.1","catch-uncommitted":"^1.6.2","@balena/jellycheck":"^0.1.1"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.0.72_1618418483769_0.7415111409800152","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.0.73-renovate-sinon-10-x-8da5b344ed63775b6445afccb84e4053f30839f7":{"name":"@balena/jellyfish-plugin-base","version":"2.0.73-renovate-sinon-10-x-8da5b344ed63775b6445afccb84e4053f30839f7","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.0.73-renovate-sinon-10-x-8da5b344ed63775b6445afccb84e4053f30839f7","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"37136b70547f82eddf4a7603c0ce7bba77c5b267","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.0.73-renovate-sinon-10-x-8da5b344ed63775b6445afccb84e4053f30839f7.tgz","fileCount":18,"integrity":"sha512-i0ZxyFUBiD94p0/XevTglmS58YhuZ20E9YdjTnlYF10BXz8SAo0QKtRJkos16ZPiqTimc1RbM9XDBV8mW4Ftpg==","signatures":[{"sig":"MEQCIBAU/E6hA3L4tWOEgfnszCRv1ugX4y0V9IrifrZ0JCxXAiA+C5MKpnKNqKsk1ANnMBY4W9XC3reEKnzBnz1cwuDeZg==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":38372,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgdxzVCRA9TVsSAnZWagAAikkP/jItOUDL6WuSJHXN0fir\nY0QFREpeMfMk9tCNgXdkzgZsjdLai3xlAcz4OQStH4FUr90ZYaGdb5U/cEJz\nDRoUZ9jpe/qlmZOd+WhzTRV3ySfqXJ2q3h5uHLH1yzmy78k/IYNwUMmzsPWE\n58ihpjw6QB3cxRZal2q9iIb2Wmeh4P8AlR5DW8zMXA1OX5jF4qoWj6rCG0Rq\n9yp9Xjf2yz/rh3rRSd4lw/yqMIGyFfI3hfiVitwS8sCoHFM8YhxNjsbXVukh\nD8KXgAUmT3z3TfIktM7zTPIBpZJYMlVtW6bFoZvDJHtMUI2uMl2o2JSQ3wI5\nd1uaateDX05/OgM2nLhzbtMQAAtY5tTjSp+DlaTC+B3+vlXJewhfJtIOACxG\n1J2q50Gyr/1/wH1mYiZnrK8igSBzQTMPqI2t8ZqcSZcBBEeFrxifQVHLYTg9\ny1DTRqtMrwYXXOpGa7KG9FjevqDvxG/pWY+v4MxGJW3WXI7SjlnJzLRYLbw4\nz3ydX+ZBJ5dSK3TAGZSZbyvVtwIXFgvjYPEcqvsZktD0GqM3PbyHPzrwoaF1\nDq7aamilo6jG/bIs4TI+zFnnVRb1yd1a9Mft94dcdsiD9GXN8CkwnPMirmku\ne3YL4glCcjjUDZIiQbJCMp7r3LhtQwSNUkc2hKP9eovncLgF2rdEEdmzeCTL\nLYmk\r\n=mRog\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\n[![Publish Documentation](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml/badge.svg)](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml)\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"8da5b344ed63775b6445afccb84e4053f30839f7","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint --typescript lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --typescript --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --typescript --fix"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.3","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.4.66","@balena/jellyfish-logger":"^2.1.25"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^26.6.3","sinon":"^10.0.0","deplint":"^1.1.3","ts-jest":"^26.5.4","typedoc":"^0.20.35","depcheck":"^1.4.0","typescript":"^4.2.4","@types/jest":"^26.0.22","lint-staged":"^10.5.4","@balena/lint":"^5.4.1","@types/sinon":"^10.0.0","@types/semver":"^7.3.4","simple-git-hooks":"^2.3.1","catch-uncommitted":"^1.6.2","@balena/jellycheck":"^0.1.1"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.0.73-renovate-sinon-10-x-8da5b344ed63775b6445afccb84e4053f30839f7_1618418900698_0.9514053856083708","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.0.73-renovate-non-major-28b300004a518dc4926196f07854dd976c1da995":{"name":"@balena/jellyfish-plugin-base","version":"2.0.73-renovate-non-major-28b300004a518dc4926196f07854dd976c1da995","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.0.73-renovate-non-major-28b300004a518dc4926196f07854dd976c1da995","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"fc91eb22cc5a4fa82b6f93052bf3cf27a77e0f2c","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.0.73-renovate-non-major-28b300004a518dc4926196f07854dd976c1da995.tgz","fileCount":18,"integrity":"sha512-fjxpFN4NA4jNXhJNgWzf9GBkBZypM4o8l/X3pQvraaTTnFYpkuPihaKwxzEOMiS/bBihLdHkBsKUsDRvIv8gxg==","signatures":[{"sig":"MEUCIFs3opREZhV4LUcCMIt9zSyHARTkt/xEoKe/YBa4SkDcAiEAoPe77d44oI20m1j9zl9eA9JNQ3jK87lQlQ4q/j70iAk=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":38386,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgdx6RCRA9TVsSAnZWagAAvqwQAI+0uMiD5RnO4VgsZXA7\n+tBzZ9mlpBADSOaul1+5MlMcqgFf5GXoThsC8xvNbu8O4w7sptCdYT1L8lTm\ngccvlq/8ZLyBsnwS2xJluppvjCrihCRI46+ndvO5eyREw7H4Sslkpzredu7i\niiIMWQsk9NTrj/NNnlpiHtvL9YqF2b+2GqJbBPcEaQiGb3pU2/raWP+ml8pv\nN1jGiYqxue6Uch2DF9eAtBxR9wizDwT/ai75s2L5OvPy9XJoi3WpgAiXMTZW\nixdph+JOYjT8KTVfTmYGlu1NP7pSHHVjS2VKk+Jfz+rfERtZECuKWigClVjq\nnh4JWTfjJkSpSCC7SPvg1Groc7tCoAdnE6tfvwODMAdYdKttLQ0Ni94GbcVb\nHs2UFHISqsPnmQ1ilY0gqrj2Gniu9yeam3fMIIKAkd69hJJ8Bz0Fd+BLdjlf\n2NqcexBk1CNsg68JshslhC0qmqlGHry+I1k2y/Qv8dQdhjDKimKMa8q7KI55\n5wCsV/GgadE4B/nOdYxm3ki8Uiye8dx5Ts3NU4f7jwQc3zlo3gxZmI/IUdjY\nWppVm1iPhJILc3O6jDtPL1ECS+dwYqRvGM4CMzOkBhrfC0yw8y7FuCn5UT6T\nTH7+RETlcyZiKoA3fHFPKH9OuRTiOh4T0lYMZ+I8EtICMym9jXMDwBN4odo1\ntH1z\r\n=zuhy\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\n[![Publish Documentation](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml/badge.svg)](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml)\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"28b300004a518dc4926196f07854dd976c1da995","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint --typescript lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --typescript --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --typescript --fix"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.3","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.4.67","@balena/jellyfish-logger":"^2.1.25"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^26.6.3","sinon":"^10.0.0","deplint":"^1.1.3","ts-jest":"^26.5.4","typedoc":"^0.20.35","depcheck":"^1.4.0","typescript":"^4.2.4","@types/jest":"^26.0.22","lint-staged":"^10.5.4","@balena/lint":"^5.4.1","@types/sinon":"^9.0.11","@types/semver":"^7.3.4","simple-git-hooks":"^2.3.1","catch-uncommitted":"^1.6.2","@balena/jellycheck":"^0.1.1"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.0.73-renovate-non-major-28b300004a518dc4926196f07854dd976c1da995_1618419344757_0.10549491655309096","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.0.73":{"name":"@balena/jellyfish-plugin-base","version":"2.0.73","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.0.73","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"379cce0dba83c718fb1536172a7a6d585f100634","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.0.73.tgz","fileCount":18,"integrity":"sha512-Wdrr8TRrkkfnFQTniwLlxqjX9jZS/YwcmAyizleG4kySbyx5VWl+j42uKw/iNbryJpS9/svRl0Qu48BOeh2kbw==","signatures":[{"sig":"MEUCIQDu2dGSkUHJT2hqfX6jDgZ6/+eebxxomDnItKWitiefFgIgWwrklN7/lVFoPchLcloM9X2jJm2/aHtCmhUiZIhFVn4=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":38326,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgdx+PCRA9TVsSAnZWagAAiD4P/2MfhHAX2wMWAww5Kxqb\nmKsklPNm2gtnYgWuxOhn+copjDqxGedOPZYIHpJWjVT4hJNPCyO/g5Xl1+0h\n2wj7yFxgHyQlho1TYmCz0DS9TJav+4ZJDOsoM7ouIEV9xQKpI0sP6OZ17c0P\nTTV/0DI8HzN48RKxlyXOrKLGiABSkaPM7kELggoU3hfrstVR6rwFRs/TOus0\npO7A1/OYlyc5GMaUFXqLXfrGkr9zcgZDruT4UWOdvDn66BsCsXVjDKVZeLCP\nertKmoscGgVb2C7Q/IHQlsgxP2kWzdyFjpr9JC4/1h2mPZK5ShqdiX1V35FJ\nRFj2SIYZOjvSJJD6sZNyGhYEWD8owLcOVzAsfA4kE8r0Cr7c1UTHmUwyN36F\nFoVrKxFKgZ1e/JCaPjSnpLXvbDSfCaPsIvc3YR4vBdpQ4TE77VAQ92aqjOgM\ncoOxYMS0T4lU/6wX9A9GFjwlTE43BE74wLcs/WTxi+eaRE8Y8TNRpwQl0FlI\nlnqN0Q/sABCz+t3xqYFhzLQPiwx5sf0rOLJtvm42w9bts89WJmptTfQ/n08+\ns6CGZcKUPSQHHOs0MqvZfudR2ly8IJYb3BWTUutRS4LYa8a4PFIYvut6sV65\n8v14mRWGkLMhp+OpL8EGo/813hPtfHQCIw9qIMNhQIHuDpSPVDUFJj1dgWzY\nWrPf\r\n=eYed\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"4eec4cc60f1b79079ca35b60eaa964fe209f337a","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint --typescript lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --typescript --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --typescript --fix"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.3","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.4.67","@balena/jellyfish-logger":"^2.1.25"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^26.6.3","sinon":"^10.0.0","deplint":"^1.1.3","ts-jest":"^26.5.4","typedoc":"^0.20.35","depcheck":"^1.4.0","typescript":"^4.2.4","@types/jest":"^26.0.22","lint-staged":"^10.5.4","@balena/lint":"^5.4.1","@types/sinon":"^9.0.11","@types/semver":"^7.3.4","simple-git-hooks":"^2.3.1","catch-uncommitted":"^1.6.2","@balena/jellycheck":"^0.1.1"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.0.73_1618419599251_0.08250731976122072","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.0.74-renovate-sinon-10-x-22bc8e020411ca3f6637696bdcf22ddd2b55d62c":{"name":"@balena/jellyfish-plugin-base","version":"2.0.74-renovate-sinon-10-x-22bc8e020411ca3f6637696bdcf22ddd2b55d62c","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.0.74-renovate-sinon-10-x-22bc8e020411ca3f6637696bdcf22ddd2b55d62c","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"3b78cc461df337703fb8d5d0de4c8f75a5be36ac","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.0.74-renovate-sinon-10-x-22bc8e020411ca3f6637696bdcf22ddd2b55d62c.tgz","fileCount":18,"integrity":"sha512-GOYBPTNN2zVSYkmk4UvpHM7OL1ksRHIYOsdekF9ttc/NxQxfnFjzBDxaDf3pJrQSnnX6fZfU13O0Ig4owF63+Q==","signatures":[{"sig":"MEUCIQDNEUefeA91GXmYsyclsy9jGZj6dMHcNoq0ROQoRy8JYQIgGud2cetXJe3ye2p78jTgTJtASTD+Id8Ukkedqdqy6D0=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":38474,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgdyDuCRA9TVsSAnZWagAAVeAP/j/Fxs6N2nT3H8k2iVNU\nP0X/1aY7yX4N+CPFP8sNhHdxqDTCIEQuGNuQvkpvJMe4/pjurCpEYFljuPeh\noW+EQmYu3tVBVL6hnq0DkVaj/tqN7rDQq7hnX+HH9zudujUm7UtlAIUjwItD\nj4mvCT6z+ni2GKP92ZcWWYEJmEQAsafjm9Qnz6odgJ4c5SMJBw+LTOhvnm3Z\nJFy4jeOuSDQ+tbaIYW8eWuNoqTD9njhiOpZRC4vPMBEdP6IStzTOQWIiKE7B\nxEvB2fjjYs1AewmaOTVUaz5OoAtzCU/YK/e5d36CCs+uEbLViPyvZF0ieIFQ\nFzb3PQgFz5B+4yQBPdCA7uECtnsinRHpXs/6pL4B3ZMuvjzTJ/gYm4ZvsbUP\n54vwSb4q1hYbsOJxngYM5si0V47wq4mzV1NymcocNZCvw/27WyZUKi8aWnJ/\nWtkJklPasm9PMNqcMnMhim7oga6GYAblkpYeNy6OO7kVFYteitMoNP3fU2tN\nWE9YKdMSf2OETBXwyG0sgXQWq5jUQt16DXQV7iF5G1uCWcYl9Dz/9ir4nsKg\nv1TelzRVEwm+Dpt5Vp4VMV4RjYINKuZceBVzZ+z8D4Vkeyt6zjryn8Uxl1Sh\n7fUyHC03o3z2KRn9jJcOvxlq07rt0g70LSY9W7/3TbFYT5QbO/pxEKApOi5P\nnIlX\r\n=tMaQ\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\n[![Publish Documentation](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml/badge.svg)](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml)\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"22bc8e020411ca3f6637696bdcf22ddd2b55d62c","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint --typescript lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --typescript --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --typescript --fix"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.3","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.4.67","@balena/jellyfish-logger":"^2.1.25"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^26.6.3","sinon":"^10.0.0","deplint":"^1.1.3","ts-jest":"^26.5.4","typedoc":"^0.20.35","depcheck":"^1.4.0","typescript":"^4.2.4","@types/jest":"^26.0.22","lint-staged":"^10.5.4","@balena/lint":"^5.4.1","@types/sinon":"^10.0.0","@types/semver":"^7.3.4","simple-git-hooks":"^2.3.1","catch-uncommitted":"^1.6.2","@balena/jellycheck":"^0.1.1"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.0.74-renovate-sinon-10-x-22bc8e020411ca3f6637696bdcf22ddd2b55d62c_1618419949699_0.5908866128534287","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.0.74-renovate-non-major-112740f81d5cb9d0205fb02214bf05f258251edc":{"name":"@balena/jellyfish-plugin-base","version":"2.0.74-renovate-non-major-112740f81d5cb9d0205fb02214bf05f258251edc","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.0.74-renovate-non-major-112740f81d5cb9d0205fb02214bf05f258251edc","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"5ed9c523d757139df41050fd3b8a3904dc6cff6f","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.0.74-renovate-non-major-112740f81d5cb9d0205fb02214bf05f258251edc.tgz","fileCount":18,"integrity":"sha512-ROp6/J654WLWpjSGOrU5zIQAiq+PLbJVX8f3r7glIYLKaELS3BKR5rgGgHc6LOweQ1BykvUpLh7UxN/pExjbVw==","signatures":[{"sig":"MEYCIQCd+Yw3urYZX/NwWAazpK4IHkzh42RUpGvoXymkmkZuZQIhAP6bNavOp0ZQcq2i1rfSfKCbuYXP3FGhMKoEDnFgG7fz","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":38488,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgd1uWCRA9TVsSAnZWagAAG1AP/RGxmpV5WPnPX9NgdHeh\n0K1hJAbFjuK83ieZZfxRccLeRtFoN328jUmGPLxOf3ovuEbNdjonSHuaJAgv\n0Nkpu6BCIhPXZBrEgDe2u1ihamyx3kOxurBf+0ZRvz7sntsLzsufAenT8pnD\n8tQHuAO5suI3Hzt4P/xPexkPvi5tsuNFoI6sIQ4o3NxRHi033OGmkrXupsat\nwU87ycazC2nYy9jv61BT0RLevzrY2HjTagEL/ud9KrDTIjkp9D12rv3QXPSA\nwUGUtzG6guUuwXKOOFyPdVYCm1gmpSDpKdZ3i+B//m1je5tpOOQWMbENHBwI\nCL3Izemc6WT787Tq7ldgR3udBMOU+pfjhUwYeHfghl236fQwYFgyL6GuQK/Q\nhjzvOH9k6+UIqPA0ULiUzJVC62XE2PO/4B8hrCN9Ttz08t09DiW5zFzqyhar\n0SfOVIxvDiHGcgaRpDgRxSrMHL3GBDpKENX8ZdfEXxvJE4fYXb+iNs/USf/r\n7dj3LvTkXvM7jok9KJYiyNOWX+h5ScT6lF/qv2HeTlH5bjU41GFS9ox+F4N8\nlkNvzB3u/TR1tW9tJtAfuZ6KsLG/CXdaCV7dbcHgx75+A2uLBQ3OzjoztLCp\nLImXvxGqKTcRmygtJoHOpSXZdz+aDUYjVYBeU1fWCOyX85O4yTUpdqS5wNcp\nK1cO\r\n=HAeh\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\n[![Publish Documentation](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml/badge.svg)](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml)\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"112740f81d5cb9d0205fb02214bf05f258251edc","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint --typescript lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --typescript --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --typescript --fix"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.3","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.4.69","@balena/jellyfish-logger":"^2.1.25"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^26.6.3","sinon":"^10.0.0","deplint":"^1.1.3","ts-jest":"^26.5.4","typedoc":"^0.20.35","depcheck":"^1.4.0","typescript":"^4.2.4","@types/jest":"^26.0.22","lint-staged":"^10.5.4","@balena/lint":"^5.4.1","@types/sinon":"^9.0.11","@types/semver":"^7.3.4","simple-git-hooks":"^2.3.1","catch-uncommitted":"^1.6.2","@balena/jellycheck":"^0.1.1"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.0.74-renovate-non-major-112740f81d5cb9d0205fb02214bf05f258251edc_1618434965716_0.1235605235996855","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.0.74":{"name":"@balena/jellyfish-plugin-base","version":"2.0.74","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.0.74","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"1f8d9867c01205bace49e5cb4fa5e51ef64001e2","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.0.74.tgz","fileCount":18,"integrity":"sha512-Jz9yXJUnyIcz1uKQTBLqnxasSVQxumqGGRNfeGlzSghu5XC2U8/sFo2QqYpzOQnh2/6BfCQUWqh3DuNHmlqQqA==","signatures":[{"sig":"MEQCIAPSRrSBOFQYV1cdWzR48JsWwSfO8UrQc4U+SPOXuNobAiBHAcyOkKG47JfqDF68aoraTErEDolxrpKodInCxyplPw==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":38428,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgd1xyCRA9TVsSAnZWagAARN4P/1pgUDjCFpYbh+9rzZ8J\nPPKOrjSSyzy67C67PGP2F62ifipZlX13qGZh4m8nmVNFBmgx2Ee6dvqN97TS\nSMhiZFDpii9hQ3SOYp1Oy8LmKhEkuARPX1Uaa/yZd/8NxG+D1TN+/gksxjYq\nKI3eY9YQebcNlVpOvTKTfquxqsCZtXYCywZS7ejaRaZCINrYhfZUbMU0uSey\nCvl0qKZ4VUjFYHZIn9dchKssPIezYijnmFYMRJoWZGZJq2yP4eHWhPyxCan3\nVNjXQJVZER4elOqWwfPg2/3MuVANv/hWKThnfArPcDmiERWryMg9X6sJMX9s\nxAP2+wTaIsNW/KYGlmjlOqd/4oNiKWhwMDJEogETDJvKwQIvtsynTesmUQiE\nj/1PWgJu1kWn07kfviP6Mv/2xMkX4nfnSt/ZlwLeMVEgoPZaWZTlJpaTllk9\n4yd2Tc8C05XaReZe0ddP/geEqXBp4Fk5o0dm6BmQKwoLrSvVSy6F3o6YR+/6\nxVC6fOSRQ2GdldSJZ0xFjlif1eHGI1Mh0lsIigk3iGL6flh0+gJjQ/yZCZL5\nlrYKqGWOUVjje1C+EbRYq44JKo/kOJKQVSJQGU4ho5R5VJ9gHIN4ZRsiT/QJ\nQIHU+ET6JGoFOJDQVpKTZN7+cIcVieHQUsYPaSKfydiYd2BW8vj6L7b1YVpe\ncWyn\r\n=AbnZ\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"2b56347ee64e6caa966711716c833b35ee58670f","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint --typescript lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --typescript --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --typescript --fix"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.3","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.4.69","@balena/jellyfish-logger":"^2.1.25"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^26.6.3","sinon":"^10.0.0","deplint":"^1.1.3","ts-jest":"^26.5.4","typedoc":"^0.20.35","depcheck":"^1.4.0","typescript":"^4.2.4","@types/jest":"^26.0.22","lint-staged":"^10.5.4","@balena/lint":"^5.4.1","@types/sinon":"^9.0.11","@types/semver":"^7.3.4","simple-git-hooks":"^2.3.1","catch-uncommitted":"^1.6.2","@balena/jellycheck":"^0.1.1"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.0.74_1618435186098_0.5811376112183146","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.0.75-renovate-sinon-10-x-201914cbfc979930613c8e0c615def37c3eeaf3a":{"name":"@balena/jellyfish-plugin-base","version":"2.0.75-renovate-sinon-10-x-201914cbfc979930613c8e0c615def37c3eeaf3a","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.0.75-renovate-sinon-10-x-201914cbfc979930613c8e0c615def37c3eeaf3a","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"140020e34290c02cfe117ce5522dbe4e94edca8f","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.0.75-renovate-sinon-10-x-201914cbfc979930613c8e0c615def37c3eeaf3a.tgz","fileCount":18,"integrity":"sha512-bCQibCZEAh3D4a6hyNfW950dmDm39SKwQSerljri8F63Hz67UrkMfThSypaxTN6TWZ2Y9+skOqvWqMWsGr6agQ==","signatures":[{"sig":"MEUCICtO80Uk5JY9taCX/nrw7poHjEwj3RJNktM6WG3Iq1fJAiEA/ki3VDmyF9Nkn5/UMGLh3MqVwWvip+TtpmmeJ9JcB68=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":38576,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgd11ACRA9TVsSAnZWagAAYZoP/3vL96PEKQN8ZOA29eKh\nifIfLAXlJ2BcCOsQBJ9O2t8+M6m71EL39Q7FErPk/sZGakoJWrEu2zQGAYDo\n/3GoMDYpga/5H5Q5QH8wEK5c6auJj/5qayJTVDCzuJ3xZVrMQ7fqcPnYtZps\ndHRhGH07h6umneR2r1mcfQTqqMIky0epgfUN9UlHuQnOnuz74hTjmMMXH+1t\nUVhMvob+XyFx1zzBXBKBbYXnwHq2qdUeSPf01x8VEYCTpdtb60XzhAswKd4K\nhbhjDE3YrwKiLN7+Aq2etAr1OU+iRNLtmXybqXVxbf5W7q5Odulp3kfeg5Um\ntINhEIOGJm3nFXrr6cVfcG8vJTcJmbN70OVzxBpT13lrdESfjcdOAW+G9+9+\nZt6BCOzf6ZrxfO/SqHu9jaTanq2Ajealkf6zFn7jYAVxGxq50DbpBvyIUMZD\nQSwG+xSFfIsyqDWyrxIeZKBtW8LxptpYTzW3rqxg+SYZuT3nqsKlN/fBB8SO\nxASrszCUI30h+odyG6rHF0hI1XJRZBgrWJa/xnn7szFXZBBOkaC7r8khMexk\n7AboTF80YKTjpLS3roWIaAgv/xTlOHzoiTaMb/Wjan4fyjMsnKUc15zz8+4U\n5OzI94PsFQ50THM/mXBfJebI47eKJ3dqXApMcg2TCiIcJ9XEXWK7HOzljS/H\nDe0a\r\n=3eYm\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\n[![Publish Documentation](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml/badge.svg)](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml)\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"201914cbfc979930613c8e0c615def37c3eeaf3a","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint --typescript lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --typescript --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --typescript --fix"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.3","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.4.69","@balena/jellyfish-logger":"^2.1.25"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^26.6.3","sinon":"^10.0.0","deplint":"^1.1.3","ts-jest":"^26.5.4","typedoc":"^0.20.35","depcheck":"^1.4.0","typescript":"^4.2.4","@types/jest":"^26.0.22","lint-staged":"^10.5.4","@balena/lint":"^5.4.1","@types/sinon":"^10.0.0","@types/semver":"^7.3.4","simple-git-hooks":"^2.3.1","catch-uncommitted":"^1.6.2","@balena/jellycheck":"^0.1.1"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.0.75-renovate-sinon-10-x-201914cbfc979930613c8e0c615def37c3eeaf3a_1618435391723_0.7675272563176581","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.0.75-renovate-non-major-7e4e529e665a8333f36ec1cefc7984a6cb04bed6":{"name":"@balena/jellyfish-plugin-base","version":"2.0.75-renovate-non-major-7e4e529e665a8333f36ec1cefc7984a6cb04bed6","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.0.75-renovate-non-major-7e4e529e665a8333f36ec1cefc7984a6cb04bed6","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"3273929862a9d8ed9a0dbbb58ae5167b229d5abb","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.0.75-renovate-non-major-7e4e529e665a8333f36ec1cefc7984a6cb04bed6.tgz","fileCount":18,"integrity":"sha512-+TFQp6qVi9ultl6BFx51z+VlQ9Ia9XHvsssMDzE0dpsbiozPZQuhEKE16Ks9jQSK5ZRjE0MapWXbgixSPDeaiQ==","signatures":[{"sig":"MEUCIQDMs7StkOdyK8E7QpF6cO92EemL0Nu9Y4sogrw5BToRsQIgBB4k+57pZ3GrdM9fRnqUs6SWXCeVMsv+RCLM/iQr52A=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":38590,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgd4MQCRA9TVsSAnZWagAA8CcQAKGF1/b9yCqRiw6Gx5hG\nMmzwH5FTQsIcEFsWKYCAGS8tEZGPqxYbChPgZFFQBSGuW5eotts7osja7Pdt\nCdddhuPwsMZNgpXZu/ILC7poDnfo8qYFtsw4HF3LuPeBWutwOfupqfKXrBwv\nYdukVd62rLiOscYPpYFHFNmlI585ur9uVG5TIRiTqn2rvz6C87bP9Ll+/vVZ\nLNa0Yvm6UYTyeh5Pz/o5AAIgEzFhCt4AETRY5apB7FmwpaC+ltU2jVVTEvwA\nTtBubm1wJ2twbn0/HHKhyrcxbDeJyoeQ8tKfEx593h/dGats93bJ6o+Ls1Ds\nXZM3t0QR537hrL+E4eZ2iVjJ7Y2qsSu0oqaeTnVZFjwe0XpRXMbitynLo2zf\nn0Hdn+VR4m9UDevMxJc56yXn762t/k7l6PNkEPQBpX7z0sLeyfA36Z6sDiVf\nB/4LYDwZ+b5zlfiYgkHnmLliJsrwGCqWE1hH7QobMPK29ImX12XKklsJlDL3\nTpT7fiXKMNpzwu4SxRw9u6WOS6O0qOrXaMeKfBhGjFBXrnagRVk9p3fxigJg\nJrPaSVcTgS/nysMqiC1AUyJKigDBKz2JlxJ1DC2YcnxlgbioBpP9JJnhWgsE\nPGJWo7tdbGesTVpMtDacMHwH/tcVFQrIlsvarOzRVnBbPsNKuzhKLYKNnHqn\nRXd2\r\n=WlKM\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\n[![Publish Documentation](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml/badge.svg)](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml)\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"7e4e529e665a8333f36ec1cefc7984a6cb04bed6","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint --typescript lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --typescript --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --typescript --fix"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.3","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.4.70","@balena/jellyfish-logger":"^2.1.25"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^26.6.3","sinon":"^10.0.0","deplint":"^1.1.3","ts-jest":"^26.5.4","typedoc":"^0.20.35","depcheck":"^1.4.0","typescript":"^4.2.4","@types/jest":"^26.0.22","lint-staged":"^10.5.4","@balena/lint":"^5.4.1","@types/sinon":"^9.0.11","@types/semver":"^7.3.4","simple-git-hooks":"^2.3.1","catch-uncommitted":"^1.6.2","@balena/jellycheck":"^0.1.1"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.0.75-renovate-non-major-7e4e529e665a8333f36ec1cefc7984a6cb04bed6_1618445072120_0.018259754321091837","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.0.75":{"name":"@balena/jellyfish-plugin-base","version":"2.0.75","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.0.75","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"3539f25451bf9dab8dce8fb86488f80ebdedba86","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.0.75.tgz","fileCount":18,"integrity":"sha512-BfsNYeQwXFbgLlYhpWh5F6+PpANz05biGHj9DMF3sx6HaO9JbUKMx8uckSECdIbuuw7njWqA4QPzEGvBoUsRuA==","signatures":[{"sig":"MEYCIQCjEOHtBDVdKoPAv1Y86O6KUJIIpI1e0gVnpXU+DMQC9QIhAPGBQX8aTrQUO78S5d8FubsMvmGr36lLHR+iBk01b1YY","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":38530,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgd4PrCRA9TVsSAnZWagAAAT4P/3jIKmGyPbskOTXQip1J\n15U2zGF2vqHZjx60RdimVNAoxcX0wfOdJgj5LfBcnLS7rfGA3PYN8kL2eiKG\ninlWsWGdceJzV6SlyOPNUsD6bmJgr5dEKjYwUBHZoou8HTl893h8HguEYLId\nW+i5rFwAg6k3kywHaiyMIna38yHs8AeObOpjJkYuHXrTa/QhRrGv9IRcE8EJ\nPFBBWUJsRkqR7ecXNe1e/j6Sk/gdeOHDJ2pMdYYpFsV78WuqrxR1mhqV4+lv\npbyZP/y3C+UTgnszxjd/hjTROBhKcmEm3vMdqnVeajydwftmVTzE7euBNIkW\nNz8e2UwKuCT/glXyb1lTshJs/t+URBEklcEJCNA9rlmai5NKm8nNdpMqUwfI\nW91CiCSsXu86I6gE6WAPLYtamCX0lAcxR1WCIAKOmSlAT3ywaojA0ZGdekeR\neDed2wptWn/tAf4bdW76BOywTo6jD14AoR24l3/31hbp6bFW0s0zRMTlUOOx\ndn+7D8dBHhL89pFNZSOjW4RMJ8PbsDA4HuueqhIkThj2p5HizSUIXKBlmseO\nJCzZ4oUPDI2M7aURcXhIoRu1JX4pdxNIH1I8SR5TrjYepxtOZtmd8P8qq8my\nIOOdYqyJXvaV2LCGRdqoxBbvwCVkCoDo1ZGbI+maDrTKSTpy5Dn6Ktb0rWRH\nY2Y1\r\n=QtrR\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"b902a5a94d847f5583065353323ee5e18ba24642","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint --typescript lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --typescript --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --typescript --fix"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.3","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.4.70","@balena/jellyfish-logger":"^2.1.25"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^26.6.3","sinon":"^10.0.0","deplint":"^1.1.3","ts-jest":"^26.5.4","typedoc":"^0.20.35","depcheck":"^1.4.0","typescript":"^4.2.4","@types/jest":"^26.0.22","lint-staged":"^10.5.4","@balena/lint":"^5.4.1","@types/sinon":"^9.0.11","@types/semver":"^7.3.4","simple-git-hooks":"^2.3.1","catch-uncommitted":"^1.6.2","@balena/jellycheck":"^0.1.1"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.0.75_1618445291241_0.85924975323627","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.0.76-renovate-sinon-10-x-7d22f03df8313a5927372994a16fc10f0ebc36ec":{"name":"@balena/jellyfish-plugin-base","version":"2.0.76-renovate-sinon-10-x-7d22f03df8313a5927372994a16fc10f0ebc36ec","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.0.76-renovate-sinon-10-x-7d22f03df8313a5927372994a16fc10f0ebc36ec","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"6badd3442b5f7c1f9b9474a444a2e81f11e094b3","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.0.76-renovate-sinon-10-x-7d22f03df8313a5927372994a16fc10f0ebc36ec.tgz","fileCount":18,"integrity":"sha512-9urtCvAuZIN0r2w+p5GPVHd+bmSoFtIhHUADKobK3p9XSc9hzkpl3b1C6GdX1ftO+Ed5ta07t/0k7CCv2URBSQ==","signatures":[{"sig":"MEQCIE3HQV3wOQtF98rJ0D3a1wI5echtSmLOf2aCIrZC4HQGAiA+II2Oxq4C+43y+vdtt5jYVo6XYq7twM7/121f6/95aw==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":38678,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgd4T2CRA9TVsSAnZWagAAXzMP/RXBNpkAutZXDkPuyZru\nhdjNHNqTxwz89bEDWM3lnMemmsnoKfjH7EOIBhPjV7tvUIFYoxt+NrbMa6rX\nzL+fMJvOx6O2ZfS31h8VmQy9Y+h1IkjxBq/bwpGrO1hPnULwYrHIbydFilmv\nk8DxK2bGG3CkTsfPrN2+IqRdAqWsP+z0TFJsFad5yFvf/qCbVAAAjmmgRSND\nkL0xSLMoZ94pd7o4u1ZLe0dawHWpLIzJ0kHd+ukAWaYgKz7V3tYPh6ZuYLCt\nNl0+nICaXAliEoxqeag713U6CvVlbwdJRm+WtoriC5Z9EpE+n0yVhqCghyct\n0kjpNq0NEVJ3rDV3wVf+N29ks0d9M2WlgD6OP25wSW0A3UpWUX2JRo0cA/tA\nXLvIfzhv03n6UZ1WlJUJj6/VQUeefoOGvAMPHIY420CyRhr0Z1ffc5F/61SD\nOV5YJYbrRACaqkq4Gu5ygcQmqdRYNltc9PbYwcdwiuGHZLEhxYXhagmZZ2xy\nPtA+3D9WGEUBVATsUB5El7wIZUFXhpvWFhmXyssPS+JNisXT+gc4XB8cdJpK\nnsHnOF+Gs3tKKk/puMOOAwFDY+ByGMV7Zc9TrQpn7fjfSBik+pj1mtz+jarb\ngAGmnYwFmefe6RSTPx4/KDKBS/TVX1xJZAlPzOGjp/ex7Hsg8eHfERXec8g6\nono9\r\n=0Qga\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\n[![Publish Documentation](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml/badge.svg)](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml)\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"7d22f03df8313a5927372994a16fc10f0ebc36ec","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint --typescript lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --typescript --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --typescript --fix"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.3","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.4.70","@balena/jellyfish-logger":"^2.1.25"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^26.6.3","sinon":"^10.0.0","deplint":"^1.1.3","ts-jest":"^26.5.4","typedoc":"^0.20.35","depcheck":"^1.4.0","typescript":"^4.2.4","@types/jest":"^26.0.22","lint-staged":"^10.5.4","@balena/lint":"^5.4.1","@types/sinon":"^10.0.0","@types/semver":"^7.3.4","simple-git-hooks":"^2.3.1","catch-uncommitted":"^1.6.2","@balena/jellycheck":"^0.1.1"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.0.76-renovate-sinon-10-x-7d22f03df8313a5927372994a16fc10f0ebc36ec_1618445558341_0.1786080398229064","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.0.76-renovate-non-major-b7a44de4b88bb9aa6a06fb396d6c7fc34272b079":{"name":"@balena/jellyfish-plugin-base","version":"2.0.76-renovate-non-major-b7a44de4b88bb9aa6a06fb396d6c7fc34272b079","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.0.76-renovate-non-major-b7a44de4b88bb9aa6a06fb396d6c7fc34272b079","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"baf01ce6081a1c8bb17ac0b7d973954f7966d0fd","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.0.76-renovate-non-major-b7a44de4b88bb9aa6a06fb396d6c7fc34272b079.tgz","fileCount":18,"integrity":"sha512-SzcIBdIt65QDskfuw9BnEbKfifKFSGz9nm1xSnRd2rKm+YCyV8B5CrcEdeLhFh5QX5AgGLN4cyKYSeWCDEEP0g==","signatures":[{"sig":"MEQCIBzFreS4ZZa/reHfWVucuOXRZzn9rRoP0NX8DFF/eCIXAiB9w1AWOhAKMBtyFYx4XTE3eFbNWswRDOHfrPrQb0wyZg==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":38692,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgd6i7CRA9TVsSAnZWagAAPl8P/12DsRZVoAC/FqtTgEyb\n2QJuTqfdYvP8cStUyaIDW85bGQXDQCoECnCSeVcfzVbY8AXr+ca00bqLJeQT\nFKI/A0o892yxIjsVIMq1WKAukxNqYLqf9xeh781meUJvV9yf3l/Po03/RUpN\nJmFnKse+LhGQGRc/Iqk+n89IVqoN9lt9FnqHQMQ5mTFfuqxJGkaj9Kya93PL\nPIpGo0GHxr6TslRKQ2Q/6ONq0Td3t0tA2RHIPYQSLNJYweQV/RxXoaV6qD3U\n/PKVInVZ6MC0Q9Abs9AxAagehOIcet7Bex5bOv0x2FPZgqkahbrjwVS9yPOD\nZZ0578NB7BEapQwjVqg0JrWWyZKl01/b8aA3WlrypgQiV0eSYe59rOpGt6f+\nBkmbcI3HTyWFRj3XfCBeDc9F9peC+GARIgBL77xbAQ1lPudheavuH5yXS75j\n6uDTvAqjYTAIELuPyOcnq7pa0M0dApt2PjqL+54GBInU5EMvbNaiP+S8gy3C\nZxJkcy7LDVCVaPnE4ERIOcDYxNAF4GEMi3ru0MtHC7NMgqxqR65tczYiP4Vc\nAbEFPzysJjwS4QRXrUF77ZaFxC6CDIjHz/9NMvh/e1Z6+5TqVYcIj3cb5ESq\n95uBvUv9gl6O3ew6s54CaFwnTCYHQWeOdSLJwQ6ca35H4CXISkridB5/Z87c\nPlQQ\r\n=epP7\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\n[![Publish Documentation](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml/badge.svg)](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml)\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"b7a44de4b88bb9aa6a06fb396d6c7fc34272b079","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint --typescript lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --typescript --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --typescript --fix"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.3","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.4.72","@balena/jellyfish-logger":"^2.1.25"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^26.6.3","sinon":"^10.0.0","deplint":"^1.1.3","ts-jest":"^26.5.4","typedoc":"^0.20.35","depcheck":"^1.4.0","typescript":"^4.2.4","@types/jest":"^26.0.22","lint-staged":"^10.5.4","@balena/lint":"^5.4.1","@types/sinon":"^9.0.11","@types/semver":"^7.3.4","simple-git-hooks":"^2.3.1","catch-uncommitted":"^1.6.2","@balena/jellycheck":"^0.1.1"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.0.76-renovate-non-major-b7a44de4b88bb9aa6a06fb396d6c7fc34272b079_1618454715072_0.1364225973364006","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.0.76":{"name":"@balena/jellyfish-plugin-base","version":"2.0.76","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.0.76","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"e7bc0d8dbd3d6521a64939bb927dfcde9822ec65","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.0.76.tgz","fileCount":18,"integrity":"sha512-LHn8mSo4yHN07GxWE8/4Mujb2q3DYjClldkD1+Xsoj2rcmsZtAvvyt0gt9j945Hux4e7D7Hb5wbGY+Mv3Q2YSg==","signatures":[{"sig":"MEUCIE9irg6b3pzBWljBhbC3RltKAsjovYIRZHQHYwyGml3rAiEAvoGXYZyeq/NtzG2pC817IQNInSbpyNXNDQLGZ8NwO6o=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":38632,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgd6nICRA9TVsSAnZWagAAUzcP/1kzukoH4N/pMPHS3jV7\nEINGzPA2CvlUvuQLlj7E0H0bg1vclrkHZpjeCrflPl1Ir8Y5npvxxc7X/a+T\niMlSUd+xkmT9tPOats9HglYrHpTCEyyTj+Cb1fgZ7n5adVLQXFqEwUgcT5JB\nZ0/hfzdvUiwoUobspmvmXansNw2M2Rc9fy5e5jQZ+wuSnBufMTo9esrY20wh\nlpqYtKP/SVc9yQwCUtFqWU+3JDT3C517t9rSC3zNs97GkKQuWY9LL5LzAGjA\nWmc8J8hgrTuEeIeJw/JeeyR6BK/HANNB30bD06QYTxxz8uSDmFRGCLWo4kqY\nMbrecsQrXumYRxg9NacfitgDLXwxXHAHmJ5Rl1fgbJBGqcnD6+rTwK0ePQZM\nGP9hC9kVeFD0e7AurI5gNQqiLNoQ+BjHJcfdsucu2+irbgtJKYqTL6n9M6pI\nsgMFsK6slQ7yk8mR3dgZDllVL1ayuabYVCRAhzKK6reaMAN9Ux4Brvt7YqDq\n7/A4mEiCpQuVhQavcj+hjiEMI8acPIg0MjkxSjm7zXQZo4gPykzVqvdXdT1y\nioll8ckdt31i0RxkNMYhVCddQyUb7qb2dmJdlXbJ7aPeKiMYRgQLPT00JAil\nf/x7tduyT4I2SVwyIW6/gqcSTz0DIq6nWTL+tQ3hL3PFqqege8r7pi+EDkL6\nVE6x\r\n=SMf0\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"52604365070d1bcedcee3917e6ea6a340355ab31","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint --typescript lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --typescript --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --typescript --fix"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.3","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.4.72","@balena/jellyfish-logger":"^2.1.25"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^26.6.3","sinon":"^10.0.0","deplint":"^1.1.3","ts-jest":"^26.5.4","typedoc":"^0.20.35","depcheck":"^1.4.0","typescript":"^4.2.4","@types/jest":"^26.0.22","lint-staged":"^10.5.4","@balena/lint":"^5.4.1","@types/sinon":"^9.0.11","@types/semver":"^7.3.4","simple-git-hooks":"^2.3.1","catch-uncommitted":"^1.6.2","@balena/jellycheck":"^0.1.1"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.0.76_1618454984331_0.12623592385640459","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.0.76-renovate-sinon-10-x-1c465945b6df3eb1dcfeae1f9dafe481032bfc2b":{"name":"@balena/jellyfish-plugin-base","version":"2.0.76-renovate-sinon-10-x-1c465945b6df3eb1dcfeae1f9dafe481032bfc2b","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.0.76-renovate-sinon-10-x-1c465945b6df3eb1dcfeae1f9dafe481032bfc2b","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"d925f2133a9cf65f21dfaf11cd26417be763d3ea","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.0.76-renovate-sinon-10-x-1c465945b6df3eb1dcfeae1f9dafe481032bfc2b.tgz","fileCount":18,"integrity":"sha512-JfF70OWu1I5VkKP8S6FDyiYIgDjeHlWuyBmYjHjAgqzLxVWHj7ofGM++dtFv68Kz/R2Zhf2wGC08o9xbm8BfXg==","signatures":[{"sig":"MEQCIC5dieBSLoMG3HBFU4ZzS5zPxHxvQtcYxzbo+gi6HxdvAiAFmHa+aYZMzF7houp2Efhxwc3LQnL0lK2aTmI1uEzL1g==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":38755,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgd6rBCRA9TVsSAnZWagAArbAP/1OGyHscE3u/uAGu5rh+\nXevPU27xAxpTzjBQLoY0gxsu5yuuDHUDZQKwqf6hw70902+OyZq0HOEnDPTz\nS0pLjRAmomt9OJu4qJOvQJmuMAWN6b2wArVC8qsNEYyMkOcZB7YB1v6mhnmO\nm/nam2sQx/y+Srd1qOvrETW+mcGb7Yp5yn9uBRSN9XbkzI3Aimoc9v1iFoG6\nLWNzlAKrwxgoku8wvnbOyOGzPsOL1k2u7Y+XoW1HgSlGws0C+EQa1AUEEu/r\ncLgnBCxXbOyVTRjQuoXIlua7w+BesNtIWzIQ4WoR43uZGhRpMzwJUuThUccM\nwGVHC0UUSMVwEhgDwGKQZV/VduIEcNncXnj99+tTiT7scaDabfPv11A5xlir\nCa+foKc2/trDzYHMH56qjjxsC1klO5KMFSSEbmH7zb8GjMLQ1g2OyZIDY+To\nrn6ikjKTsldUqfH4Pl5qYZSmCYv5StwOPuXjeNltaNrv0TMmBiGjqx/qUdGE\nMrzIbjekIrlFp3i8RFvBYsBmNPjZInfq9UlxNHbOVnB7GFugmLxWMyH75W4n\nx9IY52dnzVmShjpvXESDTWjdcDWowjQ+6vyc3f+EazK4Pyp1y2rOkVOj0Ojd\nITILdIQ/moqBFb7ifyjnLLEsr8SqdJtczb2oOPJ/o9fb2uxCrcxF86bzLJyz\nLBPa\r\n=VRiY\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\n[![Publish Documentation](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml/badge.svg)](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml)\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"1c465945b6df3eb1dcfeae1f9dafe481032bfc2b","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint --typescript lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --typescript --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --typescript --fix"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.3","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.4.72","@balena/jellyfish-logger":"^2.1.25"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^26.6.3","sinon":"^10.0.0","deplint":"^1.1.3","ts-jest":"^26.5.4","typedoc":"^0.20.35","depcheck":"^1.4.0","typescript":"^4.2.4","@types/jest":"^26.0.22","lint-staged":"^10.5.4","@balena/lint":"^5.4.1","@types/sinon":"^10.0.0","@types/semver":"^7.3.4","simple-git-hooks":"^2.3.1","catch-uncommitted":"^1.6.2","@balena/jellycheck":"^0.1.1"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.0.76-renovate-sinon-10-x-1c465945b6df3eb1dcfeae1f9dafe481032bfc2b_1618455232878_0.03645586072426377","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.0.77-renovate-sinon-10-x-ee723f2b0cea94e4acecc6f8495280dcc543ca4b":{"name":"@balena/jellyfish-plugin-base","version":"2.0.77-renovate-sinon-10-x-ee723f2b0cea94e4acecc6f8495280dcc543ca4b","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.0.77-renovate-sinon-10-x-ee723f2b0cea94e4acecc6f8495280dcc543ca4b","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"2fff2b0481961b94ea773ae6751b06183b4a61f8","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.0.77-renovate-sinon-10-x-ee723f2b0cea94e4acecc6f8495280dcc543ca4b.tgz","fileCount":18,"integrity":"sha512-3ea5ePUCjaz+bWEWcYN7U/PD6G72cce5QElmI3BVeqaIK+TjXsT+5aNT9UPgEq8bF6XNmebLldBVDbL6htraag==","signatures":[{"sig":"MEUCIQCGwfI/9f6g11ITDp2W32hu09UuvG03NseYjMq921E9GQIgUuOazONIJWwvRQ8CJ5m1xB8VQXHZyBkXYrcd5qzlHho=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":38780,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgd6s6CRA9TVsSAnZWagAAVlcQAIDXCG2y7pZIbzbGhvu8\nOIp5su3/Foh/iTSlY2zN2TjilG5GAlnV8wcot5OefUXnOuhDcAN3L/I5heAk\ndiYXlu6d5plhkCq014DED9hhD6mAsN6ZgRBMVlevWdcA0wpt2u66UxT/1p9Q\n9U1vzxJKDExHtEj7SHscILVD8dGdPHFWraREvqRTC5tCQnMUc3pTfXUcnbkM\nCq/ikuezQrejvM9YRvgEUPz/bb1FXFLUpuycKryR2vZ1TvS6pgxFYhBGYDgx\ngdCbiy9UAx25CVIxHGO5x91UxnyJ4QJVIwFicO1JkdE05Zm6NZ9C6rSZ1vpK\ng+kaJgdy/S2/QjomqLBqEVWYqSfzXpU4erEaWirlKZMwkogdWyY/9kmIqfYB\njO5m1dBPG32LOJemr4A7xWdNT2gbOiqP664P3ADn+5AVVvtXfUW3+C/CvjnP\nfgHKSdh445E+/UoOQ/rC6B56ZDC/AgTIhqon4UVUxzQ+6eeiUjHw0k9ZiXNA\nw+IGzntW2AympkkVycqBeJ0NSow77UINKvQl/1x0UvmUT3i0FRcHBuHLSybI\nJ7PbXrbjnT06P5wmBYtB+hS4KivQqxJdbF6eg4UyTkgjOYDn79x5J0JpXysr\nge6gyIiAyp3fEsQtKCOmVHz9uSyi6iuhRFfZXxM0CmQrrNPyeZF5u/2z86dU\nlrxW\r\n=Nvi6\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\n[![Publish Documentation](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml/badge.svg)](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml)\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"ee723f2b0cea94e4acecc6f8495280dcc543ca4b","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint --typescript lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --typescript --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --typescript --fix"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.3","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.4.72","@balena/jellyfish-logger":"^2.1.25"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^26.6.3","sinon":"^10.0.0","deplint":"^1.1.3","ts-jest":"^26.5.4","typedoc":"^0.20.35","depcheck":"^1.4.0","typescript":"^4.2.4","@types/jest":"^26.0.22","lint-staged":"^10.5.4","@balena/lint":"^5.4.1","@types/sinon":"^10.0.0","@types/semver":"^7.3.4","simple-git-hooks":"^2.3.1","catch-uncommitted":"^1.6.2","@balena/jellycheck":"^0.1.1"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.0.77-renovate-sinon-10-x-ee723f2b0cea94e4acecc6f8495280dcc543ca4b_1618455353833_0.4988306274275802","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.0.77-renovate-non-major-1768249c11d5a4720463086476e31a6bedc4d0f2":{"name":"@balena/jellyfish-plugin-base","version":"2.0.77-renovate-non-major-1768249c11d5a4720463086476e31a6bedc4d0f2","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.0.77-renovate-non-major-1768249c11d5a4720463086476e31a6bedc4d0f2","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"6025fa840fac24cf6add70307f47017720c6c369","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.0.77-renovate-non-major-1768249c11d5a4720463086476e31a6bedc4d0f2.tgz","fileCount":18,"integrity":"sha512-5SP6zr8bt0hGC+/2ITCJgxir1jeq8W1KVmNuCRCavw/xYScln2xMEwlVKRg+Bbw6vYhSGDLfNb/BWRO7lCD2Fg==","signatures":[{"sig":"MEQCICF8aD3hrlKMHfmuWj8MDxJeo22kJtA85nJm82aCS3QRAiBCBDuY+gbzDuldTqZaO4aCgi3eRf6qd8eJ/Vf0SPW97A==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":38794,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgd8eiCRA9TVsSAnZWagAAuGwP/1gGyiiOAI/F5boHLM96\nOYFsJ4vegGC/ZH0ElTyvLz5lsGbB9jiGH2nyaFPxrJJT0aorZGtXC/F7qrlA\n0qgbV8q+szBLOdlF//Ks1qrJrMQuN0m/r9bG88Yq/9JH5B7gUSgXdssksYB9\nAMXuIcTu8hC504pa/y60Bd+alzxKynBLFDGS9nV0xLa9903kGLMLsUH3tBOO\nWwXGtTXVMCnU8x85tuX+6zBgKvyjXFPGi1o2Bl8Mb9+xKwwpyO1g/7oTpRRL\nS8jJsZCI3h7S/oYjKot6Yu0LJEHrT7kZWPOx59BmhuOMa4YldwG1Y4UftBuH\nK/Z9mw3vQT0buoMvevSEKhjJorhyXVUryJm/H3IXfIGO60Ua9Q6YvV//Z/9G\niE/jvByaqLBnhb63FhvhT2y2hFKm2V2bnNm+KBPROiUk2Nb7AzbMFmM2bIkR\n3p7r8l80UaL7wyIQJhyKS+THyiNrrlc00B3nnQy2hvsIycPi7gb/8H7cZfU0\nuY/I61DR57o7PVjJiJtoUTQ7F0Mp2bTfhNqivoRSQsRlhalGjz/QOPYv0Sg0\nC3mjrrNgLHBDkcE3GgsMiXbB1YfM4AtxWkUaFQvRiW44p5fQyq7tfuB92ZXC\nCvXnfYb2LUw00Jcehv1uUyAEGh9SqeI1o7PxLzgZgHTn8rlqR0k769qvsCxZ\n2XXH\r\n=pIhc\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\n[![Publish Documentation](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml/badge.svg)](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml)\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"1768249c11d5a4720463086476e31a6bedc4d0f2","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint --typescript lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --typescript --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --typescript --fix"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.3","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.4.73","@balena/jellyfish-logger":"^2.1.25"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^26.6.3","sinon":"^10.0.0","deplint":"^1.1.3","ts-jest":"^26.5.4","typedoc":"^0.20.35","depcheck":"^1.4.0","typescript":"^4.2.4","@types/jest":"^26.0.22","lint-staged":"^10.5.4","@balena/lint":"^5.4.1","@types/sinon":"^9.0.11","@types/semver":"^7.3.4","simple-git-hooks":"^2.3.1","catch-uncommitted":"^1.6.2","@balena/jellycheck":"^0.1.1"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.0.77-renovate-non-major-1768249c11d5a4720463086476e31a6bedc4d0f2_1618462626350_0.5209654948162079","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.0.77":{"name":"@balena/jellyfish-plugin-base","version":"2.0.77","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.0.77","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"1d647dc00992929838ecef45c9ebe1806ae9f449","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.0.77.tgz","fileCount":18,"integrity":"sha512-aLARFqAsuT8NORDB0Ytznv95X5mEDzGOF0B3Z/OEeidMAxsBU5lHc7ioiZK3E3rV8PiPv0XlEtv6CfTxMVQvzg==","signatures":[{"sig":"MEUCIQCFjzjJXkVw9t7wXxzeMHvrdq4ckZDdtrfiyYcAMMThBgIgd8wymRL67bnl9l02+rwrCTDpFnbBgKH/DAgIc/Ifhb4=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":38734,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgd8haCRA9TVsSAnZWagAAHmYQAJ635JQD4xEtFvnFpz/4\nEjP4ZQ1YG3SRubk6Y5bJBOU6+3LIEmdn7m3BwjfjyQoXEpzEINBrO8mSnCRf\nTk0bY2rsGcf9T0dIca2I+MKNYEHt2z1WOpGjlkcC51aMKuqbzUMNLzSCIoFQ\nF5/9edha11EdMX0mIEdXmJ3SOkU5Sib/OmtAVxqnulgZ4kvULFBxsCWvCSTq\nZgy5nXZRieoqXwlHS6Yn0tjCj+jqmlIUOdRw0ozYlBxuyMfIJ204rMhv02lL\nWrO+uKkI1sEUlzK4lJM3XElFsRyRs1KLiBtBOzHDfw0EfJKOwh3EFDLnoR8T\n2SIvGhtElpocGL+k48jKkdGeEd3X4BYHysxFNIbkCIZmewRKBIcJ4ZAds8EL\n8La50ciSeKpLu9EkmmbaubS+sSOQkDfkqTF7G2O9wWHIrt8C+kIbRhCt/YvC\naICrQYXQDHaQQIYDHr4JA6j4OuCeC8sMBrxhd27LdrbSxlEPn3UUHfaZtYR+\n81whteWL+sZm8TirKDb+V2vp36MEWSORhANLe5vK18BM/x1Tde8x4IauQBk9\neIRPAzbHtFxQtpIzKW2BFrYc/ZyYxMsqBh3pqp3lZn0mnk8v6rv4LJb+7Sug\nwLuwqFwgnsPwhn2EsI/AdHTL3vnbYLD2cHLu5sWuChoowK6IpIObrJqGtqQV\nscZ2\r\n=Yajk\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"32d8597fd0cbcf7fb811fc2087ef0412013e778a","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint --typescript lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --typescript --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --typescript --fix"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.3","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.4.73","@balena/jellyfish-logger":"^2.1.25"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^26.6.3","sinon":"^10.0.0","deplint":"^1.1.3","ts-jest":"^26.5.4","typedoc":"^0.20.35","depcheck":"^1.4.0","typescript":"^4.2.4","@types/jest":"^26.0.22","lint-staged":"^10.5.4","@balena/lint":"^5.4.1","@types/sinon":"^9.0.11","@types/semver":"^7.3.4","simple-git-hooks":"^2.3.1","catch-uncommitted":"^1.6.2","@balena/jellycheck":"^0.1.1"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.0.77_1618462809662_0.2339252991334242","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.0.78-renovate-sinon-10-x-dda386471851923ac27a6031a28f94db90190da8":{"name":"@balena/jellyfish-plugin-base","version":"2.0.78-renovate-sinon-10-x-dda386471851923ac27a6031a28f94db90190da8","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.0.78-renovate-sinon-10-x-dda386471851923ac27a6031a28f94db90190da8","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"d81b93ff2698471e8e33c6bcb9c0ea151881effe","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.0.78-renovate-sinon-10-x-dda386471851923ac27a6031a28f94db90190da8.tgz","fileCount":18,"integrity":"sha512-e7zwqPqguA4y4SfQFTCZgbYFeQyBCQWp6m0s/4qO4zHXrYuJ74i5MOPJhz05yQvCv1wnyBrAo3bhkRlqdNK/Yg==","signatures":[{"sig":"MEYCIQCfr56l4eH6JUSothhcyu63NCxiT1S7peOsw9aAD2j2tgIhALRzHqf2DtG2uyntPYdJjHIuJAEb6UdGR3M+Xb78iG7m","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":38882,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgd8lrCRA9TVsSAnZWagAAiBsQAJDg5wh55kqralJFGjqt\nsRoBm8ZqAa9EOnbZITnOU7roGboaJJBNtH7tux+ZzKjunqOZG0DexT/jEpN2\nMMunK3GmcMDSRCqR7z/s5VfCoeQ0vqCPYU/asihG+Pg5QIQ5vy3ilzkJy4nB\nQCZRK7J6rg/wU/DF7ZSUqYlWvxGsH6B4p4Vxq+K+zDQD2TwUpRR+JWce96cR\nsRLhCDcJRaCQG0UMu91aZqldEAYbfHirilEZNWVgtR2UTPdcqN//P59Gj2r5\nSqJkW+9ofByI0p+gY2A5thVgRSvFBT7/Kna+MVGloH+CXIKVALy2EPeJ6SJ6\nGKWIZ1nfL9rKQTxY8LucTCyqK1zsZFUQb8FKPSvytgyogMAgsOk/EwYG6okT\nNLKbz6zSP4vAg/1g8fWl6Hsb3XcZpuHgEtKLrwwc1gCDFvgOlwGUbBOqfLoo\nx/MZ1hWrJpG+re6Da3JVKic5jzeyK5O0KMNgpEhuz00Jjr0p3MVPqClqu2Ir\ngjZSu5IN72fcrVl8WqA3GFR4MxRVDhDgx1IpMgAyMiu27G+mLHRiV/rt7NIf\nTw9akjg33Gj8u8bjIVNM8WC9VBWSbXOySjMVxSUpjyByk6rAiHk/IEH6BBNo\nYwZkKIGJnOY9kaSgUJGxS4n8F/HssPUuBkSDk/0G2fQMwR6kxqvWqfIL+1Ef\nAPxz\r\n=K1Zi\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\n[![Publish Documentation](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml/badge.svg)](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml)\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"dda386471851923ac27a6031a28f94db90190da8","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint --typescript lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --typescript --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --typescript --fix"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.3","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.4.73","@balena/jellyfish-logger":"^2.1.25"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^26.6.3","sinon":"^10.0.0","deplint":"^1.1.3","ts-jest":"^26.5.4","typedoc":"^0.20.35","depcheck":"^1.4.0","typescript":"^4.2.4","@types/jest":"^26.0.22","lint-staged":"^10.5.4","@balena/lint":"^5.4.1","@types/sinon":"^10.0.0","@types/semver":"^7.3.4","simple-git-hooks":"^2.3.1","catch-uncommitted":"^1.6.2","@balena/jellycheck":"^0.1.1"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.0.78-renovate-sinon-10-x-dda386471851923ac27a6031a28f94db90190da8_1618463083489_0.6794764202496886","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.0.78-renovate-non-major-909a409ba14abe2baff7109052bcf534b5102a50":{"name":"@balena/jellyfish-plugin-base","version":"2.0.78-renovate-non-major-909a409ba14abe2baff7109052bcf534b5102a50","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.0.78-renovate-non-major-909a409ba14abe2baff7109052bcf534b5102a50","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"9edcb648d0013e294e362fe088889f485b402a9d","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.0.78-renovate-non-major-909a409ba14abe2baff7109052bcf534b5102a50.tgz","fileCount":18,"integrity":"sha512-DOk4M6wa/Z1X6obp0Cd/Y+FLnjmgaOh+PeQfjyUiCVDgIuRWxg0MMnLZKVh99AjPw4DmTcfA1G6CS6tk8gb++Q==","signatures":[{"sig":"MEYCIQD3qRdw+9hypWa0cM+RV5MGCOHG1Z/b3A25rh1XilnmJwIhAIN3T3eIZ+N6Wbpg4QWRkpaMXTwWRkSWibbVLgx5qQul","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":38896,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgd8rVCRA9TVsSAnZWagAAwe4P/iBFddabyhD/AxDPPEYc\noQ3oGMDc5QbySvN4jojbv8f5kJO+wHjgEqjrfzagOGC9oLzaa2L67Upn1GI/\n0h1dxg5fAcjAVvGNY1kt4ibnqchE1mtQeGu/z76VZkEXBUYPIiV2y7RRrqjl\n1Oq8eym1BBF/e5/qeFqkh1sYf8smY8x1Dre82OGlGVsey7MEIL4ype4ys0l2\np3+8XGFgRurtHG+bVyM05hWM4VwooARgbjfA5H4JTzOZ4qhY916Sew/FIZbd\nPJ+E/ikpkiezijMkPMMZR75QYXJ9w+YeOlhlhiBvnzjhvom2zeo10wHJfVXB\n6/+FLNZzEqpfBNODU6TWz6D4Mlb46jVEXsQQKG3sWNk27BDNLEVlPKeVIdqx\nURqzn6j278i6yTouJWc70e6ieImYpY3kSEuexP47M4SNIFPfDqqtfbviUQKB\n1WBX2T6aD3oNVxoRB+JcTePWBRQHaMB1VXjJIFQVJXEKni0vCucWaD0GfVmr\nguQTaZpSfP5oQKVbcUMR3X/5UbfONpKjGfQ+cN3zi5e82UjsdFRTJlMfO+Km\n1ZOqaChfLra3nNUydqGzzFherM0huwa5bu/NS6b9+moAefOOqL0Nn3U+EOI3\ntxFmcoQwdRxLb1JeJi7r83K0CJn8TXN/RPxjRoEZb7suA1BaDc32V2irmuRg\nfl4F\r\n=dQjN\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\n[![Publish Documentation](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml/badge.svg)](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml)\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"909a409ba14abe2baff7109052bcf534b5102a50","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint --typescript lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --typescript --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --typescript --fix"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.3","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.4.74","@balena/jellyfish-logger":"^2.1.25"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^26.6.3","sinon":"^10.0.0","deplint":"^1.1.3","ts-jest":"^26.5.4","typedoc":"^0.20.35","depcheck":"^1.4.0","typescript":"^4.2.4","@types/jest":"^26.0.22","lint-staged":"^10.5.4","@balena/lint":"^5.4.1","@types/sinon":"^9.0.11","@types/semver":"^7.3.4","simple-git-hooks":"^2.3.1","catch-uncommitted":"^1.6.2","@balena/jellycheck":"^0.1.1"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.0.78-renovate-non-major-909a409ba14abe2baff7109052bcf534b5102a50_1618463444757_0.4965770181152227","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.0.78":{"name":"@balena/jellyfish-plugin-base","version":"2.0.78","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.0.78","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"da783de7fed700c95791125fcfa2acdb5448e983","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.0.78.tgz","fileCount":18,"integrity":"sha512-/Twa/NusdNf/WKCpiShmFvcO8qCpy09KiDCn3+LMgDkCuHvxm1TwnEA6yAR/P9bYT+iPi+kD7QVUp6VNun7oJw==","signatures":[{"sig":"MEUCIQCtdX37i0dcy7avz0RZMc6CgsCo/bEbl4xaAuoLZw3gcwIgZM0nbl3u3SfihTDZv3y6ovqUOUOTYwKhivkF51n352M=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":38836,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgd8ujCRA9TVsSAnZWagAArwgP/Awt1LAB2h5GSXAGVmEO\ny87bkAqr/BSiWVxq+QyUFQLDk6zK2zKIJe8cqC7pcZlc8idQX5ctWHxwZqTs\nmuhRSv/i0cUM85EjM9cx9cBH+1m4TsyRsXTiiiatvBt/tyGPK3oqLHtf3Uxn\nIe0DIjsfGKIS6xe+il8CYWCH28fa+JQc9EBF5wEdP3xAMdZJdPV/efHkbYPO\n3M15m9VVE0N+d5Z/4gMfTpal/PoNHtU51OV+xshKI+6JN1EqHa+LwJOivENQ\nnYGnxK8YxqPMVNgGZTt6mXbvM57kU1PyEILXJGW4PPhNhiq3lBzMoK0HwYby\nj3rxz68wXtZ8OmdA7Cl1NDvjIbXgadfWAKhbsyuE/ieTlS5ZI1DjB3uleBex\ndrdhYCIU8awbUvKmivLzauvNyi/M1Z57iBDkdfk+0yLAnbdOG7otz57zi+13\nFmGklN03UEjUeI8BtA4NoV7V80eQLGtEdAvbKVOyFvl+SsfbqnXY3KWuMltk\nPPeg6m6itClvPQ0nlAUQWZN8V2X4dG0n9lo9Sf9AYvODSyyeqkIjt/divGa2\nZBcU97lr31wwCxnN3d1Zt0K+Hlaot8nqqv3MD03QWU6eD4cVLCWIBc8oP9ZQ\nAvYNWAeR0y4/G57CBQorZzhR594RvYMOHJHNsNRCOwyAJkXN/7jWX9TRsdib\nJ1OW\r\n=2qwR\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"9e404c0eaa5d0c361725133f48ead68ff6b7d978","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint --typescript lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --typescript --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --typescript --fix"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.3","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.4.74","@balena/jellyfish-logger":"^2.1.25"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^26.6.3","sinon":"^10.0.0","deplint":"^1.1.3","ts-jest":"^26.5.4","typedoc":"^0.20.35","depcheck":"^1.4.0","typescript":"^4.2.4","@types/jest":"^26.0.22","lint-staged":"^10.5.4","@balena/lint":"^5.4.1","@types/sinon":"^9.0.11","@types/semver":"^7.3.4","simple-git-hooks":"^2.3.1","catch-uncommitted":"^1.6.2","@balena/jellycheck":"^0.1.1"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.0.78_1618463651218_0.9400015095549543","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.0.79-renovate-sinon-10-x-9cd67ffebd7d75fcfae3153d8c84c9ebf63bb60d":{"name":"@balena/jellyfish-plugin-base","version":"2.0.79-renovate-sinon-10-x-9cd67ffebd7d75fcfae3153d8c84c9ebf63bb60d","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.0.79-renovate-sinon-10-x-9cd67ffebd7d75fcfae3153d8c84c9ebf63bb60d","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"0145eba91163c9218882040c177a73e222c4a264","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.0.79-renovate-sinon-10-x-9cd67ffebd7d75fcfae3153d8c84c9ebf63bb60d.tgz","fileCount":18,"integrity":"sha512-kK2g7597x5bK2XeGV4bDlAEGljkDVqcqXHTXu/e6CHIE09fq8BYstRkRBwZjvOw9vCKb6Fw856+b1wPBDNqYfQ==","signatures":[{"sig":"MEUCIDtRWGCtGEi/j874FzXUeJLYL7L3BJ5XIXtk4iexrinoAiEA3V4LAKMcACDVu4tP0Iu/vPDNJIQdsmtSM+KvTkXIq3g=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":38984,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgd8xdCRA9TVsSAnZWagAAB+QQAJLuloFVwMNCE37KKLxR\nS0o+3YMUx2acC3Y/UA7zqx/+FWMtWkPZQ9HJr/hSkuyamyuRq4cgRVmdV6bb\nHcrRCjrsiBFf/xYi1k+6I4XlZDVKgwPEh86SjrDnyiX2adlWU3yd+9e+EHuC\nzTgjvTbBTTU9JoX7J9UHe1DDsMwwYVYnnKiu8F43YNUz3Eaw+rOoPEUuZiKx\n9KFp7Qe4+VNjV4k4QXBUfYAHJQLZwyQYOg3Ysptd8zT6g0j++9OMUi9CSdC3\n5/dsbLp38A3ECfAknvZNfB/xCEGc+abHoLJKoZB9nciC2d72UXOJX6B6WUI4\ni1lIpgjVbr51o67/N/eS6mAItlLho1zLawAcjuHunKPHaW4WIjHfcOx3Ljub\nQZAHKLeeOD90ztTL6GRKPxCOmzorV/QWORsVuA95dg+GYWoNnCzApXYInN62\nm9/tJkKFB2gwhAfDGE2L+eZTnjZNBbWEx+SgZQVnQ249KY2/D2v/lL59gI9X\nZd2lNepLa+vhzIrllH5uQMaj3Metf673rWncI7SQsoIuJ+pYrAhHdyDyKaXN\nz4QEqYQ61M/Dtqs7Adyqdg9GNKVjYnfxKnxAaIDQLpF0x2XWVvGuqjle2KD7\nXLad365TPYBNu1PTkQrutFoTpUaF7raUbvRZTN2E8BS+r347pIQ5buf1Kt94\nna6t\r\n=Nqt2\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\n[![Publish Documentation](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml/badge.svg)](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml)\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"9cd67ffebd7d75fcfae3153d8c84c9ebf63bb60d","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint --typescript lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --typescript --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --typescript --fix"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.3","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.4.74","@balena/jellyfish-logger":"^2.1.25"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^26.6.3","sinon":"^10.0.0","deplint":"^1.1.3","ts-jest":"^26.5.4","typedoc":"^0.20.35","depcheck":"^1.4.0","typescript":"^4.2.4","@types/jest":"^26.0.22","lint-staged":"^10.5.4","@balena/lint":"^5.4.1","@types/sinon":"^10.0.0","@types/semver":"^7.3.4","simple-git-hooks":"^2.3.1","catch-uncommitted":"^1.6.2","@balena/jellycheck":"^0.1.1"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.0.79-renovate-sinon-10-x-9cd67ffebd7d75fcfae3153d8c84c9ebf63bb60d_1618463837047_0.7787782353854062","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.0.79-renovate-non-major-587b710d3445048ad87b60782da6c2f78a82ce13":{"name":"@balena/jellyfish-plugin-base","version":"2.0.79-renovate-non-major-587b710d3445048ad87b60782da6c2f78a82ce13","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.0.79-renovate-non-major-587b710d3445048ad87b60782da6c2f78a82ce13","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"25cf0efc81a9af1b4779a24ae4fb87f1fda5a009","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.0.79-renovate-non-major-587b710d3445048ad87b60782da6c2f78a82ce13.tgz","fileCount":18,"integrity":"sha512-+gC5T9mG0fCgTV1Wv3tQJiFJMcMn++ryp8zZkrieZ2JgDuRuOK9TuNANqyVFlqUmjA1/1mXd3m9z4a1gZdSmow==","signatures":[{"sig":"MEQCIHqRpe1J6CogpO2TGb1rKx0gS6PC4hx3Z3xumVbR62y+AiAs76twarJ+mhUHt2BU2bb7qj9apzk09TdTybk9pN5NEQ==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":38996,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgeB1+CRA9TVsSAnZWagAAyb4QAI96SdsX5lDTnVxO+P4G\nhz15TY2tp989lMrMCBWCbLYGh+ugel7hfLy3D8fjqfPzKwEHoV/TZMyXLlQT\nzoqBPiCHS5Od1CM4hsjA9SKbtd7+gWbkxf7nz3GYICCnkkgnls7iotAqOlDN\nLcKi9I9TZ3tL3DD1/akWYxfq8TZcCjDMuUs92DVMEK2h9zLHByjsgwc66sdl\nIRJWGWZHK4TugX7BKAd+vsrPFTUDCNelWSz5RfbJWgeisU3SZo/wegUh5CXR\nVP0gkpCein0mTDdmEqYA4VVTshvtPmlMrMXJQ3oW6TEjNkkznWq19d4FsUt2\nCGGeB1vee5I03blJRWeXGfLel69PM57K/r6yUdDRk9ZVPcSnK60B4MpJFxa+\n+2hNu1PQOZggIHHA6rxxRYP6PsIqJNX5FK+jGxqKkNHjC4WtG0vSmd/0Q7c9\n6BzyqQAuR13wNuUDWdTaKYHY6gEybzruQdDSsDSTj4HlA62QvmFVYQhd4AQe\nb0NaFkq6tXWul0ZPCB9v3xa+GFYZczlCqnan9tAhIKtsgMjAmyFAQ7E/katC\nlPujyPKGNvCRrFeY9XeUtpmOpwNir7Cosy6VmeZSDaeJBJjUCqr6nq294W0h\n1Qmg6FMb/xXcAro1ebEL21NcCF/5xkM2TwN8ZOX4lMPzIw2+EXB2zMNBYB/h\n1I4o\r\n=OXUf\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\n[![Publish Documentation](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml/badge.svg)](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml)\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"587b710d3445048ad87b60782da6c2f78a82ce13","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint --typescript lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --typescript --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --typescript --fix"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.3","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.5.1","@balena/jellyfish-logger":"^2.1.25"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^26.6.3","sinon":"^10.0.0","deplint":"^1.1.3","ts-jest":"^26.5.4","typedoc":"^0.20.35","depcheck":"^1.4.0","typescript":"^4.2.4","@types/jest":"^26.0.22","lint-staged":"^10.5.4","@balena/lint":"^5.4.1","@types/sinon":"^9.0.11","@types/semver":"^7.3.4","simple-git-hooks":"^2.3.1","catch-uncommitted":"^1.6.2","@balena/jellycheck":"^0.1.1"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.0.79-renovate-non-major-587b710d3445048ad87b60782da6c2f78a82ce13_1618484605685_0.5669350033465936","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.0.79-renovate-non-major-ba8f90ce13f7f44e8c125298e59462f5d85138dd":{"name":"@balena/jellyfish-plugin-base","version":"2.0.79-renovate-non-major-ba8f90ce13f7f44e8c125298e59462f5d85138dd","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.0.79-renovate-non-major-ba8f90ce13f7f44e8c125298e59462f5d85138dd","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"0468888e2a2a7bc4dfad1a9dbfb4ff34ea5da7e9","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.0.79-renovate-non-major-ba8f90ce13f7f44e8c125298e59462f5d85138dd.tgz","fileCount":18,"integrity":"sha512-l6CRlFI2J/RlIqmYHvYjnoyXfroRPS+OQoqDNcU+0/y2DIIuiB2yGI0s26B5sU5I13FwLVDFQsx8biM2OvL9Jw==","signatures":[{"sig":"MEUCIGDha/gIyLy3RitHxUFBWdqBFS7g0Hc9MKV8MstUtSttAiEAl3+yvZIDCVJbchzWmdHg0W0GnbuhkF5WyDYwoXj7+eY=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":38961,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgeDtaCRA9TVsSAnZWagAAotAP/1HBx+/bqpo06nGPx1RF\ndPToRAGifD5G+GMS3TIPPfa2iju/uS8HyoBJtzIas0kxPb0kYgejALjbrudd\nQ5XYkvqVxs9OKmPTn6v8IxYpGRwuKLHeOmKBMaorZhI9YWYTr2FbcO4molUX\ngNnSmUIy3GM6o27aMCPEsoRJ2fH8b+WQpjIoqttzJz9IKwbW1gkbsDgGBr9z\nSNiPMJceW+hnhmPls4cEohA5PK0jiRqxm/wlRYLybDahWDCPhe1eiqrdcMEB\n+lQOC7owe5SHwYsLBBv1ep9pLH227TUlo3fSML/yF71dToIvAC8L/P8Iwq4q\nuloe37HBKQWEKQJ167GSCSogRDrxOyWtK0MSKa3LBwWo1IVp8EZBzpt8wwyR\n8QcTS2Wdld0eQBOE1yZl50u32QxqTqX8FGcjI4nRumxLlpB9Xgaho4crp+qu\nEVuPU4JXPjK12Hs8sd4nL9xPvoDLf/gh2SIalJLybbQLH6/4+BZRcDvJBgOq\nKSbtGpvXr+Zl29ifFga3r+LQsQx/PuWeaPnMCKEL6lLy3hoOV+ZvlxSPutdn\nJweNkST2zhbwB5MUGGwzJ0hi3ARFnZ7CzR8rpvoJ1iCrfleT6J+MyHy4e8pC\nfKkXSsrpYGeRWo/fY2CAYL0KrpwBstaOvO0mjPRQ/PqX6DBHaaddtShquKMR\ni2v1\r\n=e/FN\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\n[![Publish Documentation](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml/badge.svg)](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml)\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"ba8f90ce13f7f44e8c125298e59462f5d85138dd","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint --typescript lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --typescript --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --typescript --fix"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.3","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.5.2","@balena/jellyfish-logger":"^2.1.26"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^26.6.3","sinon":"^10.0.0","deplint":"^1.1.3","ts-jest":"^26.5.4","typedoc":"^0.20.35","depcheck":"^1.4.0","typescript":"^4.2.4","@types/jest":"^26.0.22","lint-staged":"^10.5.4","@balena/lint":"^5.4.1","@types/sinon":"^9.0.11","@types/semver":"^7.3.4","simple-git-hooks":"^2.3.1","catch-uncommitted":"^1.6.2","@balena/jellycheck":"^0.1.1"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.0.79-renovate-non-major-ba8f90ce13f7f44e8c125298e59462f5d85138dd_1618492250323_0.18628982568024344","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.0.79-renovate-non-major-1df5f1deb4e7d368fb0c0fc667f687a6ade19033":{"name":"@balena/jellyfish-plugin-base","version":"2.0.79-renovate-non-major-1df5f1deb4e7d368fb0c0fc667f687a6ade19033","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.0.79-renovate-non-major-1df5f1deb4e7d368fb0c0fc667f687a6ade19033","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"5cd211429185eb3ba4838aa6e022df77ded156e0","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.0.79-renovate-non-major-1df5f1deb4e7d368fb0c0fc667f687a6ade19033.tgz","fileCount":18,"integrity":"sha512-/rDubFWyZAc5jeg55/2qn8r455Rb0YtmvBYKTbYpZjrPyR9mIWbNaHVxqbcdw8hG+tbzKBFI6ZNVtC996ooqOA==","signatures":[{"sig":"MEUCIDvLbNbxxXpj7bFOmmf6AcQDAyyk+Uaj/aPDKf6Jjl2ZAiEAk0gELBIfw58wwof5dEErpJM8djstHv68plP8as2aBFk=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":38961,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgeGp0CRA9TVsSAnZWagAA1SkP+QG7l6731N00B4NXn5fr\nqM4xhw5FeXib0zXkCmPnIL5NL3hCPo0YUH+1NntWmncEhaReMgMplWhHto/x\nm8Q4SxFtsAXih8kI8dVMy+TfHX8xA2GWmA83mhyXgurqV3W6r/r6iflw7rnj\nNrb93VKubaJZ5ZXV5Zw2l5IrYR8nAO2KSUO31xgtwzfAD21FOH5BBn6L8uJ/\nnlKPi0106JijvzvqbF9oAeIN4Gq2dOAQP7sCKHxD85KU7lk4ZJVv7vmSOCd8\ngKtpUmAvDu/Sxz7isZy0dLdmM1gLjlHzBsrp6zaMGuzzAK4lWJEPbJ106Q7w\nUZFd/izv+1vcZ2+dDUyHNJOarJS2QQGaCjmTk30oHiXlfM33mD/149LujPFH\nON49KYXvmEGWBJnnoAPhHz5X7GamL2t1Z+JB09EXvFphAVqg3cHaFsOt003P\na8VBtVy697VwX3UKNhvI9nHUGkXDAiWtEZht8a/YK5Xo6DHmmsU+yAfEsA7q\nzdTBfbrUDNBRBoEc03BO8yNhSk72ywaSJ0VgLYgf7OSHyx3cLRRmi4HglA8I\nebXARQwsCWMh4jOGPVzUH3qspCIrd06afneqsG3W7YZ1/CfSwO4gGRcpKIs2\nEvkB5JOfQjVB6ogL/pBD9KW6SPZAxpqGBlVxnfokxzb+1vqrAq8zcfEg82v+\nDs6m\r\n=46sk\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\n[![Publish Documentation](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml/badge.svg)](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml)\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"1df5f1deb4e7d368fb0c0fc667f687a6ade19033","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint --typescript lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --typescript --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --typescript --fix"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.3","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.5.3","@balena/jellyfish-logger":"^2.1.26"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^26.6.3","sinon":"^10.0.0","deplint":"^1.1.3","ts-jest":"^26.5.5","typedoc":"^0.20.35","depcheck":"^1.4.0","typescript":"^4.2.4","@types/jest":"^26.0.22","lint-staged":"^10.5.4","@balena/lint":"^5.4.1","@types/sinon":"^9.0.11","@types/semver":"^7.3.4","simple-git-hooks":"^2.3.1","catch-uncommitted":"^1.6.2","@balena/jellycheck":"^0.1.1"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.0.79-renovate-non-major-1df5f1deb4e7d368fb0c0fc667f687a6ade19033_1618504308075_0.77352958276468","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.0.79-renovate-non-major-f9b8ece098d51a46c091a1622f86e87c0d1878ed":{"name":"@balena/jellyfish-plugin-base","version":"2.0.79-renovate-non-major-f9b8ece098d51a46c091a1622f86e87c0d1878ed","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.0.79-renovate-non-major-f9b8ece098d51a46c091a1622f86e87c0d1878ed","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"3683da39f466a22e7fa24fe15a6ccb0405f5462d","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.0.79-renovate-non-major-f9b8ece098d51a46c091a1622f86e87c0d1878ed.tgz","fileCount":18,"integrity":"sha512-YQTnOcSH2SqOcNsLtKG1aLcTqw/X2UhNJjSxbk/dUStRKuTZ23H+jlG02NIrAPm9h26wKIYMuN8qQMH0J77rUQ==","signatures":[{"sig":"MEUCIFgpLEecTHss6UJTta/f240GxaQDQLoEnXDYCQhmjI3dAiEAs1hKTtqo1YvPq3/xcWoJFOToexJ5eF9wL7hhAgDlbTg=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":38961,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgeIuyCRA9TVsSAnZWagAAGLkP/2G3MYNpYYKyDTFka34/\n2VVFNZ0W4uK6R76ibaJau1njn7MTjovMLYULDWhTYrflSnVeYjjRSN0QA2ct\nZdMMOQyfnZPcdHJrjz/a7n1DjIuBnrcyZJ6me2Yc1cz8UxVL/jKpM2DJUEyk\ne+Fc29Yb6tIhXRO2IqRTe0cMn4E9rCPqJo6/4bFq+AeLyFc4zL7fGlaZNDg7\ne6QiCZN24jZ2Pk4+avPaljMJ5/u5m+h2smK59QmAmoSNOmbp/BM4hWZJaQw5\n/wStfcZDfRgaRnZU53+aV0RKi5Fi9YaON5Pz5Uw1VYBZeMsraJjxlzzuzZ+q\nfBk9KKG+O62L5EbBfiFN+aazYnRBXZZzmSrXMSvnuiuuupWzpf8x5+71R7i+\nGG6Sg1UluN2UkK53dRcj+FK8H7AOLXr0em/C2wZD8VUUZTTJ5iXkIlVVjuSZ\nLtW0k+ShKIuyFed+P+EnXri0b4Z6xMbLh/kQX44Ts6FEoiqCl3th8AzFau2/\n210UnPjubf67kKItC8WcDPkiFw+BoOp2Szo8ayMomVbcPvXh3tF37s7zk4zk\nvDlOFkM33ufzn44OdDNljleWbkjRiwgmNfNP5T0Io13UO/O5nM9fs+OYXNS4\nztx3IME8uZyjou72gnKqC95IHKKT/50kPaWdf5ngIdXF2cKM4XDBMg74VEcD\n20Vd\r\n=g3P+\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\n[![Publish Documentation](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml/badge.svg)](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml)\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"f9b8ece098d51a46c091a1622f86e87c0d1878ed","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint --typescript lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --typescript --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --typescript --fix"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.3","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.5.4","@balena/jellyfish-logger":"^2.1.26"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^26.6.3","sinon":"^10.0.0","deplint":"^1.1.3","ts-jest":"^26.5.5","typedoc":"^0.20.35","depcheck":"^1.4.0","typescript":"^4.2.4","@types/jest":"^26.0.22","lint-staged":"^10.5.4","@balena/lint":"^5.4.1","@types/sinon":"^9.0.11","@types/semver":"^7.3.4","simple-git-hooks":"^2.3.1","catch-uncommitted":"^1.6.2","@balena/jellycheck":"^0.1.1"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.0.79-renovate-non-major-f9b8ece098d51a46c091a1622f86e87c0d1878ed_1618512817936_0.42078223793037695","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.0.79-renovate-non-major-23ccd602f5408b939cf0eb172a58bbe31f7450ae":{"name":"@balena/jellyfish-plugin-base","version":"2.0.79-renovate-non-major-23ccd602f5408b939cf0eb172a58bbe31f7450ae","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.0.79-renovate-non-major-23ccd602f5408b939cf0eb172a58bbe31f7450ae","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"a8ca68c2916edc20e46816a27c21d91dc796fcec","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.0.79-renovate-non-major-23ccd602f5408b939cf0eb172a58bbe31f7450ae.tgz","fileCount":18,"integrity":"sha512-9wC7c/qU39RA99Hxl2NvgbaoQeFCKuAESN/d1rCzA00oX7uK1anhecIoRquP4W9NAsc1UHM9kdOchi+ScqfpTw==","signatures":[{"sig":"MEUCIQD5jq0X6pEm0CWMEctAnu/y1gTDw7avq8Eeqbo1MIvdQAIgcAtoEI/o+4MqjFUewFvzKJns4+FsJKAflQ/lMIKiOYY=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":38961,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgePBfCRA9TVsSAnZWagAADRcQAJpG+fjt+O/cTWnJEhrH\n+hTb1oHk7UXiPi2P6NOb2qgoKlzJ89IEbsmxe0TPr/YgskAMaW0qGlYMXxos\nMvNqupoh6PxmnUdFHxr9pMBxQnb7QTuw+spNWF3Z12NUe30tf4xyAldj2PbZ\nLMF5Y2V1jUXLvIyzk8jyPpDuKuZM+MLXXld7raOYTeyvfAzkdZWtbiOIuf77\nAFEfvQB5TMEeN95vjaAE1Ud7oWabkTbwv+zA0jeLWx5wzgZF8Rxd18X9nddC\nQOKlqZVyTRw8956afxxfZa+ZEGBgm/nPaCafMSjSwbhz0njk7xcl7lCL4UKJ\nOtQYeALrtKY5gUBwcdwE5Z6iUm6JtquiwDGe7Rj75PvnRsaBf94o9J0jO0o7\nhA+5+93Ay7gzY/gb32NeoBUPtpvXmpeFL1CDYowE4/NU5NX5kpZeQxRm74fQ\nxBJmnNsgfp2N3up6P1qdibH9jO7TQrTLAgLxxvsUXe1Dy/9P93SHra9G4lbB\nLdBZlIK779Rnw/XnszBGrx5KRezkOARohiRhQPbLByVyMTO49wNPdI6Ud1ZM\nG+A2OYEa5Vcp3cMFLOTvJMFmmrzdjEub/iywQjzyMc8VYWm+ERDDE3CHYhTp\n5sQw/SRuZfoGNW401ZE1m7faYzHlM3ba7t+eGhwvG6OAwtz8iN2n+OXGDcNr\nNK2z\r\n=fRy9\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\n[![Publish Documentation](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml/badge.svg)](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml)\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"23ccd602f5408b939cf0eb172a58bbe31f7450ae","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint --typescript lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --typescript --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --typescript --fix"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.3","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.5.6","@balena/jellyfish-logger":"^2.1.27"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^26.6.3","sinon":"^10.0.0","deplint":"^1.1.3","ts-jest":"^26.5.5","typedoc":"^0.20.35","depcheck":"^1.4.0","typescript":"^4.2.4","@types/jest":"^26.0.22","lint-staged":"^10.5.4","@balena/lint":"^5.4.1","@types/sinon":"^9.0.11","@types/semver":"^7.3.4","simple-git-hooks":"^2.3.1","catch-uncommitted":"^1.6.2","@balena/jellycheck":"^0.1.1"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.0.79-renovate-non-major-23ccd602f5408b939cf0eb172a58bbe31f7450ae_1618538591463_0.14618270940893918","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.0.79-renovate-non-major-fc1f89eaf092b151c40ff19898a9c67d4c0b6330":{"name":"@balena/jellyfish-plugin-base","version":"2.0.79-renovate-non-major-fc1f89eaf092b151c40ff19898a9c67d4c0b6330","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.0.79-renovate-non-major-fc1f89eaf092b151c40ff19898a9c67d4c0b6330","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"e78a851c126cf3d6219f19aae2dd94302728ee4e","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.0.79-renovate-non-major-fc1f89eaf092b151c40ff19898a9c67d4c0b6330.tgz","fileCount":18,"integrity":"sha512-PJPd87FYs0G8blzSL5WrzNIFgWjt9lcFwSkzkGyCiteckrj3Z5yZa7wRJ9W4E2rAPJhpuciQ/Ccy6cJ3z4xHNQ==","signatures":[{"sig":"MEQCIF3schQ+9v6Me/xeIetJu2nSPsazk06adqR73JrAQSUWAiAbb2wJDxRNJhb8/LgLrGchXzsowjUeUA7YJoz4WWXYrg==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":38961,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgeQGuCRA9TVsSAnZWagAAAJUP/0kwtjxaBm93w2RYVdxM\ngU0NkNJW61J0dXNHBBsX8UHWM1N21dwgPWwMb2uVoVvNnz0rQmE2okmxG5kR\nb0FB/34DXIkONXXvrFRGt7RM0iMGCYO8jNtceV8If5SzBGq8czmhhksAudZ+\nI86Ten2dKukD+ERCvFDH6yn2wUPCGwJ4akJcL67ny4RLC2Al5RKW8ktIidLb\nTmK+SfgPhqsSiTplvPxf6B/C8S3wIVJBOQ9TEzpn9utL5QptuV3EuqgcZFPC\njuR2//fON/rgcJ1jnOHyiTq/M7M3IIUbqSQQmPZ4UzXeVQPqVXwouvWlfVcN\nDXrT0xHdSTVHoJelOP5ybcPvGJRgD6gwhQHFSPkc16NRc0ilNmkYS4aFZFPe\ngwaCV08pIbWQTKDhCH9hIzUunpikYi09FbYbmD5TYsKbZLLjen9tCoA4URI/\ne4Rn7+rTRCZL5tbEzpdcg1onegBUa4QZqhM8pCiy3N+p2NZXjjWfTntCYVTQ\nus6mWy/6SpqUAJtz/VYlzx6LxWRfx/jbsOTB+ufTh1cco9RqitQ6yPyKJ09p\n87k7vH9pXJxcTY3kRfv/35OCC6Cp8dqvJN5vJqhtX664lr6rV4MxnjJKpWm8\nEY7jBfPorITNuTrXUEPTkMucY4iE7Z6sPEWTFLaXBDmdHMoY/WfPoBSgWwgp\nd3Xa\r\n=CQ7z\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\n[![Publish Documentation](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml/badge.svg)](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml)\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"fc1f89eaf092b151c40ff19898a9c67d4c0b6330","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint --typescript lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --typescript --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --typescript --fix"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.3","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.5.7","@balena/jellyfish-logger":"^2.1.27"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^26.6.3","sinon":"^10.0.0","deplint":"^1.1.3","ts-jest":"^26.5.5","typedoc":"^0.20.35","depcheck":"^1.4.0","typescript":"^4.2.4","@types/jest":"^26.0.22","lint-staged":"^10.5.4","@balena/lint":"^5.4.1","@types/sinon":"^9.0.11","@types/semver":"^7.3.4","simple-git-hooks":"^2.3.1","catch-uncommitted":"^1.6.2","@balena/jellycheck":"^0.1.1"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.0.79-renovate-non-major-fc1f89eaf092b151c40ff19898a9c67d4c0b6330_1618543022219_0.5212369012508775","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.0.79-renovate-non-major-aeab3f7821094e1240686be53f7efabbbe33656d":{"name":"@balena/jellyfish-plugin-base","version":"2.0.79-renovate-non-major-aeab3f7821094e1240686be53f7efabbbe33656d","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.0.79-renovate-non-major-aeab3f7821094e1240686be53f7efabbbe33656d","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"bd63bb7497558f2e496332efcf3e7a1f581a62d4","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.0.79-renovate-non-major-aeab3f7821094e1240686be53f7efabbbe33656d.tgz","fileCount":18,"integrity":"sha512-nATxxavkIm8VA2l3U4qvoM0bGp+7uH92i1KieX28B6b6FZngT4vDvodzrFtZjP81y3Cp0UP2CP/qX6PyGWDgxg==","signatures":[{"sig":"MEYCIQDgDF0vefYl7MguM88BdHx0QeRaht8Zqp/NAM5UjgE4fQIhAPrh6Baf1A0L2l9n9kQMBrCvA87KJzQofXXpOZ/z/ifg","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":38961,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgeV1uCRA9TVsSAnZWagAAEFgP/Rn8EeLdjzun9BKcWo4d\nSnzmRXCtposOztaz1h/vL99Jbwbep7BvGRqGwpmF52C3z/y4SwIGaYBYCEVr\noOlB54fv91NEo+IqdIfPQHafhwtHwFzLdyHEUK7fc4PkMhqm8Tmv9l3AReG/\nQRkEd6D9tmcbounwYWkStvApEutBXhup5Chfi66D1T3LwZj22Qhp7CrHzFI0\naHORvJvp4axUkmGW3MwfxuGioQcb/14Cg+L7OrdQ4QCcJ6fmb/IUvivKHMgT\n13YvU7z5p9iysIIJSkhzQhf6Y/ivPNZwxkOrGcgOhGpRUjITJ//RlZT+DXdW\nfIiVTf2sr7zZ599d+PwPre03E+Tjk1iTbP8tmb5mj1c3Tk/Iq+894uC42mg3\n350p0IGhrP95ZVgUYgwYiHZpgkKR0yOL4qMkLWPoepIwkHRtSDp2OMoSQ7Ws\nPNJkVRIZppwrrlUvQLohaluU6BPlbnDwqCnuzoKSPSfKygiEbGqoQeFkiiDK\n7aku/ldUEBCwYWALRE+GKG7hRHmlkev8Hw3KclCWmYb+F6pODkD7sx2jc1z0\nm+tr81Orh4387VJD9ru8UK5W+0bcGno4l5ZSj++LlUe37hdOWNMBguixR7J2\n0IL9MayZhfzMqf/pRqvF+clsEMw9txf370Yz0EWhKe64rPby8RePUItY5NGv\nTD0b\r\n=RApQ\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\n[![Publish Documentation](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml/badge.svg)](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml)\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"aeab3f7821094e1240686be53f7efabbbe33656d","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint --typescript lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --typescript --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --typescript --fix"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.3","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.5.9","@balena/jellyfish-logger":"^2.1.27"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^26.6.3","sinon":"^10.0.0","deplint":"^1.1.3","ts-jest":"^26.5.5","typedoc":"^0.20.35","depcheck":"^1.4.0","typescript":"^4.2.4","@types/jest":"^26.0.22","lint-staged":"^10.5.4","@balena/lint":"^5.4.1","@types/sinon":"^9.0.11","@types/semver":"^7.3.4","simple-git-hooks":"^2.3.1","catch-uncommitted":"^1.6.2","@balena/jellycheck":"^0.1.1"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.0.79-renovate-non-major-aeab3f7821094e1240686be53f7efabbbe33656d_1618566510348_0.09374784089945498","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.0.79-renovate-non-major-24f71b8a035a1f5d4a4a980c0008a353e109fabe":{"name":"@balena/jellyfish-plugin-base","version":"2.0.79-renovate-non-major-24f71b8a035a1f5d4a4a980c0008a353e109fabe","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.0.79-renovate-non-major-24f71b8a035a1f5d4a4a980c0008a353e109fabe","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"abe08f9b7277246fed87251176ef049fba71d993","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.0.79-renovate-non-major-24f71b8a035a1f5d4a4a980c0008a353e109fabe.tgz","fileCount":18,"integrity":"sha512-F5gd7l33eXDhTHFeT3MUHpZ5jm8KpJcAKZ8X6f6Fw+xv+AEn80X6WMHnpJjmI4gyyYSRJ127dhmVrjSphdXCoQ==","signatures":[{"sig":"MEUCIQC7xW4UhIaIgkss9+4C80TAFYm0HRT4aQ8Juc7MvBwovAIgPOGn2p7G8CG1guKLvNVI049k+wTQkcv5FkdQpL5ZV20=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":38962,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgeYKUCRA9TVsSAnZWagAAlAgQAKC7la7/j1rn8o0gS24j\nVed995o7n3vkrEuzzjg3OAmabh0RkIWnOE6bRrizhP5AfPT3qj0bgGcsow1v\n2ze2NQqSvQABAa9JroTyvPUhs38L/kdA+keILIdtd6dKiEoux+0jIS+j9yJ9\neUY7zOjlbuAp7bOSvynyfiCil+6clUrKgylxBHf42ceNX7M9nRmz6ZguOYpR\njRcznCg+jqa9XhIUtd6yGQc77VqpClfEo/AfXX1LkeTqeIWoJZpZVQef71C3\n5B7LJ1CMZypVp95c+a4HHGEKj3amy1u9RfE0PeUj3YHY2cDJ0raGiQC/nDan\nPMXboMK4Mj1nkHCwqyA8pW86MSdM984/ko/vMMRerUswnZ0vIifgCXt550TM\nXX/7RnJ0dSNJCgAvAo/fcytWJ1R0q0XhY7C4qnvssX+Xxov7Hh11Vjh2bh0b\nye5OmsiUvfAlm04mkQjdEkhdx7TvljXNzukXUhO7f8V8YyMq997ARCmBk4Vn\ndGk0nYhdtMLJC2uLWwgR5BAAFjlu0RHUuPVa9YqWvLB5OmLTq2YyCs4Y8UTZ\nMYD/RcoSZt3GJbFf6TogU/QVZdti02IOE7YRZpnY4PF0s03b/33/2PJt/ANb\nlnJk9pPqgMB3jNoJCcqULRjqi7bFyoPUeau4v0U7FFVZeES/aSKdiYJORRHv\nLITW\r\n=DFny\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\n[![Publish Documentation](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml/badge.svg)](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml)\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"24f71b8a035a1f5d4a4a980c0008a353e109fabe","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint --typescript lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --typescript --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --typescript --fix"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.3","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.5.10","@balena/jellyfish-logger":"^2.1.27"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^26.6.3","sinon":"^10.0.0","deplint":"^1.1.3","ts-jest":"^26.5.5","typedoc":"^0.20.35","depcheck":"^1.4.0","typescript":"^4.2.4","@types/jest":"^26.0.22","lint-staged":"^10.5.4","@balena/lint":"^5.4.1","@types/sinon":"^9.0.11","@types/semver":"^7.3.4","simple-git-hooks":"^2.3.1","catch-uncommitted":"^1.6.2","@balena/jellycheck":"^0.1.1"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.0.79-renovate-non-major-24f71b8a035a1f5d4a4a980c0008a353e109fabe_1618576020109_0.5101834471914284","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.0.79-renovate-non-major-23ae7c41caf0ff78d055e9172445967d44c52e28":{"name":"@balena/jellyfish-plugin-base","version":"2.0.79-renovate-non-major-23ae7c41caf0ff78d055e9172445967d44c52e28","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.0.79-renovate-non-major-23ae7c41caf0ff78d055e9172445967d44c52e28","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"112654c7d683841a3c705a859f6180586576fc4b","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.0.79-renovate-non-major-23ae7c41caf0ff78d055e9172445967d44c52e28.tgz","fileCount":18,"integrity":"sha512-NKPrDmo9N5bYb2h3sEl7a/WCC6bJ1oPFK+6eErxUQx6gVl4e6NT+pgdZelTH6dfOmJ2TxQGTbP4ZFr3bw9Y+Yg==","signatures":[{"sig":"MEQCIBK3qa1CLiyT+CsL7wo0w787H+ZSi0O18wxJMt/JfyRDAiBaPDU6EczdOxyR0eofYj/V50lSpHv4b/z2ZMHBLdO8/g==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":38962,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgecA/CRA9TVsSAnZWagAAx0oQAIIHYNugcplypNKlp/xG\nmeJlfe6Jn37En8SSMsCVYUAeKcm+rsOrhmgG6k432pG2lh5JRdaLSHd/4ZUs\nkhunf3sq49b6/5Tp9uYkrTVu+nfXGQOZA4xEFMDOAwO4qIDjnkoI/cZ2UETx\nV3A+1+RY/sjG8FqrrnC/i3EuHNSVZLGcyIubrr27Q/oMsluDAljGFCE2Whjy\nSPSBFpt99O6Ue7kgeYp1m92NPkLidHzC5WMxGwlnpeX73eDGUrygW0wJgaPA\n5kTsAPrMvP8cW+Xl+NvP3b0Tv0B4lJDQ44u+tbTI3PYq2lOv72HhjumaYJjZ\nOCjPE08o3mrxXoeFp8EDk7hO3fAnW00aZm2NDxg6kcXp1ZD42wfDcac5tMvR\nfgbf+i9x8/ojfsxZ0qpdc+ltOuMPSYMPvZAp6xTqImzU6Bl1TLney6jBUyGb\nsCZziusPLLQbWQ2RemWnaz572YaoL5KgYnqTPCK7HhP6NX8jo/vDbbl3KozK\nVOTWW3ohsTPkvrxWXfWOM39TlmO8VjRa5NY8LamUweWGmgP/fPPKgsuOCPru\n4UcNoWXbEk6k6kxmBxncnNU3B+Zxie0cDDtay5xMWanw9HHE3epo/8PZ1G8a\n6m3VoAhy8oEiSgClz9Hm+dckHAkBLQsw/Wq7r+/oCjar6qAnrbBB+cGiI3rR\nGyjI\r\n=u3mt\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\n[![Publish Documentation](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml/badge.svg)](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml)\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"23ae7c41caf0ff78d055e9172445967d44c52e28","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint --typescript lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --typescript --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --typescript --fix"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.3","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.5.11","@balena/jellyfish-logger":"^2.1.27"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^26.6.3","sinon":"^10.0.0","deplint":"^1.1.3","ts-jest":"^26.5.5","typedoc":"^0.20.35","depcheck":"^1.4.0","typescript":"^4.2.4","@types/jest":"^26.0.22","lint-staged":"^10.5.4","@balena/lint":"^5.4.1","@types/sinon":"^9.0.11","@types/semver":"^7.3.4","simple-git-hooks":"^2.3.1","catch-uncommitted":"^1.6.2","@balena/jellycheck":"^0.1.1"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.0.79-renovate-non-major-23ae7c41caf0ff78d055e9172445967d44c52e28_1618591806972_0.8886775976811414","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.0.79-renovate-non-major-859edf140e081478e20589d8d89460e87bb3bca6":{"name":"@balena/jellyfish-plugin-base","version":"2.0.79-renovate-non-major-859edf140e081478e20589d8d89460e87bb3bca6","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.0.79-renovate-non-major-859edf140e081478e20589d8d89460e87bb3bca6","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"6eb6f13f02bf3abd91dd5f4c78c5a9d8108758d6","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.0.79-renovate-non-major-859edf140e081478e20589d8d89460e87bb3bca6.tgz","fileCount":18,"integrity":"sha512-HIK811cOr7iH86It6/0B91wyfrXJyMbY1l44W/b2IcZiCK7dFHn05lHgirnXxuNCzBf8r75UYY7ePO7unPAlRQ==","signatures":[{"sig":"MEYCIQCLhPtsgwxzmForMHJ+ZCuJjtMtFfKIthdta6jiru1NgAIhAN7m+wgL2h4HYS4TIjfPyGZIqqy2kRId11cdbP6/Yx27","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":38962,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgeeLRCRA9TVsSAnZWagAAMIkP/jyQ76kmP9ipt/nQaTOI\nhXgJHqB/f6eDsQApJrxjgrwxfJ+rw8OnShjtxzbEksiXh06O5dSWU2qv0bbn\ngg3lWnh60lBbCXQMD0+6VSxLHpUbTr4EeMd/gxZmywSaD/iuC5arnyZYpklZ\nGDtZgRZD5FlwsQvC1St/lX7P2U62CpbKlJKapeV/Bt+dVCkYcchap5lSpfap\ndRQD4PCLx1ASPpBZH3LkaY/aZDd3ndQkhMexX3CzkwI41BzSElfXRTaCNQ99\nJdKLGbwNPA5eGXOcbzsWmD6okQvOxoLid5mJmIRFQm7Q2fqjpIEWRNVAQyQ5\nG3bRRYEfEHTCY5fZp9M4TlmUewOdkfxdOJbPrJq0EG+6I++2prMbJrFpeIGu\ng20I5obN6dCCqEsUBH5c7/OhiemsV17ypsq6xVebwUdV9Rsv7RpBdkfkkWp3\n1XUtd27/ESPrpVFvEn2cEFEaDSLoYqwiLUSfkPgA0sGDxcvnfjnLZHuvJHZr\nXw3ev69BUX9bNgA66DwB3VL9BzEb0sv5nUM8effISaRQ/hGP6u3kuRb8tVm5\nogktDOAsah8spN5ikrnKltzVB/qRTNGmNsNs6BKc/5WXwSRkWINg3B8L6uWi\n5K0/hqOXmvvCrzEedV1a5LS+7Gjd70IebbG9qunbUECqsYCEVViu4qBmoEiT\nRtAY\r\n=E5Up\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\n[![Publish Documentation](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml/badge.svg)](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml)\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"859edf140e081478e20589d8d89460e87bb3bca6","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint --typescript lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --typescript --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --typescript --fix"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.3","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.5.12","@balena/jellyfish-logger":"^2.1.27"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^26.6.3","sinon":"^10.0.0","deplint":"^1.1.3","ts-jest":"^26.5.5","typedoc":"^0.20.35","depcheck":"^1.4.0","typescript":"^4.2.4","@types/jest":"^26.0.22","lint-staged":"^10.5.4","@balena/lint":"^5.4.1","@types/sinon":"^9.0.11","@types/semver":"^7.3.4","simple-git-hooks":"^2.3.1","catch-uncommitted":"^1.6.2","@balena/jellycheck":"^0.1.1"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.0.79-renovate-non-major-859edf140e081478e20589d8d89460e87bb3bca6_1618600656923_0.4022282641484165","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.0.79-renovate-non-major-e0452f5b3f045fa25fee3d7a5516936593ab46c8":{"name":"@balena/jellyfish-plugin-base","version":"2.0.79-renovate-non-major-e0452f5b3f045fa25fee3d7a5516936593ab46c8","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.0.79-renovate-non-major-e0452f5b3f045fa25fee3d7a5516936593ab46c8","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"6825cf3d551f6f727bc998479d88f1e0edeb4a30","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.0.79-renovate-non-major-e0452f5b3f045fa25fee3d7a5516936593ab46c8.tgz","fileCount":18,"integrity":"sha512-8g6xMghymD6ayarOxEFkLmJeSmr0fscd/0BGTip3cySf6hJMAYCVm3J+s4Q1IuI7Xy7xWbRjuNM7LJPu08F/jg==","signatures":[{"sig":"MEUCIQDQIt6FyDqDrnaJ8eFzdJo5a8HpaNbHZQErqHLuuUNI7gIgGbXvC9oUoGQAvb1G8E1CYK/uktogxGde9ldFntSR3Gc=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":38962,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgehUQCRA9TVsSAnZWagAA3yMP/iJ9pWtIqBO33MFXQoZS\nYMIcHpKx5X2bTreDI1+LIJCkFTYnK8o4C2YkQmVSuQBqPVQ3U7ca4QwMXBa6\nccGVZi7SXYm5sCWvet4CQZ36drqWc73u5fySUYCcXFf41nyL48a21xIVFu1W\nw8oAMqs7FkMndzM+SPaqqNGPUrpPxl3moknncw/iWxpe0DVqZDj2W97GZqxR\nWU387y3jd8H5uZ/kWxBDPu+Ru4RqCRvEEEwxj9cGcbCdrSqm60FXYxXW2Pzz\nQNjpY7XyPmdnmQR1QefFsggcQq9XgvvjJjpYm8UlsgaPSk+hVMF08oc7l/3t\nu/pnuZ/Vdg3qQlugyQF9XiFC+0i0EdXo5a26ssP3jp16I4elm2iZJIWzGmwg\nstJPDU9YqT1jxyjWGtZlof6XyzmlB7L9XWkRYr9e7mGksS/OI32hzJtpb4Si\nf6YZYrjMypl1TM5z6xcK2g+epoxHUH7bGIYZFqAGvCKG9zEcoUKl1PIxjFAE\nFoxLb0uPsjjPG0rjdPkLKx1l41ePaqpRk/SCZede3wJnmi8zNnIvB4OGyJYV\n3uV1QeEPe9hI2seq0b5sa26FjEt8rceEvwT+OWBaYuZ/jC0wHaoDW/wDLKi0\nzDyLzCTKMB2O0jDog9KDEAOpkB9nfqeugS4a5UaAnfvdemQCUiC1HMmm6911\nXhDa\r\n=wwx/\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\n[![Publish Documentation](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml/badge.svg)](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml)\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"e0452f5b3f045fa25fee3d7a5516936593ab46c8","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint --typescript lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --typescript --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --typescript --fix"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.3","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.5.13","@balena/jellyfish-logger":"^2.1.27"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^26.6.3","sinon":"^10.0.0","deplint":"^1.1.3","ts-jest":"^26.5.5","typedoc":"^0.20.35","depcheck":"^1.4.0","typescript":"^4.2.4","@types/jest":"^26.0.22","lint-staged":"^10.5.4","@balena/lint":"^5.4.1","@types/sinon":"^9.0.11","@types/semver":"^7.3.4","simple-git-hooks":"^2.3.1","catch-uncommitted":"^1.6.2","@balena/jellycheck":"^0.1.1"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.0.79-renovate-non-major-e0452f5b3f045fa25fee3d7a5516936593ab46c8_1618613519972_0.21493178336625762","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.0.79-renovate-non-major-913d63a1eddd4accf9ae50f21cea2eb16d2a4c18":{"name":"@balena/jellyfish-plugin-base","version":"2.0.79-renovate-non-major-913d63a1eddd4accf9ae50f21cea2eb16d2a4c18","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.0.79-renovate-non-major-913d63a1eddd4accf9ae50f21cea2eb16d2a4c18","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"d2453f7e87078218f829adc460ed1d25b7fa9e7e","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.0.79-renovate-non-major-913d63a1eddd4accf9ae50f21cea2eb16d2a4c18.tgz","fileCount":18,"integrity":"sha512-RwyDs3vvV3DoK30prZkl+Mh/jfU80+HxiGU9S/yqJhRweFqYplGma9cHH3N1NEC7MZQITTbeE6BEmgeazggpTw==","signatures":[{"sig":"MEQCIGtEZ59uV/sybLUHhhhTvAlpTlpFRVgmeTiuyr5g3XrmAiBslhr1pGRqZueV/1CYiGjKz819FB1MmRJufjNarjgxXA==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":38962,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgejiyCRA9TVsSAnZWagAAJfwP/iy3f6B0eOckFQk7rqXi\n0SMSIZf6+UYJFGPKFEhZLh0g8k9hsua65qFDmLeQoYxgPQb4WT/fVOkgnwiZ\nYdQeXB5IAYEUt+dkh5X9b4BtnH3HEyh+toRYT5SC8ru8AiSpcO7JbX9XIO8T\nH840WNGkOGeGchz5/x7UXiV3Yg2EAF+n3UfGPXzyckCKrwI04TtX83mCtmhL\n4b7FTP+7zLjvwjIVOCv1IlaRlVpACJvZIo5Tt3FKNFjm+KAuLSPROiRUQ0IN\nJYGRK1JobKZCvUzKMlaIgvCYi1egbumUK1HXkEFjJzVr5ykbbXdtv2pitvyJ\nGjvf0LrB5OqnHVChvmtLUJfQatR5cLY3WTKxTkNHSuilqOXyADhz7L3FBwt1\noyh9FO162ekHRindX9o9TsQj5j3ShJ05SnsijXwGgzVhobQfas2MRIb99vfi\n5VjS1+i6PpBzOX8btmHJ5umnQGn1jHyEZ10oE1k2+Yn5KilGd8wTh6K/s/Kp\nt2h6+iGYNrgv0h9/lhY+LyaSXv5gaMSVSpczfqMNKxTECg96NUSXbvKwBYU0\nJoXQUCh5D4RNhx3JH5lU0iEEIg/gDf+eVkx6TkBxkMrih0oxv2lomC2GV9h5\nbc7B4TyeH+iIWDs9tMc1IXP3+CoX9yrY57y4df58qH0BMY4RhzjbSVNgtStD\nZqRV\r\n=od9O\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\n[![Publish Documentation](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml/badge.svg)](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml)\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"913d63a1eddd4accf9ae50f21cea2eb16d2a4c18","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint --typescript lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --typescript --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --typescript --fix"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.3","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.5.14","@balena/jellyfish-logger":"^2.1.27"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^26.6.3","sinon":"^10.0.0","deplint":"^1.1.3","ts-jest":"^26.5.5","typedoc":"^0.20.35","depcheck":"^1.4.0","typescript":"^4.2.4","@types/jest":"^26.0.22","lint-staged":"^10.5.4","@balena/lint":"^5.4.1","@types/sinon":"^9.0.11","@types/semver":"^7.3.4","simple-git-hooks":"^2.3.1","catch-uncommitted":"^1.6.2","@balena/jellycheck":"^0.1.1"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.0.79-renovate-non-major-913d63a1eddd4accf9ae50f21cea2eb16d2a4c18_1618622642054_0.7859081686275677","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.0.79-renovate-non-major-38fb10b51b68e73736068d1be60de9900ff1f3f3":{"name":"@balena/jellyfish-plugin-base","version":"2.0.79-renovate-non-major-38fb10b51b68e73736068d1be60de9900ff1f3f3","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.0.79-renovate-non-major-38fb10b51b68e73736068d1be60de9900ff1f3f3","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"03f5b281d85eff4cc48fc6088b71f5307d42e9f9","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.0.79-renovate-non-major-38fb10b51b68e73736068d1be60de9900ff1f3f3.tgz","fileCount":18,"integrity":"sha512-BveWVDfzeg5eTYWTpNDBpW1b/5QARYDGJKp76Ru0X0d/t4XaWL7gnyXn9k9pEfUbTqP11Ww8/yVZLTqaLI9wFw==","signatures":[{"sig":"MEYCIQDYb8E2K+zCaO3UogtYIH8zh2b+Fj9lpkzTKdVGtenNfQIhAPU9rglEeSn9wrcgN8myq2LfVeoiMG+gSkaz/1W+xYbH","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":38962,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgemozCRA9TVsSAnZWagAAcVIP/iJdjqcmYLhvd9hrmdOH\niM89B0EGPGkQl9/V2Hltywynks8laCI/SCBdAdwEphPesJPAr/G2Av8QkJQ5\nirUxh6qEUcZQ0VCDcz/T/SWLO/tFqHUBKtlhd6cfr51Is7CHDJT5v+ZS8/V/\n5tulFNTz3kB/fYZzWPxmVXWkFRrW1Do73NDVAgXAudho45kbPgmAKuzbOgDg\n/kMoVdF+rhOKB5XgZ1pD7anXQJSP+SXQGMPwrW6HicUlMP6yy5bc2pA3Fdqj\nfCXOuQ4p8A/BKCi58Z9E8hUaiMYqXxxKun7+KN4HkhbgsNrBukVourZ7VSJR\noIO7rf393on1npkLJraN0qwd8dbp803I72BVjcYNJwfZ8zevJija91n4bE2j\n1KqiO31UNErGHgJsHaF3k1+NbfS5UrlDBdzTjB58NylZ2BuVwgYdB28vqif3\npba91GUpU7qv48uSo3K2w0HdQNoubF6q5ooPdK/uwzotDBcRGAPG64cipaY8\n20s2tulwZBk35PDvukpVhkpo/OU8ASXa33ilLqsFx1qYo99mn7VxGq1n80td\nDwmQ3FSAWxneO2VcCvNzg3VAIciEjvMRKybGELwz2BJ7DO72Ip0CPZmk13U7\nms06jOkrzlwzk3E00olYbLvg/hMfK1kPfSpYiclRuHE6tRXuk+0tqkudxMFG\nGVAn\r\n=sMfb\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\n[![Publish Documentation](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml/badge.svg)](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml)\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"38fb10b51b68e73736068d1be60de9900ff1f3f3","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint --typescript lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --typescript --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --typescript --fix"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.3","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.5.15","@balena/jellyfish-logger":"^2.1.27"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^26.6.3","sinon":"^10.0.0","deplint":"^1.1.3","ts-jest":"^26.5.5","typedoc":"^0.20.35","depcheck":"^1.4.0","typescript":"^4.2.4","@types/jest":"^26.0.22","lint-staged":"^10.5.4","@balena/lint":"^5.4.1","@types/sinon":"^9.0.11","@types/semver":"^7.3.4","simple-git-hooks":"^2.3.1","catch-uncommitted":"^1.6.2","@balena/jellycheck":"^0.1.1"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.0.79-renovate-non-major-38fb10b51b68e73736068d1be60de9900ff1f3f3_1618635315340_0.8385055988630425","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.0.79-renovate-non-major-b3fe11fddfda44175999c41a746af5d056dd9e89":{"name":"@balena/jellyfish-plugin-base","version":"2.0.79-renovate-non-major-b3fe11fddfda44175999c41a746af5d056dd9e89","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.0.79-renovate-non-major-b3fe11fddfda44175999c41a746af5d056dd9e89","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"0c9249c2191ad08fb6145a7d15a9b3e6827d9876","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.0.79-renovate-non-major-b3fe11fddfda44175999c41a746af5d056dd9e89.tgz","fileCount":18,"integrity":"sha512-n4nKlTYeCsaGOQqXbX2M7b7aKq4dN4ZopNAK08slWoQ2T+QdjYmmvm0nFtsgzs4xeKpxR0m5mAsrO2h3FfFC7Q==","signatures":[{"sig":"MEUCIQC4z/L17MJiJoCfV9hfyUx12t6EM636iLNf4zZ3gYpzdAIgXIX03n4NHdcj+xbM4RJOrZazYUMq2lO2OJTMhJsSPSs=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":38962,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgeqnQCRA9TVsSAnZWagAAFy8QAJ+4HazrjFld8X5AKZtt\nXaNEoY8bwMtOkmoa74Dr5Nz92lW6vCRMuaiR+Seak6mEdL+ajD6l8Zl9fu0X\nhUjjU7S6/FAdARJN0CFh8RVI7oKjnxu7TIgNb8iPF8PjdAJhrNmgZQVbv/1l\nI1ok8rH/8hgOpzZPfMBzYwbA09NymrIwtKQXNKrWD7b9GkxVj2eEbyT7p2sX\n/Zo015gNqxXuqPJSV+fkzSFbZ/8KG7Dw/Koxf/EQGUW12wwiH5jkC4NUNp9U\nERapviqWqvIjaF8dfYp3FYDe/LlFmZL09yWNzTczb+hscBRmq7KAxMpOm+xL\ncegL0Af5r+AlTD30tjqPkeaRAkvOYG56hZ7GlI1/WZAbviTnaXS3lNwo2qHZ\nx1tpgvrhv+5kscotFd34MRMGGkZ2mN1TKpPjRRVoVJQkaQ+3l4M6D1r9e1Va\ndkUKVqvtLrrrewPUo52bhZrHCNdCsa21yA6FWE1kq3YjGhKxQxjH6hngRAKn\nAzGQj2IBEkmfXXukgwSId1vuD3g1Cq/KFfO2FRu1jB93g+QnM39TBN1DCKAh\nvxQYAtU4Rq8ot1HE242myDTUvWCPPeo0+QsKvTGTEbUDZNnNju7CW9Q1s7h0\nsMv0N8HbvUaScJqrVUASuedGS6mljkYNLa9W04TvqVZOoHIuMqzLR5OBVUv2\nSCZa\r\n=EDML\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\n[![Publish Documentation](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml/badge.svg)](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml)\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"b3fe11fddfda44175999c41a746af5d056dd9e89","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint --typescript lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --typescript --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --typescript --fix"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.3","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.5.16","@balena/jellyfish-logger":"^2.1.27"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^26.6.3","sinon":"^10.0.0","deplint":"^1.1.3","ts-jest":"^26.5.5","typedoc":"^0.20.35","depcheck":"^1.4.0","typescript":"^4.2.4","@types/jest":"^26.0.22","lint-staged":"^10.5.4","@balena/lint":"^5.4.1","@types/sinon":"^9.0.11","@types/semver":"^7.3.4","simple-git-hooks":"^2.3.1","catch-uncommitted":"^1.6.2","@balena/jellycheck":"^0.1.1"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.0.79-renovate-non-major-b3fe11fddfda44175999c41a746af5d056dd9e89_1618651600486_0.20297388228190028","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.0.79-renovate-non-major-14f119f7a5574c7c8d68b884c9e24d6fd30dab5b":{"name":"@balena/jellyfish-plugin-base","version":"2.0.79-renovate-non-major-14f119f7a5574c7c8d68b884c9e24d6fd30dab5b","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.0.79-renovate-non-major-14f119f7a5574c7c8d68b884c9e24d6fd30dab5b","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"a4a76d44dd0fe9ea847472e1fc94f67c495316da","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.0.79-renovate-non-major-14f119f7a5574c7c8d68b884c9e24d6fd30dab5b.tgz","fileCount":18,"integrity":"sha512-tgwgPpuhmFBlfqOWM833encEOjKpmIZD1P3C2ScoX63PT4gQvrIuwIZnvJzours1GS8a9K8mVfwHKZvJQpNKFA==","signatures":[{"sig":"MEYCIQCZBeYGErDRFq7/r/e3UbtWui/54+ZlH54uDZM0U4Y4+wIhALl8tvHH0Rc0vBeANO4o3DGUTGhWMRHZsnwdbSJ9LQTL","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":38962,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgesfGCRA9TVsSAnZWagAAQCoP/1cQ04SwEaaBb6FosvbC\n5AOv0H3juEtVI+Gu2POBw27yohHfSgzyDjYXG/VqZKXVlineqBFVSoXEPUDl\n7yC0eUkU8OFC8BGKb43QIKBOBvHVGV4kH7FXBCsKobD8TecORFjObGGznf1V\nO9ZChaC7356je/d7Xw1Pmu+CfcAVHvTZZJrerF2irvGh75JzW5AO8CvbT2Iz\nPQqaB/1gpHUYxsWYS/uuOhubb3b0n5n9QR1u+jLSDEy1BqQR2MtPfsGngMAf\n4X01ZQowvCogRxaNGt0ICzaqUQy2zMGzT5DRPAxsQPVdVIwUH/7mwBHDBSp3\nU5zrhmyj9ku5+5zlgy8q60xmUY2WhDKOo6m8nYIg4x5VwVthaEQ5Unb/N56r\nuG3/Ol1fELNI/XW4h5T815TsEaVC/SqiXQelGKw/LWN27xu7ruZAz0ZkMn98\nyM36Bj6NihV11ol/iR40WUmEfpgB3qNdNt3IwioWhuXxoYAK3EJWsPwYV3ps\nCotlx0SsWh64JGM+MZkMvoik6Gcoy8SiFSogTWMki9Z73G+tYgHHvwPHCGbN\nK+i7kxK7tMv+XfpN621odCypDyUhdVBWTdLoinGX1uMtdSDu4g2YhyQm5kIi\nX0IAMQxadpWUiNIuL0mUOiieOyWjFmIHDw6dGM1D30fZP+Z5SuSzods2QiQ0\nokf8\r\n=5xNv\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\n[![Publish Documentation](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml/badge.svg)](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml)\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"14f119f7a5574c7c8d68b884c9e24d6fd30dab5b","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint --typescript lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --typescript --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --typescript --fix"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.3","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.5.17","@balena/jellyfish-logger":"^2.1.27"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^26.6.3","sinon":"^10.0.0","deplint":"^1.1.3","ts-jest":"^26.5.5","typedoc":"^0.20.35","depcheck":"^1.4.0","typescript":"^4.2.4","@types/jest":"^26.0.22","lint-staged":"^10.5.4","@balena/lint":"^5.4.1","@types/sinon":"^9.0.11","@types/semver":"^7.3.4","simple-git-hooks":"^2.3.1","catch-uncommitted":"^1.6.2","@balena/jellycheck":"^0.1.1"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.0.79-renovate-non-major-14f119f7a5574c7c8d68b884c9e24d6fd30dab5b_1618659269393_0.5000749781285034","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.0.79-renovate-non-major-c4a56bc9ac0cfb49fdd37577265aaf64407727d1":{"name":"@balena/jellyfish-plugin-base","version":"2.0.79-renovate-non-major-c4a56bc9ac0cfb49fdd37577265aaf64407727d1","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.0.79-renovate-non-major-c4a56bc9ac0cfb49fdd37577265aaf64407727d1","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"1ef73ae149c0f15c0886e7d08502017a011a7c0c","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.0.79-renovate-non-major-c4a56bc9ac0cfb49fdd37577265aaf64407727d1.tgz","fileCount":18,"integrity":"sha512-X9nt+AjpX4h8rBfDQ2UKUKc0aNC0dUWwKYCpPmH7C85XjdRaevBPvAj2ndB/6un2eI1SDj1e07naYqd8HUj1Pg==","signatures":[{"sig":"MEUCIQDeDNNi6CxjdhjTBSA14mTOoo1oBvr0ljBbFif4psnSiAIgVdHIX4DgJgM1NkNHzrkdwHTmr4gy/8SnmxwqdloXpDQ=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":38962,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgetzcCRA9TVsSAnZWagAAHGMP/iXs3+O3ipIryWR/qrnb\nesE4SD+q4XD7TU0h2Ia/SPJl9K1jdorv8LkbTFX5j0rCdWAEzp1w57zTYSTW\nJORSrZLtuCl7IMEuKSSE6DFruGBStKoryfsvUuikvzwsIeq57GSvJu0FFhLj\nLk8+CYMQMJgFTh4DQ8OeyVw7Stbf3IfFGvNhtxdtAvW0iDlnFoLMW19TNrRZ\nAthqVrC5kdnVJXsVBnzvY+5jgj9Hsn9xZlHMqv77Wqp0Pu64A/Z1EBfcjdWa\n/GC5PDTUYkhzZlkuhRBei83vt1llK1/bepJ4hMtghjnMogCtzESAyjdZ7swA\nFL9RUZZwZZ/0BP4jv9bByKLeD4iSZvr5XQvbmZu8/0ugS+FkXi39okLqgv86\nVbBDWTTuloTRWoi/R0OsII/WBnZvgxu95uyaGUNWTw7AYNstfP5vHWzzGBiV\ndBxNY9Kjt4eIEJ+3ew4vae7+i1lSy/2VZvThTy1bPgt/srmY/PuYsVjWA2ir\nq1rs0DFFp/gfjUukMhbJPO/iw3gfKMfqgVfBePxC+OXYfiwcXvtG4VohSfhV\nAS4W9zPPcwQj0YnaIXKxzJRCFhz+iWkoWMrpWtJIwMJZp6WXz/zb85KLXENS\nsBcmUpT5z2lFFGrCjGMdm0T/r0paunsjoA7rJlGHPmi+SCSKxf55AntIT5nL\nZL6s\r\n=CRXb\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\n[![Publish Documentation](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml/badge.svg)](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml)\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"c4a56bc9ac0cfb49fdd37577265aaf64407727d1","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint --typescript lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --typescript --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --typescript --fix"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.3","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.5.18","@balena/jellyfish-logger":"^2.1.27"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^26.6.3","sinon":"^10.0.0","deplint":"^1.1.3","ts-jest":"^26.5.5","typedoc":"^0.20.35","depcheck":"^1.4.0","typescript":"^4.2.4","@types/jest":"^26.0.22","lint-staged":"^10.5.4","@balena/lint":"^5.4.1","@types/sinon":"^9.0.11","@types/semver":"^7.3.4","simple-git-hooks":"^2.3.1","catch-uncommitted":"^1.6.2","@balena/jellycheck":"^0.1.1"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.0.79-renovate-non-major-c4a56bc9ac0cfb49fdd37577265aaf64407727d1_1618664667896_0.10468063726025556","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.0.79-renovate-non-major-b1e67eafa566654baf809c609710c914ec7173d6":{"name":"@balena/jellyfish-plugin-base","version":"2.0.79-renovate-non-major-b1e67eafa566654baf809c609710c914ec7173d6","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.0.79-renovate-non-major-b1e67eafa566654baf809c609710c914ec7173d6","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"0af3c3a5fbdb0a79c7e21030f53fc17f415216ec","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.0.79-renovate-non-major-b1e67eafa566654baf809c609710c914ec7173d6.tgz","fileCount":18,"integrity":"sha512-/UjhaTFRTLHMKqN7eNKq0AdYde4v0LTns8SZsjirx/yCXpaVIz3TZKp5QgG3L9TUH+CR+yTgYOrZhye2tYPfxQ==","signatures":[{"sig":"MEYCIQDQeMyt833xYWDaIBzs8xw1PDbrzxvz49QF1wxkYbe7jgIhAIro59wOfnkyA0a4iAR75HHirTmDaMm+8ygoXvqXtF/N","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":38962,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgevlhCRA9TVsSAnZWagAAprEP/1nXmzLcDy3Pa+963Hgh\nmIu9+mnjV/HdFcRYWZf6f/kTS6TNbS9aS5ezeKJsjq/Ub8d2FH3s8f4xobqK\nE3wR26Xzy/vZKxdRCZmbE+3t5JxI2VQBfvMTxGDGT5xWewsNua+d6llT8Nlc\nTWrR3Y3YnUVVqzWkefmnc+IoZ15vRxrnp5afc/ZzUjocvV/d6vDbnugMJf7O\n3SZaIrrTauz/0UpJZt22s/fffZeZJTQ768CqTWUnXlQWYW9TlvMtUiZBkDc6\nmzWHNfCdBojE2gecej8Qd1+veutLzCZgA2p0+4HvFJcTHrFk+c3mHLYUIzIy\n1/ef90Nw4fUAUj05LWTICezbWoWFrkvCHJDMlPWXAtGabuYyHJLAt/5u7T6j\nGBcWxpL25RMItmFEtulHq39BcqLlquB3/Oa9J9VkCciMdSk/kkXXB96smQ9t\nRR1b3Z3u7tpqvJTd2O/o+CtBUO0JDl3JIj92CMojhqEzhINHCGb4ZtbtGX72\nNFwpnOp2GErzzGfYzbr9D4BqsI1q2MN9ZYWxY1bBPqY+ZvCbx4MhAEnD3pW6\nvyJwUaOIlRL0PikIR9vPmPZ1jfL2bUDdtQpvm+HLgCsQc3CmDPbIULdMMKA0\nf9jfCIpYKOH4hS5yWWzFEoYr0bH19SEconqvS4eplfrucAdn5eXgrB5zSKka\ny79+\r\n=HE5I\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\n[![Publish Documentation](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml/badge.svg)](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml)\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"b1e67eafa566654baf809c609710c914ec7173d6","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint --typescript lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --typescript --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --typescript --fix"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.3","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.5.19","@balena/jellyfish-logger":"^2.1.27"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^26.6.3","sinon":"^10.0.0","deplint":"^1.1.3","ts-jest":"^26.5.5","typedoc":"^0.20.35","depcheck":"^1.4.0","typescript":"^4.2.4","@types/jest":"^26.0.22","lint-staged":"^10.5.4","@balena/lint":"^5.4.1","@types/sinon":"^9.0.11","@types/semver":"^7.3.4","simple-git-hooks":"^2.3.1","catch-uncommitted":"^1.6.2","@balena/jellycheck":"^0.1.1"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.0.79-renovate-non-major-b1e67eafa566654baf809c609710c914ec7173d6_1618671969493_0.27613709793757546","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.0.79-renovate-non-major-d2047f8ee21ba9e3c34207b60329725f1c550ce9":{"name":"@balena/jellyfish-plugin-base","version":"2.0.79-renovate-non-major-d2047f8ee21ba9e3c34207b60329725f1c550ce9","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.0.79-renovate-non-major-d2047f8ee21ba9e3c34207b60329725f1c550ce9","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"a2905d7d884fbdc27b07a290635201a1a65a5d28","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.0.79-renovate-non-major-d2047f8ee21ba9e3c34207b60329725f1c550ce9.tgz","fileCount":18,"integrity":"sha512-tvJqfeTeAiK/30IW/8It4GnuKA0sYnPPfnpfOQ8JfDymWfXljKHNVqdBdfSwStcAZnT6Oa4e7DWQx9qHVLlLiQ==","signatures":[{"sig":"MEUCIQC5m8SThegCH7awoykXH2nNM41lkyZyxgEbJkZHE7Pg5wIgJ29syVTWOWmwZq7aP6PCIzz+dWiAnZKB6MzoBEvaovI=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":38962,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgexpdCRA9TVsSAnZWagAASrMP/0Ouwh85GCkcLBuJmUj0\n3dubjWysRZ0Dj2B8Q/LVp+Ms7iw9QdBaSHTpNsE9MVLm2uE+EgA9icuK2xKU\nqFFmHFelVGUGBQTfFZccFdcl/dlq1QZOnfmkCCsB8Yk9Qlx77GHpw44XpC08\nXtH3GVd8cmbMQmBDmXqDwAXA/X6X7YC5Coqb++HaJSsOzGdL+RCl5eJxFKBy\n6rrF13SNFjh5BQSEqDiuuZLgZpEZu53JFQayJJh7ZxUW+O/cXQG1p7FjciiI\ne5hu16J4wXrPIEaPx0fNrqC/fQVqE+b0jjDdo9FNz/yGv69vMJZALY5H88T2\nzJ8ZyrCvviZnsSAq860oTvsqpG3d0lp+zknAXkFE0K0KCYbzXBNiUjMVVTcx\nynZQ4/mGffs+kwi3kCHLh024gEA53K05cqIqwH1UjQH2hMNOXTj/A6tK0ayp\nmJDjK1QM4GugI/B5t37Nz5xkKeuxbhLzzQcmQrKXW5vHpCSrqBHxGS4f9Q+u\n7+xwZOdK4AcXElsSiFnW6cRHjaUzmSrOKFJy1p1Es8QvOryee2rTMfkQ/TCk\nKdYk68hY3v0dv6rjq1q6Y10Fn6uL1t/BtRiih4tjDHZUYxSScLdpL787IOXQ\nhaQC+O0LBXVq4eiNrFaoXkWDGPMOKy0NAPr77q0P8fXj2FZWEH391l/2ZyDQ\nsaL0\r\n=4gEo\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\n[![Publish Documentation](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml/badge.svg)](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml)\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"d2047f8ee21ba9e3c34207b60329725f1c550ce9","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint --typescript lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --typescript --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --typescript --fix"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.3","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.5.20","@balena/jellyfish-logger":"^2.1.27"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^26.6.3","sinon":"^10.0.0","deplint":"^1.1.3","ts-jest":"^26.5.5","typedoc":"^0.20.35","depcheck":"^1.4.0","typescript":"^4.2.4","@types/jest":"^26.0.22","lint-staged":"^10.5.4","@balena/lint":"^5.4.1","@types/sinon":"^9.0.11","@types/semver":"^7.3.4","simple-git-hooks":"^2.3.1","catch-uncommitted":"^1.6.2","@balena/jellycheck":"^0.1.1"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.0.79-renovate-non-major-d2047f8ee21ba9e3c34207b60329725f1c550ce9_1618680413035_0.6783867489169233","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.0.79-renovate-non-major-4085d059b4c8e5d070e6050d5d6b71c2e4558826":{"name":"@balena/jellyfish-plugin-base","version":"2.0.79-renovate-non-major-4085d059b4c8e5d070e6050d5d6b71c2e4558826","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.0.79-renovate-non-major-4085d059b4c8e5d070e6050d5d6b71c2e4558826","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"00df5159bdbec55e2058a3200933570df1603ecc","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.0.79-renovate-non-major-4085d059b4c8e5d070e6050d5d6b71c2e4558826.tgz","fileCount":18,"integrity":"sha512-P7GQht9i4RSollVSsrtoXPlyWrinH99fas14wg+5sKSfhUh1HYlFTwrc8HyDaZEsgWWO+d0WaCu8DzlsBP3P1w==","signatures":[{"sig":"MEYCIQCaNCaicDE+ewfRth4mUEIL8nuldZXQc3+r3REXjVLucgIhAJ1awAKmwpB+rP1PPJeFdmj2W/trgoLCXdwtAxQjkqO1","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":38962,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgezISCRA9TVsSAnZWagAAD3oP/1rrfEY+BJsKB9rEnG/s\n/2xVY7Ow0JppOeByJ2QOEJbSxtol9tnQJhYuR0PDGGHT/MyjNrz+KgSusa2A\nsPPnaGb0NKNf+BifVCivalkLpmoObV0r4v8CHo1qEptHKZKBHtub9znPpIyV\nMFQprvhL11ENozx/M3Z3vkeoUvZkrG6PGzUJGGF7FEtsz2NBPyUs11mIm3Lh\nQ4JCJsgJCfxsOhN+iU0eY7DnU7O2Ks3cZCIFI0QCk/MofCoHz/zGL2GvbIYt\nghM/FI2A3CksQvyWlgqJ9U+YumEgrAp6R0oCazv9yBCtQfH20ZsKZv8bNNtE\n0Nb3fvsx0+ndy7J8KABo9JJKIA3ggqLALJmqT05MWH4Rj3X1O+wsdGs5ZivJ\nx686wIBvW0t/jDNg0zBIangAm9oZ2mwGAlZ8p+KL6zXDh8omlwcmWqlkXE6S\noVObxB4RpWWv0dDCbXx7wstTtm2vzHfJbsPFxOdOPhAb/sxNIAljVNd+jK3Q\nwNboQHbxaewhgFpm+AEv+x5rew+r1a+8DMJ5qWYHRAsqVS2DmXw4YEZ2fxw3\nLkc1++SE2q5dhrL3JEy16ZEFZm7lLed2DoHgIuKxdtDQH0k6OWNiNHRIb/6U\ndh2NC4KnzRkA1HvLnrXVJZR5Y0FB1lGVDFlRrCgKV41qH9+snK9Nha3IR11A\nBDu7\r\n=+mZV\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\n[![Publish Documentation](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml/badge.svg)](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml)\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"4085d059b4c8e5d070e6050d5d6b71c2e4558826","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint --typescript lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --typescript --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --typescript --fix"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.3","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.5.21","@balena/jellyfish-logger":"^2.1.27"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^26.6.3","sinon":"^10.0.0","deplint":"^1.1.3","ts-jest":"^26.5.5","typedoc":"^0.20.35","depcheck":"^1.4.0","typescript":"^4.2.4","@types/jest":"^26.0.22","lint-staged":"^10.5.4","@balena/lint":"^5.4.1","@types/sinon":"^9.0.11","@types/semver":"^7.3.4","simple-git-hooks":"^2.3.1","catch-uncommitted":"^1.6.2","@balena/jellycheck":"^0.1.1"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.0.79-renovate-non-major-4085d059b4c8e5d070e6050d5d6b71c2e4558826_1618686482100_0.4712715920290258","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.0.79-renovate-non-major-f6f5d632073f6c5fed01f5d2a36edf21f282efcd":{"name":"@balena/jellyfish-plugin-base","version":"2.0.79-renovate-non-major-f6f5d632073f6c5fed01f5d2a36edf21f282efcd","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.0.79-renovate-non-major-f6f5d632073f6c5fed01f5d2a36edf21f282efcd","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"0e42f3e19e0811acfea6d80a1e1c404543d4291e","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.0.79-renovate-non-major-f6f5d632073f6c5fed01f5d2a36edf21f282efcd.tgz","fileCount":18,"integrity":"sha512-ECTUyWeQbIP1Yg3rb0nj9kYX2CyP+CicbFIiZb42dzUY9jdArGoCqCooulIyKY13NQ2FGU7R3wOTVA5ZUq0kaQ==","signatures":[{"sig":"MEYCIQDe9Wa2ixXtGUxGxl3YZDLFSmCMukxqDbB1SEpDuKjlzwIhAIdply1Qf8OHU8wZb2P7gLxF6qoht7ZnwuMmKJUzJIje","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":38962,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJge1txCRA9TVsSAnZWagAAukgP/2wHHRDgdBU1O5ts8Qr9\nyDrb5+qv1aaEq1xJHbyzywW08kBkMeEvsV+hD/pBd2Lp7O2YN7hi670huX2+\nd3QXB0DdvbcHnS7b0JgXU3thecg1YRVeqRsWe0/NQpNOL4XjVMfeqq7PiYC4\no/l2TJC8QVGBy+ayi1c0U/7c8fLmGsLuNaaFcFgfQTOdaUhRknnbN0zH0bE2\nF5Q9kzJPSEgHITygYGxUCyfhrXhGs77wsTNSxcofBfR2jHEkge8jdF2B9S/u\nXsfywvcJRrtS7TgWOMZ3XEg8HTH4tuwSWOx+MZOJPi3a2sHfN0NGWldeOXKT\nuKvo3nnZ+wkkWgmVSnfWtRLTF6c8e9LAsx5/5vh9NoKvgCgFQUIBR5268CtI\n9R7GwzcqU+9ecv9wgN1ewHCXaaQ2gat3JeH8cJ7GkvQQ7gfKULN5J/NYfbhx\no/2zLHk95noOQKUjb0Z2ydmJNfl75xyj+Idi7KHF3U/mP3EnGrDVY1JRG20z\n9fYCCLx77d6M5zQyLYCaeBkJX7rcf+63B+/4j2JH3HArkm1eIiTVhZt0cxpf\nB86Jgk4zKvFywR3cQW8FMZHLUSsvZ3XC6/A+yWJdoNH3tLb5A4iCuMKzIMpY\nhXtYIflc9HqimMgorl8+6Fpir+Ixx9xe6VH5ahX7WVAJKtQ9KeRg1IlZni2A\nwrzC\r\n=hyae\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\n[![Publish Documentation](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml/badge.svg)](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml)\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"f6f5d632073f6c5fed01f5d2a36edf21f282efcd","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint --typescript lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --typescript --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --typescript --fix"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.3","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.5.22","@balena/jellyfish-logger":"^2.1.27"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^26.6.3","sinon":"^10.0.0","deplint":"^1.1.3","ts-jest":"^26.5.5","typedoc":"^0.20.35","depcheck":"^1.4.0","typescript":"^4.2.4","@types/jest":"^26.0.22","lint-staged":"^10.5.4","@balena/lint":"^5.4.1","@types/sinon":"^9.0.11","@types/semver":"^7.3.4","simple-git-hooks":"^2.3.1","catch-uncommitted":"^1.6.2","@balena/jellycheck":"^0.1.1"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.0.79-renovate-non-major-f6f5d632073f6c5fed01f5d2a36edf21f282efcd_1618697073101_0.39629720971054017","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.0.79-renovate-non-major-a3918c71cf7b99b14a86f9c8dfd7bc34afad9c0e":{"name":"@balena/jellyfish-plugin-base","version":"2.0.79-renovate-non-major-a3918c71cf7b99b14a86f9c8dfd7bc34afad9c0e","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.0.79-renovate-non-major-a3918c71cf7b99b14a86f9c8dfd7bc34afad9c0e","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"689eec48ad50709df791e8e5d80dcbf9a019b744","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.0.79-renovate-non-major-a3918c71cf7b99b14a86f9c8dfd7bc34afad9c0e.tgz","fileCount":18,"integrity":"sha512-LQPdTFh1vsvDZTvbuERiERjVmdLCQ+z3gzO1fLM8r+8L4cniLRTJyJYGvGs7tMUywM9UXeLNiHBQlWsEEglTpg==","signatures":[{"sig":"MEUCIDzlOBfAwiHKAp7xLBWhuV01kobe3VVDnA8E2J9TR31UAiEAgqSJCxPsgQChWA1baH+SRpqNaVHiGfGVghf7KCdXOZM=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":38962,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJge3cqCRA9TVsSAnZWagAAODIP/je3SB/aIBC+aWyXVqZU\nai358Limr6ErKHFQVHstLIwKzUxHu6De69p5xCTOjLVuhqIFLLM9rnp+k73o\nvRbX2Wy0J/bYbhMRMc7gLbcuZfY3udHZjt30PuLJJXljvi0/j1FRiWYzFP4q\nTpuIoQ5K/HryXskbCfpueop1vXJgPj5VI+42nQysuKnIDkifNfMfT+9F1wnu\nyrBK9A/Fx1lY2sTqbKBjMj1OHJuJWVIFxpnRMPTPERs6gQjStS++u8iQF4xO\n/FapXaDCLBG/u0Tgpi2rjacd2DqMuv4eDqYGn+96Shq6KFdrimiQeVqBkMVK\n09/6nW2mrKoWaPciKmBZt7JzudCXl1ASJaOhU28viUOXPdMEau2RSXmDbdQu\nGLyLCgdlv8lm8F9I5yEAsMVl09erf6aZg6ZLokbHTy0G6g/RLmEAhwd7s6mf\nl4oGWx2DAtmZ+ERsID/7/KIQOiVlr7fL/NzXR7+woLjEt7j6plzbThlv8W7j\nV3aRWaj79UO2vmcvu63+azp8Yl+8T9TctHo8sSsEcN9iCvmwBW5D1NpYoeYx\n9ZIYIuaPV4l6WRsayVFF/R0+EHyBx3qeu9Jkw320F8Gd2A3CnDQ+80iNRSjR\nGthZHyL+wYW4/fVhoij6O6dVSW82Elfvsix2bsSmVlVCD4m4blPtm7RLP8C3\nRTLw\r\n=0AF8\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\n[![Publish Documentation](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml/badge.svg)](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml)\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"a3918c71cf7b99b14a86f9c8dfd7bc34afad9c0e","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint --typescript lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --typescript --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --typescript --fix"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.3","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.5.23","@balena/jellyfish-logger":"^2.1.27"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^26.6.3","sinon":"^10.0.0","deplint":"^1.1.3","ts-jest":"^26.5.5","typedoc":"^0.20.35","depcheck":"^1.4.0","typescript":"^4.2.4","@types/jest":"^26.0.22","lint-staged":"^10.5.4","@balena/lint":"^5.4.1","@types/sinon":"^9.0.11","@types/semver":"^7.3.4","simple-git-hooks":"^2.3.1","catch-uncommitted":"^1.6.2","@balena/jellycheck":"^0.1.1"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.0.79-renovate-non-major-a3918c71cf7b99b14a86f9c8dfd7bc34afad9c0e_1618704169911_0.05071809733626065","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.0.79-renovate-non-major-fd2d51c15b775790b46478d578ad124386f6c03d":{"name":"@balena/jellyfish-plugin-base","version":"2.0.79-renovate-non-major-fd2d51c15b775790b46478d578ad124386f6c03d","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.0.79-renovate-non-major-fd2d51c15b775790b46478d578ad124386f6c03d","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"8601a67b3b73e61a758cc8a1e292c696c8c5bfb5","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.0.79-renovate-non-major-fd2d51c15b775790b46478d578ad124386f6c03d.tgz","fileCount":18,"integrity":"sha512-A/yf5GvmnX4GQhSW3trg8/pKMh8lKZL8jlQ2dApOAuZD0tpG28oGsHy3SCyqPofQnrMnG6Edh/GQwlD98wGvDA==","signatures":[{"sig":"MEUCIQDJTTjNFNUG3ZNEvXYSGN4w4N9QOnPFW71HFsMtxcFK6AIgUjbyc/ym/tPXkSC+87yAJ5+31kTY8XAL+4GaoeBO6Eg=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":38962,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJge41aCRA9TVsSAnZWagAAg1YP/ihnNjFoX7zk9Zh1gfkd\nzJ3fkW9Bi9Bs1BxE2aoGsoKJs+1cjahd2XulUG3bgtHfO0kJ3cFdm2ZxKmcO\naxRSAcNei6F5O9SqiNKyfmgUm3LXSDGFQhpRiL61tsOOT84+GZGH0Un7sQOK\no9Ook69vtul8rF6DkG7rNTA4RfQo3f9YlxQhNH1pCTPH0pv/dXJvlHP3u/2i\nSj/J/7xRdWFR4VdS9JqGBoHrt+cW08/CXCZtfQ2NJ7eFOH/wEl+B7f73hF1e\nvMZ/K8Qg73B3MUFOBJwu8ZjiGkOh+p3xrwFQ8QKbX2+PACsLpHfBhYmnIcXd\nQaBRa8cnR0rp16cIzUkJs42orNIb1T6W7y7eWkeVWsMc4bwuVgKKGmJkx3fu\nWlocUvxfwDBioUyYADKC+h9edo5QhKoCtC6ygEZKxrcAed7Gp3Itx9RESvtm\nE+W45d1CnwcJds2bqs3mcF3ecRYPPk/CzF59zQqKAs5TOI0UQtSZbVAXUiuX\n1/KUM6mLbtXpeN04RqjQIIrBuaD7Q/RiHP6zGBc0W/KIuHNK2Jo3HCJoR9I/\nGkDFC932c5v/wt8KUJR+tic3/ibYsPLKbAO9E+Nxn3VAxHd5okeLlhDji8OW\nB6x6TY97v7zfRLd17l5Ty8nqU4C70u4TcktK7nP0eJM7DXJOe3kKfEjEWy+v\nMXuX\r\n=UEvX\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\n[![Publish Documentation](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml/badge.svg)](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml)\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"fd2d51c15b775790b46478d578ad124386f6c03d","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint --typescript lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --typescript --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --typescript --fix"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.3","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.5.24","@balena/jellyfish-logger":"^2.1.27"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^26.6.3","sinon":"^10.0.0","deplint":"^1.1.3","ts-jest":"^26.5.5","typedoc":"^0.20.35","depcheck":"^1.4.0","typescript":"^4.2.4","@types/jest":"^26.0.22","lint-staged":"^10.5.4","@balena/lint":"^5.4.1","@types/sinon":"^9.0.11","@types/semver":"^7.3.4","simple-git-hooks":"^2.3.1","catch-uncommitted":"^1.6.2","@balena/jellycheck":"^0.1.1"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.0.79-renovate-non-major-fd2d51c15b775790b46478d578ad124386f6c03d_1618709850268_0.058708122450958244","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.0.79":{"name":"@balena/jellyfish-plugin-base","version":"2.0.79","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.0.79","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"45cd0f58a4293277770cdd7cb70453c86f1bcf37","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.0.79.tgz","fileCount":18,"integrity":"sha512-wIVwqWAdLVRyfqvcHB4z0Pr1iC2N0REROXxygtazTlmsrKlgo+6apAjOi9TQi2uPOsK3U6Ve6Zk4MdGvKOZ3rQ==","signatures":[{"sig":"MEUCIFaA5tlmfr+3q9cqgMm+0EMK0PLgaAi+HLX40gmcvNoiAiEAhT3c7YDfnBFJRJNmUbuxOOdoGWhp8ytLuMQEdfa9FsU=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":38923,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgfAt0CRA9TVsSAnZWagAAkLcP/0lgnUKHoUyb5S/9nEir\nK2agzu95m3if+Dgz8EOiVgiQFZKaYVTsC5HjTYFptcbQai+3a0JjHlbXHrD0\neGg5s1HZDcTfWOC0Lh1ENtKv5qACZEiCzO3phGqL7jn+E/S955hbYpdG/CAU\nW4MCzaQR2mTeWpM5e80rQ41dhTvMYH9Lo2zXAfZwauE9MbNF0Z041SsPpJZn\nGPfibNHjpAOktqDS04M1KEokztXNscXKdo/CZL834R2VDwBkyTpVdCeTJP1h\nwYh+IQvFmVbNiWca4PESxf+iRGgY6jHVs6jJGB3JYs8iQpJI5f7iLXscuWEC\neCzFSRs2Bj+zaiAZ41PZGNLFUumn21dwDvXk4o6Uuwc10zi0z8InaHfceOPM\nYnqeHDB6O6CskskePxLA4MiRMQLImng2JFBzheIgeJ4B9lV6i6GvxjMTJB87\n7ckxL9iLtJQNpitFwWlxu48mLeBdoJr7bd0M4zIXQcJ8YWP5/URXnuFDY6vR\nBEObUnKhu1B8DBfpD8Y03bfDvPyJoN9N2fXvo0Lql2MEcqvs/zoXjf94PH5s\nU4BnrXTPKdn8irhsuEbFlTqsjnkbDp0GHB9p2SsuGTMX9hQVxfkuux57TGMt\n5+28mDlVez9M/cLmHKMkq8QzoPhivdoFCPyLZT0YiUtuS08eADxM0W+tUW7M\n/GXn\r\n=u/tT\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"9e4194ecf1f3199a8e990ecc90b3db0e1945c8ed","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint --typescript lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --typescript --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --typescript --fix"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.3","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.4.74","@balena/jellyfish-logger":"^2.1.25"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^26.6.3","sinon":"^10.0.0","deplint":"^1.1.3","ts-jest":"^26.5.4","typedoc":"^0.20.35","depcheck":"^1.4.0","typescript":"^4.2.4","@types/jest":"^26.0.22","lint-staged":"^10.5.4","@balena/lint":"^5.4.1","@types/sinon":"^10.0.0","@types/semver":"^7.3.4","simple-git-hooks":"^2.3.1","catch-uncommitted":"^1.6.2","@balena/jellycheck":"^0.1.1"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.0.79_1618742132405_0.27028138820782677","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.0.80-renovate-non-major-ccb48728d8e74d79aa30c8f139c8d4527a716d25":{"name":"@balena/jellyfish-plugin-base","version":"2.0.80-renovate-non-major-ccb48728d8e74d79aa30c8f139c8d4527a716d25","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.0.80-renovate-non-major-ccb48728d8e74d79aa30c8f139c8d4527a716d25","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"51bfcb98b00109329cf221f26a061c9ead231c3e","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.0.80-renovate-non-major-ccb48728d8e74d79aa30c8f139c8d4527a716d25.tgz","fileCount":18,"integrity":"sha512-qOUbQtKIjGiYQn7SX99u2JmuGInYhhkNidh90+F4WVj7slbeXARZjZXQSR/augJYhkgtgUAehne98rXZOEoOhg==","signatures":[{"sig":"MEUCIQCzk0RVXCz03DtVLVQnPgHtKOTn8FQFp5QeJL/YS0k+PwIgDg32dJKTzobjfqyGiJKwfbn/eCMEofE5Um1ZeU+1+q0=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":39049,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgfAxLCRA9TVsSAnZWagAAOxsP/1HmW9MZTB/vTXtV2/jp\nyH9ClWuAEhYcp4vu6+kKMbpbT6mOpc8N08zdjm/Uhbenj8mUe1+Mwi+x6/f9\nyIjtcfca+izoKhAgBSQC7zt6ZBkgiiOy/Lb5hyBR7buMEXzmEHSxm239GkYX\nNqKFh3oo110iJieybkFgeDu3eBNOOgVGLZi1mDJYHDBLrOfdenuM9rJwaABN\nwjzIXZHKVSc+/sMHMy6LYPMC0IuEkBAKLkZ2z3c5dh+EzeNeBx2apObQS+5v\nujR75owX/N2WsxgWIjuV7Co7Y/xKMDBZnF3H/MdT4ittMUXoNHx1tG81+wgF\nhpck1gJ/2R3FM+Br42ccl2f5GxrcojaTSGwONriKEuUWhjJkvSE10WvPISug\nNbigwaMR5FGNwQLoXrYOtpq9rRnNhxwybBghocoVl7zVvQOA7nrLn/Y2edw9\n6/W3vJUWXDkEZsXeAsseU7RJX8e2DABQQgukfmjR91Pdm1Ux7c7veK9U2yaI\n7Ge5Ci8Z1sUwnB3327tgOV6kgiE6Md/w8RboABJv8hb5VtfcTDSbaYmYa9DP\nOYCiSJhFchkIy186ilhJNyJz5VEjttWhCG4PI0ZcCdusbcWcBSivlxpjLkEz\nUDIpgSboGVUYziarsa8yca/P/QOLSTK4sb0mIQw/PnqViehGgTQ4mUytYhac\nBP9c\r\n=6iM+\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\n[![Publish Documentation](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml/badge.svg)](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml)\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"ccb48728d8e74d79aa30c8f139c8d4527a716d25","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint --typescript lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --typescript --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --typescript --fix"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.3","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.5.24","@balena/jellyfish-logger":"^2.1.27"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^26.6.3","sinon":"^10.0.0","deplint":"^1.1.3","ts-jest":"^26.5.5","typedoc":"^0.20.35","depcheck":"^1.4.0","typescript":"^4.2.4","@types/jest":"^26.0.22","lint-staged":"^10.5.4","@balena/lint":"^5.4.1","@types/sinon":"^10.0.0","@types/semver":"^7.3.4","simple-git-hooks":"^2.3.1","catch-uncommitted":"^1.6.2","@balena/jellycheck":"^0.1.1"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.0.80-renovate-non-major-ccb48728d8e74d79aa30c8f139c8d4527a716d25_1618742347377_0.33931040730809414","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.0.80-renovate-non-major-901852406b805462d6c55f3c784220aedfc8eb4c":{"name":"@balena/jellyfish-plugin-base","version":"2.0.80-renovate-non-major-901852406b805462d6c55f3c784220aedfc8eb4c","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.0.80-renovate-non-major-901852406b805462d6c55f3c784220aedfc8eb4c","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"adb9a898f05497c981d7ef1812a1e1c4f3ddf624","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.0.80-renovate-non-major-901852406b805462d6c55f3c784220aedfc8eb4c.tgz","fileCount":18,"integrity":"sha512-M3frwqxVZBKlBku7tyZo8U5bDe/pRrXj2KMm8dpSIbYuhiDyPYTel7E98QHjQpCTwlgI4kA/KIAv6WsQIKJVHA==","signatures":[{"sig":"MEUCIQDfaNcXL2eoAXtJVNd4rrRChhL1gWD652CPr2/lGym/cAIgDNeiqCHIO1ZUeWnFOLNpexvXwlmYccOzxfwByxTCPk8=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":39049,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgfCyvCRA9TVsSAnZWagAA0OUP/0t6Pk9isQksokFklWjy\nhkAePTNtJ9Uh36ljJ3Y4jLaKZ5rBrSmndejxhdCz04OmnsF/4IzuL2S8/eAv\npCuWXtRy7P2l93xkzD+KZnFFKMca+yJU3ism5xpu6WULbtqfUUBgov89Dilf\n9OAEZTms5UI4/wzfs3SIel9isfN2C0vdFF7hF+QAwu8zVvFptU0nf8VTXw1N\nTRZeT3/dWoKqjygPOQg20I2ALj6cER3D33KmU98UPyBMSsJYMG7ReakYv8FC\n6N3whmk13QcruKUFxBmkMqjkvlcpyAaOaQ9wU9fMqoV6uICujd5NrDA/dr/e\nteYcUlbixZP3POGvy6D3Xt/hY7IcOL+J4cD1X/db24Qxx5xkGXI2gSoE1bAr\nv3C5EpdII6oXNTAmmfQ3lYHCug7LourexUPIucyUEiv0oocGN1leq2QZ+rwB\n5xMDbtUomsykVLJ5IbqRLFquHD5BAURUOzAF1q68Ldx8RmoXKgWhCqDKix/Q\n//pdjkdNTCm6YlrChpeTYZGcTlWV/KmkLlNUZnZVvzHY2QazT+ONqJFAOtEJ\n8dU+UIxKn2gNQhqmQriBarcLhOrVMJOKU5JxxSVk6O4mZSl+AIPHJ0a1gVDW\n03C/sjVzzC/CFU9cdh2ZbQ5E1oD94UhSk5nYohrqCKSgJS8AsuoDOuP+Gigd\n4nX5\r\n=CQMj\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\n[![Publish Documentation](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml/badge.svg)](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml)\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"901852406b805462d6c55f3c784220aedfc8eb4c","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint --typescript lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --typescript --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --typescript --fix"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.3","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.5.25","@balena/jellyfish-logger":"^2.1.27"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^26.6.3","sinon":"^10.0.0","deplint":"^1.1.3","ts-jest":"^26.5.5","typedoc":"^0.20.35","depcheck":"^1.4.0","typescript":"^4.2.4","@types/jest":"^26.0.22","lint-staged":"^10.5.4","@balena/lint":"^5.4.1","@types/sinon":"^10.0.0","@types/semver":"^7.3.4","simple-git-hooks":"^2.3.1","catch-uncommitted":"^1.6.2","@balena/jellycheck":"^0.1.1"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.0.80-renovate-non-major-901852406b805462d6c55f3c784220aedfc8eb4c_1618750638432_0.5305855441618996","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.0.80-renovate-non-major-5f2c8441179d2231c630945c774c76b674c533bf":{"name":"@balena/jellyfish-plugin-base","version":"2.0.80-renovate-non-major-5f2c8441179d2231c630945c774c76b674c533bf","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.0.80-renovate-non-major-5f2c8441179d2231c630945c774c76b674c533bf","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"859afe71969f0c51b4064e06040cc71b871ac7cc","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.0.80-renovate-non-major-5f2c8441179d2231c630945c774c76b674c533bf.tgz","fileCount":18,"integrity":"sha512-wViT4kBTLtALoTxTvvZRU138bSOq2q1aVhBEfkyDJ6/zTluq383TY058scpJWR+sMlzS2HffOrtdQJWFiQXwZw==","signatures":[{"sig":"MEQCIGkeBqpprlpaQOb4xZiqGtTPR9sHfa2yqshde1IrcEmYAiAL4oi4hLvnGdC/QOoX4uCqtQJE5/taA3PYf/bzJ9zQIQ==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":39049,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgfHaqCRA9TVsSAnZWagAA/n0P/2JdhuxFpOGc9PoVK2bF\ndWcn+KTjbCWOMHo3Qm+n59J4/nyZuvC9mva/ek8Gm9IMx1gmn8ROKulLOcnu\nc+Qc3Yy+hcfwK1kN2XagJiKenSo6T9RH5FFQrv4PO2s0kgSprFzEKO6RasIG\nG8/r1AEpH6iMZDKWIqI0XSoATWVjFFwnpxCWM0uJakMvXYbD8n2MfcXu/P18\nP/OvLQ5bW1PAuVKtZMXm+jJ2uV016kZzKTHYmB98BRTn5t56aK9tm5tbXdXE\nC5f0Vns01XYmtcfYUXC6brlnkhq6s5zYxdFjkwOQA3sNiHY7kZ5xXC9oGGRg\n7zY968gkOaCfvHesZO0OqYIDQmBXRxsJirvfLCDskXtw/kwNXJA96NyZsYR7\nWOd/yQxe7pnGwDJUNmun2aBlhVFwVZmnTiTA1R0gp4b9IhlKFQ1k1l0kda/d\nc/34u/C5XfcCgUV1wcDTvE1M9VyQRwhQphVaxB+Xj3n404rBwVF5IL1bKKZ8\nEisbNdReH5oVEO2g5N5Twd/x7dXNZ8uhZOavDFYAU7j2YLoQI60F6afnpOD5\n8c3vX492sg7fL0jEolxRJnmxiEKWO6qH6/90bfallUyKqioRKjG3xAYKXf2D\nLn/glGosG1MqxmIrWUSxfw+4MeNx06DBz2TKiWMcjvYiFjkuw2Cbh/lJf3ne\n4187\r\n=HdKC\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\n[![Publish Documentation](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml/badge.svg)](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml)\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"5f2c8441179d2231c630945c774c76b674c533bf","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint --typescript lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --typescript --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --typescript --fix"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.3","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.5.26","@balena/jellyfish-logger":"^2.1.27"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^26.6.3","sinon":"^10.0.0","deplint":"^1.1.3","ts-jest":"^26.5.5","typedoc":"^0.20.35","depcheck":"^1.4.0","typescript":"^4.2.4","@types/jest":"^26.0.22","lint-staged":"^10.5.4","@balena/lint":"^5.4.1","@types/sinon":"^10.0.0","@types/semver":"^7.3.4","simple-git-hooks":"^2.3.1","catch-uncommitted":"^1.6.2","@balena/jellycheck":"^0.1.1"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.0.80-renovate-non-major-5f2c8441179d2231c630945c774c76b674c533bf_1618769578176_0.7367888389739248","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.0.80-renovate-non-major-ccc6e4f4acf3f23abc83d973d999147a721b7610":{"name":"@balena/jellyfish-plugin-base","version":"2.0.80-renovate-non-major-ccc6e4f4acf3f23abc83d973d999147a721b7610","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.0.80-renovate-non-major-ccc6e4f4acf3f23abc83d973d999147a721b7610","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"501512cfeca500dc1204e24c4a0d87e544d95b7f","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.0.80-renovate-non-major-ccc6e4f4acf3f23abc83d973d999147a721b7610.tgz","fileCount":18,"integrity":"sha512-LZ9w+qm4bjpfUhvrwSoHx+XZu/Az7QhaTRJgymx7G/N24kqGJdW2FiukxAykOZcfsdRW9vLFOoIPs8zvlUmPpg==","signatures":[{"sig":"MEYCIQDOdF/FF8CN28PzYueO4DnJzbXytRR5Euf7NRBfAJP4XAIhAIu9dxXlPicIVJb2jEBaO+SZEdOqCLl/e52WqHR14bcs","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":39049,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgfK2OCRA9TVsSAnZWagAAAaQP/RUiAbCv3Q8LWHrNbdvy\nsDm/ukDxV40a6MT3TSOTI0Tc58jwS/BuXs5sZPTFR/v6dYtt/mC65hvvd5we\nMAoXfIjTuquW6ROq80KOguuf2hSf4NqqQ1FMqHRrkVHhWZixOjg4ZbvL/VdE\ns/KR4kUwWks7439NuWhmX80APz4CtaLEGoEmT1LzrfOGIymU9x7PWjOAiucd\n0EF7G7mK4Cm0mjyFvXX6YhyZQHWiKvR2ZoAXLRqDXhi3OsYVwbyvI2pH8F+R\nOp69zW1/+/dbxJwaL1GI7+0DIMqkk+02kt54UkuHS9RwejXYi0tAzfXeIfEc\nb0JU1deUGZ0+YKj+spHN11m8iFe/1gb4NoPUFRVVIcmsmQZuUucmLoAgBMKy\nFfPyJX3AW39JhqDMmOQqXWCtoAM/XWzUtalPFAwlyldtyH+Ushr4U8QOUO1A\nOSPliPsdn3GBrcNoHo5KNtWhzm8tl8w7DwsAFfLi2pUYcW08fpuXHblTMEea\nFiDsaGg3UmB2tmsUBGEfybX9TM4QLCosRUPl8x1vps++j9/nyvegEcrf/ytD\nd8YZcG3E9i1baZ5sqDU2Xis3/zGXbFWnMdwvzex+E/GpupLAoTyMzED/7hDZ\nWgIk3BCsJ0DD0H+HZG4sVyXLze25G7BywFiQVd31/RkEPFjPfX+ztB7R+xYb\n7Epn\r\n=11Vq\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\n[![Publish Documentation](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml/badge.svg)](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml)\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"ccc6e4f4acf3f23abc83d973d999147a721b7610","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint --typescript lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --typescript --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --typescript --fix"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.3","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.5.28","@balena/jellyfish-logger":"^2.1.27"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^26.6.3","sinon":"^10.0.0","deplint":"^1.1.3","ts-jest":"^26.5.5","typedoc":"^0.20.35","depcheck":"^1.4.0","typescript":"^4.2.4","@types/jest":"^26.0.22","lint-staged":"^10.5.4","@balena/lint":"^5.4.1","@types/sinon":"^10.0.0","@types/semver":"^7.3.4","simple-git-hooks":"^2.3.1","catch-uncommitted":"^1.6.2","@balena/jellycheck":"^0.1.1"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.0.80-renovate-non-major-ccc6e4f4acf3f23abc83d973d999147a721b7610_1618783630400_0.14872226274393685","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.0.80-renovate-non-major-10d96854062760e2479c0568971b1daeb07ab358":{"name":"@balena/jellyfish-plugin-base","version":"2.0.80-renovate-non-major-10d96854062760e2479c0568971b1daeb07ab358","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.0.80-renovate-non-major-10d96854062760e2479c0568971b1daeb07ab358","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"41fb38f9fb944d3c7be7ab77f3c6a156e29cdfce","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.0.80-renovate-non-major-10d96854062760e2479c0568971b1daeb07ab358.tgz","fileCount":18,"integrity":"sha512-Fm7yNa0yCUxThnjXpiwqeYkGuLI0Z+jb7dWisvcvaiuMZkmBkIy6JGIL9FTyPu7jWocHOtR3gGuDfJnmiE9MLg==","signatures":[{"sig":"MEUCIQDCTd7U61ywgPqdgJNaAM9KJiWY7gTnSY8JtrELL4Ns+wIgHM4zl5YDwWmwVJcOHAL0uY9qsQW6A4GJVqv9wjKYLTI=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":39102,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgfNXbCRA9TVsSAnZWagAAiksP/3BAhNCKNqyMl+0TIC//\nb7/sAT7MgfjoD/DlBZb5AdPOc8czmsK69x8Ifl2NU3nX4VpUOIDnHX62+61E\nnIOJuTTbiPObi0yGZyfkFkSnumHfq9VePbxkvNTaH3zhzNa3fHr/HbmtfhW4\n0jA3k8X2P9QzyaFvjXYQwMKjAgfnD4ilBnAMf+ZovVw8EnaaYj/nEtVDl9ZP\n2B0RvnHZnGSUuINbWTEuiDMxMRoNkCKnOZvNuhBj29l+WL7KuDkinnYVT6O7\nlfoQgHWrdSnbE4QLE+KI2YwzxOj1pQkOnl9eZCAix1uGPnHZSs0rDtayc/FZ\nylfXJeuoiZfMYTNJwO1aaxLHt1XvElkS3k1OpF0WxICmk8qCGg8W31wyJ0Xa\n9DOcSuN+1FEoGYIu3diBtIz6+IGAjAPqPMrYp59qChwA6xyXSgEiTYPsJFbP\nHtM+CRaaTXTuv1cu0r70BsLeH1I7mYwNNuAEpvnbfkG/dlv/h20nfafENz2o\nGPU4+TytAUxtg/gX+JtD8aUdtx91f8sidwTCVCi4go8kE2i11Aa9Vkm0czp0\nsUZNmglQj9BRHLANkWdB6SSJUSx6M0mSW76+xGhagAJ6exwc689e5J4q0zJO\nS4MfER9gkvtRCuX5/KMrABaQENEvyBXXADw3Ar2ibxdOlM1fBXWtE4IAeIpI\nMAHJ\r\n=5ykQ\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\n[![Publish Documentation](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml/badge.svg)](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml)\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"10d96854062760e2479c0568971b1daeb07ab358","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint --typescript lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --typescript --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --typescript --fix"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.3","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.5.28","@balena/jellyfish-logger":"^2.1.27"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^26.6.3","sinon":"^10.0.0","deplint":"^1.1.3","ts-jest":"^26.5.5","typedoc":"^0.20.35","depcheck":"^1.4.0","typescript":"^4.2.4","@types/jest":"^26.0.22","lint-staged":"^10.5.4","@balena/lint":"^5.4.1","@types/sinon":"^10.0.0","@types/semver":"^7.3.4","simple-git-hooks":"^2.3.1","catch-uncommitted":"^1.6.2","@balena/jellycheck":"^0.1.1"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.0.80-renovate-non-major-10d96854062760e2479c0568971b1daeb07ab358_1618793947088_0.005438462013876766","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.0.80":{"name":"@balena/jellyfish-plugin-base","version":"2.0.80","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.0.80","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"87e59b7b4f849f5132a0d40b1f0ddde8d5eaaf0d","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.0.80.tgz","fileCount":18,"integrity":"sha512-5OJfdl46ukaFqsAuAhZXsnwFgu0rB+T7lMKtpjBK3aAa0Zkw4o+pPg4/E/4Z7EIkFaYc5Gk8fA38D2ifY5Kbiw==","signatures":[{"sig":"MEUCICw7cYac3mt+HxSPIj2PvS8lFNv17IpkL9dNh3nRknO7AiEAnJE/wovhChmT38OIhITmDFTB1YvofZ4OX5itVisjzYM=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":39042,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgfNaxCRA9TVsSAnZWagAADy4P/Rwz9m5ArvepMYTBzcw2\niwoPUmXy2sUT1jf5okX5TU57vNVA84hxyXZGbEFYHMOxUlPdvy/RbshY5/3M\n04EGXOpa6GK8t/WrFbqlgP3Ysm4XaKj8s5z92OOfSyAkDPaFAHTQdR7LYazX\n+c1En0IniPJOBbFdaB2QEFbNbBTSW+h5KtU/6dq6SSBjKuZMbZgGEHNoY7Cr\nEZfRlYFEUQh0RKHuGMpDECHWy8MccR2mtblHNowzWfik1e+OnQPNcDvYnIcc\nmw8IAcGR9AKozTIwJwGjt1BYzcFUx8wnBYX6Vj9/7kUmq8mUeNesLJ4jZy0X\nEcfhGaKs+Ppb0X4NB377H0UY/KLDQ2B6zhiUlGg3Yf54kp17B6+Y2dRoAACV\ngTrLr7PpGL0eeiwuZcqD3Vk/pF7c7bTSmIoFu6neuPKrcUJVMMzPcBuwFMUT\n5V1jloh7f22KwtfFbOlSLG8hTs6vmbR0nk/Ne3aOszoF0vzqanBX3eGGIMVV\nc5ee4y3Lku8qshgIxrBSWlqY8g4r3ABB4FLD0MlnfkprEUZ3yApo/cLOYgLf\nUZQnRoLXahVDdz+OZfvULYIPb29EWayM9T+Fqtplt1D5xxGyY9SbY+w23UlD\nOdyyORXiH96VruXSIlcbLR+ODRQeqxz6XMuN+UzbY0MokHRzSh+MBKracuF5\njULy\r\n=xDYV\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"e2dd7360c32db6b08af27f0878662fce27e016a9","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint --typescript lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --typescript --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --typescript --fix"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.3","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.5.28","@balena/jellyfish-logger":"^2.1.27"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^26.6.3","sinon":"^10.0.0","deplint":"^1.1.3","ts-jest":"^26.5.5","typedoc":"^0.20.35","depcheck":"^1.4.0","typescript":"^4.2.4","@types/jest":"^26.0.22","lint-staged":"^10.5.4","@balena/lint":"^5.4.1","@types/sinon":"^10.0.0","@types/semver":"^7.3.4","simple-git-hooks":"^2.3.1","catch-uncommitted":"^1.6.2","@balena/jellycheck":"^0.1.1"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.0.80_1618794160912_0.08498856296611534","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.0.81-renovate-non-major-bf98810445db85ba52587310602a15e1ec405009":{"name":"@balena/jellyfish-plugin-base","version":"2.0.81-renovate-non-major-bf98810445db85ba52587310602a15e1ec405009","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.0.81-renovate-non-major-bf98810445db85ba52587310602a15e1ec405009","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"54b784cf2e0380748638e180b92fc0c89141e116","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.0.81-renovate-non-major-bf98810445db85ba52587310602a15e1ec405009.tgz","fileCount":18,"integrity":"sha512-s7fhuxJoNpU176L3S3WzQlXR6igEWATesjrcd9V01zvSOZ/E/BFanwPugeosp9bbp7Qo1EMcvlgpSZ2T9kaPeA==","signatures":[{"sig":"MEYCIQC4mRPgBZaw5ID01FHp+HEglbziw5grYAtRcj9wPMmregIhAMdlo0ZCPJffPdVSku0brTJmdXOTXREGk5IpIF1aeMXr","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":39204,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgfNe7CRA9TVsSAnZWagAAd9IQAIM4WGr/DjT3PJJUs5f5\ncHWs4TGxGXfMy4nY+C7DKy3ZVlwWeCJTyjmJ5BRTx20YQO2bqAOKbIa+GOyV\nqVsaW1RTfARFmDTBUqkr/3hxAvv2jq5BUjv5w3zywamG3zkvVQ+NrA7KW1US\nN+gp4xKVf2TSILA1AFipGMnCUUucOLC5RhB5z/zcrxPhmwX+2iqvStCnqnAy\ngMEG5Pd6kQMLecFsOPhI5Cdoxx8FKDC4H3rGzDqcXLxLS774sSMDRBRZYbtv\n7P0+2wpXN+9d9L68/hmrA6xlBN0Yd74ElzZPJP04JpfdsX+FBbgCducn2rbE\nTpkjIkaXVydMArQmgtDuzOY/XOroHqQK/+wgc5/LRQVzvPj7aWf0jJGanPJy\njQIr3fZsCQ/XnovE/w/rjgDtA9ghvB1a/NHOgenndN9nfsdIfFEWRzGVOscj\nok4/XrPBXoia8psKcvqKFma2TFsmJfoK0OAnvcos+3f3ePqQW/QcgYYcGY/K\nyEcpRHa60pyVp/Ik5tIUF2SN9oBJkIjxvYvu22lvykHGKevqbNTF/xIxgWRH\nEtVnMcVR+9sxUhnwhob4/tg5hUrcjfNRirX+gX+aqyLc1X/AlqBR75PfbmaA\nGavfB1rOREBA3WWCjySgb7gdWBao/e9m8ZYsFBFbBd/DArWVDUHxLks/lde1\nD2nn\r\n=x2QR\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\n[![Publish Documentation](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml/badge.svg)](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml)\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"bf98810445db85ba52587310602a15e1ec405009","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint --typescript lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --typescript --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --typescript --fix"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.3","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.5.29","@balena/jellyfish-logger":"^2.1.27"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^26.6.3","sinon":"^10.0.0","deplint":"^1.1.3","ts-jest":"^26.5.5","typedoc":"^0.20.35","depcheck":"^1.4.0","typescript":"^4.2.4","@types/jest":"^26.0.22","lint-staged":"^10.5.4","@balena/lint":"^5.4.1","@types/sinon":"^10.0.0","@types/semver":"^7.3.4","simple-git-hooks":"^2.3.1","catch-uncommitted":"^1.6.2","@balena/jellycheck":"^0.1.1"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.0.81-renovate-non-major-bf98810445db85ba52587310602a15e1ec405009_1618794427125_0.4074286017486979","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.0.81":{"name":"@balena/jellyfish-plugin-base","version":"2.0.81","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.0.81","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"2f50e0284f2fd84cf1a62c298890dc31e5b79999","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.0.81.tgz","fileCount":18,"integrity":"sha512-TaG0KbO+yCY9qFRSX5sGZTNdniMAkhSuFINj6KSmfi3jQQmVIZurU42Hr4Mg+ZVXiPKx7MiQQdfUPCS43kAMZQ==","signatures":[{"sig":"MEUCIQDnjI1NM9YSTjzjPGZqqQcSSSb90CE0HGetnVqLZRsJRgIgZq+Lz1luhaa9ufWLnnIhE5NUICgSp2mAvKtyIVQA4F4=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":39144,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgfNl4CRA9TVsSAnZWagAAGuYQAIUFkd3Qn3ERP9/1WhG4\nNiEUXEhbkAFa8gBsIf6woPMj7qi2yT+0eVofjbp82snixE0zvgfSXzhOfe5q\nDZ6aO1D13dcfDHB+QErOuyfsjjVxOBXwHD19WgaWv2kKDViqwGYrEg8CMMlE\ncwBg7eh1LHHaPyeJt1KFNwmmB04urVK6VlaHdU1tRVC3mth+q7x9Yc7mi0Sl\nBcSM9FXB1zdDFJoRGLamD5oTW7j8xqRt9c/elW3KcDM9T1v+DnJflwW3KpMR\nTzYxsSBbBfQPWTR8aPxRMKEO58bvHt3/T0zjupeXdPRV/L15gfOrhywqoPd5\nRrlJ0mbgz6gn2IKf1nvz1eVic2gQJwFNFcZM05qpg2cPUhY6azw0NPlJ+mrN\ngBonBMpT5b6/ddZxSvHIGCC8eRbBLTYLcK18/Tr8dujFiPqQ+NZE5QW57O/A\n5BoUAxS/4pheAaTNoSbEPQFy15Rp+eaNPqAEF+btNwA+UQlq+iCXDvPhA70i\nrt1jdvca+iUy3J7/RIb61jre5QAoVgkVgVk3ozjngFAPenal8OEwreE0/wwR\nHhT4WVcyawue0KOJNkZH0ABE3uNXOsmIBS0LPW4lM9PNA+xOouZhgO5XYRu3\ntpT9iYMJ7RlknFSx8KDLbJfcUN6onszpj+ebc60/1M6bHHKIpSqwkV2q19x/\neMPU\r\n=Y8Mr\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"59a61941781ad7a3b2b3b85b50d209e4a1ae8ccf","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint --typescript lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --typescript --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --typescript --fix"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.3","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.5.29","@balena/jellyfish-logger":"^2.1.27"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^26.6.3","sinon":"^10.0.0","deplint":"^1.1.3","ts-jest":"^26.5.5","typedoc":"^0.20.35","depcheck":"^1.4.0","typescript":"^4.2.4","@types/jest":"^26.0.22","lint-staged":"^10.5.4","@balena/lint":"^5.4.1","@types/sinon":"^10.0.0","@types/semver":"^7.3.4","simple-git-hooks":"^2.3.1","catch-uncommitted":"^1.6.2","@balena/jellycheck":"^0.1.1"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.0.81_1618794872220_0.6725370799498542","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.0.82-renovate-non-major-ae1111876af5a0318dda95a134067303640ae9a6":{"name":"@balena/jellyfish-plugin-base","version":"2.0.82-renovate-non-major-ae1111876af5a0318dda95a134067303640ae9a6","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.0.82-renovate-non-major-ae1111876af5a0318dda95a134067303640ae9a6","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"dd41bd4264ea175d13f1675314c4116928680e92","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.0.82-renovate-non-major-ae1111876af5a0318dda95a134067303640ae9a6.tgz","fileCount":18,"integrity":"sha512-n3Fy0ws2Mit0DYoMlkKxRp3yW5t0CM5jLkTO9atFRbHhYuZ6B1H7rk5wYbwyCHTMNV95G785M3Amwx1RkkmGaA==","signatures":[{"sig":"MEQCIEZM0143PtPZFptHsdWIO4Fl0ls/z1MT8YLAyAyP5oGjAiAD/svTVWEjXTQgBpQfYhm8JT8eqASJeuDgYYDoD+80YA==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":39306,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgfYMGCRA9TVsSAnZWagAA+B0QAJEVZWyVBQYnISx/Gkx6\nLnmC98IyocGpPBt8s+k6CKat4JWqiugGOxapYroxYTlR9GxZ2G4/NNUpx/5Q\nVlWb3mQEv1LWto5lO1BLOKZR6TKw2nYG0unffK1htXcPP3RhrpEyDhIfUW2F\nT5AIg3iiTy/cuh8akJP5FKkout9L0HVaJfOIw8h4FYSCmVjKuTCPIn6dWcqO\nBZhFJ8omsjNUEBrlkxqmlM2OMuGDhq2pc28lh8RiYsFTOS/dEPQbL4pqUcIJ\njB0OkZExi/yu2qIhIdAyGA/xxarSK5F28t1JlgfOgOHA7p/rVv0uqk5vhAaO\nhPaaQwglpWIRLE/s/PM3HA6omgCkQerKBUPnvM/BC2UZsfzO+P09aY9hqj8/\nbYQpOL+QELtpKIqV8IeuW+pchvHOUWDsDDI3KkMHRxqiVpQWarNQGiwwNQ4z\nPFZWiTBzeKS74/ncFONNChs4KX1cqjHQSU4BsQ6STVG9BltMSUzFePnt7QOb\nqAL3QOH8z4Frrnv8oxqapJNdXMGpWIC6naoOMSC8Flxh2dm/XqzeLKqh3qFy\nE7c71JwVDVqkX7LabouHt3iUPoRc13y0/G9LKor4eHl/goBbhhb1ixSJgExk\n6II8JoScHsssaXkIXUHevsc2+dWktJAgGtMzQ0UFUqPKdClOqlN35fUPpels\nElYv\r\n=sm8c\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\n[![Publish Documentation](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml/badge.svg)](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml)\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"ae1111876af5a0318dda95a134067303640ae9a6","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint --typescript lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --typescript --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --typescript --fix"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.3","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.5.30","@balena/jellyfish-logger":"^2.1.27"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^26.6.3","sinon":"^10.0.0","deplint":"^1.1.3","ts-jest":"^26.5.5","typedoc":"^0.20.35","depcheck":"^1.4.0","typescript":"^4.2.4","@types/jest":"^26.0.22","lint-staged":"^10.5.4","@balena/lint":"^5.4.1","@types/sinon":"^10.0.0","@types/semver":"^7.3.4","simple-git-hooks":"^2.3.1","catch-uncommitted":"^1.6.2","@balena/jellycheck":"^0.1.1"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.0.82-renovate-non-major-ae1111876af5a0318dda95a134067303640ae9a6_1618838277529_0.3019253633171153","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.0.82-renovate-non-major-6148c9f38cad6245b39270bf5da7a2d757699f71":{"name":"@balena/jellyfish-plugin-base","version":"2.0.82-renovate-non-major-6148c9f38cad6245b39270bf5da7a2d757699f71","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.0.82-renovate-non-major-6148c9f38cad6245b39270bf5da7a2d757699f71","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"56d26baca59dd2eecb7066d1011b05b477b9c5d0","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.0.82-renovate-non-major-6148c9f38cad6245b39270bf5da7a2d757699f71.tgz","fileCount":18,"integrity":"sha512-oj8CG2hK0RYLhwMFNW/yPhaSm87rrzesqK5yI5eOKsB4ugQUjfoUxj8vX0droNIk1N3tdFkaUZp3aMTSFWBQew==","signatures":[{"sig":"MEUCIQCWyaxH6JFiRnkpT9zL7D5zoaMB7LuG0sUhNeOjz+f1swIgfV30p1MGT5k6fPX8jXdjPaRh4qfEcp4JQTV7QFL9DfY=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":39306,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgfiNRCRA9TVsSAnZWagAAQYQP+gM3xNaG0f8+VXqH0UwR\n6yeagXsY/EOWL40Io2/sW+RcivYcml0TpGU1LhRaKlPcbbpQl/W3vEopq7Gw\nhZeIsCmFoam5jS6/R9Vckh42KxHlcL2XZkGLYb8nj1WLGbk1ygOjzdT6udbk\n90l4QKki8FCOZESAB9vowHqEe7fDgJTsEOKezhqsPNZ81uYCA2yRyGceiRNl\nIYjuCXS4pc6FaeEv3KydMk6yT+6zbd52N/00+KKBLrmBpAsbrpPRDG+ZxRqR\ntJvOMPbJpefkKBH9UOJXHeKk8kzE8GqrZR4vg4wiK9VbnJM1kLsZmVAhIpFD\n/8C4356+Ot53jCzRWJh5eBoAtFWk6IPLzTd9i35qrDmmnUqy/3EwiUk/7RQe\nn1hUXxITzZSKhvvREFE6rwBCqAx6BQXwCH/n2YkXE7IIxtw3CbIVLBFIP0uT\nIV8pj5+WWkAAwwuT4GyvIf3yoAI0pcvIiPduwXv0kkR7YqLewBWmAQVn4E7W\n85gAe3T+cjZjBUuQVwtWc1UHQe+mkeglQWdOWOgYpqA0cCWRqNkXqFuzm30Q\n1vwiIncR9I/7yjm44DH4QCoH7hyF2dxRp6IAFac5aas6QmQqz23bjE6E2i+Z\nW4VqjIKZcwllOj57JaVYKu/1Tt0pFvHr2nYs/934UdpqNAhzuofzXuRwZi23\ncGrQ\r\n=Ltcf\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\n[![Publish Documentation](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml/badge.svg)](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml)\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"6148c9f38cad6245b39270bf5da7a2d757699f71","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint --typescript lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --typescript --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --typescript --fix"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.3","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.5.31","@balena/jellyfish-logger":"^2.1.27"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^26.6.3","sinon":"^10.0.0","deplint":"^1.1.3","ts-jest":"^26.5.5","typedoc":"^0.20.35","depcheck":"^1.4.0","typescript":"^4.2.4","@types/jest":"^26.0.22","lint-staged":"^10.5.4","@balena/lint":"^5.4.1","@types/sinon":"^10.0.0","@types/semver":"^7.3.4","simple-git-hooks":"^2.3.1","catch-uncommitted":"^1.6.2","@balena/jellycheck":"^0.1.1"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.0.82-renovate-non-major-6148c9f38cad6245b39270bf5da7a2d757699f71_1618879313354_0.23539067975034245","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.0.82":{"name":"@balena/jellyfish-plugin-base","version":"2.0.82","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.0.82","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"337a357a9ffcad112fee9fd79a8d319108c15dba","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.0.82.tgz","fileCount":18,"integrity":"sha512-BERTOvPc9vE25FRiq6NAjZcJwZGc1wy42gim6sCraYRI1Mg2YD/vU7PhpWSMfqRKxCqkVEeUed/Zj6lk++Gbmw==","signatures":[{"sig":"MEYCIQDFi5t6YxKKYgQD+zRUBT4vssNjQAF2STHPbzAPFmJZ0gIhALyRihzRqHmIZvv48PvTZKzcS8GHVcr9vLBLpFxnZnZd","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":39246,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgfiRpCRA9TVsSAnZWagAAQ2QQAJ9fD4spvduvbuxiwVMh\nb5L+MKIDCCPa0it7Pcv3ePLXLk6kcdSYiMggGZQmcPFcqA5vZqP6XgPx/pTc\ncaCqQK25WKdAK1vMBP1OyMJ+54JJRM3XsjYv5g4EVQARarRHekfxY8u6DKJm\nTFSV0jwg9u3I7xJbYWOey+ENYm7D/4R9lD3JHuLL7vrkdHAS2wBbI8gKhICA\nXTwLv9qJQ968WoNHkuCyW8mtHJprn0kIm6UwyNZd7dDosqGggKUGIQHJjJR1\nh8kta20kghNSwfiKwZ3s6swxuyats/K8u0Ls9KqKTVYu/0TcQ8OnKyix9j4j\n9V8MT21aqpRZ4aQvhIbsrK69x+9K87RoXU9CIN5dYbiLr+WfpG0KYp4Ngdnl\nST1eZYKVDb/K4B0VIqKIRPhesMmuJr0ckA3lxAxCYDoz3hOVOMONLRGGlaRz\nwzqFUYZC26NAz8FYJXmvP2X5xQ1zLWHQUYtzoWKwdjmwBqyxiH7cN04uFAMp\nZtRA4kYzT/+v54+3cV0xzYKJJ1wVISpX3CCxUjuRky5EbCVYrSLDQqc6rt45\naA/hOyVUlbRpZ0ErevaYfEfgFq3EpfVc3nc4JQ2b9YpETY+loDleT0kOMdeM\n6UtX+YhhdeGnz7K9YzMhXFOw1Y98b1zIQqOI/MN85dK5hdU4q8uhUJhcCe47\nDsAf\r\n=E0Ss\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"8a9f438ef6fa687776b32d9f72d27edda3b5cb83","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint --typescript lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --typescript --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --typescript --fix"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.3","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.5.31","@balena/jellyfish-logger":"^2.1.27"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^26.6.3","sinon":"^10.0.0","deplint":"^1.1.3","ts-jest":"^26.5.5","typedoc":"^0.20.35","depcheck":"^1.4.0","typescript":"^4.2.4","@types/jest":"^26.0.22","lint-staged":"^10.5.4","@balena/lint":"^5.4.1","@types/sinon":"^10.0.0","@types/semver":"^7.3.4","simple-git-hooks":"^2.3.1","catch-uncommitted":"^1.6.2","@balena/jellycheck":"^0.1.1"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.0.82_1618879592731_0.663448760717138","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.0-allow-other-mixins-7d1fa6d39338582d67ae7c1ab8ada5d2e52d379f":{"name":"@balena/jellyfish-plugin-base","version":"2.1.0-allow-other-mixins-7d1fa6d39338582d67ae7c1ab8ada5d2e52d379f","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.1.0-allow-other-mixins-7d1fa6d39338582d67ae7c1ab8ada5d2e52d379f","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"ed4eff53696ae67e7cba384d569bdf048a20d155","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.0-allow-other-mixins-7d1fa6d39338582d67ae7c1ab8ada5d2e52d379f.tgz","fileCount":18,"integrity":"sha512-mHCo0cq1XsuYT6GHY1bPC3+3AXSYM7CrQwMtqWparjKFfBabr7FVAnz52GMcNlfoP6pISYYqCu/fZ5Tve9qFmw==","signatures":[{"sig":"MEUCIHwp4JlWSC6lhj/iHPBOe3AisAcUzprzSsuReEL0g4D0AiEArEVrrpO+wXdqiijAXiOPJBAR0Lelt+NLpvjxrjVhk1o=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":39498,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgfj5CCRA9TVsSAnZWagAA8voP/RajEM3O4HWGJU/C9XGQ\nYXhOGDcBpnRw6EfhzR6gf6NwNrLfRmczCt/hC81pA8V+3cIiA6uRII74j459\nm6u2t/4VJtf3BuvPfktK313s5bir9yo0x4dmdg7GII0uam0Y5DVvPFNMFaNN\ndIhilC8fx3lm553tgeEjGDEyk6AEhwDdlvTkRqB8FE7fRnaaUCR/PZrCMi9r\nLYOeRCoT+2CwzHornkF36EXhlUJD9PLb9MlHrRYmWSExNycQVqYTJClwh670\nwQQ9nfVxjxyLQRpV/6FbYb491WzsJrM5ylRLzXUfozQQHl1hNAx3z5aAQ8VH\nYPrJD90FZ/yCMAw2vC6GdFJcAqm+MKfumlrHPPuFbYSKBcAXoT+JaBIjJRB2\n/bMZQ1nEJ0I/pDkXiQpDAAqrAuHoEt6kic80jdXiaETEA6x+IggiLSq5UrbB\nPU/TpaaISHGuFxnbVrg+E8Fjf7ckETx7J8ZQsfqH/4EMb6ODQ0Qy0K6yqoJ4\nXGWxLL7CpXgwbHOtWx5+Nu087zYCcUD1UqhBqgfGEPOMRzWBoXCUUsozxr0s\nbOHMgmo7MVn9P3iJY7MzyyfOrqwWpt4hx0iuXbFNe9v8M+S/BDEOKZef5lzD\n9m/0M/MCVNMFvBBkFn33PCOq8jT6gqEBIHRAf1aJMUhrjs7kg88HUVcobhDO\nAT7R\r\n=JRpE\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\n[![Publish Documentation](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml/badge.svg)](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml)\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"7d1fa6d39338582d67ae7c1ab8ada5d2e52d379f","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint --typescript lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --typescript --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --typescript --fix"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.3","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.5.31","@balena/jellyfish-logger":"^2.1.27"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^26.6.3","sinon":"^10.0.0","deplint":"^1.1.3","ts-jest":"^26.5.5","typedoc":"^0.20.35","depcheck":"^1.4.0","typescript":"^4.2.4","@types/jest":"^26.0.22","lint-staged":"^10.5.4","@balena/lint":"^5.4.1","@types/sinon":"^10.0.0","@types/semver":"^7.3.4","simple-git-hooks":"^2.3.1","catch-uncommitted":"^1.6.2","@balena/jellycheck":"^0.1.1"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.0-allow-other-mixins-7d1fa6d39338582d67ae7c1ab8ada5d2e52d379f_1618886209670_0.7104750443382153","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.0":{"name":"@balena/jellyfish-plugin-base","version":"2.1.0","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.1.0","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"187d45abac19405e901d8e3c19c7210b6edc2814","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.0.tgz","fileCount":18,"integrity":"sha512-VSLQ5DIp6Q5gTMJxPm/eGzzGb2IA26kmN0UwK0Asmmahwy7IUMHab8+UNqT7xP0n9eFFTBq6f7VGmaX2IkkVKA==","signatures":[{"sig":"MEUCIFexzeIbmWdP0onHb9ss6RD5VPpLc2jeWBqaed2oFtR4AiEA6cO85uTKtA3axyMiTl5l+TCCflekIn8sClQhdF/dd7c=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":39438,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgfkCsCRA9TVsSAnZWagAATQIP/jH6LtKBuoUbesyYeI4d\nGnfuiK98hr3SLoiMTsmUy2jNC/imCqEnDzzajtO9dn2uRy1AKgEcQNh0KCul\nZo6sTvsogELSTaEHjwGCij086NkU+0NwpXrPJextontRXz1vstqxPryhqHR6\n4dZRYA2ZF3RSvuGS4tSR+M+jtRFr0nOnKzhATZAxoHrrG/UmwqsQnDGCAdDK\n/msJyY+uKq9TmsWR+bhOx2dwrvnQ2ZLTo8x3EGAEJt+Gb9tCF0fRuZZTqzpF\nD9Jhx4aqbf3EHCsmTkiws0Q+162/H3/pbeI8q9oQurKVx3ydiyn8OQ8TBWsP\nSaaqQtOnHbf2i7WRg59t//Ti/lnQp6XnB8t6vaonHV7Hx7DRWH0iZ9X/51oa\nOXhDroA8utqyEcACvHvyyMXJqmGcrc1JPWpw/Mv0a69LC5asfTFszrIM4Cbu\nfqxf9nRABEkX6EKKHzufyB05CqBq3O6O7t3+4xkXS7Sfc/v5Qjy3kD1rmcPH\nLy79Kx9WjeFxmYfcJHzvj7iUEHU4lBUs4jCjrlJagD2GTGKik50gsU2RWY8C\n8/UTThCoQw6qeBRMHQMec74s2JIyQvMUWjFHndAOJKYMNQRVkZlRSu7AiAS0\nGXuajhrjDMahGmeasuOSktI1Mrz+KiNPgoyw5hdFqHTn7go9fz1UoKMeswwv\niGCH\r\n=wCtq\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"f74289527a0db5852f2d46a2725e68869e784fa1","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint --typescript lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --typescript --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --typescript --fix"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.3","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.5.31","@balena/jellyfish-logger":"^2.1.27"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^26.6.3","sinon":"^10.0.0","deplint":"^1.1.3","ts-jest":"^26.5.5","typedoc":"^0.20.35","depcheck":"^1.4.0","typescript":"^4.2.4","@types/jest":"^26.0.22","lint-staged":"^10.5.4","@balena/lint":"^5.4.1","@types/sinon":"^10.0.0","@types/semver":"^7.3.4","simple-git-hooks":"^2.3.1","catch-uncommitted":"^1.6.2","@balena/jellycheck":"^0.1.1"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.0_1618886827596_0.6179772551584102","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.1-renovate-non-major-2952743dc848ff18e6595285f1b0fff60bf9824f":{"name":"@balena/jellyfish-plugin-base","version":"2.1.1-renovate-non-major-2952743dc848ff18e6595285f1b0fff60bf9824f","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.1.1-renovate-non-major-2952743dc848ff18e6595285f1b0fff60bf9824f","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"d209263e1bcc906e64fa5c107f6a9458bdeb2c8e","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.1-renovate-non-major-2952743dc848ff18e6595285f1b0fff60bf9824f.tgz","fileCount":18,"integrity":"sha512-2Zh1nZFwJ2NJHu/S9EbCJprxP6k8ZkjeudLOpqmkUhEfQ4ebJtpz+z8aiuL6k6xv/fLBVWWGlU8F5hkVXQfDsw==","signatures":[{"sig":"MEUCIC3yvkVWavwQPJngPziHfK+Ebfb5pK9gOgw0RKijHNfBAiEAqF8D4x/MekqP5yistjqUr5aEO8kT+jWlfPJADED1C5Y=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":39599,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgfkJECRA9TVsSAnZWagAAAQUP/Agu6GkNyYquQH5xtDkh\nxHXc779pcoVPEzKAr/EFm/LxYaUkqKaFsz61Ud5iBm73DrY20KMA2xwbQTn4\n0MOBhOgEJiCVdwhafvOxOfjLuKdLVIu2SprlynP3ze+XRQAQxEgJD/u4Oklk\n81v18HMOwPL+mLLeeAw4NNguB4VAUsFvA8dIW7Ihw28cLYg2swy1PwxJ3QQ/\nPYS7IK7ewh6wM6vrOYe5rUPxWrQm7MoFhnlrFES2ZO7ubXNIgumULusK++Gq\nqvrV88KI3As2VKQIJ+r0qb1WcIck/QV7e5HOVoboT5PyJa4b7RQ1psDNTIrN\ng8bYW417xVBrG6SIm4s4jq1b8Lf7M5jrDmLAhHNdMKAvPBkWnl3kYv1BNg6n\nj+YkONNImS7eZj5d1uJkQ78l3gujZxBzaK19FVozAMDjHhRp9CuAHzboLI17\nlrgEvchXakJf1wbW1kQmwjZmMv6iqRPkckD0JlwNup6Mjtg9Jywxuf6ZrjaT\nSB/df9WncYAULeRCZFZ1qiKKOhC65PiD7HJ7UFqEU8xkURo0o8w1zoY/UPe5\nqgZG3CoX0loqDAAdO52yhifQ7a5x4IeQrZYRkKg1sVPTe62K+js9V6Y5/Y4x\n3y0jhI/YUIG/Bw9hbAfD0jbKdIMLjx4H3sHDeh3sbQJ376kOellrPyQwA7L4\nbWzK\r\n=dnII\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\n[![Publish Documentation](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml/badge.svg)](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml)\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"2952743dc848ff18e6595285f1b0fff60bf9824f","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint --typescript lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --typescript --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --typescript --fix"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.3","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.5.32","@balena/jellyfish-logger":"^2.1.27"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^26.6.3","sinon":"^10.0.0","deplint":"^1.1.3","ts-jest":"^26.5.5","typedoc":"^0.20.35","depcheck":"^1.4.0","typescript":"^4.2.4","@types/jest":"^26.0.22","lint-staged":"^10.5.4","@balena/lint":"^5.4.1","@types/sinon":"^10.0.0","@types/semver":"^7.3.4","simple-git-hooks":"^2.3.1","catch-uncommitted":"^1.6.2","@balena/jellycheck":"^0.1.1"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.1-renovate-non-major-2952743dc848ff18e6595285f1b0fff60bf9824f_1618887235940_0.3837991414140829","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.1":{"name":"@balena/jellyfish-plugin-base","version":"2.1.1","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.1.1","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"a71af7b9d8ad46ef09fc7f9a5fef54cc7b59190a","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.1.tgz","fileCount":18,"integrity":"sha512-3gfkxR3oUG2HaOV4COx7rMJ8+bUFCapSkiwO39MaqS86+kRkoD1VES9AyYPT9Vmzb5ZMZDpPtFx3HmgpEZJ0Yg==","signatures":[{"sig":"MEUCIQD8DAUbnb8QfSAEbNGLrAMw1hMKy7h/OmURylU0cXH07wIgKDGn+ANWMn6QLY0WZY8+cZpldvUs5wUbtS7nWCzexps=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":39539,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgfkONCRA9TVsSAnZWagAAj+EP/02gdDbGQQbKE1ibbMJD\n+wumnDiqhVK7CFaxmVbGgSgfmBoGZUaODZzzdtjNqysXuQ02+yb6Zq/7jdWT\nPffIeTwNUBRo+RqNJe8uFMRKJ+taSwls8og9AphqKgzrwlA21ch6BC8YiDaw\nPqFQdiJ3ijtMlqbLQN8/DO38xHC9MjMhXa9EYul/TkCkxjaE6yE7wnCHp9Nf\n/xYh83eH9dBSfCVwe90Fu9jsI71eh0ogb+72B2vwUJreCglYohcQN6TTDIVw\nkOutdluDGQck3xmKj5WshJ8S0msJtyvSeMQza94JCSOf6LrHMOc323WABCnL\nCIPfk2JVmAuFAlJWGgb7O7b+VVDvQ5fUksnHW/2cjxaXEhThuSkcJe0vSjDe\nM8FpBiFGmkyWObQF26CTx5z7eAA/EhJlBaSLnImbRocS5bBjuniwqvjrXexc\n6i+xUBW/9jyrsjOeBd0UM7UeH7bAXXfYuF33TSLu73OBgyS8va8qIMfJtGuu\nxI2aofUIE8w74G6gPfca2s/DjhD39lJLQjgi5bVF9nd2uygaeA/zOQ4mXFWi\n8wvwYNMbMG+xtcb92aqRd42X8AN4ekQuLeP8VvvMEXPekK0b8JJnkx6x+dVM\n0EyON/8lTSmzf0ykg72zDwPILaMBtkxrrNbSD1YOs3jQ5Ww12emJNuvH6HQu\nzLsr\r\n=1gXQ\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"1fb27c0ba87ee42345957f358861cf78af30b839","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint --typescript lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --typescript --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --typescript --fix"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.3","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.5.32","@balena/jellyfish-logger":"^2.1.27"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^26.6.3","sinon":"^10.0.0","deplint":"^1.1.3","ts-jest":"^26.5.5","typedoc":"^0.20.35","depcheck":"^1.4.0","typescript":"^4.2.4","@types/jest":"^26.0.22","lint-staged":"^10.5.4","@balena/lint":"^5.4.1","@types/sinon":"^10.0.0","@types/semver":"^7.3.4","simple-git-hooks":"^2.3.1","catch-uncommitted":"^1.6.2","@balena/jellycheck":"^0.1.1"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.1_1618887564734_0.0033218211732986003","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.2-renovate-non-major-3287367bc2e8280ced52163e9b0f7d83d8fbe0c5":{"name":"@balena/jellyfish-plugin-base","version":"2.1.2-renovate-non-major-3287367bc2e8280ced52163e9b0f7d83d8fbe0c5","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.1.2-renovate-non-major-3287367bc2e8280ced52163e9b0f7d83d8fbe0c5","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"702f2b7424da7b9334c32c2ce8558f39ab933711","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.2-renovate-non-major-3287367bc2e8280ced52163e9b0f7d83d8fbe0c5.tgz","fileCount":18,"integrity":"sha512-Z/ygzpOc7iUQviceJw9jOd78tJrSiGW3Aq4nuLIKFaj80/KWxzk+xAINGV2XtHFbTZuFKgO4rvPs7w6wGLh8SA==","signatures":[{"sig":"MEUCIDYiYGTvbdLFYZMiu41kzdIt+ddCshkN+da5EziSDUyKAiEA9VpA/cSUjt2rWv5GzuhEbtegYX2X0ewfTRUey2cmSTI=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":39700,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgfrzfCRA9TVsSAnZWagAAhi0QAIKReF8NE2KquTRULvgm\nFLyf5Md7BrS3tBfSLeVuMihCmimG+w3yXoJjVeHUhVh8mJzi9Ncl6NzB+4iB\nXXP/ZeDWnkielk0gfm+x/7qwTt6Vxm0vGi+kncUBuhNM4qmzl64COOrlXfPc\nlL8E0fw1OuZgdql6M/Xwo7UOZvxuX0GKvmggL9nSplNko5yJLCLF/8rotfiE\nN5Nozk2HM5VzX+zWfNnHO+YQtc1ExEbW3qlTR9aPCFuAk79NHivK5BQ0U+Y1\nAOCkKqUDF8CHZHlVR7iSX1+IY2ch21jJbg/3vYDAb+mtgowIypffblGFJbpo\nni+xx8+2w639S3QTCw64vYnmKimo1PPmNqlTkdU12HcRkO/XWfyOyS7/bnAO\nKa25D5DWh15t9zfG/JxyoFaHqUp7oG2brsqxBcFuc+n9Vcznbe+Uy0MTJ9nY\nx3XDzsVoAuwsmMwLGitkszHSJATgKdpK/WAlA6iBwB/hgjxX4wQXuGcr03E7\n3Mmt99yJOXcmBgD2LbhfDyENMCi2DjE/fqdfkAmNhHDO4kfTfMG/yKIqkYrF\noikljkYL7RLclLBcuIhCRaDEjqTfvIkkOjhT2Pgx9b5mcWfjQSUTr500O8YN\n6NH5hJC+tCykhso+ghlHMX67EJHXmw/ZwG3EnJczxqw/df3vmCoAi1VVcpcK\nfXR5\r\n=NNtC\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\n[![Publish Documentation](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml/badge.svg)](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml)\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"3287367bc2e8280ced52163e9b0f7d83d8fbe0c5","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint --typescript lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --typescript --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --typescript --fix"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.3","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.5.33","@balena/jellyfish-logger":"^2.1.27"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^26.6.3","sinon":"^10.0.0","deplint":"^1.1.3","ts-jest":"^26.5.5","typedoc":"^0.20.35","depcheck":"^1.4.0","typescript":"^4.2.4","@types/jest":"^26.0.22","lint-staged":"^10.5.4","@balena/lint":"^5.4.1","@types/sinon":"^10.0.0","@types/semver":"^7.3.4","simple-git-hooks":"^2.3.1","catch-uncommitted":"^1.6.2","@balena/jellycheck":"^0.1.1"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.2-renovate-non-major-3287367bc2e8280ced52163e9b0f7d83d8fbe0c5_1618918623407_0.676244614062345","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.2":{"name":"@balena/jellyfish-plugin-base","version":"2.1.2","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.1.2","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"b269a794f19a7687b2402f6d3e272a8d5503079d","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.2.tgz","fileCount":18,"integrity":"sha512-6soTak+EdQQU1XT23tP6aB8o8UTGEh5L3JEQc+cPbEWWzk5Rb2noNSdoE/8IrKtp5ILRbrHEG7cCh8h9PuBzPQ==","signatures":[{"sig":"MEYCIQDsN9AwrDd8bNoLpKYbquau00LtbvmJXxjFQUU/BSAtAgIhAK3zR3sMlzr8qyGNwmTUHnoyfgwkNhYw8HILtSn/woBn","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":39640,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgfr+pCRA9TVsSAnZWagAApfcP/Rr7XxG/aVSpjqD66Edi\nyn/kxkKTrUJ/FJdbjUbNqiNKqmFWkNC6VgEw8rAKMedqLv2+DP3dt0yyVVt4\nH356TuxgbVDoJlqiPw0wyOkcw0qDU4a6SEC3swUC4+5x/N/BYa2kIIWBnAdD\nv6KhhTAM5MxETqy2PpB2E5n5TBgQDuI4fmr56C7/6Sk/vaws+CcywXcNodyZ\nIxSmXKAs1wFw9yNPfuXe86EMLcNGV8mcNlBZdkjvjwjBigVQkvQjADpzrRHO\nZ2qMiezaKI6iKepp5VqiBBDQ7fXU1XxiAHUnXSMw5uLfjT4yVJG5kBt2UGz4\n0vzaij5jyFIJVm4LgTJA2Avv6tPHoPzip31cwWp3g2Cg+V9QUbN2hwowXs0K\nqfSt450U2d4e6+Bs9XgWsPbySK7hN1SKM9WGlEwu2nRKOPg1SWwAkVwcgmP2\nH4gHAmnnkx+E2HYgPSZS9LK3XOp/g+OCcxv6hn4bAnVayiwzcj6xoCUEZr51\nIo38Clpdzx+sjevzVtcuKAVJvdiMovoHbwIN+MzAPVWBnZ+HL3DKmYRfuDpb\nEtK/OTZ6OxjivHquAr5FIrF3YPUadXmjLiJ+FiTW3qWeL/iIMqwHag4DuF8q\nHq6tRdo6Ec3U44KkQkfDUpgAjEHG1yyytym9Udh3b3R2g6RMIryS8xlbYQZb\nMnHG\r\n=DJ3P\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"a3b966b9c0b929ffedcd70c9e7838de24b934b44","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint --typescript lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --typescript --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --typescript --fix"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.3","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.5.33","@balena/jellyfish-logger":"^2.1.27"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^26.6.3","sinon":"^10.0.0","deplint":"^1.1.3","ts-jest":"^26.5.5","typedoc":"^0.20.35","depcheck":"^1.4.0","typescript":"^4.2.4","@types/jest":"^26.0.22","lint-staged":"^10.5.4","@balena/lint":"^5.4.1","@types/sinon":"^10.0.0","@types/semver":"^7.3.4","simple-git-hooks":"^2.3.1","catch-uncommitted":"^1.6.2","@balena/jellycheck":"^0.1.1"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.2_1618919337044_0.9594126280080779","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.3-renovate-non-major-a9dca53a655b167df6f4814bd2bc0b093d5c1f87":{"name":"@balena/jellyfish-plugin-base","version":"2.1.3-renovate-non-major-a9dca53a655b167df6f4814bd2bc0b093d5c1f87","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.1.3-renovate-non-major-a9dca53a655b167df6f4814bd2bc0b093d5c1f87","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"41a383547dbf7015b9f61c65a5f7c2141c989699","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.3-renovate-non-major-a9dca53a655b167df6f4814bd2bc0b093d5c1f87.tgz","fileCount":18,"integrity":"sha512-2L8alS5FGyzgE7DTw+WKqSfJMAUjwJ53uQFFwm9WDo2vEjMSJtrHdvGuVYikVRJ/1mxc9y1YMg4ogrfIei/2mw==","signatures":[{"sig":"MEUCIGyeCFRJ68+DIkjLWvThb+ysyYKRgsLPEWo/xfsd1D1MAiEA9jHp+tfU60KuY3gztnSf/ZaYSiYH2V4ssa4RelJnDh8=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":39802,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgfzXlCRA9TVsSAnZWagAAoMIP/3YY6tjr84BwWHPF67G6\n0GpKh2w4eepPyD0+yyuCZWtzFLXmmUfq58LOqxbK1MpiqNrFLMIpVef5Qd0E\nNldz7o+Hwou+omR120i2DD02BReLAvIOLvwLrD7h2GyZkrcpsEz2DVmuI3vu\n4suhIHivOq0ATuMgzo+rLCHoXIrSXxFrZUnTvQbCy1YWvUwDQSifSp08n+gP\nbTaaIAyXh0nVPBh7jiHACu7uTFVdd/yC4o6Meh0Z7/lAVWYN5gpBOEyeQCvJ\nhiCwCdF6q+uHywvhQ9DTy4unQSBJ0unBrTEPWv1x2LqlVkldc5XH43BhgTCN\nRHzRKcijE9mpT5sdZnq06bY+aEh0UYBlr8PqjNNqHHG6waKeebAAvIstPUmp\nVhvVv+I7CbKr4wJiGpHQwXvXw2zKodYZrLmOHFh+cfg5ySzc9tpUwvyRhDcT\nucZ13Kak0xf3q3JrojH7/34P6reX0uqCC89HA6xbGZQX7lBq3xvjBOBWyoeQ\nwkeOjmgjH8e0aXxFzNLQM10EeimUZ9FD4ff2lY3JnwrVyia+9x5SN+4Zevvl\nwV+r5Re4e6O0Rtn/8OspQDD2238BuAnNZ6dETTUEyvOurX3jNqfggm412E5Y\nXZOhzPyxeD3mhYhNHRu8BJ46FYz0wfvu9BvsyvPqoaM6zYoMIKPjSJiEXSVb\nStcX\r\n=PU38\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\n[![Publish Documentation](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml/badge.svg)](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml)\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"a9dca53a655b167df6f4814bd2bc0b093d5c1f87","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint --typescript lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --typescript --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --typescript --fix"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.3","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.5.33","@balena/jellyfish-logger":"^2.1.28"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^26.6.3","sinon":"^10.0.0","deplint":"^1.1.3","ts-jest":"^26.5.5","typedoc":"^0.20.35","depcheck":"^1.4.0","typescript":"^4.2.4","@types/jest":"^26.0.22","lint-staged":"^10.5.4","@balena/lint":"^5.4.1","@types/sinon":"^10.0.0","@types/semver":"^7.3.4","simple-git-hooks":"^2.3.1","catch-uncommitted":"^1.6.2","@balena/jellycheck":"^0.1.1"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.3-renovate-non-major-a9dca53a655b167df6f4814bd2bc0b093d5c1f87_1618949604627_0.2704749857613662","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.3":{"name":"@balena/jellyfish-plugin-base","version":"2.1.3","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.1.3","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"028b88fbe96c912e31eba74dae746fd256c160f0","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.3.tgz","fileCount":18,"integrity":"sha512-29dk+eK2qE8xrmEq53e/fQ3beBuMRjKnWz/gt+4pdV8qro4wK+a4xWjkry26qscg72jYTsNyTERO2baB5zvvcg==","signatures":[{"sig":"MEQCIHUWDg4Q6rW2oQjsizUCsASYPdUWJXB84HlF/XLk5fgIAiAd7Vm+HsFOAX6PRmwMzgdLNtSgs5HF4xpS0pXjdYKz6w==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":39742,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgfzbkCRA9TVsSAnZWagAAYp8P/1yZNIUOi3EQsJwGBcil\n8DDopTR7MnLx2KgXltLah92GNMFPxUAKubMcTLDLmYhiW1TSNNZUimdA+nTQ\nPq5amYkyired3s4pWRlF4+A36qQhsiLZCzNke767ppX+/vTvH/Nj/vL5K729\nW1IFs/uRMAnC+ypNo5hoVpIcPqQpa3jsntLT5lwGwZ9Pb2ONACIK1A0v0CNB\neJ0mzMmpgRdKJK/EOhLz448omSkl/Hhq0woE0gJ3mdwH6hpNGxFbO4Y+TkL9\n1HnJHLSC25IwHuKvqZbK/ImzoORZDzTAdr0eWOqGmxEx2d/QAm4KCPoNdvi2\nOgaqvhtp1bnYJjXSXcB0Qvvp+d+nqIL2W+pv+gEqEwvH1pXa1ctw21MCfgtH\nufxP+CgkekSjj5X5TJahnBI5bfTb86q8X1jhY1SmKyHIHMdBS8nu8qozxwgU\nA87ZyU3j6cR8njlDisQAMXXRkAPa0rCRRSV+2srVQPtEhsg91XGDqB6RRh5K\nmCrUOHcTBUZc1fRhZ4kpWjwUSW7zs0bmugzv8SBjqZrWTLcog7xmdJJjQw0X\n30KddGlRUO4yTewWAnF201W8zb2jobcoPM3A7sN7CNeTaLYuEiIICHz+WC0u\nZZ7Qf010EsfUGZhzrqg9V6BJRVscec8LEWpwiZVpLYFdo4gQ7tMMDPgPfksE\nguLc\r\n=NwJ7\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"794178ca27c1683c346530b7284628128b1bac1d","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint --typescript lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --typescript --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --typescript --fix"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.3","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.5.33","@balena/jellyfish-logger":"^2.1.28"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^26.6.3","sinon":"^10.0.0","deplint":"^1.1.3","ts-jest":"^26.5.5","typedoc":"^0.20.35","depcheck":"^1.4.0","typescript":"^4.2.4","@types/jest":"^26.0.22","lint-staged":"^10.5.4","@balena/lint":"^5.4.1","@types/sinon":"^10.0.0","@types/semver":"^7.3.4","simple-git-hooks":"^2.3.1","catch-uncommitted":"^1.6.2","@balena/jellycheck":"^0.1.1"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.3_1618949859918_0.33948706078930635","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.4-renovate-non-major-25f9d76d4385f217f6081f577102f29ec8e6c48f":{"name":"@balena/jellyfish-plugin-base","version":"2.1.4-renovate-non-major-25f9d76d4385f217f6081f577102f29ec8e6c48f","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.1.4-renovate-non-major-25f9d76d4385f217f6081f577102f29ec8e6c48f","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"1880614eb312fd33f580d544773d4a95255cd309","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.4-renovate-non-major-25f9d76d4385f217f6081f577102f29ec8e6c48f.tgz","fileCount":18,"integrity":"sha512-IYH52ikbHhReTxJbmfskEtcU3dk2zOX9o6AXRkPh3LtdsZGrsLQz+xB5cxgq1OamWU5RMtwntO0aUiyXrimxXQ==","signatures":[{"sig":"MEQCIEsnASug/PJP9PxEf6ko6AIv6ShNP7s9tGD/NIZ+PSnrAiAxeakIIZXSTkJEtQ/NrVCRHfk0T+KUwSBz0owCdaU94w==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":39903,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgf/KJCRA9TVsSAnZWagAA7OoP/0NAPjnZrWlVMo77ogcN\n+3NscswIL1VorNYyCPS9eAC8IfxbOoZgGMrKWenW3ilA6as5sO0vQ1AoXP4h\n+la0+2TOnn6tSyajtH3oJd0+aEBnlrtSWiy1An4jFXepHRARpAvYvvnq/m1v\ng0Bx2ewrvCxwnq14VfkhcWjvbjEP1yxMNA6V0cshWssYlQJ1DLiTJnRU685B\nkhiOjJzwIFu5/nhPfcSubIHOJQvc3aCNXFb7yK7MqzXFwrcoXlSjzsnIQHfJ\nAmN4giA+HR/4zZhF8CDivaxAn//KuKRikVVKM0NreTgbcP9ZjauISc/1dDOS\nkafYC458XW262Ljvr0ES8S34kHEBvoxLdJDajIN1e++I/c0oTHTc7nL433W4\ncupY8zclLw2ki4xOEMZCqEu+J6jTBx3GS62LyQh2+RC4fXw7V3l6Z8Eak6yn\nUB1Dzg9jsOgcUlpawW4vn4iNWj+ZYAmxjWDdDYvvlChVRHUD3CvJOU/dR1gr\nwuI1skujKlzvrufnVBLuE9g7+ZD2O/WPIXdfArG2smv/cDTwk0fv6WHeyvoB\nbYr7DZRmiufZIsJbTVw+qEdWxfp9xUk2ZhpL+48/dJQR/cqqN9n8c2ZlqBzI\nME9ixx6yynifu/kamWb8VxDfLFPwyaNfVEFY0n+YA78hdVlw/RiOHNBpjH4a\n6+z2\r\n=BbY2\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\n[![Publish Documentation](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml/badge.svg)](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml)\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"25f9d76d4385f217f6081f577102f29ec8e6c48f","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint --typescript lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --typescript --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --typescript --fix"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.3","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.5.34","@balena/jellyfish-logger":"^2.1.28"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^26.6.3","sinon":"^10.0.0","deplint":"^1.1.3","ts-jest":"^26.5.5","typedoc":"^0.20.35","depcheck":"^1.4.0","typescript":"^4.2.4","@types/jest":"^26.0.22","lint-staged":"^10.5.4","@balena/lint":"^5.4.1","@types/sinon":"^10.0.0","@types/semver":"^7.3.4","simple-git-hooks":"^2.3.1","catch-uncommitted":"^1.6.2","@balena/jellycheck":"^0.1.1"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.4-renovate-non-major-25f9d76d4385f217f6081f577102f29ec8e6c48f_1618997897012_0.7006877903972759","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.4":{"name":"@balena/jellyfish-plugin-base","version":"2.1.4","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.1.4","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"40592026a3bcb58cb2428393a388b6d2c6c079c7","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.4.tgz","fileCount":18,"integrity":"sha512-TIg4xYaS5+xNlO8MrkxA7BpDxH/GVARVbWuUfQjajVemkYXsQyttZembMnGgR4o5M1eDn7UrftR2pwCcMUBwvA==","signatures":[{"sig":"MEQCH0zxyyBpVjdO7yKz9MO3zTDiRWnRjnMNuTYqoCVYuxUCIQC6sNQQEmgsoBr3VVyfOwJ8vljhGy5CykKYbEdjcrqwzQ==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":39843,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgf/NLCRA9TVsSAnZWagAAjlwP/1BY9JJIc8fnbJ4DK4X2\nP/cg+qsJhP155EHs2XiBRceVnD8ub1y2/vOLEpJ9CZ+ilsIpzCdwZ5z5uGA1\nQCjL8o2YvyKv/QlZcyzgYyZSmE7/AVh0CWvWrNhTj3OLOZ9J1YwkdC14Gk2+\nT1QRcxL7foMh/WjdWOq5ZNZxw3sOA77nFVKcMoZZf56Z7CeMYEJjZA7cdELC\nky8MKv8TseIci/eC6ERBCgeyMTqQTX8FKftOuVYs4XHMgBKT7wrz+oB9nu9U\n7BazWnZiSMURf3DHl0t2fyyaefCAf/LSUYeScnBfCnrYlGPDE6rxhkQoehrT\nN+ggDQ3nV4rCdK7pW94F/2scqLGev1dN0znbsfNeTCRrZllfJI3O9hbHhzBF\nI5sgIoD/T+KqLkRBz0NNZ7FShQ4mNfCac7vNoaeIStMEimVWFIUYZvR0UvrO\nPdhwNSkDa45FJ7hreCnsooZcdv8VuS8bOrZoNXBtsQxRmoPpD3/7Y7n3AWey\n3EtieG9p5ALGwyoE4SBO16jWt8CezadOUWyYiaRgqswpeocHnExYI0cKfD/R\nHQuGKWzUkVDesS9xvR4VoURcG+YynGwnVkzfv7KMuISsqPiFTMTa+0raorS6\naThFzeVdUxMgy5MAYnlkXCRh+sLHeEtcKUUnvxBEC26ZdEa0aBqTv/QUE/PU\ngaZ2\r\n=JBgN\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"148c04364fb7d7b72aa2de6b7a3213e577d7cf37","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint --typescript lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --typescript --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --typescript --fix"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.3","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.5.34","@balena/jellyfish-logger":"^2.1.28"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^26.6.3","sinon":"^10.0.0","deplint":"^1.1.3","ts-jest":"^26.5.5","typedoc":"^0.20.35","depcheck":"^1.4.0","typescript":"^4.2.4","@types/jest":"^26.0.22","lint-staged":"^10.5.4","@balena/lint":"^5.4.1","@types/sinon":"^10.0.0","@types/semver":"^7.3.4","simple-git-hooks":"^2.3.1","catch-uncommitted":"^1.6.2","@balena/jellycheck":"^0.1.1"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.4_1618998090963_0.1828715582379492","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.5-renovate-non-major-5caec9c491b27e3cef2339731584f54fd1de19a8":{"name":"@balena/jellyfish-plugin-base","version":"2.1.5-renovate-non-major-5caec9c491b27e3cef2339731584f54fd1de19a8","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.1.5-renovate-non-major-5caec9c491b27e3cef2339731584f54fd1de19a8","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"8473579e15683e609504ad8e405608429befe387","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.5-renovate-non-major-5caec9c491b27e3cef2339731584f54fd1de19a8.tgz","fileCount":18,"integrity":"sha512-yV+aFhM/VD4PbeGUrCw1FSwxhAS/Nk+8jdkKXbRgnelsdaRHrGrv2kqdnG/+ETmt2cnylbn4Y0a3bKT+jpW4Rg==","signatures":[{"sig":"MEQCIEp+NlAdNs/E8GQrSQKbRbPGFIeF6p3oGkPSoaj3l3knAiAXQJYCU9f9KHHHzZhPcpc33PWE2mqHzijiTvZd2C4Ryw==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":40004,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJggAzJCRA9TVsSAnZWagAAtZYP/iDEiPKEiKHqEygUgyLb\n+D/XQuk1G+NCtbIMjQSlCkI6HwjO1hQLvGXvt8lrzW87zx4/k/0BbIUOoibm\nRLYrac/Hr/j818mkuRPu6zThtGQwd+Ohe2p6slvI3Z7MsfGYBXypJPrmFybb\nJYr/BNI7WB+iUZK4jkwPbP8GBBfwJbq7PeF5pzecbWAkpssj3a1KIPvMgJGK\nVZ7pwW78NOtwuNvyaB7wGTF373sQ2J9aRME0i9WVIxzBF68x4EMG6SkNHQhj\n0sZOLcr2yoUXDxORXY6ifqCIZyTvWo67WuGu2YhWOpvhlpXBERRFnryr7VtL\n21B1Rj6UoOsRJRqAusHGWm02A6iLpbdlbhepx9TXRCp/I1BW6yfnQmY5xIR9\nYmlGaBsYeu32Orf6RFDvcsrZ6UFmA28Qnav9GDQCIo2botL/8XiRQVJ96/Ut\nTsb1JTeXY6PiBzIV/ZZ9aLuU4oIjyV6VzL7+x4wm9+e5PVdQYwGi3GIdQ9Hs\nDu79tQVBI3MfQ7xJI1oxuvqblzbTHIP8vPW0CZFuxBRwTjvdQ9bsyBG3gC5s\nu38PAwi9n5EGUk8YnRHHoMmTLqcH1RgmWI4QEe5byLE2fmkPjpikE+PAVx0v\n6lP2iZF82/apkNsYAW5nUVdNi8cAU8wgv1cvbC4H6I7vfjAfEp/AMC0pnMAW\nmFF9\r\n=lxpW\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\n[![Publish Documentation](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml/badge.svg)](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml)\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"5caec9c491b27e3cef2339731584f54fd1de19a8","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint --typescript lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --typescript --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --typescript --fix"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.3","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.5.36","@balena/jellyfish-logger":"^2.1.28"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^26.6.3","sinon":"^10.0.0","deplint":"^1.1.3","ts-jest":"^26.5.5","typedoc":"^0.20.35","depcheck":"^1.4.0","typescript":"^4.2.4","@types/jest":"^26.0.22","lint-staged":"^10.5.4","@balena/lint":"^5.4.1","@types/sinon":"^10.0.0","@types/semver":"^7.3.4","simple-git-hooks":"^2.3.1","catch-uncommitted":"^1.6.2","@balena/jellycheck":"^0.1.1"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.5-renovate-non-major-5caec9c491b27e3cef2339731584f54fd1de19a8_1619004616585_0.7992663816655263","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.5":{"name":"@balena/jellyfish-plugin-base","version":"2.1.5","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.1.5","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"3798c97604211669085ef40d597e219818c6de5d","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.5.tgz","fileCount":18,"integrity":"sha512-g/V6RjEJJ/MWrZgeeyyI2NANiYM4Zwj74OqPrFKf06b+WqoC1rg4jBBLkX4pXb4FeWUDeECtCmKg8u2tGqILSA==","signatures":[{"sig":"MEQCIE42zP2D2BgrzyroIbd1Q6pJ5osTIwQKorN2cPlXnOeOAiAKBwuAgCBQx2CLBowCMzTZpJP0+xvpuTsKTs9/bwoEAw==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":39944,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJggA2nCRA9TVsSAnZWagAA3AYQAJ9m2vGUeMu8Hrrtn0Pa\n8kjymNDcgDbqiK+/ut7vl84GCyAoQ+PUgn9fBgDrsnu1duWjg4mJlEOiCE9X\nkfrY6CNcTPhvZ3fWk29tbOsuxiZPeN4Zp3mvyFZMLcbvccZO/6fqepnMoSx+\nuq6wfZZlFetwtzpOxhGlkCvNUeIUxcIm3kAQeUahjUiBukrsezTPmGNHsBZj\nrr66PbRFcKvc1nfv2w/Ldr1wHBrbhvStmwJJntxY/xq35SoYx9ltx6pqGXTW\nxBmXKJAsUEgmUYGA3VHhZRnvtEJrj/ARDulenzGfomfqSwCeOYFn74aSBT8j\noL6Nc7sb+NdghxZQjFs04XLHe7XzMIgjGWgzEt6JNBxybbgS25wJhXmFa0SR\nI58ULMcrPil6Wxr+7o3HITFtHBeRQJo5dbOokZZk3aW+AEzSz18p5pyyKgjh\nHC1RLDQzfF1E90LYHUZebs9/YLG04p5hv/thBC9xbix+7mUh8LdybGkkCCSI\nEprB+sTiH2ot+hYuCXY4DlDYCkzUJX0gU2/j5mWNchDvl5gp8z+JNiLVErYV\ns1JwG6D42cazfLTFlQbNEYyFtENQMt7VgUsI6keOvcIDWUGbz3AUiYmuOL9+\nZtxioJIPS7dr5I58ICdCJ8TqNVOeyqZppU+aBwP3eo+xoeb/UcUU9Udn39iz\nTRIF\r\n=sVYV\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"604bd24d9fdae96efc8a9c317501d1a53e842782","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint --typescript lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --typescript --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --typescript --fix"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.3","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.5.36","@balena/jellyfish-logger":"^2.1.28"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^26.6.3","sinon":"^10.0.0","deplint":"^1.1.3","ts-jest":"^26.5.5","typedoc":"^0.20.35","depcheck":"^1.4.0","typescript":"^4.2.4","@types/jest":"^26.0.22","lint-staged":"^10.5.4","@balena/lint":"^5.4.1","@types/sinon":"^10.0.0","@types/semver":"^7.3.4","simple-git-hooks":"^2.3.1","catch-uncommitted":"^1.6.2","@balena/jellycheck":"^0.1.1"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.5_1619004838882_0.8444616099746447","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.6-renovate-non-major-19c9517fcbe693b29137a790e70c4e2ba3288d4e":{"name":"@balena/jellyfish-plugin-base","version":"2.1.6-renovate-non-major-19c9517fcbe693b29137a790e70c4e2ba3288d4e","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.1.6-renovate-non-major-19c9517fcbe693b29137a790e70c4e2ba3288d4e","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"4164a14618631bf0e3cd55de64406f7f889249e2","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.6-renovate-non-major-19c9517fcbe693b29137a790e70c4e2ba3288d4e.tgz","fileCount":18,"integrity":"sha512-5AFxnoNp5WhSLmve5Vrsaqi2nIpn1xvyz77RGRgujJqJskXIkevcSt1/PiAwERjPDS7qFuCE5J4Fe1SD9u3Mqg==","signatures":[{"sig":"MEUCIBfiSQV5GCljZxC5DGE0BXLshPQEUuITyTIS6DlnTPCGAiEA5l3NSOcog3o1sUKZy29L7eobh4U6R8obc8cbCKbSjDY=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":40105,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJggCKUCRA9TVsSAnZWagAAXb8P/20v4Mqo/yW4Xgig1iDk\nA/FynK1YASJh9LREgIo0c05d854XzWQRUPiPMgJlLv9Myfw5ZiVZriqfFBck\nvC+gKHC3oouMRLG+oa0UEZ/1JfO0jDeaKEB5hM1GEihvkVj/nr6T7ZBe3ioh\nss4daUPEuvkIj9TDxO0USIF6tY9au/u6XrPL+g0ygiEpwr14VlzAegOzS3tD\nGTtYTWpYVNJ1PtEEaYMGsAH7oxR/wdPm58HlwskEzJ6t6TC+MKKuTPRSdKXR\nLeZG2x5OzyLgPjspFQSuex0L4PpSbZzbTF8A4Idb4bCfJAZl52rSFBkaALGR\nQkNm1Z23csPqVOE0ZecVaRzKBi761oTuL57Sn6EIBzQqgAEImCG8xa2LscmS\nH1AwUIA1kw5bDbNbVIvvAwrCVEe0aFPE8sCLoWEEgShEeqifpOrfvoCd3Fw3\n3r/9pITHNyu1qx1NHdSU+4oxrdypx1jUm95FY1ckTqryTJSJO49C9ZQYXwQk\nShRhGDS+j0NjIpsyA6NH/9yZNyJO8y+3R3/C7lRTQumwzQDC1mzR9nflu5Uk\n0rQ4G4Y0RV/TXBX4N0ddz7zlzGoPcc5kmG7K5jFrZL+Ep7cxliJ415he58mp\neMP7NlfkLa0yYm40xZ6NRheldhy7sxJYZdsYKKSe0zmht0EqEWVzUikR1vbd\nIAGl\r\n=MTno\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\n[![Publish Documentation](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml/badge.svg)](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml)\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"19c9517fcbe693b29137a790e70c4e2ba3288d4e","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint --typescript lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --typescript --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --typescript --fix"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.3","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.5.37","@balena/jellyfish-logger":"^2.1.28"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^26.6.3","sinon":"^10.0.0","deplint":"^1.1.3","ts-jest":"^26.5.5","typedoc":"^0.20.35","depcheck":"^1.4.0","typescript":"^4.2.4","@types/jest":"^26.0.22","lint-staged":"^10.5.4","@balena/lint":"^5.4.1","@types/sinon":"^10.0.0","@types/semver":"^7.3.4","simple-git-hooks":"^2.3.1","catch-uncommitted":"^1.6.2","@balena/jellycheck":"^0.1.1"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.6-renovate-non-major-19c9517fcbe693b29137a790e70c4e2ba3288d4e_1619010195578_0.8317989679568774","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.6":{"name":"@balena/jellyfish-plugin-base","version":"2.1.6","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.1.6","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"4cf5bce40acc2f4eeeaa9586f2ee457bc6ff4ea7","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.6.tgz","fileCount":18,"integrity":"sha512-y7LTs9VSQqSqtmYPt60txKAp20B+1zFdDZ2ZZpURuufML54k59+dLTT4ydN+xp6tcnQmNC4BKhYt5X7cXptGgg==","signatures":[{"sig":"MEUCIQCTlNV61E9rnAS5uarTjsT35vVgvEl6NMIkFLO/v4/KTQIgYWb6Uii4k6twj5Sj6oRIqBgE6off8x9hVmm+1pPf4oQ=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":40045,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJggCPNCRA9TVsSAnZWagAA6MQP/24rygiCBsxuLgyEnxP7\nv2isCA1M19yp4afMOUW0HKYOXJWFx7H0HbYfiUymp/0jyGgvLGzkzIZzDvmH\naQyq5q0T5NW+IxU+RmHoP5Ejn1CllKFOc+xnZNuKbFIrhrURJyHLe7vPB7fq\npZYqc8MQc9DGJWPhZo7RD1CXDtRppgKY1oZ/IFfbhVaadedFq+jZf9UB/AMH\nO7Nj3gRhnxqMTR5C1FpDTSA9WTr0ModHHI8tMdAnexDRhQE9B+VMG6QIlG+G\n7hSEPN3tTxwIPMBQTRrmO4/Z7+S2SMSHcqmttmO99vEr1N8HR0JR6XHhRNd6\nQMEI0RsoYPinRXKMgTukq2yZzi9VM0hQUglK40NKfIuPHG4G79y4UhQzzjKM\nfrossV4HK5TleHrJCqVWeNED8Ci72vzoJV0FBtZLJtbOFLRsACk28hoaYexJ\n3CHFEPV9Hj0zTkD+Dfdl5dbNoVPlmUe4KKCzHfc6kY/3vjA3Wm4XOEMJDf0e\nDQR2/6R1mOyMOT3IjYsm0c9QcWxKhfr32Zo0VW5ghyTy3mKVxePJXLg41rNK\nij+YugWxemfEXzRaVJxpXZH3d3HeNWE3UthnJO8KptREgp0+NlG5xkXUoJvy\n5ZG3DbSTX77RVNrLJ8fnYMVkz6HWeaS122DGxfR4ZHrZop4icEc4a9d16NGS\nif7H\r\n=zeLo\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"5f79f3ec4d53e6936c8b609bac9d0d8358f1e5c4","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint --typescript lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --typescript --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --typescript --fix"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.3","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.5.37","@balena/jellyfish-logger":"^2.1.28"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^26.6.3","sinon":"^10.0.0","deplint":"^1.1.3","ts-jest":"^26.5.5","typedoc":"^0.20.35","depcheck":"^1.4.0","typescript":"^4.2.4","@types/jest":"^26.0.22","lint-staged":"^10.5.4","@balena/lint":"^5.4.1","@types/sinon":"^10.0.0","@types/semver":"^7.3.4","simple-git-hooks":"^2.3.1","catch-uncommitted":"^1.6.2","@balena/jellycheck":"^0.1.1"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.6_1619010509418_0.7062598360778505","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.7-renovate-non-major-8b229c5cbc61dd5abb0342a4b1654f99d983d26f":{"name":"@balena/jellyfish-plugin-base","version":"2.1.7-renovate-non-major-8b229c5cbc61dd5abb0342a4b1654f99d983d26f","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.1.7-renovate-non-major-8b229c5cbc61dd5abb0342a4b1654f99d983d26f","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"c40ff2e606e9a5c4d4e2cf44d7385eb378b26410","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.7-renovate-non-major-8b229c5cbc61dd5abb0342a4b1654f99d983d26f.tgz","fileCount":18,"integrity":"sha512-Q7WUZFEP801xr7O3R68g1KY0zJy0EnOtE55uc7jAfsfWxWG3p8DzzhxXgDzk0nrLsgIKRcgiWI0ydgmyj/3B5w==","signatures":[{"sig":"MEYCIQCjCajKcgUXapufiSNuKj8fZQuQWsEZ09QuCiMLCYfAFgIhANzjtgHsNk+CchLb8V3oe/RIhxapbAR8s2qW203h/N6h","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":40206,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJggDysCRA9TVsSAnZWagAAPz4QAIzR3eMz4hSGh47Nhhka\neQfpVniA1AcjCi92cMy4FjgUigPIBwWIUEEgSyNDOBCppmZADpV+PEa+0IXq\ncHaVxSfXYMXb+KaHN2Mon0i37Fc4fpUUT3vgdY0hOHnhj+OQVUJ87lKTseGD\nyXrCisbu71QIuVMQRBrhJ6XWkEZaMZTF+WImmmwD29bXxPGhlyq+3K2TXw8q\nWKY9iaDD2mJ2mFHI4Lio/9LUelY4dcDvKy4qcjEjOA3kGcTjVuCNVugZs6CA\nCrxtTknR4chyld+cnvvl14jk8adwygerNQHRPlYbBXsOXZJ/TnFB5GAHDyxW\nwQI2nwxdTrquqQuAfTadWcjdRWep82VJmxWCcqv/e66tw9GTNEjnMG0VY1Yy\netW8qztg0w5gP2rN2kRgrDT2lp1cJ2YvzVyzk1X4ct5iQ6aDtlfmsx3DoQ4R\nmtm/MlE5ENIBv2C/XwOjutSdiun14i9xxr14sF8oa+PblJgY4RiVpuSqiO7K\nLaOAVlYbEhLz2eyvc4LDXSQy27njFQzAxoYlYJnWotQTcKt2lwfSax9uEhz3\nPj8wCdm3H9Xuzh4rT9Resy0bhSI6ZG6OUnSMUOpkmuA1wo2gz9gSocDt+GiQ\nmCBlSC/qJwg+8TdWNBJy1fUEwr026Qjouw1DLPCxdZQUVFXiAeR36+SsJbOm\n/c6r\r\n=DTZG\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\n[![Publish Documentation](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml/badge.svg)](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml)\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"8b229c5cbc61dd5abb0342a4b1654f99d983d26f","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint --typescript lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --typescript --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --typescript --fix"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.3","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.5.38","@balena/jellyfish-logger":"^2.1.28"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^26.6.3","sinon":"^10.0.0","deplint":"^1.1.3","ts-jest":"^26.5.5","typedoc":"^0.20.35","depcheck":"^1.4.0","typescript":"^4.2.4","@types/jest":"^26.0.22","lint-staged":"^10.5.4","@balena/lint":"^5.4.1","@types/sinon":"^10.0.0","@types/semver":"^7.3.4","simple-git-hooks":"^2.3.1","catch-uncommitted":"^1.6.2","@balena/jellycheck":"^0.1.1"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.7-renovate-non-major-8b229c5cbc61dd5abb0342a4b1654f99d983d26f_1619016876226_0.9538544876528905","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.7":{"name":"@balena/jellyfish-plugin-base","version":"2.1.7","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.1.7","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"750894380564a6c97c0252457b762b3eed702466","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.7.tgz","fileCount":18,"integrity":"sha512-Oog01zjAlIieLGlgFCUywgtww6uybowqOFIBaisrrEARFZrRBaFF0agsqpt0kOq0ZVT00GHzwQXvxTOidoS3Mw==","signatures":[{"sig":"MEQCIGchUG0OFq2BzeNWoMxCGf5ME+bKAYIohIIhrITL5JDHAiAUK7gAPk75PStVOjtx7p+zjl5u8yOg1vtPUHuQgesT5g==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":40146,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJggD2YCRA9TVsSAnZWagAAY+4P/As7wMjfolSrZeu39aDc\nVQOrjCmV6A6RAxrhx2EIzzwWqB5/f7Iw1ntB2Vi1NgcJwUBDip6H1uGAd8ts\n4ZHTv8a1mYLSo3xHy/UIhEKxKW/M42i7prEchfuCpzBHJ2gAOpe9y7cMERQ0\napNd8T3gIc+rJhlqgDaUJ4waQapS8xnJUZtDazKFYtXF/VCKp/2A6VEzxeZA\noNUQCAF4CG+S5i25qbuK5ELMBieDAkERtW9wnJep9wWUQ5SqEI6HRV4El8wv\nvxkZdT22XmNTy0ntlpUrJJYVdeZY/rYF4mqPYzErvPpy/teMOxSFAKX++ZWr\n2zj3JR9pihmklEkZJCJ1TrbBXFwUMSenS+f9/LvpOw9J37UTsHYxAqjBGI/0\n4rdXD3MkEgz8yvoZ7MY4J3FyEBpJ8tm70IZqCHKC2cM15HmnYS4Dq/8JTsVO\nC7T4qreYt5TA814vmoFAuDvN3G2zAYvrQqPGguJ5uBCQTpVo5xNEwDNlmfft\nbLgY9K6dzym73dmZLJtz4FEW/t164n6omTJYuTRGZAK1t3A8INCVR3TjD3Ys\nBdc4PLO20cmTmWznpNC8HW/SHN0tD1aczQSQdLbFWI+4V6ylXc5Y2nwBz5Pk\n/DJ9aPvIVPbCfn7v5b/HXxY5lHrai6g5YM6f9FfEgCcjH5XzEMMHfa7TTtek\nWLtR\r\n=qeIK\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"1548230591628a4b8d0de46b985ec2b0078da70f","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint --typescript lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --typescript --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --typescript --fix"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.3","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.5.38","@balena/jellyfish-logger":"^2.1.28"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^26.6.3","sinon":"^10.0.0","deplint":"^1.1.3","ts-jest":"^26.5.5","typedoc":"^0.20.35","depcheck":"^1.4.0","typescript":"^4.2.4","@types/jest":"^26.0.22","lint-staged":"^10.5.4","@balena/lint":"^5.4.1","@types/sinon":"^10.0.0","@types/semver":"^7.3.4","simple-git-hooks":"^2.3.1","catch-uncommitted":"^1.6.2","@balena/jellycheck":"^0.1.1"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.7_1619017111819_0.3261145617903314","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.8-renovate-non-major-81d676b1d12d1d9878a3eb5034c3b791afc0cda4":{"name":"@balena/jellyfish-plugin-base","version":"2.1.8-renovate-non-major-81d676b1d12d1d9878a3eb5034c3b791afc0cda4","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.1.8-renovate-non-major-81d676b1d12d1d9878a3eb5034c3b791afc0cda4","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"5a987f709e825ed1dc763ad0ac45609f295c8f74","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.8-renovate-non-major-81d676b1d12d1d9878a3eb5034c3b791afc0cda4.tgz","fileCount":18,"integrity":"sha512-wDjHaBkmW5N/Qz2iqVbqBCAnAD4BqElXcbruoBEsx5pXIVRP59UmQ3KpCCwBNvCYvoti+PY60vfv6ScBvQVkFA==","signatures":[{"sig":"MEUCIQDA/hJmndIcF5vva5DX3FyfM+otOeOFIUW/JjTDlwMwBwIgMlP4/FFUDhs55lPCgVjfdI0IKMFWFwFx47H2FgDQ88I=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":40307,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJggF0wCRA9TVsSAnZWagAAuvoP/A37hvam28SNo8qqu3JS\n1f7Ntm/JuowqJ0Drqq1pXs27FvthggA9ALaywx+K25HAPFFPaBG/4D1f9weZ\nbDnVCxh5VsTfv8rzEhZoiRNf21T3w4K5dEI+4xSpKHahEqvPd4bVoqkRJ9S9\nhFKtAqKUtX7GVGufQdkXqeDEXcd48ka7n2iTYju5V5D8u/5Anp+la4aBg65f\n+HLxWbAjbHJHYEbRxZi3l0KVFbRKL5DhvaDS7lotgiSHlSecA0+qGbCVJOrn\nVN7YnSp8uHoLAeOyaT616PKL84M74ttVMxTUx9CAznaD9e8uF0S8BNp691uK\nAk91zcuafu57xexIvX34HIFcDOx6ksMhbiE+kzYCKVL41o+itpVr2+fj3FFs\nqWnPk4YRZvSYNff8SiLtQwtw1EJvpOC/k/R2uUZ1xzpkRMC6Iixdk10zGYpe\nvTIw6jFckS0YO8AUqFgVnPvl9OzgqLOmxKPsPGVk7pBhu6EKfIvCVA7zjidN\nXkE3LH6TSKYhBgHT6i9ggED/dLSGxHMlVVko8vzqv5sfvf2s3zToHaTi4Xj4\nUUdcsfjCE3Tb+GjUH3cAQmw0RHOI+cLL0YFxqC9HSV8K7uRWaebhqjMsJHn8\nYwteuZuE6dsKgrV6CAXXJ44uxVFpLbmzCaLICjqBCNm4Kl/HqNEyVw1Ludry\nWLPz\r\n=Gwe7\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\n[![Publish Documentation](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml/badge.svg)](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml)\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"81d676b1d12d1d9878a3eb5034c3b791afc0cda4","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint --typescript lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --typescript --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --typescript --fix"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.3","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.5.39","@balena/jellyfish-logger":"^2.1.28"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^26.6.3","sinon":"^10.0.0","deplint":"^1.1.3","ts-jest":"^26.5.5","typedoc":"^0.20.35","depcheck":"^1.4.0","typescript":"^4.2.4","@types/jest":"^26.0.22","lint-staged":"^10.5.4","@balena/lint":"^5.4.1","@types/sinon":"^10.0.0","@types/semver":"^7.3.4","simple-git-hooks":"^2.3.1","catch-uncommitted":"^1.6.2","@balena/jellycheck":"^0.1.1"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.8-renovate-non-major-81d676b1d12d1d9878a3eb5034c3b791afc0cda4_1619025200349_0.6657508665161875","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.8":{"name":"@balena/jellyfish-plugin-base","version":"2.1.8","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.1.8","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"930fa3f5024a7d84cad3e92b2cbe2cdbba1200f6","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.8.tgz","fileCount":18,"integrity":"sha512-vMGFKd3UFXD6JpbQTPJrE51XShvfS0zL+kcLBXqcukIeI9ndaYXmLnGx1k/Kcs8mThJn6IIqDofDbPVrV6JPOA==","signatures":[{"sig":"MEQCIAsRZNZxx00POW9KyBRw9CkMVNIxISxnsjfxDgtIGemJAiADHfNa4ud2vgWyc1hRgj2+hExNjhYcC6faO2jcwJgifg==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":40247,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJggF4ZCRA9TVsSAnZWagAAgcIP/jkLTOGkzbNdWSMqqsZc\n+JFne37VStDDjvcgN7v201f2o5vkKAE7BqiVPnjzluWJkPFF1iQdqq32OvEG\nus7LHhPS8yB41uIfBBC0YaTUbYWwfWnSDHVwKxoTQ+eebH9BC+bO4b+CZp87\nkqTnIr5XBpwWaSbfz/VysETLu+eN9ufeuqjOBcpANv5+059SZU+mVKwRPtKN\nMgT18ULO+Nqs094VHkiXnt2SVaYYuX8F9qWTyYC2i2LRzD16CFE22HND5MiF\n2vflKfu3WFPUwJM+ubOrcAviXQOgYH91/mdG7ChQRPami6+MlPkV6gVzqRMw\n430gyvbPPCg/k7mvT7JnMbY+x0c0OB3+fpl6EFP1tGrPiHCQj0rijjk74By+\nh8Qe6xvyLOBrk4pui9qDDOmJjsCHVUSkhVzTOK9lLvDqSPY59HD3SVQOXDId\nFkvYpfSDI20+oYe5GHOAJEEK7dZ82j5o2zIO7BhT15qFrTC73ZJ/1++Img0k\nF/ED//evtd5q5006hTVUVWBRINxJafBjrHHmX0Y6xagj++9iECbFvrNKNylv\npiiYrRj4kJMuAAyjUCjzAdda1VT3LSFSqQtPf858ggbwvArxwMc6UhYxknKN\nWvtyH3yvA/y+NNVsqzbCna1IQdRjaI8VpncFDNZA1awVAQicO8BtqMpvt9e3\nBfgf\r\n=6tut\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"e73b6f953ab330c90f758d02bd8f796b0ed8b808","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint --typescript lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --typescript --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --typescript --fix"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.3","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.5.39","@balena/jellyfish-logger":"^2.1.28"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^26.6.3","sinon":"^10.0.0","deplint":"^1.1.3","ts-jest":"^26.5.5","typedoc":"^0.20.35","depcheck":"^1.4.0","typescript":"^4.2.4","@types/jest":"^26.0.22","lint-staged":"^10.5.4","@balena/lint":"^5.4.1","@types/sinon":"^10.0.0","@types/semver":"^7.3.4","simple-git-hooks":"^2.3.1","catch-uncommitted":"^1.6.2","@balena/jellycheck":"^0.1.1"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.8_1619025433271_0.25586972845734657","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.9-renovate-non-major-07656af28682916db8ae3fc11a5dc328fd12bcbd":{"name":"@balena/jellyfish-plugin-base","version":"2.1.9-renovate-non-major-07656af28682916db8ae3fc11a5dc328fd12bcbd","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.1.9-renovate-non-major-07656af28682916db8ae3fc11a5dc328fd12bcbd","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"f0553e3189de5587264001d3b60ce7c2812df4d9","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.9-renovate-non-major-07656af28682916db8ae3fc11a5dc328fd12bcbd.tgz","fileCount":18,"integrity":"sha512-7EXpodsKqbvobmupA3UHSiivbT+g3K5tFvsMuhZStu0a77JmkpgLL8z2JBBnt2IQyHU9K7l2hlnNLqV6jPS3VQ==","signatures":[{"sig":"MEUCIBvfgTGHEO+ITT/7IQM1ZY72dBatcDfLtZeDbGF3LCW0AiEAyhZGiMfDXPaCh4FC64RNEwH+1GXoatDIbpoyhp6ubCQ=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":40408,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJggJnnCRA9TVsSAnZWagAAg5gP/RfV2ChDiOT7XG0QaqcN\nq6n53/kftNuxdeMxMedk6SDqeiXrAftIB3P8rG72Kiiki4ugc1eGpWs4nLxm\nOtU5jwFVrbKO1o2PTO0WIUuQa6ui4a1eLEtzNDmEiiXEX0HqDokEoOfX7gvj\npRmfOvM3bVuwW2IUK6KXFWCwy/2OGzHC8zV29WcQ8UnPLbfEisHblMhCsodA\nvsDyByTjKoUXVhtyc1CvzJkGgWwz/QcS4+/3uUSc+uumF7Tr5pY9ZARDmNDI\nAJrr2lDl/u3fqL4LbnIsPbXcXmW+B4EvqRYT9FpBE60wIvm6tJViJJ2b3nlX\nMhM4wubKFuJ+msJL/Olo9F3533YDOksdSH/OwzxfIjIc7dI9xi3Ylvmh/xdP\n8ZeXLJcLzfLMbnrfHWs0pTqJc4LLmo29W4qDTLVXLg3XpIxYSeDDUfEYZicF\n0Q/tOdhdm5HhK39cibUnhthcmsOC+stXyOveyhPuNDCf9aWACO/ciO3qiehl\nubGph5eTTIDMFlnhH3NoOKmOMjiOItG7u1AOg3ZvMSclhXAuXcFtKl1wCAGW\nxTY5kON1IQrPSYEmSmPsgjg3ClFcx7IP/lF390K4nCjeJLV08otB8KHFJlji\noeoAUB5tPwqGNvDHyb+BMcNPY8ihiCMVxWWnkXYON8ZkTIlobV4Y0IG2EK3Q\nw38X\r\n=rEvE\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\n[![Publish Documentation](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml/badge.svg)](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml)\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"07656af28682916db8ae3fc11a5dc328fd12bcbd","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint --typescript lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --typescript --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --typescript --fix"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.3","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.5.41","@balena/jellyfish-logger":"^2.1.28"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^26.6.3","sinon":"^10.0.0","deplint":"^1.1.3","ts-jest":"^26.5.5","typedoc":"^0.20.35","depcheck":"^1.4.0","typescript":"^4.2.4","@types/jest":"^26.0.22","lint-staged":"^10.5.4","@balena/lint":"^5.4.1","@types/sinon":"^10.0.0","@types/semver":"^7.3.4","simple-git-hooks":"^2.3.1","catch-uncommitted":"^1.6.2","@balena/jellycheck":"^0.1.1"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.9-renovate-non-major-07656af28682916db8ae3fc11a5dc328fd12bcbd_1619040742666_0.30873537751399494","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.9":{"name":"@balena/jellyfish-plugin-base","version":"2.1.9","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.1.9","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"3a1cb8ba8dc173a445ef9e6b03fa6deaaad4c98a","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.9.tgz","fileCount":18,"integrity":"sha512-K/PvBruGCO6Jk/l4uSdUmGI/wDWXZhPN1YlgG0Gep/YXvqSGKHPcumJxkB+Dl8BwISko99q9O/INFhxYheW86g==","signatures":[{"sig":"MEQCIDkK7IuLzPgE735GDUnP3JoM1x7ZlVK5adUkgBBIi7DHAiBJ49oVnE9QmRFX7GXMrqx+mvf8Lz8NaXO1mCrDDr8DOg==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":40348,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJggJuSCRA9TVsSAnZWagAABlUP/RFVbpVzSw3Zz7ABmwL1\nhIOWD50o+PcDDFL4uKiLSg1d74ECM2NJ/UhOmDwBuZ+1pKVh3PhKSz/3V32f\nzYHtuZKYDv1bQjCxBNLyy6ss+CuzQXqJ0ZC7u3gd9p48eCuIcMSum0W5HyBZ\nm3GKIDDyeiBWnBHbIXiKSrs+gR4LN6WH4BadxURx6GT/zsqOofcBMl5cfSud\nLEEkeLVkQWn8uiY5sKeueqQrKh46njxZ7D7TSfksu5dBXSTBLrKtiOxkrFSB\no3Pk07RXyLpWuTVkbHG76cEZCJa0x40uT2WsLMoyG1BugcMKofFdc3NWrPNV\nZAAbSqFcQxHOtKe7d8MTsAyHgTLaC6vmM2UxJ2OLa0+WV3JJjOzbhh8sJ77f\nFRFVn7I9cJrz81xiA5DdycpV90DREQ1X8gv0a5H1SmQLpRrYI5JGlf7taSb9\nV+H7lDAeSr951hN6XlIyifrNt59yRXtqWYmOq/YQZJU5Hgx91sOAjW83Mxef\nRucZdkzkEULzMNPvzG+mko53CFJOvCqekIOdllmyhbLA+qWVRYeMvJCRrMm5\nMJJx+8CeJESQEccsY23xcz4YQNhAzVK1XvuR2nyj2zvKmg2+7iJAXJHZgQaK\n9jt8zCdPH/L6VjjtqHUqHRokiKeK6TGr87mh7DC60eVGRXLyV+nXN0Og0qAq\nOLUI\r\n=SBtJ\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"76b4598e0ce1da22ea0259e69933fccf4749aff8","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint --typescript lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --typescript --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --typescript --fix"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.3","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.5.41","@balena/jellyfish-logger":"^2.1.28"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^26.6.3","sinon":"^10.0.0","deplint":"^1.1.3","ts-jest":"^26.5.5","typedoc":"^0.20.35","depcheck":"^1.4.0","typescript":"^4.2.4","@types/jest":"^26.0.22","lint-staged":"^10.5.4","@balena/lint":"^5.4.1","@types/sinon":"^10.0.0","@types/semver":"^7.3.4","simple-git-hooks":"^2.3.1","catch-uncommitted":"^1.6.2","@balena/jellycheck":"^0.1.1"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.9_1619041170088_0.7966150574053845","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.10-renovate-non-major-a8169b9339b1ea15568091f7a35fb9c24c39464b":{"name":"@balena/jellyfish-plugin-base","version":"2.1.10-renovate-non-major-a8169b9339b1ea15568091f7a35fb9c24c39464b","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.1.10-renovate-non-major-a8169b9339b1ea15568091f7a35fb9c24c39464b","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"31525b7916765e731db166187a845a676bfd9686","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.10-renovate-non-major-a8169b9339b1ea15568091f7a35fb9c24c39464b.tgz","fileCount":18,"integrity":"sha512-WgCln6KN9ViB4+jzKd7QS+Fsih+YhpqlykyS1l7Tg9xLKh7q4fM22Q24f5hHDnNfJ7gBvzfelk2hCFTFwL2fOw==","signatures":[{"sig":"MEUCIQDRDt4PF50AMywxwK0eyNBleItKFSqe6WbvCY2kVSR68AIgNFRx9GvBJEwwDl3drx2F55U2g6QPcsBzWJwbJD5JrkM=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":40511,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJggikzCRA9TVsSAnZWagAAdpIP/RNZp0AGYy9XFlsvgffv\nhP6bXOjKALt5DR/eaxU/6GUgaSz4cjDhIeCCFUBlJj0dt8eLa5tsgLjtGb3y\nniqcGXg+S7xA2vqIpeuTypqR6L5p4AYVBP038AG+TNhky88shbHJpvW3nkl7\nSdf37Sd/EC0XIj5U0NauODK9fI56+enMkoxI//93V2qQaNjMHKQ7zmVQTsp3\nVDt6L4zkpYtjY5N2yKVaHgiT9bFudoC2AGWLcAMV/eE/I/innwlTXgbT1oSZ\nh0kaW3ckqsNmQgpfbqYg3ixU5lRc9ZAy9Ci92PjQLLC9f1us38VHjKVY4hek\nG0r5F9DH3geGCTFy14RBqhK3YRGAZ/6V5BpsB+7ioDw0aldGXYWbTdMBYL4+\nL0RfAvptN/OarvtDpNJkk5kOPitf25szfKFJjMQel5hPQxL/nARc9CRPypy6\nDGwFC4teb0/vmH5CUW5pdgk/5IF/zMi4W5nVlCCCoEJSBhFZO11HC7c+V85u\nTKjabWKrqupjIVHIyk2F8hVYYwn7F3Fy6+Tu6RD3UZ4HzAwh7P8L/cyv01Nt\nUTnQJI0Grb2YvsVBMzyA5y0I3Dm/+pSaa7hcZwhBB3mUeLtGzw5hU6kz0WmZ\n5VXHE+Tt53t9dGADIoTvEzA+c44h5LaGjYasMOLttvcyx5R7re9WHO+BZyi/\nklBO\r\n=M0an\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\n[![Publish Documentation](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml/badge.svg)](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml)\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"a8169b9339b1ea15568091f7a35fb9c24c39464b","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint --typescript lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --typescript --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --typescript --fix"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.3","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.5.42","@balena/jellyfish-logger":"^2.1.28"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^26.6.3","sinon":"^10.0.0","deplint":"^1.1.3","ts-jest":"^26.5.5","typedoc":"^0.20.35","depcheck":"^1.4.0","typescript":"^4.2.4","@types/jest":"^26.0.22","lint-staged":"^10.5.4","@balena/lint":"^5.4.1","@types/sinon":"^10.0.0","@types/semver":"^7.3.4","simple-git-hooks":"^2.3.1","catch-uncommitted":"^1.6.2","@balena/jellycheck":"^0.1.1"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.10-renovate-non-major-a8169b9339b1ea15568091f7a35fb9c24c39464b_1619142963006_0.7464574795729813","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.10":{"name":"@balena/jellyfish-plugin-base","version":"2.1.10","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.1.10","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"561a274802c2b112d33f5cebc488da895a5c416f","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.10.tgz","fileCount":18,"integrity":"sha512-o7smuNAWGZ9ycTsXbLosG01nlH5vcnMC1J9FbVZ4cE60MTID2/4UiOFpqYmQB2fuUmrYNZka/CMJLY/uG4P0ug==","signatures":[{"sig":"MEUCIEYkRTEdxaaShoeIzPTkY7+CseFiG0rQS/74Yl28SqO0AiEArNNED4KG84so3AxhAXZ+PpMuq2+9qMMUjiFrNlqiA7M=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":40451,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJggioYCRA9TVsSAnZWagAAEU8QAJhrjm02UqlK29U+rEFx\nUjRl4PJ7C3hQzY9eq3F9augJFZAEkUv6ojVD/5qEAQrpbNPUFqT4EbTxzrty\nmJZ4uySxMu5q9bU4XAjK/1MdAnDj7FNEQuj56x6ewYS3VCJC05deL0Tue0x/\nDNZaY4Moo2nLBx4biFbQbgGWX6XqEbdO3rvCiqGOrnaRmQWDIAowXwFQOaQY\nvgItaHmCFPEqX4NR/uMTDJiMdtqHwr+uEyMyiYHYKZ5Cu4wRY9PrXN0/KXY8\nvIigyO2zkmHff3uZxn2gdmzzjcHxSXA8CPRONbkdRlEzgFchXe7Qony28LV9\naCOJND669MUdGW5t9vOPU6BxNX3Bl30yBZ105Q9jFPPqS36uhyylAtCh2Gjc\nsJYIG3Xu08neW8lRBHkvwCXcxLpc8GNrEzWftx1B93+KlL3DtKkhPgeB6T1Z\nu42fuFhjMoe+sB6iAtOBEgXRgaVBZO/MKPz8ep9uOfJwfsaw3ob9GRf+qns/\nqh2x6QmIkyOn/Tym3zXh5EWFW/HWj5xH17LQRTfEJGfgJaBs7SR23/45bjLk\nRhsNnRv6Kv4d5hbh8JwLXBHv6htZoJrGGvnFDMQ9tzcgeelDUg/7VR6n0W2R\n4eC2quApDdIbvJo4AataZAIZZzTBNBYKF2ZjPxD6RFsMPi+QXlIC1hR8pHnE\nlDgJ\r\n=y0G8\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"0ad4f465aa6e8ef5c9189bc8b7130053d9b7c4de","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint --typescript lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --typescript --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --typescript --fix"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.3","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.5.42","@balena/jellyfish-logger":"^2.1.28"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^26.6.3","sinon":"^10.0.0","deplint":"^1.1.3","ts-jest":"^26.5.5","typedoc":"^0.20.35","depcheck":"^1.4.0","typescript":"^4.2.4","@types/jest":"^26.0.22","lint-staged":"^10.5.4","@balena/lint":"^5.4.1","@types/sinon":"^10.0.0","@types/semver":"^7.3.4","simple-git-hooks":"^2.3.1","catch-uncommitted":"^1.6.2","@balena/jellycheck":"^0.1.1"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.10_1619143192104_0.992011123535733","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.11-renovate-non-major-56a12e51aa07e2917448fa1849dcadcb8cf02832":{"name":"@balena/jellyfish-plugin-base","version":"2.1.11-renovate-non-major-56a12e51aa07e2917448fa1849dcadcb8cf02832","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.1.11-renovate-non-major-56a12e51aa07e2917448fa1849dcadcb8cf02832","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"f964dbb2f2b2ccd1a6d716993688276d25fdbb35","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.11-renovate-non-major-56a12e51aa07e2917448fa1849dcadcb8cf02832.tgz","fileCount":18,"integrity":"sha512-5hxPB1VGVRDHEVMaxwHJW3LKfF0Fxf0kvXVeQZrCAV3nLHPu7Qpb8b0+i1Fnsuq2ncH5YOtVfkFEW7ef7Vl25w==","signatures":[{"sig":"MEQCICgYMU9blncYjvygNiOsFojEoe0NmQChCLAO+JGnaBJJAiASY2Z+y1WWuDFzNZSSYz+tllDzVvFhol8ZJjjUJjOToQ==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":40598,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJggkRhCRA9TVsSAnZWagAASd8P/iU5W0dc4/oB4CdvQHp1\npy0+j1KP+qyYSEIUgAjTFVnJD8S2KsLhFonXQYhejG3Zofh7ubDAIRFgmQZ4\nfbaRtBiNxlddHZel7W81dDrepbkNIeeH0HDt1vunMnVm3o8c1FAaRv/7EpZm\n1euyKXWCcl/ngbVuHgZaMzpIbzFSVKUW911Z41QXnlNCbvu290NZ6ZmSP4/w\n2aDIGPeuqavJ2DsSFLhqSyMSpa8fPBF+fe9Xp2TGjrxP8uQG1uy0l7IFiZK8\nJ7TPAywHwHzDpqgnjeG17QEGqmaP+DV9a8p8ElELkjdah4NVJEabQzvCSCS5\n0AhQIymNGKYJP9o6YrGNDzp1yyEUksqNSzRofq2+b/91KxCBK2jmvhuwEQvp\n3eNxBPRaEnvCRB3ugA2kyM1iId7t9o16a6VATb0D/yN2eEuSELA8S3YLvLck\nXCjhbDRuZe/u6c5hJCR4xzEqMZTpAxoASa9s6x+7UIdIZ1EekIkVT5FU+mSY\nOoseCG+n0U1GLr9XBF8FUYwII1j+yYzlyYF8YxvLxL4UYTqQ00Tyg+sFTrnm\nBTSmHnbhuPQWEQLymnpMNuWiySJ07Fj2Xd0qtindOv3ARLqm+No0xo2HE+92\nnMk0+y6M/rP22QqzmPnWlFZiNufnxaxhtejahxYM6zaxdpwej+bVU0TFw4ya\n6tI1\r\n=7rmw\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\n[![Publish Documentation](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml/badge.svg)](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml)\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"56a12e51aa07e2917448fa1849dcadcb8cf02832","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint --typescript lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --typescript --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --typescript --fix"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.3","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.5.42","@balena/jellyfish-logger":"^2.1.28"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^26.6.3","sinon":"^10.0.0","deplint":"^1.1.3","ts-jest":"^26.5.5","typedoc":"^0.20.36","depcheck":"^1.4.0","typescript":"^4.2.4","@types/jest":"^26.0.22","lint-staged":"^10.5.4","@balena/lint":"^5.4.1","@types/sinon":"^10.0.0","@types/semver":"^7.3.4","simple-git-hooks":"^2.3.1","catch-uncommitted":"^1.6.2","@balena/jellycheck":"^0.1.1"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.11-renovate-non-major-56a12e51aa07e2917448fa1849dcadcb8cf02832_1619149921176_0.7411696210126986","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.11":{"name":"@balena/jellyfish-plugin-base","version":"2.1.11","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.1.11","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"cc8d216a6c0ad67cb4f5de00ae0a6492a1481a8d","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.11.tgz","fileCount":18,"integrity":"sha512-KsAtt8jsN1bBUGXE1vdPwGvaIXaTOxdrVzWpQKXjs+Kfv4B3JwZlADPoriWafNOaS3EowBD+DMvzC3ugXrD2ig==","signatures":[{"sig":"MEUCIEjBMkLRNsJ8MaVOo6cZRv6mBVdDuOV6C5x4oyzuNo86AiEA2bnD0M+FO7lMDjg2YOMtb6Ok28zQ/JjkIfyn+hvuN20=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":40538,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJggkVgCRA9TVsSAnZWagAA8VwP/1TPD0CKUq8TUq59k17c\nJrQxyw79wUuXS7dp6SubQfHHf7Rs6zQ2HiaBL61eoAB5gYuZtGOy6SkUZ5yV\nzLAXp5Mh6FHFOcKKm293CdHLOizoSZaa67b4YqAk9kadZmNwVeJ/BwXC5K88\niPzuPKFyFXfB8cePIb0BhezpKtwBg54EpwFJyPuX2VvD6+VuIDZ3rmM6o4y/\nAXOAIARfwA9JfnWcTqnkdhWryxu/Ud+YeY9uXdViyfNZO5bnjsYSZASUvNUa\n85eT+pTXUCa8OloTuyv/ZB983QzJ5Fpvj4Z/sIlwwnNWSD94kJD5syG3x0vP\nvrWm9XwdoKLEB5guF0njqkaYlLidODNPlfZpWCu3sACxB/pEK5Q/IxmhAoXE\n0A7LO8YZ6paQRviIPpbtD2P9lkSZI71xKKXe80qgnES7wfp0pbSdzarDc8YG\nwX8E4cBnqLnNdFIalctdVXuf29mb5A4DYNpeFfgXd43CaR1W181HMwNMGGYU\n6vnqUd+/ESgKJMxqvTlxEehKA4bHCoymNGCxxpsxxAKjyAYzwpHPe0/8Vv9S\nm67UgA5boGrq77d9OjmtPOJkHoe/H/PPB8dXx+6IRX9eB2etEBBK6GsKHanI\nac5KzpnReTLGTRxUHsAMTtxpIp+ti+PbEMuOI5r5Ug8vzZVvgN4NmqPTCEHd\nQG94\r\n=u5Su\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"78d66330dcf465fc01ce334e4636f0be41918289","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint --typescript lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --typescript --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --typescript --fix"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.3","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.5.42","@balena/jellyfish-logger":"^2.1.28"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^26.6.3","sinon":"^10.0.0","deplint":"^1.1.3","ts-jest":"^26.5.5","typedoc":"^0.20.36","depcheck":"^1.4.0","typescript":"^4.2.4","@types/jest":"^26.0.22","lint-staged":"^10.5.4","@balena/lint":"^5.4.1","@types/sinon":"^10.0.0","@types/semver":"^7.3.4","simple-git-hooks":"^2.3.1","catch-uncommitted":"^1.6.2","@balena/jellycheck":"^0.1.1"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.11_1619150175592_0.35472331397873136","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.12-renovate-non-major-51da57c5f8c1a89a5560e91ef24b2713e7b84858":{"name":"@balena/jellyfish-plugin-base","version":"2.1.12-renovate-non-major-51da57c5f8c1a89a5560e91ef24b2713e7b84858","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.1.12-renovate-non-major-51da57c5f8c1a89a5560e91ef24b2713e7b84858","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"9bfb44dbdda2c8e5069b8f6d2b21e2fc3c686c65","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.12-renovate-non-major-51da57c5f8c1a89a5560e91ef24b2713e7b84858.tgz","fileCount":18,"integrity":"sha512-psSXi9TiEPC4alduWkTDniMOJPJ3I6kjFlkDqxrBRxMTq4QrzJDV4Law8qtMmaruWJ8Kece84ngZ48cJramS3A==","signatures":[{"sig":"MEUCID6aSCq2oFIv8fnYWpo3bLC39Q54otYBV0iR3tqIlSBEAiEA+CvT8Yh5bUkOsRbDZ5ZU/N8+2rk4GPaLLX4gm7pGmDQ=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":40664,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJggq0QCRA9TVsSAnZWagAA6kkP/2hEs5yM3+ISoio7zGB4\nQg7izawszdhw++FNjLYS/d2yx6SC/qhRLbaU1aH1HxBadq+3CgGI02dXkySF\nJT1+ux5sw2++kjS1KawPBMNRFs/TfTFkQSlAqYqw4l8uC+fb8Vw1coXq1xlG\n8lS9ZvnMsZYxgw/PEsnf0viFvmLr5JUVWN8n9uxhV4IjNbnRwdg6y+O1QOWJ\nPKm30D2CpLZnowJ26w1VdhKAsy4UfBzPIXdmyPJVJk/NCkwj1Ysptu0o9u6F\nHk5XIDMF5054qiihiQhpEHENsh0cqCgY6rsUq7FGsON0ZMoa8rhD1q8b/qoM\nVeL04nUDiOxX1XlWDOiSgcIRSpdOtSRBexHbuoiZFymqA6Bn9PF5At8m5AyX\nPw+AdYhC0QoujRcU0XAP7OWqL1Ast1H+/cywwRm5Y21a9dypgpv6/Ya2PhNu\nyvrdWdsnBuyXooB9uholEOQ5rFlYmNnKRn1u/3ipTvjBEr1SGhz0KiP3/3SP\nd3jm0J58ruj8T63cInTnzX/ysPJ8OHRVfSkqFnd5z3QVauh5ISFjEjaLsTNr\nTHt3Pkz27h03Y7PAri/d5gELuxRRd3zbW7Kopie0EuSqzCqBIkeaUOlJ2vAs\nbeMOcDv2/v6P32ArbLj/Bt4BfwhLazr9fQeDljWaTspXNJQA51jhz8P54xl9\nzJ3P\r\n=sVfQ\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\n[![Publish Documentation](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml/badge.svg)](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml)\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"51da57c5f8c1a89a5560e91ef24b2713e7b84858","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint --typescript lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --typescript --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --typescript --fix"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.3","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.5.44","@balena/jellyfish-logger":"^2.1.29"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^26.6.3","sinon":"^10.0.0","deplint":"^1.1.3","ts-jest":"^26.5.5","typedoc":"^0.20.36","depcheck":"^1.4.0","typescript":"^4.2.4","@types/jest":"^26.0.22","lint-staged":"^10.5.4","@balena/lint":"^5.4.1","@types/sinon":"^10.0.0","@types/semver":"^7.3.4","simple-git-hooks":"^2.3.1","catch-uncommitted":"^1.6.2","@balena/jellycheck":"^0.1.1"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.12-renovate-non-major-51da57c5f8c1a89a5560e91ef24b2713e7b84858_1619176719830_0.6837094071589311","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.12-renovate-non-major-15f0311c8d86c926d35c3475a1f8e98b60f77833":{"name":"@balena/jellyfish-plugin-base","version":"2.1.12-renovate-non-major-15f0311c8d86c926d35c3475a1f8e98b60f77833","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.1.12-renovate-non-major-15f0311c8d86c926d35c3475a1f8e98b60f77833","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"836581a25ffe59725090ea2cf662262caf9be376","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.12-renovate-non-major-15f0311c8d86c926d35c3475a1f8e98b60f77833.tgz","fileCount":18,"integrity":"sha512-cZX9Uh9pOn8zoiqnpH6AG7BXBEqpkqGX3A7TVxaDG3VdZe74r3bidRjLt2bHkENySNs7hnonf7jhmaHvxHVXVg==","signatures":[{"sig":"MEUCIQDT07s0WSm13zoetOPFf+yDZ/6bG6iRdq8PfgpuUwdRRwIgLxm6vWhm5BAigUobQXvbFr2idgJYOmGR/jv8z6Iy48Q=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":40664,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJggq4uCRA9TVsSAnZWagAA+vIP/0ITY53uy30QQywsHell\nSYxOJ00s8JX8x+sBqJ+RhT8um8Hs+Tn8z0UkBSeAo48Tb1u5erEQyeSff9L4\nOm3EyVm3B7IiI5pobOmiJSwi33Z/Odp29SySsIBHCpTFfXT1T5RJVDCyB0qG\nS3SDvkZou4kCGZWx81UVtUvA3kuVoJ9nmrjKOSgUFmL1fyXCEdepBStUcYfk\nVuUVZ0GlkZusTYg4+XquuyD8D98z0BDWcVwww7qM+XKauSFie+Xp87vaZ+HQ\ngWRPfNivIIg/Sf3eG4zZP0iGaVV+2eMSf9l9/Jm/1OdzzCKoTMKdfxz6eNK4\nF2jRDtA2b6f2bhU2+F1dNPQN4qCgwOFwgoy3sOFSEbKH6TXhcK3xQdMrxh3F\nRTfsURFDoY1ScbN77OwwjTE1fE7nXe8VJqsHMYgnSkPGNTLfrbnY5fgEdyTu\njYIZdcTdukoWREWqyaSJSXwjiKo1RuYQvnVQABi3TdsS/fuc3j6YPHsXiJ29\n6xBN8D2FS/+iR0wM4qXZLmRbgkU+c6LQcQIXf3KEfuh4tpu4v7UmZyK7IUzd\nWSGB213VJFL7DlcYtM5dJ9WSjWeO7f90C5vqXVWvSUZBKqY6iFRoNhhsFGD6\nOrDXQ0qB2UKZqQqi2lTQBogPyon0hBbf1OCgQT3FYzLhfP9ZBicYJv2aOMPF\nHJap\r\n=NMJH\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\n[![Publish Documentation](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml/badge.svg)](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml)\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"15f0311c8d86c926d35c3475a1f8e98b60f77833","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint --typescript lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --typescript --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --typescript --fix"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.3","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.5.44","@balena/jellyfish-logger":"^2.1.30"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^26.6.3","sinon":"^10.0.0","deplint":"^1.1.3","ts-jest":"^26.5.5","typedoc":"^0.20.36","depcheck":"^1.4.0","typescript":"^4.2.4","@types/jest":"^26.0.22","lint-staged":"^10.5.4","@balena/lint":"^5.4.1","@types/sinon":"^10.0.0","@types/semver":"^7.3.4","simple-git-hooks":"^2.3.1","catch-uncommitted":"^1.6.2","@balena/jellycheck":"^0.1.1"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.12-renovate-non-major-15f0311c8d86c926d35c3475a1f8e98b60f77833_1619177005770_0.5043638138693043","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.12":{"name":"@balena/jellyfish-plugin-base","version":"2.1.12","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.1.12","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"186ccdeb93aac0b570d999c699df9c55af991796","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.12.tgz","fileCount":18,"integrity":"sha512-8J1fyTAofthiDpDIFLnhJas2Un6dA/ZssS1i/RqPNxefowtGclwbb98p34Ep1aE9EXBIs5FSij4YFBgnC36TOQ==","signatures":[{"sig":"MEUCIGAz+cB2MgOdQNRe6W/AIsJkccPaS5qENe82k2JWF3LjAiEAwIr+bKxQyi4At/69xn99GvihJ/CjklRMF/DETlov7xQ=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":40604,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJggq8RCRA9TVsSAnZWagAAo3QQAIG3zHn82wR0ibFonCTj\nfIlr9xBF9O+N06A+8Z9Ephs7bGhLpGTf2UOT7g/citmFmb2Nsiomc9ZJ6Kat\niS7Zo4uao130jG0IMDw75z+/fEaTf4vN6YhYPi58aTkaLKmdP2ex2NQ1ufh+\n+8cExYEZFSwZOMkKqpHZe+PLsSq4o072ASCwoRUfRRVGMHf/gEzrmzRC3ZAj\noVPWY6NCwwcecEZfaf98xp0NxcFVGaBm6DbPyhvOOaae5050JW0/Z1iomO/t\n5PM2N9U66E6AjYJlpjuQwNI138Eb+V2M7vI96OOnXh/zCozzqyV9caqsRB+6\nKZ9GvxG75nzoK4yUVD8zFHrIPorDjUftiShEEqZtcXrjHaEAbdOFeVmzK3im\nxY29ca6MFnnm+xmetp8EW3Z1Gjli5Y3PqfKsEj0w/zNxXNyHgosmtmejmNXW\nv44Z1Hgo5FKmmjQXJJT+ps4aEtappp+8P2f+jtY+TZ6h7FI+u427HOebyLJX\nryLWGXs7F/6fZg2GaxnnJ4qqewow016yu1AQKMVH3cgdlXDVqlc0Ry16q4qV\nRQ9Lq6U1d0t9zximj63zi/7Agn2WdkfudKBVQAmKGWvZvbCMDp+kNJmwexkF\nzLxZM2RmBtHofSkoIrfzZsJlEdSD+XfW5iD2cBluCwmVmstdeWsx/15QCe99\ncP+2\r\n=dJh2\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"ba0b958418c63193dcf7faac1a1f31a0798c357d","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint --typescript lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --typescript --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --typescript --fix"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.3","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.5.44","@balena/jellyfish-logger":"^2.1.30"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^26.6.3","sinon":"^10.0.0","deplint":"^1.1.3","ts-jest":"^26.5.5","typedoc":"^0.20.36","depcheck":"^1.4.0","typescript":"^4.2.4","@types/jest":"^26.0.22","lint-staged":"^10.5.4","@balena/lint":"^5.4.1","@types/sinon":"^10.0.0","@types/semver":"^7.3.4","simple-git-hooks":"^2.3.1","catch-uncommitted":"^1.6.2","@balena/jellycheck":"^0.1.1"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.12_1619177232686_0.9669291425941131","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.13-renovate-non-major-350b348e83e340f6f434d9997b0dca62b1422624":{"name":"@balena/jellyfish-plugin-base","version":"2.1.13-renovate-non-major-350b348e83e340f6f434d9997b0dca62b1422624","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.1.13-renovate-non-major-350b348e83e340f6f434d9997b0dca62b1422624","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"b8fb23fffcb1e0590621cb7d2f2a6ba77376d886","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.13-renovate-non-major-350b348e83e340f6f434d9997b0dca62b1422624.tgz","fileCount":18,"integrity":"sha512-SETtablGa0FMU8V/HZKRtxjxxK7j0pfLpwVgHsniXN2GpIYXrKjmxrryEYExmtim5ycnHZaO/ruIjtRGpLTaCQ==","signatures":[{"sig":"MEYCIQCGaNa+sEE+If8n2N9ZlwFNrYQiXOVHTqGqiWKyVmmsDgIhAJVJwPPrnr0eisjNlYvnCyurMazGlMqMWgPY8O6MDZLl","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":40766,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJggtOTCRA9TVsSAnZWagAAQEMP/3TtCp/yvs6bwa2on9x+\nEJigEkDQHDk9Hinm2CNiRMB2j+k8neOflGSv9hIoTL9IrJ4mj99bxYIdmvBO\nwRKu+kLn1cIF/i7f7IB1JXmVpV9ec0+iasHp8rSHECkzz/USKN16K1ZCc35l\nZovKBUJY4aIIuyirnKf2sUgFBmQaSkj7mtKnl7VXj0SOYbWEqSChlR7eELQd\nGK/svxhXAi18WEpiD2VVkn07viVIxoBkdys/RfgLzUTIk+KGIpP6bWnibMfR\n/PMa/mpKluNZtprLNQIkF60rPX3uQEQrvyMi8Ynbx3UEFSUWIT1fPtKnimiR\nmP+Moe/i8it7yubXqCdOSJJCeFBT+GCYhAxrqO82wFSChXFZeKFoMuqOTJT1\nKvIqJfkz1HWiHZGHYCjU3yf2DCHNN02Lzr71KYr/qSYzrS1KqlXKqj/LYLcO\nofDw6fk7uXG2/qiuR9Ismt8jA7ySVbAtZv8C/j0vp5evB4u3SbViE6p3s+Gk\nvNOgNtyhgpbJ08tI1xetln94ygd0FHjpeweoCCIqbq4e+Phv6OY3Cmpsm/y1\ndIp1pRAvuTMwgaFp2YryQdzsxLoVaMcxzy9qzwGNQwwzl1/Wl+oYeS+UuIPT\n9cAN51/mHmrv/aM2tIUm8Bc1Bp5AOvijl0+PY+a4uOBbjeJdKDIoi8mMmJpT\nah8V\r\n=cgNz\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\n[![Publish Documentation](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml/badge.svg)](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml)\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"350b348e83e340f6f434d9997b0dca62b1422624","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint --typescript lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --typescript --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --typescript --fix"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.3","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.5.45","@balena/jellyfish-logger":"^2.1.30"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^26.6.3","sinon":"^10.0.0","deplint":"^1.1.3","ts-jest":"^26.5.5","typedoc":"^0.20.36","depcheck":"^1.4.0","typescript":"^4.2.4","@types/jest":"^26.0.22","lint-staged":"^10.5.4","@balena/lint":"^5.4.1","@types/sinon":"^10.0.0","@types/semver":"^7.3.4","simple-git-hooks":"^2.3.1","catch-uncommitted":"^1.6.2","@balena/jellycheck":"^0.1.1"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.13-renovate-non-major-350b348e83e340f6f434d9997b0dca62b1422624_1619186578660_0.5704556452006262","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.13":{"name":"@balena/jellyfish-plugin-base","version":"2.1.13","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.1.13","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"62c93aa9605e8de3756ded10293da389c765c639","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.13.tgz","fileCount":18,"integrity":"sha512-ojoqCxl/DGQ3t31q9vBoG2EEOh8ZROYhvWltjBI2JHzjfMS3PitBg+gjTf6WVoCx6BkCfh3QyGiVhaIxG0UHmA==","signatures":[{"sig":"MEYCIQCd1X9//3a4h6s2V0gEA64zpSe9qn3aYwjkO6ioM47MmAIhAMlkgJktOxHRDOGHMhIin1oVfQbTDbvMcuHP9uH0Puhi","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":40706,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJggtSCCRA9TVsSAnZWagAAtdwP/07PMpdAJIIp3FdpoXpD\nv8E5IZiwYYgmdnW39YeZdiJ9G4t+Ypjee/zued16HsKdl+Ib4YaurOgGKBS3\nXiNqip/3wgQud3+zrtxl1iTH1zmzKGlPbebld6soKOg0TBlqXTZgOvHtj/JL\nNgXeaLlBpp8KL9wqubpbeoMVg3gh4PpIaoxGpUPvX4fMddfVx9pwxUuYEEGY\n3FNEoBBa2WJOCu3UkR2Nv5+yCH8bXdZkBp1TKPUeieisl6q1cAIA/tBxB1pw\nRxzfHesQ5GBlWsnGPbG/SQSy6/fpW+U10KV7UfgXsrRrkl//9xantCUfB14M\nOX8x+JjaM9bj96EvE2NhYOa3w3VBWwa58qdavIPXnnvfmN5LJHioYgSANfit\nPUVCgMS/4aexkCK8gD+92SxRRQ4vqvS6l6wPID+UZiz+/aGYh4PmBDNeLZsq\nUd7FFcRxxNnT4decohOycSssdr5S98ARMFlqvgM590HShLPoprF7Ci1/0tog\nWJpvd84DzdJiqkVyWiFVjbjnnHK2qOVyNyms5TJg/RuYkuESXI7Pue9smiTj\nA/y5l7+FEOOwv5mOt7bHrEZHPHoxUiYaRh8ySPdpIKMoWhNWADirSTt6Fx50\n4W2pXxOKLYsNTae5Wj3KzeZFUC7hVb1qTjgpqFZ9nEqfAoHgeGW/JDTxPAfX\n6W5b\r\n=k8xy\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"18634415fd0bc3035e462abf46a4e1c79027f409","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint --typescript lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --typescript --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --typescript --fix"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.3","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.5.45","@balena/jellyfish-logger":"^2.1.30"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^26.6.3","sinon":"^10.0.0","deplint":"^1.1.3","ts-jest":"^26.5.5","typedoc":"^0.20.36","depcheck":"^1.4.0","typescript":"^4.2.4","@types/jest":"^26.0.22","lint-staged":"^10.5.4","@balena/lint":"^5.4.1","@types/sinon":"^10.0.0","@types/semver":"^7.3.4","simple-git-hooks":"^2.3.1","catch-uncommitted":"^1.6.2","@balena/jellycheck":"^0.1.1"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.13_1619186817984_0.31575592101511907","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.14-renovate-non-major-3ed8519909e23ba1f0f48546490806731eef44d5":{"name":"@balena/jellyfish-plugin-base","version":"2.1.14-renovate-non-major-3ed8519909e23ba1f0f48546490806731eef44d5","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.1.14-renovate-non-major-3ed8519909e23ba1f0f48546490806731eef44d5","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"88dc21c8dd660de1168316e8e9a59a212077316d","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.14-renovate-non-major-3ed8519909e23ba1f0f48546490806731eef44d5.tgz","fileCount":18,"integrity":"sha512-4ZRLc6Mkk7sbbCM6s7Def6J5HLeGFw7aUeGprWW5bwYoIlIf4X3P03Ia1MWuttLiT2iCBtEE6phnSS6QTBGAJw==","signatures":[{"sig":"MEUCIEDZoe8VOwwk8+fJrImVXJ96ex86xkdynelaMyEVir3HAiEA8okqH+7EVhm4DjimGdogq5Ky49z7/t79657piPCio3Y=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":40832,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJggyM3CRA9TVsSAnZWagAA6okP/2vYdzHMwHh5WO1UrdtK\nVBKRNj/DJoiABAtRdbuoO8fFHykmfZOk+mqzvsmfoo/7n5cWNDFfgHgWN0ka\n4KxPOhrO87ZUwQpny2SwFRSYjeTQCC9Z5DhfxJofDLtTSFvfcTA1UEQF+ST1\nX9wIRVcfbqlbTZWxUos1kSb9RG0xmYJy42KlHqgLojaMEQwKnNVZ411pWnJm\nlB/NWNZDqNy/3NheiQv1jVTocFxDoxnoRpuZeFnWpse7e9pCvlNWYqwa5mpd\ng+tJJRne2rhsY8Q/7HiNCSl7eo1YkirLvBFpUJ/R0NikZYQlDL8yEqFUukL8\ndNW4vbuBl371Ki5Hiv7UxyUBHtGDvslgXfj4aCH6o9q7r9cVSaNOz6UFT+mK\nWqPYo4jodSo9W+9HIPhNdwjDsBXYxJGW9v43RIZQQjvpllmYuiFFx8VgM/gK\nEFmtP6r7NO2NzXthN5aUG+nPby9UhnFWKjUV7tUTAAB+FnULBDAI7GDlvVgx\ngRlhzpTinpJ1zvQD2lsbs+7j0d5LVh+b6elKIMikFdnGmoxpqUnczQTnWtDl\n8f+A2BlLU4+AUm0FX2dqUPSAPwmlJojEiVmwaJ9lmgkqPvh5eBtoIOPKD3m6\nCW50Dqd/5bXfOP2KOB+bG7XpOuZeHgs2U8IwUhAydFPM0ZCZ68v+viusfhlg\nPHSZ\r\n=1V7Z\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\n[![Publish Documentation](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml/badge.svg)](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml)\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"3ed8519909e23ba1f0f48546490806731eef44d5","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint --typescript lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --typescript --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --typescript --fix"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.3","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.5.46","@balena/jellyfish-logger":"^2.1.31"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^26.6.3","sinon":"^10.0.0","deplint":"^1.1.3","ts-jest":"^26.5.5","typedoc":"^0.20.36","depcheck":"^1.4.0","typescript":"^4.2.4","@types/jest":"^26.0.22","lint-staged":"^10.5.4","@balena/lint":"^5.4.1","@types/sinon":"^10.0.0","@types/semver":"^7.3.4","simple-git-hooks":"^2.3.1","catch-uncommitted":"^1.6.2","@balena/jellycheck":"^0.1.1"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.14-renovate-non-major-3ed8519909e23ba1f0f48546490806731eef44d5_1619206967284_0.4275494977404972","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.14":{"name":"@balena/jellyfish-plugin-base","version":"2.1.14","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.1.14","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"b7eeb4ad03b30f888778f377b95437362bbdac21","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.14.tgz","fileCount":18,"integrity":"sha512-Wx7RQVFazQXoAhhxMIGx70UJe/F7gn6ung+FNCU68VyoaWIA77C8rW9+e4BJwUC9GND4je+2SswvcNsU4mVekg==","signatures":[{"sig":"MEYCIQDo5uzpW8jl7rsAPRQuwf3ma1C/A0nCSrgWUUgO3QpTHQIhALlpNT4oR3v414OCwUCcHtevrcmA4v/GybfmaOc6xme/","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":40772,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJggyQACRA9TVsSAnZWagAAIHQP/0VZ1bAxi+NOQm+112oK\niuy58ECRsAR2CdjKyj9cEmNYiXb/8X1EaYXjcjYMDIdYB44CDIoJIp5XLiuL\n47yYy2/WWFCVZdMdg1A+DBwH6jYbYrWWbEPoMo/iLxeefd+F0HMSQvXM5Ubq\nYoQPzlJdCca8ZSAcwym0Wp4Qveg5096XtFY3xq4Q9hWwWhtmb+J610Th/Ii7\nYX4k/3jDMviq1ET1csqMLL5rjSv//JXcU8Oz9AkaQcWzUAxUrb3M4uZsDg27\nrXJLBq/wfsdXoW3ygWc77tpLyckWLrNq8UJngrTuvxOcI5eMN0l7EvNTKga3\n8lYcT8jwTjnHWBO+jm/N8CiqVyX7veDWv9yQ1zIuXa22hevgrZL5Yatj165F\nmTs+lxf2abViEIyCZt4+HXpzxQK//6rYb7QynkGaGp6QhEoRHjeK7BwsumpR\n2oBsjoSFUFmujMLF9+zZNv/RQnLCfbi4OvdbcRa54f+e3LH/7jpujrCZtB/H\n+pyv4cAQE31ubktISWs9AY+x8sxsO+/HVSN/QrVWDulr5SwbU06lVptcAV9f\ngDSyIhCWooeYBgLliczZztpXiTMFBVJ/XMN+g+EC6E1HjYZzhlJYpphRdxO+\nxSSqo72yS4Nk8SML+u2p/D23CHirk692MaZ2LXKEV+RG7IACbBJeDzq25Nmb\nLTjF\r\n=p+2r\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"10933727c33b426e4adc453c2b12d9bd868f66ce","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint --typescript lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --typescript --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --typescript --fix"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.3","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.5.46","@balena/jellyfish-logger":"^2.1.31"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^26.6.3","sinon":"^10.0.0","deplint":"^1.1.3","ts-jest":"^26.5.5","typedoc":"^0.20.36","depcheck":"^1.4.0","typescript":"^4.2.4","@types/jest":"^26.0.22","lint-staged":"^10.5.4","@balena/lint":"^5.4.1","@types/sinon":"^10.0.0","@types/semver":"^7.3.4","simple-git-hooks":"^2.3.1","catch-uncommitted":"^1.6.2","@balena/jellycheck":"^0.1.1"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.14_1619207167503_0.16676106379161126","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.15-renovate-non-major-6143f7c583d08d2fac3df9ca9424c6ea35806903":{"name":"@balena/jellyfish-plugin-base","version":"2.1.15-renovate-non-major-6143f7c583d08d2fac3df9ca9424c6ea35806903","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.1.15-renovate-non-major-6143f7c583d08d2fac3df9ca9424c6ea35806903","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"393e4a187dfadebcbca386f2f39e40c81a1b0903","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.15-renovate-non-major-6143f7c583d08d2fac3df9ca9424c6ea35806903.tgz","fileCount":18,"integrity":"sha512-HOQB+QfY1e6H7zem25vci2X32cCJZGAyniLf5hgasvyHuHGIMF20acVsP2pz8DlCM+K9IhKCJD2aV98yFbQ+5w==","signatures":[{"sig":"MEQCICADiUARvAvgrtMyy3kr+m5TJR1DuTrGS/54i8uUUb2vAiAluT+AiZxMQehAvGoXLs8Wb9auq0Wu+HjUwi6OHXlkOw==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":40934,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgg35JCRA9TVsSAnZWagAAYhsP/16jdm+gZQK0Kt2NeQBG\nt6yO30ZTI2hmn46e41+eDZ6g+ipVSSxx1SIqCHZ0qjOPDKxinbhcS5mT9eOa\n7hGycWQ83i2i94SUFLDx3JNoUKqQdOOK0vrI8RprAUxb7oIT6CYMjmCC1jeg\nK0px3OstYzS53oPQ+GnCjfHRzjPhbvmzkg92D52OtnV7/hZvRsG1hjB5sLIR\n86kxe88Y8acNzEkv4gFS8rx564G7ac/h37WvB+QUJ+wv0Ixo3MblYZPl14ZA\nkmi6bxj9wqA69Km1WjJERBTqEuGi4Rgt28pzCDVu9KJ9p91HqKs3cOWA4mS1\nmJlk1W1ZWmAm+ML3Csl4b9seRJVcwf+K+IYvDu7OfnOF6OFlv3O0H5wVh03f\nyAI3KgoS4kNa20h64don6dWMGyWpJqGEia/WWLgCXyTS4z2tC0w1fYVGF1bL\nx3usCilv3VQ4ioW+/9yYXbnYX8MtdMEhQn9pqpp4eCV80UvsoTsgFkdlP301\nwkcmqNQ8mEb05JG1VwmQbX8t+ImYCPM14OOWMDts4n32OzCOQIGuraYZRb/D\nNBm4PAqNP2RfFxsA2EDIzZNDISUDzTPh3PpZpIQk40CL9IItUrhmOoWqp7lS\n0cW8QKAAXi9weUQJkbMeC0I6fhZE8+VGL8YSB+ypk8FLTJyGSDHwLbr3jGP0\nMT9L\r\n=TxkI\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\n[![Publish Documentation](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml/badge.svg)](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml)\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"6143f7c583d08d2fac3df9ca9424c6ea35806903","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint --typescript lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --typescript --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --typescript --fix"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.3","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.5.47","@balena/jellyfish-logger":"^2.1.31"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^26.6.3","sinon":"^10.0.0","deplint":"^1.1.3","ts-jest":"^26.5.5","typedoc":"^0.20.36","depcheck":"^1.4.0","typescript":"^4.2.4","@types/jest":"^26.0.22","lint-staged":"^10.5.4","@balena/lint":"^5.4.1","@types/sinon":"^10.0.0","@types/semver":"^7.3.4","simple-git-hooks":"^2.3.1","catch-uncommitted":"^1.6.2","@balena/jellycheck":"^0.1.1"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.15-renovate-non-major-6143f7c583d08d2fac3df9ca9424c6ea35806903_1619230281176_0.058160633006105966","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.15":{"name":"@balena/jellyfish-plugin-base","version":"2.1.15","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.1.15","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"62d41ec73848d115cb6814dacad827d451048c6d","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.15.tgz","fileCount":18,"integrity":"sha512-HYOHg+o0JX2suUaQT1XgLv2gVjx3PZosoF0p9MIvqDJ9qIXKG9UHyKkuskw4ZU8yWPjD1KmGJzLrN16dq6rCXg==","signatures":[{"sig":"MEUCIEhu2L4CfMu98MBVl9pOhTUKSLymoQ6xUGxJegvFp54aAiEA1RZ9R57/16vvrG1FiQ1aKKVi58A68dxn5+YEyHBeY4Y=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":40874,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgg4BFCRA9TVsSAnZWagAARpAQAKA+6ujVRwVIezOxQVpw\ngyNRkSWvRyxq5cZ3YfofAtg6wCh/6Iud7Kpx7fi4W7urOebaQhgDL9w099W5\nqzIlelxkUImkfqQ+XVmGaoMiIXCM7eFSGRyWxNjtRo4Lv+v/cUdS4SBxN1Ug\nxsN9QlwZxfBFbHDJ+D/GObGQ6mgH2h+bv/8tkNIrNRf8pNARfvJZF6dwBm1q\nDxgn3PVaLS8BjikrxByVKobo+F/6ydM75bYUH7uZKlKWWS6BONUqy91FKbvP\nNz6dh8aM8wHUZQZKmXagzgvOTBq2LoxA/fbGdReqeESjGnEbldRLZORMcStD\ny72A7Plb1CpFGxlkk92QQztC8+Z3nKmS6ziRg6XxgqksByw/2VIwb2AlmNrk\nrjoAwNJUG6mwZpdZBswpr9ERiBvYrxcOrJeYtS2d8O2iIWvsR3CbYDSEBal+\nh+SW57KYMqJhtaq8/Vg0kOdkBDchO2mN1eKbsJ0fhc6Sb6ghBb5S1NjE/7HB\nkbRmBc1a5owIbb/5cdeEL7ciOB8AMCiGQkA4TWZhE2X39taBlbxqeX45VK0U\nXMIP9OQvd8fhjFRMSp6NPKlAGQyy2eZhCdE1FXa6Garcl5e5U3FA+qGDThjn\nYBHOE9zvM8kNMSZzuQIktyqrUEJPpEunQOXrB3DFgSD301AQTNWwLERkQvJw\nKq1Z\r\n=Xmve\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"32e235c028a20fdd87f0fbe301af4e6a1be1be62","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint --typescript lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --typescript --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --typescript --fix"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.3","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.5.47","@balena/jellyfish-logger":"^2.1.31"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^26.6.3","sinon":"^10.0.0","deplint":"^1.1.3","ts-jest":"^26.5.5","typedoc":"^0.20.36","depcheck":"^1.4.0","typescript":"^4.2.4","@types/jest":"^26.0.22","lint-staged":"^10.5.4","@balena/lint":"^5.4.1","@types/sinon":"^10.0.0","@types/semver":"^7.3.4","simple-git-hooks":"^2.3.1","catch-uncommitted":"^1.6.2","@balena/jellycheck":"^0.1.1"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.15_1619230788739_0.3813907527032705","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.16-renovate-non-major-1c801c2a2531d7dd7a92483d7622d85a6a803f6d":{"name":"@balena/jellyfish-plugin-base","version":"2.1.16-renovate-non-major-1c801c2a2531d7dd7a92483d7622d85a6a803f6d","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.1.16-renovate-non-major-1c801c2a2531d7dd7a92483d7622d85a6a803f6d","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"2f5d407f4f74974ea1db80ecdc412bd7df88e646","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.16-renovate-non-major-1c801c2a2531d7dd7a92483d7622d85a6a803f6d.tgz","fileCount":18,"integrity":"sha512-LWWkso3sNYi8aTXELYUBd3xIbjc3v6fz+NuKueSdvEa1wuXPih7RYXKacqeokaxJzbNGoFOvVi0ELMEWCsMlnQ==","signatures":[{"sig":"MEUCIQCmt86b6QKFk1Bcr59XhWUocZxCWrM2Wt20Z+1AFTHd6gIgd5tIVa+AXzYNnbC/U5rC4mlrGDJUZgYMq/yHFydV1M4=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":41036,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgg7kuCRA9TVsSAnZWagAAAQYP/iE3hM7Vs9Twv2M6Woir\ntKOKlIOZAg4uxZo8w07+GSQIo56I7gkCDIAeqiZNiFK9ISxJJwXgucFFLFK/\nL0JatCTfTM4zEizw3b3suRRFTZTdzY4hdiYLp4qztQYa1JnJvRl/kE34pSK2\ngaPFeIRKudnd7JqOZsLtxnh3mdFAH+4k63InRPAAbM1hVp9J32VJIc6ehggO\n3qSnT38YQQCsR/R5OVviqh+J5ya02Y9jXAZ8qzEuEzUu1kgZIqJZlsOFLSqU\ntsdtz2VpwfqS/roqVxzw5zy0wmAPm3omwZBvulOjvcLS3+46A/OfvKCI8MAY\nHL9uEDEJ/NEZMSu1V5fRCwpNmM4OOlw4JRlxFJmokH47AiRMcZAUg+1SYgG1\nmRhQiWrmmaek4beh6c81UJKpLiMxD5rcBz4eU9pVqFFELWreUpoGjq4zYDoD\nOzqF1GNlskFzK3T2omH96qivxmyH9DZqXMdmMsdn7wElTgQstB9dB91VL7SE\nJkC6fXSrCHQarQYxfnSsOde3bqFEcxkywkhsKjVW0YzttSFiQnx+VXiuM7Qo\nYpHhCtVLiC7QezgoBE+idXPVebwhiB3pA/61qi2hQ1tp3fyfn3PW2m0pQjOl\ntmpGhYXSPIqawFTLhTg+ccl5MqofOoeqUJBDcggCCOijnjdiVnE0gEDwst4R\nW8LZ\r\n=At+y\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\n[![Publish Documentation](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml/badge.svg)](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml)\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"1c801c2a2531d7dd7a92483d7622d85a6a803f6d","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint --typescript lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --typescript --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --typescript --fix"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.3","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.5.49","@balena/jellyfish-logger":"^2.1.31"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^26.6.3","sinon":"^10.0.0","deplint":"^1.1.3","ts-jest":"^26.5.5","typedoc":"^0.20.36","depcheck":"^1.4.0","typescript":"^4.2.4","@types/jest":"^26.0.22","lint-staged":"^10.5.4","@balena/lint":"^5.4.1","@types/sinon":"^10.0.0","@types/semver":"^7.3.4","simple-git-hooks":"^2.3.1","catch-uncommitted":"^1.6.2","@balena/jellycheck":"^0.1.1"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.16-renovate-non-major-1c801c2a2531d7dd7a92483d7622d85a6a803f6d_1619245357842_0.3359144257267357","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.16":{"name":"@balena/jellyfish-plugin-base","version":"2.1.16","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.1.16","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"df067749e6a3883eb6f96048011969b0a98939ad","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.16.tgz","fileCount":18,"integrity":"sha512-cqYUWsfz0sAn/Py7ALSSkzCQrwqgOg24GT5JjOllo5Mw4DZSsh88x6l7RZBzt5Lw14N7txh3us++LR0lpTMCyQ==","signatures":[{"sig":"MEQCIHmrWP1bRRWlgzP0WPwxdQxKV2bnTAJ18m0ygK8SjZalAiBJFR8/BNiL3pWH0V8QdwvxCV5fHj1wNoiZ6lgfSQ8C9Q==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":40976,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgg7olCRA9TVsSAnZWagAANwkP/jg/qgtUaXLZWRJn3Xi9\nLRtRy/xL+1OX3ohqik6ZyhklAi5ZaZ2/TwXzBzfARiytFMNRZJkRYw/8e6v4\nfUaUHf2dpAuLzlqvj+DkrUkhB3vTqrYN5c3H8RhTy6hAUTd/whc/pDXH4C3w\njkjv4TYNmavjN9QHm6cuwzKgYYrcI+LnSUGBVSER4I+CPfEFKkKbxxpquJ86\nnaX/aNChxzhgtpv704w5slbxDjnFrg+UvIxT9eURutViU3FCGC2w9hxVgyMM\nmvm7z0A3Kwt2+LH7gDCnQaEyU84BfQC+XU6V+hwhX3n4ulHLfSFfqHRmM36s\n3L/w8Ut9F6+GNDwbqWVNny27ND+RAbUcYBhgww6XhhfrF9oQengjut5GnCyE\nVCw2mE5nvQTBoKv5V+r6ayMtdVN7cR3OTeaErrpeqt1HaGbfQJQtifc1UI59\nz9ev/1EUbq9sj+RQsrJSGpEKoXtN71HLBR6Jliq+VVxvHmrukjDNBZBmkJbM\n0eWHfL3dL4n/3JcbRM15QVq/vsz7m6o6wFrD3iyLRl5ayMpzNMeO/WjRTG5r\nAK5XJ+LED09VAiES7YWMB05lxxRtV5oNlirqe8zuR/ZU67p83V2AuYp+qEpX\nwlhjSOIvWk60Jjt12/9HC+N8nvEXfh+kXyGUWAZrUY0nBhchJ0Z+E6Q/EHey\nZk55\r\n=XWQQ\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"f7e7fb278b3b552504faeca6acc956bf20e5758b","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint --typescript lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --typescript --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --typescript --fix"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.3","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.5.49","@balena/jellyfish-logger":"^2.1.31"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^26.6.3","sinon":"^10.0.0","deplint":"^1.1.3","ts-jest":"^26.5.5","typedoc":"^0.20.36","depcheck":"^1.4.0","typescript":"^4.2.4","@types/jest":"^26.0.22","lint-staged":"^10.5.4","@balena/lint":"^5.4.1","@types/sinon":"^10.0.0","@types/semver":"^7.3.4","simple-git-hooks":"^2.3.1","catch-uncommitted":"^1.6.2","@balena/jellycheck":"^0.1.1"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.16_1619245604746_0.9226288697212888","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.17-renovate-non-major-517e26135b031f3bb845b4d9fadf28c437bb4012":{"name":"@balena/jellyfish-plugin-base","version":"2.1.17-renovate-non-major-517e26135b031f3bb845b4d9fadf28c437bb4012","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.1.17-renovate-non-major-517e26135b031f3bb845b4d9fadf28c437bb4012","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"a1c00db6ef5b7a4d262e7941553ed688eed9002b","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.17-renovate-non-major-517e26135b031f3bb845b4d9fadf28c437bb4012.tgz","fileCount":18,"integrity":"sha512-b1Hia7QG25t24K7fBQys9/ElQGhL/BhVA3ly2pFLdPxmChOokmFc/4GANZ2Jua7w74C2x8R24P7iOr6bKE5uXw==","signatures":[{"sig":"MEUCIFDr9sspFl+Y+UBHi9llpLa+RlTMB90cG7lLrbb66G/sAiEA94iD9QwrwVziiR7YlyR8q1px7vbjoMbSj+fo1GBQUiE=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":41102,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJghCk+CRA9TVsSAnZWagAAO5IQAJobWBe1BlaBQqg/RhqS\nQ6MsxQ3HZhezGD4Na0UD8P0lIXwMUftbC0ya+WF478Z0RYkxOkRGsxFirLcx\nUfq5l9vWoa3Dk9QummJkpNUM77V+9PeDIhkF+PZ4RiBCmCPTCSffbVWJBVym\nAyvkPJPCm0wxV2uFIcHGkNyAG5vZOjobWGMCHzU6trIEFjHhd2QRy9isdHy5\nYX64/WVqnSJNF6vNvg9AshzQRH2oYWbYegY6OhfdrvaeG3VdvP4tWcMzZ2k1\n62cf5Z3AH67OC3zDjZqatrOk1o6E/N+V3Vsq1xXhBJnZVae7Me4yrj5oYjF4\nd5mae39OvpEIvG0CJQjjxLR0H5GxghEVAuK688xjwdN13HrCGOA4hW5k6qQR\ndQddy9K4BPYiNAcWfljX2d+UpmsugNU2edK8Y3qdhpaTsalF2vtQAqH9KldR\nX4hPW++RQoF5w0qCPH/Ap7t62zu9saYDh2CksaXd0iLcRb/plzOaoo0rV7jn\ndaNQuucnLHJGwYFUUK0WDkelE+Hf3tdMdBoO0jtfoge1Rr7k+C/XLNDaxK/v\nJkgAUDwUhTiTK7aCS1yf0DOet3t/aqzJTRs8cnHMvzc8NZMFStwWE/KYqVQc\nGWC549qBgR87SY8XgCHCej+sT1EXx3HoqwGgnp3fgB0+f0riMNijU7Vl3j9L\nHcYD\r\n=sunk\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\n[![Publish Documentation](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml/badge.svg)](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml)\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"517e26135b031f3bb845b4d9fadf28c437bb4012","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint --typescript lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --typescript --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --typescript --fix"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.3","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.5.50","@balena/jellyfish-logger":"^2.1.33"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^26.6.3","sinon":"^10.0.0","deplint":"^1.1.3","ts-jest":"^26.5.5","typedoc":"^0.20.36","depcheck":"^1.4.0","typescript":"^4.2.4","@types/jest":"^26.0.22","lint-staged":"^10.5.4","@balena/lint":"^5.4.1","@types/sinon":"^10.0.0","@types/semver":"^7.3.4","simple-git-hooks":"^2.4.1","catch-uncommitted":"^1.6.2","@balena/jellycheck":"^0.1.1"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.17-renovate-non-major-517e26135b031f3bb845b4d9fadf28c437bb4012_1619274046178_0.020188190673198436","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.17":{"name":"@balena/jellyfish-plugin-base","version":"2.1.17","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.1.17","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"2ef943d0f3d099b43ba6731609d531bb081bbac3","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.17.tgz","fileCount":18,"integrity":"sha512-d3+HsmFUXVtnKcAUDYemKmWNcC9UZGDwrdwxlOKWyjgIxuTTb5wPWroTeVlzh3z5r0+EiE+w/vUAr4hE3EMWmA==","signatures":[{"sig":"MEYCIQDGWyxcsDktYLvMQme3Smt8X1QpjaG2/KVo0IWEU62+YQIhALlhasaeWX/RVJsABVqZkBmgLTlF85kQRHW6jJERmNIU","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":41042,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJghCodCRA9TVsSAnZWagAAXMEP/R2UnlXkdpnOe6CeXaiH\n8gsVGV2RP+e8488w4o7G+wdXK/CZSlL9Fxob6R1wa2u2XnaJb1hd2yG0UFCm\nmDq48md6VaXAddA08P66v2wOVZc0kyFAfjXejzGAOX+lz42dH7inG7HU8UOo\nwKBxHL/9sj7aR6Ig2W3nlbgmBrcjqB3TRLD7BsvwFT2nN62xGJIf8GK4q6W3\nzM0dVXZQYAsQ5lsVSkseRaoR+ZsPHTt10kT6AnbRGDbY4muQ7jYsBN38lkYz\n0TlNY74vS6crpgkkN420oWU7ga7RMnO+DsckbZwlqhYTAuzox/iNjTpbYCJd\nXzHBanBDhRp7Zdjr16L7pMJy5oKSESV5D5paO12alG5XoHd6Vd5z54Q+z/B8\np9kFrJVslBao/zxvC0L/RVgzKkbOklfpMRudMXpyT2+pYXuArXvIxEuYDkSU\nqmsEiNyOJRnna6lOYYetN+JqSgQaaXyTmNsvPhe3A2tHPOCGL3jCs/+Jz0yv\nEjLC8Hru2diFTl9NglUu++O3YKZ6f3+fDGm17+TKpP0N3FXOvh2W9D74DYQd\nSYS2nGji2OVZ2u5i7U8Qw2A/tMXdXcNVQ1jDDgzpKyY3c/hnwbeOvVP+0LZb\nAV7sEeywMR5PMSIG38QdgeIvEl6qVnDQFFxUJ9c/eqZZcV3NeRluXcDC761P\nBs1N\r\n=gU2C\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"14d62970bbbc3edaeae9bd2c6eee07ddc79c39bf","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint --typescript lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --typescript --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --typescript --fix"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.3","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.5.50","@balena/jellyfish-logger":"^2.1.33"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^26.6.3","sinon":"^10.0.0","deplint":"^1.1.3","ts-jest":"^26.5.5","typedoc":"^0.20.36","depcheck":"^1.4.0","typescript":"^4.2.4","@types/jest":"^26.0.22","lint-staged":"^10.5.4","@balena/lint":"^5.4.1","@types/sinon":"^10.0.0","@types/semver":"^7.3.4","simple-git-hooks":"^2.4.1","catch-uncommitted":"^1.6.2","@balena/jellycheck":"^0.1.1"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.17_1619274269376_0.6893730063927848","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.18-renovate-non-major-909a5c0634a7e3aebe97c3a6b50cf4686c35176d":{"name":"@balena/jellyfish-plugin-base","version":"2.1.18-renovate-non-major-909a5c0634a7e3aebe97c3a6b50cf4686c35176d","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.1.18-renovate-non-major-909a5c0634a7e3aebe97c3a6b50cf4686c35176d","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"3d754ffe55e6d09b35e90de4ecce1345e4371371","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.18-renovate-non-major-909a5c0634a7e3aebe97c3a6b50cf4686c35176d.tgz","fileCount":18,"integrity":"sha512-F6mQRC1JQcZzBGPEz7Qc7YAJNOdYBdHwoVseFilL7xD3emixgqmykgDhrasvBftivbQzHHnOY4ZiL8w+jZWdYw==","signatures":[{"sig":"MEYCIQCQXeGxkDARe9kN1on9q5FLbWG0ptvkauzipYDNLPzaigIhAPsDici6SraeeSYTBYMAu6iMTAFEXsz0YBuzSqCMgD3k","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":41168,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJghGPsCRA9TVsSAnZWagAA39wP+wf9HR92lmiAT7BcFYCP\nRMnOSjs9MaEXUTANWgIiWbw7pBMl5F9gUZZH+RLNcBgy59fzFL7O6gzsA7C7\nC2MB7aUZAlbGEtG4TRPYPoy0RDQOP7z9UysclDOfM+XGsbWaA0hsfBwfNS+w\nYrNx4AO0s8VKNoniT1zM/kOgL3b6gKSdc2lhsxNMlk6EHEAQlwCOA/OEysf1\n57FdvCIxsYu3fGeIxMNUWKo24jkTQmDHCq2UemlsxpwT+y/1xHacFLAmtaDO\n+Eb1a+SE1ZHQLB9DfDf6r4NOTa1TuBCs98eUhn5rNChDBQBCdLk0WCEJgiAk\nnsJn98Mq0lWK+OR/Y9MPverLtZkjSuYR9hHq4J5gQZX681bHcdeCMNf0sf3m\niU4R4PxfENv4SGt4ueoD2N9T/605griFJxwCzMxx/NOTY9PHj73hawfj/jN1\nGmFD4teMnX6iyqcdPkCcCvcjjLlC/czsXETYrFUR5srRkuvf1HGeHyRny5QX\n7RSAHzFYF8FqNw64N9WA+4L0rmWOhGx2i1IsrJ5BUHmouskNEvDM6Vv/nbyN\nfkAaZkvUw20brv+W25PEuBPcKYNzRY8pv8pYlfm//RG1Y3DhM1DGmVFyB9NR\n5PRRTlb0WoWsEGw0uvfjGfn/CCY83iYh0vRCKo+BkNSCgwCr4+El/RFzDfiw\nbW2w\r\n=Ad8L\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\n[![Publish Documentation](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml/badge.svg)](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml)\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"909a5c0634a7e3aebe97c3a6b50cf4686c35176d","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint --typescript lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --typescript --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --typescript --fix"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.3","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.5.51","@balena/jellyfish-logger":"^2.1.34"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^26.6.3","sinon":"^10.0.0","deplint":"^1.1.3","ts-jest":"^26.5.5","typedoc":"^0.20.36","depcheck":"^1.4.0","typescript":"^4.2.4","@types/jest":"^26.0.22","lint-staged":"^10.5.4","@balena/lint":"^5.4.1","@types/sinon":"^10.0.0","@types/semver":"^7.3.4","simple-git-hooks":"^2.4.1","catch-uncommitted":"^1.6.2","@balena/jellycheck":"^0.1.1"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.18-renovate-non-major-909a5c0634a7e3aebe97c3a6b50cf4686c35176d_1619289067542_0.369845435239575","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.18":{"name":"@balena/jellyfish-plugin-base","version":"2.1.18","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.1.18","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"f3ff7392887ddcead785413fcbb6fdd07ade193d","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.18.tgz","fileCount":18,"integrity":"sha512-uRcHigx+yJ1nOQnqmeSmG2XxZTdux1ApTTzIWiocsi00fZN5657z7Dy2AMEOzflNHOtXPQGH+q9b0tYcJtofmA==","signatures":[{"sig":"MEUCIQCCFfNYKObTNrmA3YlJ4ijJR9VCdyyuCsGQb/7HFzGSdQIgIpxrB5JcJ+2wMshrsSHYnT1UORjevZ0eTBXOnbDLGxA=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":41108,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJghGa1CRA9TVsSAnZWagAAtUgP/R9Bwuywo9ZmJQVyWSAv\nJGzwIMK/w+R6dUN0KCi9+DXBoK2wHSuJjwREOeegIbr40IveTaL+Ka5kuQbh\nO3yASXRwRPi+qGyXdf0rJBt5UpXCymX+xwU+mHe3R4xSqoReTFlZIRlWjXLP\n/vl+ReAdefB2judgCnn56JsEow5pHAERAg3TM2JnxgXYeX+dgXqu0Hly38yE\nvnXvSJQtqdCHytL1gb4Sd20v7KE6d6E0xA773u1LmN6K7xaHg30eSkf/zg4/\n6Tip3cQN+4VMZV18dT7rYbPWRW6XUnYdo+UIMAzJPcNUmFZ5bdbyBVy5L4hO\nvsEKGXls+KgCE5Ptn5yREs+hDG6PC9pNkXM8x1EZQWaw0HjmgxkdjxnVzBaf\nEUjrtMnI0Vfft5llXNcNOn3hzsnBOxyR61Mkw4IeAoYJjzPAURGWTukNvPKj\nT26cDtIzBIVsmwbB/j+i4/ydbgbvp9ymT6+BUbHZ4i+MwCm7qtxsCauGEftE\nS5e5Liv8oS7iTYTCKxjvdzaQOHlGyLrwlQCY9njsfbcrMxe+VgLbkd+F0aax\nukEnLxyT7Snhlvo0ZjB1IANLEQQeI2ZDf2ffImadjIUn/bllFnVZnL0ydrTr\n+xlMS2dn55rhYKaa3OBCpD8WMG723y+k4EFG4/CHDGFybBAOW40X1MwdHp5a\nnbSm\r\n=bdlN\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"27b4fd3a7579090ca258de9f76850d0587596a53","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint --typescript lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --typescript --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --typescript --fix"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.3","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.5.51","@balena/jellyfish-logger":"^2.1.34"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^26.6.3","sinon":"^10.0.0","deplint":"^1.1.3","ts-jest":"^26.5.5","typedoc":"^0.20.36","depcheck":"^1.4.0","typescript":"^4.2.4","@types/jest":"^26.0.22","lint-staged":"^10.5.4","@balena/lint":"^5.4.1","@types/sinon":"^10.0.0","@types/semver":"^7.3.4","simple-git-hooks":"^2.4.1","catch-uncommitted":"^1.6.2","@balena/jellycheck":"^0.1.1"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.18_1619289780998_0.3648005231233207","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.19-renovate-non-major-322690bfd04fb29995baa1c243c995190323db94":{"name":"@balena/jellyfish-plugin-base","version":"2.1.19-renovate-non-major-322690bfd04fb29995baa1c243c995190323db94","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.1.19-renovate-non-major-322690bfd04fb29995baa1c243c995190323db94","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"4e66b0598b9447458d8b134375063673c04a73e8","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.19-renovate-non-major-322690bfd04fb29995baa1c243c995190323db94.tgz","fileCount":18,"integrity":"sha512-xpW2YmPm4Lev9IwptilIV/M8bfS1sPD6a4F0VfL9AaKd5KK/mQfcOxc0l54hNhI0nZRA9X6/58SKpN6Ga1M4ZA==","signatures":[{"sig":"MEUCIEnU9PRlqe/BzHV4VPjz7LLpMcbWSW3yHmz5UCaGCEnEAiEAmV8dQp8OTQ1RA1Bj0+p5nr344spjghxzxob4Z3ljrY8=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":41270,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJghJs+CRA9TVsSAnZWagAAnoUP/RWbzvxS6BT5VFtqns77\nwNEaxk0NGtKQyDZ2oWXCfX91F0PPFBT+PaAjPxZg3z9LQax8j53obSIDl6R4\nv/OogWg0ksR6OoPDZBN7uqPuEoL7qy/6ClXZMOhn7wLfEoQ0K28X1G5Ag4gl\n5AgA83swoaSP8hytk5oYXvfDd1D8iZi2r3aB/zZ+F3IB8kcFteZNKVr3hibY\nzULSmSS+NaShlgprMlUgCRJSM+si6v9dZ/2+ZaVqikacBKfhqYqrBgzDmzqQ\n10Teb3QXnnMR+W1K7CW8olr+gsIdnkA4VIrr9Cu2C3N/Pt4Bu/1nO5L4Jaw7\nlxOClU+9z1O+2qSpJBlAYX29fRamuFhbSu0b643AtxlFKTPods1S5BG2fNoI\nUZP9W+lo/m21in+xDLFqU1OocPGFFIQi8BnGgldFh0WQkYGja3m0VHK5DLfJ\ny5fQ3O8cpzIpiJti7yNfhUQbMxiSavv2zeVD3ghMyHURFRaWhjut86xOTS8h\nMuQSShmN61PDZ2JK6O2K0ff/j5EYPjQlwDShMCRG+jFQ915wHEWeyUGyORDA\nngAojZ5fJvcddKx9qZ3swYn0Z0d8TlT2FrDHakOXnN2aYlEdrrP+uRBZicNN\noWxFXFBr5TxpJrBWau4dzLizZiWSxsIDa+xHutpMoEHOy0N+xlv9On/Y0St1\neD18\r\n=GoEu\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\n[![Publish Documentation](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml/badge.svg)](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml)\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"322690bfd04fb29995baa1c243c995190323db94","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint --typescript lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --typescript --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --typescript --fix"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.3","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.5.52","@balena/jellyfish-logger":"^2.1.34"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^26.6.3","sinon":"^10.0.0","deplint":"^1.1.3","ts-jest":"^26.5.5","typedoc":"^0.20.36","depcheck":"^1.4.0","typescript":"^4.2.4","@types/jest":"^26.0.22","lint-staged":"^10.5.4","@balena/lint":"^5.4.1","@types/sinon":"^10.0.0","@types/semver":"^7.3.4","simple-git-hooks":"^2.4.1","catch-uncommitted":"^1.6.2","@balena/jellycheck":"^0.1.1"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.19-renovate-non-major-322690bfd04fb29995baa1c243c995190323db94_1619303229573_0.023444361716264295","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.19":{"name":"@balena/jellyfish-plugin-base","version":"2.1.19","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.1.19","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"fb9f5540f85fb68cae8202b65114eda973b9c463","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.19.tgz","fileCount":18,"integrity":"sha512-bkKcSRkjU6uwshFjAbPAeGkLDyJC1TuiAhq1WAXnkGPfvG8/rIjJTlghwYBvy5RNPxPXmcDr+sP9HConbt0wmA==","signatures":[{"sig":"MEYCIQD93bvHT6pidhVcppD7mdhEYYn20on8IxEptf4bVe1KQQIhAMsSD08y5X/JWIBPCNe0IZwUalcH88azlJOEe8Wn5oYq","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":41210,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJghJw1CRA9TVsSAnZWagAACmMP/2HB3I/dkqof/B+jOLBK\nxKXB7Vs7VXWuCRXu/vjgzYE6ogCZHAt24dKMudo3ZvfG/cn0nM8TWn30qDVB\nNnLZCMDVjpRwgXKs3eObknXh/tQmwPs2pCxkl5I3iZODG8ElwpL7Dmp1Oe3O\ng1Yo/xoX65xrcOCTDd/8OfDdQFfALDAYMFItNFpXoJIm9PAJCHL7p0oqk5lE\nGxhwVYZ9xPiTUejg+jAyEl0I8vORQgBveoSbA1tn/Zd55qlImqIjeeoF4nJH\nBjz6dP/OuioSzzH/k5xIWF/h3BoIgxpIjV/dwFWF6oWxLWbJ+Ah7W/sbSORr\nEPNlCDOyYbltDmIGUNFWKi2395n1wTMTkwBLDIP2OyyZffpQJeeWT5yBSB4R\nVBWuL32UEzEK2XwSu6yVeKRTgrsgFa40PKnQK82wrL+UlBQRW213lXr/tHc+\nxW71oqpQ/K9mR4fFDiRtuwICFj97uogBQJGtQ/vGIA6/5xnlxU2C9+WhiHYp\ne4+gIJeQEK5QI0+dVnVnv60J1Cs9uMlH4yqHyTMVNfzZ3NSzjFYa9/5bVNgR\n36Yo/gJqGP5fgmzNu4xoEEgfx1V3kGfVYTj7/iz2M9QSz9fz58sZ/M4wDob8\nMq3xR8R8zO/BsLCdKsDZT7JuWEODvfAktkDN8x7m4jaAY86VdK+FU/QOvnj0\nbbg2\r\n=OMgC\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"2ecbad9051fd2c38bc8ec3a6746b1bc6ae3377e4","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint --typescript lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --typescript --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --typescript --fix"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.3","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.5.52","@balena/jellyfish-logger":"^2.1.34"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^26.6.3","sinon":"^10.0.0","deplint":"^1.1.3","ts-jest":"^26.5.5","typedoc":"^0.20.36","depcheck":"^1.4.0","typescript":"^4.2.4","@types/jest":"^26.0.22","lint-staged":"^10.5.4","@balena/lint":"^5.4.1","@types/sinon":"^10.0.0","@types/semver":"^7.3.4","simple-git-hooks":"^2.4.1","catch-uncommitted":"^1.6.2","@balena/jellycheck":"^0.1.1"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.19_1619303476799_0.13253865824869604","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.20-renovate-non-major-5af39218a44718b000d26979ba49436cb602ab1c":{"name":"@balena/jellyfish-plugin-base","version":"2.1.20-renovate-non-major-5af39218a44718b000d26979ba49436cb602ab1c","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.1.20-renovate-non-major-5af39218a44718b000d26979ba49436cb602ab1c","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"18c8b618e332c66a983a56a281daf2372ac0abad","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.20-renovate-non-major-5af39218a44718b000d26979ba49436cb602ab1c.tgz","fileCount":18,"integrity":"sha512-yzopCLV5PRtW3rKaqIiPZ+Lu6SEf/RR7FICE+RntQBqmYSbuA+OTDXKmfdAoJXtDbxBFWYWFOBO4Nj1tqZR4SA==","signatures":[{"sig":"MEQCIAdzD9fqgFrg0w7EPXxF4ov84qof0Pt1M0QbeFGHnLHNAiAKn7nL17FzokKgETRBcY6pkA/QJf30Cx7VZhe0cpak1Q==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":41372,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJghf+uCRA9TVsSAnZWagAAotcP/2IOyIgrmTXBDHxNCcvW\niL+Xme2OJ2xxwoZlsjKCj823OiYAWTZnjL88UR31/qYnFxCj+aryDZ5cRnvJ\nCJW4623LkAWzV1Hl+bREeDTVaPBAumiqZmPacQcIRVSmionra2tQaWcXXWTK\nUrRaGqJHGllAuUEKgO/ixUFOYvhEsYQ+iuyFW18ZxpZOdtdPnSeN6vBVFAEW\n7/1lnuCeSawEpUXdjnWSj2Iai4ttB6RHDm8RIFwN1jfnISV/fDBZAwSMT7JS\nnUyg/ne2g0CiNGiyo1TfHi0/orhwbUnd5xVdAet4F7XR+m7Nv/i9Q+tDHsAH\nF+U3hsdlpygfoNXoVgDT5gA5tYKmugZwzFLdT0AyV9xZH6YbO+Vg/dyS/f/K\ntYnffCUh58UmNMtIGNbUk/RtLBNd0dC43WYzYGe3CD483nusqXYMGU1uaLct\n92tGf2fl/1eq9A2Om/CzQIAtPo4O4M/2cG93InS+F3LSic1z9hhP0SBscNER\nIFOVhsvZX1JplnEAMvAP4/Nxc9dyZtVDeMozh94kmFTo86BkVtopwR3rGrfZ\nXJkWa9bsEfqpXdaFPG+mdugb0ProPoKNiqtVlZbf+XXgoJTUeSw4wuQ1o1yO\nTmu9WzUQgJoL3y2NMHPzb2O03jN24b4Purci2MUzDI56vJweA0HE4gYoEoIO\n0Msf\r\n=WMoL\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\n[![Publish Documentation](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml/badge.svg)](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml)\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"5af39218a44718b000d26979ba49436cb602ab1c","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint --typescript lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --typescript --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --typescript --fix"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.3","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.5.53","@balena/jellyfish-logger":"^2.1.34"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^26.6.3","sinon":"^10.0.0","deplint":"^1.1.3","ts-jest":"^26.5.5","typedoc":"^0.20.36","depcheck":"^1.4.0","typescript":"^4.2.4","@types/jest":"^26.0.22","lint-staged":"^10.5.4","@balena/lint":"^5.4.1","@types/sinon":"^10.0.0","@types/semver":"^7.3.4","simple-git-hooks":"^2.4.1","catch-uncommitted":"^1.6.2","@balena/jellycheck":"^0.1.1"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.20-renovate-non-major-5af39218a44718b000d26979ba49436cb602ab1c_1619394477374_0.6195376573271918","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.20":{"name":"@balena/jellyfish-plugin-base","version":"2.1.20","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.1.20","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"a3e230b16478cda6cfceb4883efd704aecc6496c","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.20.tgz","fileCount":18,"integrity":"sha512-Me1Gujob3/bOFrcSPn1LYTITV5n3y6payIPlJgQUHB7KZpl387comL2WkJijpqGm2fF1gH4sRHcblQ9w0vcLCQ==","signatures":[{"sig":"MEYCIQDgw3XpVEaj5YpXae5kEKEz/9YHbh80efadSOe37klsOAIhAJixl+gsuhmtoymcfBnPcwGqwVUKIaOmdRUQIOfUl0Uq","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":41312,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJghgClCRA9TVsSAnZWagAAjxEP/08LoSMIE5LRjMK1DGbL\nKGOTBBwKs6NhN+nHLp/PW4BqMKaoGYgn+2dfCa6rGEApwOBKbcLkPVGjMCvT\nNj3UGIOrDRE3TB7jyWxbfHYdj7+CEpqTV3sbv/qge6lOZUmdyblsjDZm0xDr\nivkQSfj2KdS+Ee6KITgkH2qIZrpx0BEWqCRmbN65UWMqX/TvjRQSfhpItYHb\nk00PFKVow0OrAR0ZVSofLO8j8QYPpD9RQZwr7jL3gnkO9+NPUVkt6wWnSXvK\ns3pf1i6LWT2IBcXzr8mHu16dS4Oor5e/TY+SwfO5dTf946y/Yfxt06iGN8cW\nPppFmg73jjI8n/HyNzPlZIkSLxOYgXrNNqUDGsiEB/QJ7ZngrvYWy7Xn0tw0\n/YvgObVqfLObnvLy4E9ucZ5LFMMkeVHb55m/dwTIrjZEw/o++lhMK8MyLa+n\n77qzonCxDhYh6WdlLdsGNcnu8+jh278tu32BM23YFprBADUfVwvjDyIW5NPK\n9sKtybyufcPnjOgWu7i4ietZWYBQBQp3P+iQc/ICEUH4yG91/42rrtLUJjl2\nRvCHzHgJYUDY651ZhPZewHnOOeiwuH4xenyuny85N26FQqxu3mAMd4sE4F6X\no3XfSzxt3lr+ZJu3b680y+R5jmHRi1kjk++AARK6YQCKXBOmts6puIuaV9Ui\nv7SW\r\n=ImGs\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"6dc5f8969904f5b876a29dd5a2f531a26ef5b770","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint --typescript lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --typescript --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --typescript --fix"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.3","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.5.53","@balena/jellyfish-logger":"^2.1.34"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^26.6.3","sinon":"^10.0.0","deplint":"^1.1.3","ts-jest":"^26.5.5","typedoc":"^0.20.36","depcheck":"^1.4.0","typescript":"^4.2.4","@types/jest":"^26.0.22","lint-staged":"^10.5.4","@balena/lint":"^5.4.1","@types/sinon":"^10.0.0","@types/semver":"^7.3.4","simple-git-hooks":"^2.4.1","catch-uncommitted":"^1.6.2","@balena/jellycheck":"^0.1.1"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.20_1619394725013_0.35376533782514463","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.21-renovate-non-major-9cca0bdb6cff03c16b1de95bf68555abd23a5dd2":{"name":"@balena/jellyfish-plugin-base","version":"2.1.21-renovate-non-major-9cca0bdb6cff03c16b1de95bf68555abd23a5dd2","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.1.21-renovate-non-major-9cca0bdb6cff03c16b1de95bf68555abd23a5dd2","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"a10fea510825938ace8ae89dd66da565afb3f427","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.21-renovate-non-major-9cca0bdb6cff03c16b1de95bf68555abd23a5dd2.tgz","fileCount":18,"integrity":"sha512-+s6u1UW/JRIXqC4KAXVGMDllIJ2GTh3lB8hZcbKKTJhZEQxaXwyM/zz965EN7coOGi3QdjRelTyTWd8aTGrJgw==","signatures":[{"sig":"MEQCIBLzUL3I2yiaU9DglgWoS0GoXzq7mvTGL03yoHlypeOjAiAxB1TNE0s6EA4pl6r+zq7KLlDfNOGYqdBfFRCw3IVu0A==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":41474,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJghg2/CRA9TVsSAnZWagAAU9MP/05aWDxCOAxheIy5Hswm\nk3r9iDmYR5csVhjAUn5Tw9FW5g5EFwU4FAlpcjCU0Nm3xccRExyOr5d3ZoFd\n8gnhN0FB16//u2Xp/p5h8c9p+fQ8gaNSqp/SgDL2uXCIvdfKQOzcNFKbBOC4\nHK4DUIRM8n9L9GjRAROaVJLYt0IR5K8BWFbvzbUWOdC5ll/M/6aMIJATHeKh\n9ETig6B2clYYtIgdEYZitqTFXcJRY2LFEpCs0uadOSyaNEdTfbp4qfG0U9c7\nUYdgeDoJXhOaIiG+PpPtWHU37wEZGK4yyI07b1sddoMEsu7aaIEmXAaAW2EW\nk03Maz2VyQlI8dUlL0m9CQS3dTyIngQvM6oQ+MYPASCpkcDRknrz4TaKPGRc\n/fGuU4wM+eF6aXEXH4WyTi9Z/+kIonEWbvlQugpbT3RRCxXKaZDW/7To4X0j\nCPW+ETSErJvA/w3QZ1gA7kng0cI6SNuDw+2FfBXuifqbB6yxuiXozzmkS8D1\neV5KjnUR5yYh5QpN0UNdOxpotH4bpUXp6Wq1WOWC1MqKx3GVjWJJZFbb2rS1\nMB3OJY2cweg7LXFzpyZo4wOcZFUkxRO0cdCD+PI+1p0IO4bDnV4ri0ZWsggb\ndTt3YfribPR0y2NYXGowberpt0JgfznX4OqJhKFvU4KtfTAGnQlftJmS6ZVV\nHsSm\r\n=Sw/9\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\n[![Publish Documentation](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml/badge.svg)](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml)\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"9cca0bdb6cff03c16b1de95bf68555abd23a5dd2","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint --typescript lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --typescript --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --typescript --fix"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.3","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.5.54","@balena/jellyfish-logger":"^2.1.34"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^26.6.3","sinon":"^10.0.0","deplint":"^1.1.3","ts-jest":"^26.5.5","typedoc":"^0.20.36","depcheck":"^1.4.0","typescript":"^4.2.4","@types/jest":"^26.0.22","lint-staged":"^10.5.4","@balena/lint":"^5.4.1","@types/sinon":"^10.0.0","@types/semver":"^7.3.4","simple-git-hooks":"^2.4.1","catch-uncommitted":"^1.6.2","@balena/jellycheck":"^0.1.1"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.21-renovate-non-major-9cca0bdb6cff03c16b1de95bf68555abd23a5dd2_1619398078682_0.8076739062427518","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.21":{"name":"@balena/jellyfish-plugin-base","version":"2.1.21","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.1.21","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"25e2fc4c730cbb29cf8621621d9dfa54b0276e25","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.21.tgz","fileCount":18,"integrity":"sha512-4Zho8vADENzORmd2bpt5hPJEYBPX64r0mOvnuu3Hy4kLh2642R4YSGjSGjwfhCkK9BORGhrPfNf6rCybZNpPtQ==","signatures":[{"sig":"MEQCIERFB3DaDwowl7tNNZkZtSDO5IPhLgNR6728etMxmnRRAiBRIwzBZp5Qcg4r2j2bbfQe7dTLz3/NwfCdMFqlYYqinQ==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":41414,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJghg6JCRA9TVsSAnZWagAA3HkQAJJ+dVe6/7XYxw3XbwAl\n/olvJPnrbw51qKCRIdNiPAb3xl+hzLwCxLX6kExJ3rLV3ey1HEix+fxC97YL\nXQu2ZpKCZeIRs507kBezZhTKnGPOdiZCk0hWbU/Hul2xp+h8xhGdo8ESXHKk\nRz92oK/mcKMyEKCRZok6gK7B0jJPkf1SNO3imXRaD1fFEjIT2DZiRTeYKphL\n70/QwbrKuBWh+7JS6GzvobFg8v1nkapUuMz0gjEuDMphn4+97m03qKeBTyLB\n2fGI5IN/M6IHm3j5Vp/vgIRN12qcQsZhwkmzDUOikqwDeTsYsK4e3tQ/Vvvo\nAXwWmCX+5qv3eupBAjGE8H3Xl7/KzRt6L8F1Za975fkJ600AMIFHLkdjvwQc\nzRmnDJ1FJVJ+xreCP1UMnjoN9dDhk+G8ZjGmfOQTTC5uQ05XqO0mZRHSs9tE\nCIFdbwVPFo8wABjpiakHnLbPWf/4d0GDJEf5XTV52KbDyCh9DAsyw2rPINiG\nO+2dLUPIvP+7pj4oE7A0CtgAanRnO4FBGsuiQKjWgPOYsLqFVevV5sKy/Hys\n5BmbhmXHwg8WVZGW4qrZRcGA8Iyr07A6zZlM9CgiAtnWbe5cljn0NoJV7FAm\nQR89ghn5S2hJchcwO0esoTwuBDlJzQHrJbaSltP+K9JgviXqfN3K7JxCVDWi\nqkrq\r\n=jfOI\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"b2cfb7bcd258731e2724b9e9b6093675672744c7","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint --typescript lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --typescript --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --typescript --fix"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.3","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.5.54","@balena/jellyfish-logger":"^2.1.34"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^26.6.3","sinon":"^10.0.0","deplint":"^1.1.3","ts-jest":"^26.5.5","typedoc":"^0.20.36","depcheck":"^1.4.0","typescript":"^4.2.4","@types/jest":"^26.0.22","lint-staged":"^10.5.4","@balena/lint":"^5.4.1","@types/sinon":"^10.0.0","@types/semver":"^7.3.4","simple-git-hooks":"^2.4.1","catch-uncommitted":"^1.6.2","@balena/jellycheck":"^0.1.1"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.21_1619398280969_0.4260145147077503","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.22-renovate-non-major-59f66aa336d2077ef5155359972e62c7704d02f1":{"name":"@balena/jellyfish-plugin-base","version":"2.1.22-renovate-non-major-59f66aa336d2077ef5155359972e62c7704d02f1","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.1.22-renovate-non-major-59f66aa336d2077ef5155359972e62c7704d02f1","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"92d23ce16e5942721465577e92660e70f55a7eef","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.22-renovate-non-major-59f66aa336d2077ef5155359972e62c7704d02f1.tgz","fileCount":18,"integrity":"sha512-9AKezL3+cOM754R7k8EFyqsAUg9LkhiIYGp8k/16v+PPBZJqff8Q0qpCKP9bKIdguF8iNYx3delq4/dzoRYgag==","signatures":[{"sig":"MEYCIQCsfaS0YfSVXkO6IKZyMlKFrUTbSs7+z7uQ+2V/53AwvQIhAJ4RQ0lq9fuWRRwAcw3uIQdFtTyp2AVbwRsZs2OWIje9","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":41576,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJghjTeCRA9TVsSAnZWagAA04QQAIbPF8A8uvedhenDz3UB\nIR9k4T4gccJDRG0NnIT7JF9DL4jWI6SYJ3FLcLIhLwoNPYksL7ZDbZxk1Ncv\nyQ6+mx/KYeWsZ9uWAWdaLqpFEQwqzXBdU9cO2/FdPEkM+1axbm31B9lvwQcG\nsqcCDFb8ldD6bXK9YJoBUmQ/UQKijATmrXL3wXkWsGafPVVn61qQgs3qxrDV\nGpDOF2D/GbvMuSoYOaSC/7UQfcaSMNJ2+ZNOIuj2elZrxA1V59PmFQhvFzAJ\nPPEyK59I4Mv4IfSSj4RAhAvNymM8J/86DGcutlI2kODpts5ayTmH7JuD2jLy\nvGpANMGvMC6x6NBjTHqUSh3CEEGQ5iaWShcbrH/F/BrPO9qUVmRV6tQ2c/29\nLxWrX2/nwVAchpWyKMbhcDlrcNrodM1CdIWRoTUP9NcaSiZp5LCfpp8EiSbR\nicjkAQRN7HYq0JtakqnIT9WXmtBMfLfcYCf3FG0PgfT4MFxqPGw1bLaRsN2x\nYeuqN3VsXuUbr/IZ7u6x3xjhFQz7Siqnhe2hi+faOqDMRRADcBOogVa8w0Hp\n/q//atCkIxN9vRdyAUMaCT1NpCTxPleHwWTjf4JWIbkm/jVdESTmruOONBT7\nIK+jnIduMii4HSfTHaa+rIiLLryjfIQYOV+3n05Kv9xRXd437FymstWi6gwM\nHGHw\r\n=+5yU\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\n[![Publish Documentation](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml/badge.svg)](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml)\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"59f66aa336d2077ef5155359972e62c7704d02f1","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint --typescript lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --typescript --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --typescript --fix"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.3","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.5.55","@balena/jellyfish-logger":"^2.1.34"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^26.6.3","sinon":"^10.0.0","deplint":"^1.1.3","ts-jest":"^26.5.5","typedoc":"^0.20.36","depcheck":"^1.4.0","typescript":"^4.2.4","@types/jest":"^26.0.22","lint-staged":"^10.5.4","@balena/lint":"^5.4.1","@types/sinon":"^10.0.0","@types/semver":"^7.3.4","simple-git-hooks":"^2.4.1","catch-uncommitted":"^1.6.2","@balena/jellycheck":"^0.1.1"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.22-renovate-non-major-59f66aa336d2077ef5155359972e62c7704d02f1_1619408094195_0.8242311671416809","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.22":{"name":"@balena/jellyfish-plugin-base","version":"2.1.22","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.1.22","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"5dc8ab66af5665840ded1f8f976a38dae3b325a9","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.22.tgz","fileCount":18,"integrity":"sha512-sGsdo0V170u66T5YjNXqAG3dvdFxw4Go16DWsk7MzU7XMoSUvarKLBGMICF4XjYJLrmMocCEQVqz62Kze/KgCw==","signatures":[{"sig":"MEQCIG9OcPHn7p/OI+8fE772l3T7DeoCD3W1ChYxAhM3/oYUAiAnCMhMOVzV+vPx+xkUzlbAEPgUp6lM9dNuqjDC8oaARQ==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":41516,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJghjWPCRA9TVsSAnZWagAADdgQAKNOTPn7tzh0Djxw28Xx\nQB+MjjXYzsNveQCSB6Sbdw3coVDjDqhfu9P/rRanEdePQkSiwx3L80SdDVQ1\nq/p1DeFEaUNRI8GJwM2oppCMd1RmZc4FKM39yQZpeHqORxcKUuac+KjdZnRc\nkvmU4pB5cqdXEQYq6jloaEIQ00Amr8NU/uOQR3lLuVxowSyDgHTxFzKi8HR6\ndBHMKSf/cnrXSOQ+IoRktuciU156Dun0hGcdDaj0ObR3qHOiJO3jJL4A2lLd\nMnkdAGkCGt7b6YCoWi7vISMxv7Hpn2l9FsBJrDtHCWrPUi+kmXw4BqxRsENJ\nAK9mtdnqHvkJGhs7ravR6nw+7vId181YwRcIujZvUlZW39qRHgF5zZylcWBQ\ns0XkGlQyAvCdOnrvo4kkutiaZnbsxMHKd18vD+2tQs1UpMfNeGIvEZpd1i0z\nPh547/v2LMP2eshGlfmSMQQSpw379KSyA8RhP9b+tDx+C6NHL/keqqfPqWZx\nRQiBd16JFbXCwmZiGftpCgf2TuPxa8Ru6lMN0paR6t4UIkkVeMi7/6VPvIWR\n7NBCt20hFwdhTOVa7KpfCV7QVGbsSsnAM7kf9YjL1oYioq2adCBEkGDDj1S8\nL2aSRknEM0V1aideNK2ufjmReg2T8z5haKGkC2VWLi2qWKMTWZx79g5vN/dD\nGTVX\r\n=75d0\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"7dfb0d842223ca02a0da375b5444bd7b7bb7f3f1","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint --typescript lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --typescript --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --typescript --fix"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.3","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.5.55","@balena/jellyfish-logger":"^2.1.34"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^26.6.3","sinon":"^10.0.0","deplint":"^1.1.3","ts-jest":"^26.5.5","typedoc":"^0.20.36","depcheck":"^1.4.0","typescript":"^4.2.4","@types/jest":"^26.0.22","lint-staged":"^10.5.4","@balena/lint":"^5.4.1","@types/sinon":"^10.0.0","@types/semver":"^7.3.4","simple-git-hooks":"^2.4.1","catch-uncommitted":"^1.6.2","@balena/jellycheck":"^0.1.1"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.22_1619408271127_0.5382080032678951","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.23-renovate-non-major-2c2e07fdc166c9a82ffeb393e217bce7ca75d29f":{"name":"@balena/jellyfish-plugin-base","version":"2.1.23-renovate-non-major-2c2e07fdc166c9a82ffeb393e217bce7ca75d29f","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.1.23-renovate-non-major-2c2e07fdc166c9a82ffeb393e217bce7ca75d29f","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"5b08bd3fa2529421607236eb4a10b2a730c1f53f","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.23-renovate-non-major-2c2e07fdc166c9a82ffeb393e217bce7ca75d29f.tgz","fileCount":18,"integrity":"sha512-TuYXGN/h+g6IAwSGpA03x85Prwun2ombogKOUWktDaP71kM7SCfpwLDucKAFkJngq5ycgzLqavZ48+mNGGyjkw==","signatures":[{"sig":"MEUCIElIrQ57mkRwzg1Q+fCER8dfyXFipqG7yCl3K9pYK1y+AiEAk5hxfyLtZMuZ49q8yDJWlukb5VOvSVsBkvZOyHAKjA4=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":41642,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJghqmsCRA9TVsSAnZWagAApBcP/3a/3qGaMsoZtwVcYKPk\nv3uNCAid7bJGnZ/S8wbfk2F2MlBArZTPIEWiENNGNTLq3YfkdEPxl52vBRr3\nJIJekmtn7Y0TZwBHIPxS01cNyZuDTgpVq78j6T66deLPbT4EILJ7hJARmkXN\nsoEG2ovIQ+u8cKOHX54aoKkVlUOMBQIGfgj86sqLG/+CaKs87gvi2Vn3tsc/\npDd7DdB6Od3JHir/XX3oMaYWFjQAu+0LvKzwfSXNbrDuiS35GGBgKtMEzIpy\nabvZN6zvh8IdfQCB0MJncDoU8Sh2AZ6EYllcnkNz0u6/noWuiPycU3xjIm9A\nVGSSqKEwYywJH8u9tSpGStMtejxB+XxzJ9Xf5fjUnXmSvlxczI7Ofsdx5ERp\n5sLqFMeTsXXC16QWBycXzLGg73RgiNTyqyXrJQyMUycKKincEkAORXapr0XL\ngROp2DGEiPLorkK5Ms9TGnS3MzF4xEu0qw3lIK5yk/Diw/hlwsoDFP2+/26L\nCqB+LcymsxhcAaUtQF3l8XFdhE0TaJiBjPIN8LcEbSQDoUuQsBXJWjndF1B0\nzqQSEV0g1Dsd1TycJ488qz8kD/TOK3k3z4LnSAgUaF72df7xkRhbD7TB+Dmq\nbTZpPCLmOiL4aopnivnLwyaFivSjY1QFt9+znQ6p2YHMfXoTM/40rsELXEVV\nEPdz\r\n=GOw+\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\n[![Publish Documentation](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml/badge.svg)](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml)\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"2c2e07fdc166c9a82ffeb393e217bce7ca75d29f","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint --typescript lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --typescript --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --typescript --fix"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.3","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.5.55","@balena/jellyfish-logger":"^2.1.34"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^26.6.3","sinon":"^10.0.0","deplint":"^1.1.3","ts-jest":"^26.5.5","typedoc":"^0.20.36","depcheck":"^1.4.0","typescript":"^4.2.4","@types/jest":"^26.0.23","lint-staged":"^10.5.4","@balena/lint":"^5.4.1","@types/sinon":"^10.0.0","@types/semver":"^7.3.5","simple-git-hooks":"^2.4.1","catch-uncommitted":"^1.6.2","@balena/jellycheck":"^0.1.1"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.23-renovate-non-major-2c2e07fdc166c9a82ffeb393e217bce7ca75d29f_1619437995906_0.5322347076458931","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.23-renovate-non-major-9d65e40c0b0b06418c06cc3a6d41ae578a4eb034":{"name":"@balena/jellyfish-plugin-base","version":"2.1.23-renovate-non-major-9d65e40c0b0b06418c06cc3a6d41ae578a4eb034","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.1.23-renovate-non-major-9d65e40c0b0b06418c06cc3a6d41ae578a4eb034","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"dc726407cb9126611ca6ef2325dec6506d58a73b","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.23-renovate-non-major-9d65e40c0b0b06418c06cc3a6d41ae578a4eb034.tgz","fileCount":18,"integrity":"sha512-OMZJvcaVmLiU8r16ZwVgRTbIeAUokVsZjCb8b6+21FNdcn2GidIF5unvjAhRF2AO/DX+LOknwkoT26/jVpG7QA==","signatures":[{"sig":"MEQCICSTgz0gcY5+y1f9ZuQOKp7BpdkKNUFf0SIqOJ8rkujMAiAfrZ0KC9MzTDAcUzMkAMipUrY6zpeqsWATlOvkqkTpNA==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":41642,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJghqrHCRA9TVsSAnZWagAA70sP/1vKaJUd734H3wJHdjbZ\neKDttpzYzQxeBiMLskizYHdk5W7IEJxt5Kb7cfmy1guJCPhT+KvnJwMaulHS\nVF1Sj+PARjTkNb0uKWOYuxdvJmJnF37Yuwwfglm91yaWbb6+MKkr2h9iIZZc\nmoDsUazJmCwVIu4Bh8wdlaQQm+MqdK3g+yThyRgsFIWeygaDDRb7FV+TxiMm\nstmlg0lF8Pu9wY1V1TRcE0n5xARNVCavkOWiZQvIeQ8RcEpfP3vGDMXOiULO\n6hRkxPmADKEme0yg5MfGBhnZg8N6p9xWeQzWUnSHbQU0+8VA83Yj2FAoonBP\nBUTON4ulCs7EP1LzlB70YBomj5DGdP2NLYk2eiZ8qbYgil45zd4EnXBJZfHL\nx1hAQ6+Gn/DqzbOa9wdY+Y3rt9Smpac9Ere5kp0spbAKnXLoqI562XfqdhXc\nGZEUqiJctqfTp6/I+sx0hQbIMdbG6n1Z9UJ5KZpNQBx1z5Ap8fCJR6+37nue\ninRfaTGNfOZBX1SCuqQd1g6xfS1uK0QY9+1ZUeOzluKL+wXOaucRZ1yM/8jB\n0M20jOW+FI3S9UQ1iMMXoV4eVuU2xHj9JuRQtrIs0Y3arq7ZOMhCCrrKnPW6\nIRxdN6+yiQaPSugss9tl7p4VU+vqu7KvN1rqdLZF0u4ErAMcLoQAhjwF3Pbv\nAf2H\r\n=mZ53\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\n[![Publish Documentation](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml/badge.svg)](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml)\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"9d65e40c0b0b06418c06cc3a6d41ae578a4eb034","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint --typescript lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --typescript --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --typescript --fix"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.3","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.5.56","@balena/jellyfish-logger":"^2.1.34"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^26.6.3","sinon":"^10.0.0","deplint":"^1.1.3","ts-jest":"^26.5.5","typedoc":"^0.20.36","depcheck":"^1.4.0","typescript":"^4.2.4","@types/jest":"^26.0.23","lint-staged":"^10.5.4","@balena/lint":"^5.4.1","@types/sinon":"^10.0.0","@types/semver":"^7.3.5","simple-git-hooks":"^2.4.1","catch-uncommitted":"^1.6.2","@balena/jellycheck":"^0.1.1"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.23-renovate-non-major-9d65e40c0b0b06418c06cc3a6d41ae578a4eb034_1619438279010_0.4065180246230282","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.23":{"name":"@balena/jellyfish-plugin-base","version":"2.1.23","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.1.23","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"b9e346575388cff97390b8cc5cdfe3b19310b5c8","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.23.tgz","fileCount":18,"integrity":"sha512-VMlcjy2mfUOIdic0PxuIIaPgRfkvUA4pJzykVQrbhXtIdDLqlbvleA4A8HLWG7W1ZY5nYqRJ3itbYxjzkbsVcA==","signatures":[{"sig":"MEUCIQDRX0wnBNxf+MQRBzgIAScQlaZCwuoUxHrqfUkJN3es/AIgV4NDUGW7Xd20ymmQXR5A3hL8fpHgLD9Iq1t+9mk0HJE=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":41582,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJghqucCRA9TVsSAnZWagAA6KQP/30dgarPGUTYrqSksrMF\nqseAfFck29RI3GHRLluco4M1UjEVhMwTneu/BhFk2p9DAQRGA7WTAHuXKPM9\n6GWA8UHuQaQuXdcU0/8uinUlsjAMeTjvLCAQdp/Jphw1spxx8nK4E8mV/dJz\nb/D29a4j3W2fhhWk9E/A/4AlmUXeY0Z6MBbXY9wFW71XQoZwMekf8qqNruY/\napq5YpiCxXlpdk02U93h/x5n3IBqvNxeMWNmoWdYyRTE6xymOPO1sEkdSdJk\nTZ4mO28tcyQ5mYvIw/LDmbUxqZ8+pY3nVpLm6Ppkd/YfcpnMcqLdzjeDMPot\ntIH+hXEgB4xUcJ9Muw4kIelEp89UWLwzovNBzflEsdUbqX2uJals6iCOiSFW\nK3fOzzIRpT0+tVxlyd8i4mk3UWR44YLiT6/ikRhDy/mKLQE8Ox1mPdIPtKig\nFDXKZjeM2Yo3gMAP1lgDKFAL+xNtmp6xvlMl+55r/JhVx5y9aYePFhq99TNz\nu/2YeJblOlAGEWSgGg18GhSKyCLjd0nkZotDkpbLcuTbSOHBAuQw/jWdmqIG\nGTBqc92DAnIx0afRH2PQXsfH9Q5RrATiongjhxsDvm0wV1PmZBunieQpBP+9\n8pVrvPAVTZIXFu5MjP1XOatFHAOFAX4Hn6fQiC19aHUc8euFCezw4XWYxR6S\njsZ+\r\n=A4Uw\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"1690e1f04251e4a09399550de067635b8d11109f","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint --typescript lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --typescript --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --typescript --fix"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.3","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.5.56","@balena/jellyfish-logger":"^2.1.34"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^26.6.3","sinon":"^10.0.0","deplint":"^1.1.3","ts-jest":"^26.5.5","typedoc":"^0.20.36","depcheck":"^1.4.0","typescript":"^4.2.4","@types/jest":"^26.0.23","lint-staged":"^10.5.4","@balena/lint":"^5.4.1","@types/sinon":"^10.0.0","@types/semver":"^7.3.5","simple-git-hooks":"^2.4.1","catch-uncommitted":"^1.6.2","@balena/jellycheck":"^0.1.1"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.23_1619438492399_0.4150350118158528","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.24-renovate-non-major-f8f22dc9335808c78234e110921529b22034451f":{"name":"@balena/jellyfish-plugin-base","version":"2.1.24-renovate-non-major-f8f22dc9335808c78234e110921529b22034451f","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.1.24-renovate-non-major-f8f22dc9335808c78234e110921529b22034451f","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"f8b9b6f6bbd24c9d2d8a84f8d0b12adbc448a74f","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.24-renovate-non-major-f8f22dc9335808c78234e110921529b22034451f.tgz","fileCount":18,"integrity":"sha512-vJ9NNjFK+gdp3lv2Fsnx63k4yV93m6O8UXja6+bJE3yz932oPi/E6xfcH2IwTMObAkvFjJshScbO5sgzLLXa5w==","signatures":[{"sig":"MEYCIQDKoIAMzdb70NDqSBctJR2O+/8edt8ZLOtdmRuPzI4+kQIhAKUvou4zmDCnJpxnu4XrSZgKSxFVfpPg+g+GePoUE6gD","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":41745,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJghq0/CRA9TVsSAnZWagAASn0P/Rv+ljc8L0eN2mdNMnQe\nn4HtspApHrYLmwkyVZfpk6by1q2rBnpbH2xlcRXrmDEINLHJd60HIJIAxaZ9\nqboeA3kZSefPYWod3N1M+bCAM/dwD5NerFw3CWk8lzMkn3c5JKiZoZJlW+7G\nfM0JQCTksI7hKxaz1xsqNNw3hmDT8SO4oH+g3spkRPt10kZjTh+0J/4Zjrhs\n8XpHwrIw6Gcm6oeVKuUncDiJkAKsmN9Jn86DXM954weFpNxvt/xwKlV3M8Nc\nShEleucRfpRwmOI/xzO7c+1ARFASCrNF1Lyqd1+UjzTwKtdvLrjSXK14DeRa\nGCdJxCqORmuz5O1tuyeoNvxwow4+4c72fBy64Q+fkSddtI9mLv+86i7w7Z1E\nH7UAaKZfXCoFlCZk3dhyWpb8Dvl6SSg9kFaUu1FaUxajL6PHEKIqD8yYkDry\n/22UG7eNYa4ZoSjxqFl298UN6RvRtmoqu28kZiJwHc9Lfrz1Z/T0zC5LTlWy\ntYHXirALj+LqB2bdUZvMoag8RjOmjNiDUr3gzpmDR7dXU/3gn/lrgf/jHeH4\nRce4lhLtfDtOTA/tRLHnO/+aZn1zGP/W01lx0jFwJHHyFxpHJEILPmZ2XTP6\n9gkvHUweqNJeno80Y7REEkjQOFDQFbkjEyLigkECb/OcBzo2MpDTmWVIsaa5\nA2/F\r\n=D8w1\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\n[![Publish Documentation](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml/badge.svg)](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml)\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"f8f22dc9335808c78234e110921529b22034451f","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint --typescript lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --typescript --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --typescript --fix"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.3","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.5.56","@balena/jellyfish-logger":"^2.1.35"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^26.6.3","sinon":"^10.0.0","deplint":"^1.1.3","ts-jest":"^26.5.5","typedoc":"^0.20.36","depcheck":"^1.4.0","typescript":"^4.2.4","@types/jest":"^26.0.23","lint-staged":"^10.5.4","@balena/lint":"^5.4.1","@types/sinon":"^10.0.0","@types/semver":"^7.3.5","simple-git-hooks":"^2.4.1","catch-uncommitted":"^1.6.2","@balena/jellycheck":"^0.1.1"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.24-renovate-non-major-f8f22dc9335808c78234e110921529b22034451f_1619438910695_0.5401384668944869","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.24":{"name":"@balena/jellyfish-plugin-base","version":"2.1.24","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.1.24","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"5f98de52497f6b13544003002fb7e7728a3275de","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.24.tgz","fileCount":18,"integrity":"sha512-YLAYeCaoB9ztDR3gPX9nKTmbRpylP67xRi//Xlz7wdz1JJEmY2i4uRJZ/fnTtL/2ZPyOO0xWi4FNQ1hDMxqM8A==","signatures":[{"sig":"MEUCICTgeDjJtbVpzExqL0UEkRBGY2kq55fnA4kgu6y+0sneAiEA/D/cGxn80WkCU/4nK7YmmoWD6JPjIjFLvAIALjLjBe0=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":41685,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJghq4NCRA9TVsSAnZWagAAFHwP/14nyFx8dGrz738iVwJ/\nJVXkTvcuCCmWsXOZHqiv3tafQU5eKiLpiCXdoVHj1S4Rhl7j4YNtVLCfv9Tq\nViMabjG+UhYTvHidvzu0+4B5YXPUk7Vp2xR6Fw5/eC/+XX84zhdJzCQA3NYY\n2+VibxRI4xNnT4ehCqgGLGx1YQMrHf1o2bG9nQGP9CiSe8Ot3HB580LgwbRn\nFAEd5FDjL4YY/GLGcgm/Pte/6EtkrNK1n22Ooj2ZJnLClH95DdpUdnA/8hBT\nYUU/jppDYGRG/bIkuwYfVPDxOlvX/fEQ1Ciuo6Wr6L/Lnr65bsrZXMyBu9gn\nw5ovdNMLSsh5RgvFYn2cTJAGuVWBJ6PlfBk+O8ZVkT8fgbkKRs3vI8XjfuWm\n41hgEqZISunyArFHLw4dKCLCZq8leS9EazRmRfYsiC52uaXNmasH9zSRcMzQ\nFRgmZMDz9RDZoDjVRqVKN8ucFN1ylB5MbXkT4LzX5U62Rn/v/+qMxqA9xoPr\nclk7a2MJqHwA7bz6bKScvSYhdPBlfm0xcBgg6RrDpYhnIfnoxfbeB8cYCBqo\nLSS8W47H3i/TTL3JlBpczVTSMDQH3Il+Oy37gE7m9HFZZnsSNVaD2juaOskg\nWlEfDUdJtDAHFMzx6pzgrb3bVsSkceQg751rvc3404NoXlnGeqQafgo78Nif\nJsRQ\r\n=pJ3a\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"a18f9216e354709057cd1b5b11b6acd92972851c","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint --typescript lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --typescript --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --typescript --fix"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.3","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.5.56","@balena/jellyfish-logger":"^2.1.35"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^26.6.3","sinon":"^10.0.0","deplint":"^1.1.3","ts-jest":"^26.5.5","typedoc":"^0.20.36","depcheck":"^1.4.0","typescript":"^4.2.4","@types/jest":"^26.0.23","lint-staged":"^10.5.4","@balena/lint":"^5.4.1","@types/sinon":"^10.0.0","@types/semver":"^7.3.5","simple-git-hooks":"^2.4.1","catch-uncommitted":"^1.6.2","@balena/jellycheck":"^0.1.1"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.24_1619439116818_0.5443598546373225","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.25-renovate-non-major-6245ccfbf62c4ce8236dc3313db30e0059fdcbff":{"name":"@balena/jellyfish-plugin-base","version":"2.1.25-renovate-non-major-6245ccfbf62c4ce8236dc3313db30e0059fdcbff","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.1.25-renovate-non-major-6245ccfbf62c4ce8236dc3313db30e0059fdcbff","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"4e83037174ba24eeb3d2941f0e8b030aecd5d06d","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.25-renovate-non-major-6245ccfbf62c4ce8236dc3313db30e0059fdcbff.tgz","fileCount":18,"integrity":"sha512-fzyz8kcQUaH1+JGyxAHBmF+YoFQchcvv1oBat/n2tcupdVUR7IjC41LjcGWhwmuTXl2KG+oN6CuGKtKNDtojgw==","signatures":[{"sig":"MEUCIQDLUnN0G4+0rFG54AEe2m05vQ7greZ090x0KBAeSlWD7gIgVQbV/mRj10CmO0BJQGE/HpgvV5HGuArj2xd8a+wPiHg=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":41847,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJghxKACRA9TVsSAnZWagAAWk4P/0Ka3l33iX40y3I1PCrr\nBbKkSqOquG8Pqg7GM6P3NUPOzJy7bJNeenUcEX88YsqZb/CA97umpUCLvdl7\n8i7k+BGKz6zEzcRQ7DUkGPCUf47U3QSJachRjmB9PhJlkq+QlvhEoZqCfxVL\nwNVIm7zNHrK+C75r5fzyHy0SgWfurDC20kassJP8PpGLxuUxllDAAtQFbQGb\nL3EmoxdZ7bjpF5iBgm9jVk9yiCFVJAGh9yiMUhCOws5dNQNzPQ2V9+1yu8WF\nGXCAUgleZw596O8JvCrd8WuIP4Vj9PLW74n8bqVbS/cuOGXuw+iamP5b20fy\nGIFQx0KkaGFl+gJtuWkgBBIRq06Kyqr7Z1cVO9MgY5xQtgCwbuwZjvbMplx0\n5inZ0m76utTwV7YAVjnpvZYo5x2NvhPCyS6Q3BO72LOz58V/uth4QI9wtdD6\n17v98gTlG2K6A5Nyhn8PXpTGIKPTked4O1dlAL918h08GLimVNJNb+jqRpag\nkoS3AuosZuSwcCqUTiz3Ou/o+VoYBFzJfWU3gKqGacPYcsCeuW2GoU8rqxgd\nKu4lql3t8IUkm6+maxOE9fnUCilZwmhWaosP/lL0QgUO/CO0aQZxNhGONkNU\np645LeLd+wJHgEnFtu8JqIhtRghVaPSY+nT0zmIjt+vGgYlWY4DmxDelrB/v\nHYLJ\r\n=r3BO\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\n[![Publish Documentation](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml/badge.svg)](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml)\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"6245ccfbf62c4ce8236dc3313db30e0059fdcbff","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint --typescript lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --typescript --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --typescript --fix"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.3","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.5.57","@balena/jellyfish-logger":"^2.1.35"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^26.6.3","sinon":"^10.0.0","deplint":"^1.1.3","ts-jest":"^26.5.5","typedoc":"^0.20.36","depcheck":"^1.4.0","typescript":"^4.2.4","@types/jest":"^26.0.23","lint-staged":"^10.5.4","@balena/lint":"^5.4.1","@types/sinon":"^10.0.0","@types/semver":"^7.3.5","simple-git-hooks":"^2.4.1","catch-uncommitted":"^1.6.2","@balena/jellycheck":"^0.1.1"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.25-renovate-non-major-6245ccfbf62c4ce8236dc3313db30e0059fdcbff_1619464832349_0.5741054088114086","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.25":{"name":"@balena/jellyfish-plugin-base","version":"2.1.25","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.1.25","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"80fdf775c6a5274e1b0392f1f1d7ab66a6f0495b","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.25.tgz","fileCount":18,"integrity":"sha512-DGGflsAwNZ9P2zCl5OvbuCtau5BqwhPCRm3h9fAC4h+eJ4fG3/zDZkVA/oaI2QFcSVFYL54keySRGxuCxQfkFA==","signatures":[{"sig":"MEYCIQDgpgN9AtA2hHECyuxUlulkjbaJYoZ7ePUzTm9Ul4Ou6AIhAPcTSRdqzafQQ/lK44MJMNJsP/5zFcqURv80ClRN4JqX","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":41787,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJghxNiCRA9TVsSAnZWagAA6nQQAKEkAghzgOEWyFNRW4Mf\n4jd0OgbdLbdmPZxc7PhLbJNJD/OA8X/aTV43v2J6RlC7tSxWB/c7Nbouu7hn\nUVnvSY/fWTKT924eYY5dNsOiXNviUr6R1/TsqqpCNlinqksj+TvNEZr+HzBm\nYguYIeLi2sYIEaqkxwyrtQpH4t1CYY6lM1gxFp2JwYkopCtwFziqym7tzEq8\nXDs2TnWBNDtnA0zybvygE4BkFYQ15PtoK9o/nDvoDiL0X4brRwVYSCZm23Tx\n0H/0sShB4Xi+Az6d87RQ0IvUfirzkrtAHJt9uELZqy66EwNKtzViM8KcQBYi\nsr0INSUL7llsYUcftAE4ZGmHaUcJsjMSoEz4HG/78tUMGQzEKNC0r3boBLay\nGzR0ENGsY2R10kf78wDae/al/dssC9D8ZefWGH8w+QCvu+1b2T+nXIMF+TL+\n7klpf62VkwYh3jRoYBOGsyFVA65Il0bZRaMBc3kV82e7Me+64tVpt0OyT5nI\nOFLFVnvhVBaL3aWiMyuNxY5+AXXKtnSYRN5uZskqSpg3DftnAX7yiawm176I\nhikCIgyAxsOPQfgx2x8p1YM7WFnGIaaSiNzTXvmWYLIOrKL37eIoQiEhNng/\ne+sk+LGJqhFJrHZTcQWHs/UcjeWo9Dbq9lcclQDu2RmF62bMwhnfoJNoAl6I\n6wdH\r\n=Z7Ys\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"5d81c110d5f53888a8fca6d2b64231ec295133dd","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint --typescript lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --typescript --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --typescript --fix"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.3","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.5.57","@balena/jellyfish-logger":"^2.1.35"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^26.6.3","sinon":"^10.0.0","deplint":"^1.1.3","ts-jest":"^26.5.5","typedoc":"^0.20.36","depcheck":"^1.4.0","typescript":"^4.2.4","@types/jest":"^26.0.23","lint-staged":"^10.5.4","@balena/lint":"^5.4.1","@types/sinon":"^10.0.0","@types/semver":"^7.3.5","simple-git-hooks":"^2.4.1","catch-uncommitted":"^1.6.2","@balena/jellycheck":"^0.1.1"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.25_1619465058493_0.9192727974637658","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.26-renovate-non-major-121d38cd90cf5d3c575abd8a451e54dcf3918489":{"name":"@balena/jellyfish-plugin-base","version":"2.1.26-renovate-non-major-121d38cd90cf5d3c575abd8a451e54dcf3918489","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.1.26-renovate-non-major-121d38cd90cf5d3c575abd8a451e54dcf3918489","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"c568ba78713704f247de47a7cd9956638550740d","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.26-renovate-non-major-121d38cd90cf5d3c575abd8a451e54dcf3918489.tgz","fileCount":18,"integrity":"sha512-ihxUbqH48NF06mJ1kTj2+YBGDrywhMtrxdJA64XUA9qyNDIA6zusSLh5Lnk7X4Tj4036Y0OTLabctTVFnYhJFw==","signatures":[{"sig":"MEUCIQCNztIpixUTDGmHG+43MzfwF/HKh6HsLx6UhbQGHUlpqAIgNc/yhBwm/0RwD9RCtwXlsIORuae2rkYf3AReEE0oo84=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":41949,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJghy9DCRA9TVsSAnZWagAA8UcP/3nVM6vmjboWEfjrWR2D\ncTbGk1U9QCjW7WhS2EA4IEa0GFoEtoyn/yKKqUVjRCy+/1kUq+xbRMcMYDhQ\nIIq+xS7U97jnnJTlEwtuWpQ76QYWY8PI6k1ep+boOyWtR2Zm1BqYjZ11RzyU\naubHPrI4aWSdE9+t56WXy/r8C++ssAyzRsiISMZuARMvYOLR0FaJGOvid4aU\namLKyWIdQ9ajH3SBlGu2a4XkrtyEQIlolwmDm4pGvS33ngBl8hp4E6ZAZUl2\nRxXcAyKiPaDQq+PzOXV/KMgVpj9g0VuqvK73B0fE5eCAXQoVoG8fQw2BORLj\nw4f4mKYmVFPe+ODUbPKUgEy2VYyD4U/lJLgW6BlFKmpZQaAVeUk6zpv+GAkK\nsrqYqIecz5kJyGL8aw9v5lPP7VzYEvqff28V7uH5HpIRpmorl0T6Xwz8N+bi\nqac/2xCCwcgZEuTVvZAWPAA1XGYpuTtnpfv4e4CsMUgsT4RJNiB1tddduOvg\niLwP56Y1lHP9Kr4bIZnaIanBWItk3dW+QzWlZnvAFt8NlBqMLaaSNIEQuW2y\n/N1N26JL3iUPVj0HQDPgM6YmBERaxgha2GmkvJA8VrXxbz4nDSYxvT7nDe4Y\npzcA6lBmI4Bfu1ugKUfisIOEDIYCIE2LyHJGFngW9Au4+2LudZbxWFvX/stm\ndimS\r\n=IOAd\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\n[![Publish Documentation](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml/badge.svg)](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml)\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"121d38cd90cf5d3c575abd8a451e54dcf3918489","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint --typescript lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --typescript --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --typescript --fix"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.3","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.5.58","@balena/jellyfish-logger":"^2.1.35"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^26.6.3","sinon":"^10.0.0","deplint":"^1.1.3","ts-jest":"^26.5.5","typedoc":"^0.20.36","depcheck":"^1.4.0","typescript":"^4.2.4","@types/jest":"^26.0.23","lint-staged":"^10.5.4","@balena/lint":"^5.4.1","@types/sinon":"^10.0.0","@types/semver":"^7.3.5","simple-git-hooks":"^2.4.1","catch-uncommitted":"^1.6.2","@balena/jellycheck":"^0.1.1"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.26-renovate-non-major-121d38cd90cf5d3c575abd8a451e54dcf3918489_1619472195216_0.8075275094451213","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.26":{"name":"@balena/jellyfish-plugin-base","version":"2.1.26","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.1.26","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"f8d2dc955bb070ba20172450b764327c25e73ea6","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.26.tgz","fileCount":18,"integrity":"sha512-e4gp/KAJ17pqQ+CXD3AXmWaQ0B7BvdoqgOSCBmfXtuB8zCH0ESwWlytSM8YKCssK2dY6774OeOf5d3LnS4ufUg==","signatures":[{"sig":"MEUCIBf59boGa5S+11zKF650wN3KlHaJT95Sj7jTCpiLplkXAiEAsF3Q/fQ20BqFgNPpLiEjYVWQ0vPF94WbQfIqjxkBaFk=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":41889,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJghzCtCRA9TVsSAnZWagAA51UP/0e9bU7JNic4VwLwKfIb\n59D/nm3uNw/LMdvjQvvfiUltBHC/hSvfbK+ZUsrXU8C2bG4XNC15b7xItpTv\nDZseUZoDFhy3L6ZAKMlIYx514/EaT77bCePGi+JIxMjw3GpehRk0JPPyghCD\nX176u/aDHAA42MVa72SaD3hMAvKBtgXXLCAkBXxrCg5n1DKLNoVDOdjskhBl\nUiRBd992IQw5xx9xkZoDTeu6+popC03zeAAb/iS4+zN4n1tvaLehj7Gj9GYG\n4MmqCQtai+5oeGfHuuCW0Ne6jfkb3nBvRIKZVnOLGf893xhApcQn4cFLex/x\nGwgajtkBCdG8aXPiiiQEmhsyq0XyfuXQFWk9FkRIKNnYScdwvTYwde4hT2U0\nMkELm96Wnx23KvHaiezej+JQGU3MIWLloix/YJNRFzKgE0b9gzcWzZtJa12u\n5/iJGykNaqSI3oGXLgxovH6WAro03xaqSxp+H6d8aTm0mWSOoBJiCX9bK9lU\nUCGRp+Q4MA0aaOnNJAld/fJO/+eWIoliBHOTpQKYOdpj5EAGn08hRyyxuMaa\nYH9aWUkOB9EoWhHPiztrzzFKRn2r7VBQauyLgTRN3piz8fM98I3nSxGBiY0Q\n25anbxX09jpKKipCiuYa6xIIqOqp6XrBIlrMx94S2Kf6j7OjajYUI+nCWS/W\niz3V\r\n=9cVi\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"c93090da1a67c8a2e7573e6f0ddc608d492b5a32","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint --typescript lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --typescript --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --typescript --fix"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.3","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.5.58","@balena/jellyfish-logger":"^2.1.35"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^26.6.3","sinon":"^10.0.0","deplint":"^1.1.3","ts-jest":"^26.5.5","typedoc":"^0.20.36","depcheck":"^1.4.0","typescript":"^4.2.4","@types/jest":"^26.0.23","lint-staged":"^10.5.4","@balena/lint":"^5.4.1","@types/sinon":"^10.0.0","@types/semver":"^7.3.5","simple-git-hooks":"^2.4.1","catch-uncommitted":"^1.6.2","@balena/jellycheck":"^0.1.1"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.26_1619472556601_0.45506142232551783","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.27-renovate-non-major-c418f2e5539902af66c250d4ca9d47a7408ba9b1":{"name":"@balena/jellyfish-plugin-base","version":"2.1.27-renovate-non-major-c418f2e5539902af66c250d4ca9d47a7408ba9b1","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.1.27-renovate-non-major-c418f2e5539902af66c250d4ca9d47a7408ba9b1","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"135c2239952c00dc1b2b23d763ba53ce6053ddf9","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.27-renovate-non-major-c418f2e5539902af66c250d4ca9d47a7408ba9b1.tgz","fileCount":18,"integrity":"sha512-vx/GnKVLE/86ozYGRzd6klgCwoZoK3jK0fQhIDj1s1Zh6HXA1Wgz3fityW0Eg8TCSp8eg8C82C9WPZqrcITPAw==","signatures":[{"sig":"MEQCIEds3G5aS5R97sDsTdI1hO62JnBBCFQ3UAUt8xiGK/7UAiBA5unijrVq9yWsQm1SsPHD/I7z4oR13kn7osZc9JcP8Q==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":42052,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgh2XcCRA9TVsSAnZWagAAcNwP/2pgLWUOQeQc4StqRPYL\nwkv+9HKkZv0u1YH77O5k4KcTTSCe6a9fPgbfkHY08tn03lllAzxAl43G2oFu\n4R4Q4jrYDrNXoIuqc+jpFW+nXaS/1eV9FOZJXioEQW+7JaewGoN9m4L3ErlS\nN5zBemadylAv/Yfz0kYzvgH77KUBtHizIsDh9VyEP/z+6zU9vTWnFfNZBma9\nLSXIg9yzz2L1MDCIhTk4IBhiKDNMR9CmPrBY2IZfwkIy1VEhjRBBMQfA7nQH\nnGAWbuQIpecoYWeIpEY4OZtykGAguBP32GNPtymjjHYEamDCxj5lws+ACxqr\nny1HYA1Ckrtiwl4P8HD35SPrbNUUVF9DJU6Z5Yokn1oKGwdTAKQCJSNiMmxX\nYXorjfZuHG6m2VMO9PnPSvAuX8etRmNgwt0OGX8B/A6du0U/EO+fvQWxVGTl\n24lIsnLQm0OwhVUIIuo7EK5kzuSGNVeqGhNB+P2jqM4m3+kqvjaPdZdltA6R\nLorlRFS7uuAGz90RudTaXnsGxjn/3zVH4b3N990r+cOF0GVB6xcGI2Soh1Sg\ny7M8yyrttfUmtLMCWF0vjtCj+sTPtk6VpszUU+IeuQJJSafLrv9Q//9Qi27t\ns90L5qSoKTmKpJkaXWX3osO11FUIdrqo1h2gwdfnkEFCfZtbao2h351eXYgF\nVgLj\r\n=CNhB\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\n[![Publish Documentation](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml/badge.svg)](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml)\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"c418f2e5539902af66c250d4ca9d47a7408ba9b1","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint --typescript lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --typescript --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --typescript --fix"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.3","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.5.58","@balena/jellyfish-logger":"^2.1.36"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^26.6.3","sinon":"^10.0.0","deplint":"^1.1.3","ts-jest":"^26.5.5","typedoc":"^0.20.36","depcheck":"^1.4.0","typescript":"^4.2.4","@types/jest":"^26.0.23","lint-staged":"^10.5.4","@balena/lint":"^5.4.1","@types/sinon":"^10.0.0","@types/semver":"^7.3.5","simple-git-hooks":"^2.4.1","catch-uncommitted":"^1.6.2","@balena/jellycheck":"^0.1.1"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.27-renovate-non-major-c418f2e5539902af66c250d4ca9d47a7408ba9b1_1619486171498_0.8648777538613936","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.27-renovate-non-major-380491d80bc1871dedf58b89f7db965ef24b1884":{"name":"@balena/jellyfish-plugin-base","version":"2.1.27-renovate-non-major-380491d80bc1871dedf58b89f7db965ef24b1884","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.1.27-renovate-non-major-380491d80bc1871dedf58b89f7db965ef24b1884","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"1cbeadc3b5296fe9e4d4c76f206ce33c72fce9d7","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.27-renovate-non-major-380491d80bc1871dedf58b89f7db965ef24b1884.tgz","fileCount":18,"integrity":"sha512-892M279ddYcGG985rUYxU1iU1YWTieNuBgazbr3Xvy112XtrpDGedpfWk9qywxhITnFY4z9tIilfp0Ps7I9CGw==","signatures":[{"sig":"MEUCIBw/VZirjcxE62Y32Np72nHA12smIfSLYXnFwx8iOFx1AiEAvYalUrLPqRHTge7l0+vZ5tOpQIroBskRJ2VQOBNGwG4=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":42015,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgh3lXCRA9TVsSAnZWagAAcfkQAJVX1e9FIaoZNZfS3/tS\nlvz7vF1sn+cUi9Fznmscix9rcrDX1Kllnpe/zZTVGjyy+gTIQrCDuCBpGJVu\nM1N9rPXXW7NQc2cCVXT0K4eAtO2rt1XxXhd8Zj5+/nnhxkvvmWCzo2PK357H\nQTkKDZJhBF5Gj7/yyiBKqs7OZ8RJzQIPLreXYDT/N2GuKh1aW2W+4gUc9EBd\ncNziN86PKOckMip1buJ36F7wDFvOVOVP/qMmQkRVK4NBQvCJsIFFqG1KA8Z4\nEs2CAKYGxaqLIOT8qznEYb5ntwzQ+/WPoUj7y92N9xrbr9w0qzVE640LHw47\nTGEWaoEJ7FhJ/NLAU0OoFYBjewpB05gjDHKxhRlNgT3QSsVnShSB3ootJuiy\nMK6As5Pb2LxHu+BBuG6aZjN6rfTa3zGV5mYCRmr6KYxYiW6wL4suEEOXQdXb\nqaDrbiOXa9nrJAUWGtKlqGvIgZc5ZNoaZwH8lwvSs/6ttJyhyovFHpKfh5Br\nc6aleO1bSjwF0Z7cYRcnuUVj2GmhWfYbE0FdpWUoZgeX/dXs1wgoJHlsvQO+\nIjb8K+BtzRHc8MI3z34WNPXlfgaKgCtq654bKkBjuEVqfkb1R4ZEhicc5ztd\nxN6MiEBuqJA4aws5mlzm2eXIe7SdxHhrrxqC2xe+ba5RbritLARYS2dGK+c8\nz8cJ\r\n=iRCk\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\n[![Publish Documentation](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml/badge.svg)](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml)\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"380491d80bc1871dedf58b89f7db965ef24b1884","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint --typescript lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --typescript --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --typescript --fix"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.3","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.5.59","@balena/jellyfish-logger":"^2.1.37"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^26.6.3","sinon":"^10.0.0","deplint":"^1.1.3","ts-jest":"^26.5.5","typedoc":"^0.20.36","depcheck":"^1.4.0","typescript":"^4.2.4","@types/jest":"^26.0.23","lint-staged":"^10.5.4","@balena/lint":"^5.4.1","@types/sinon":"^10.0.0","@types/semver":"^7.3.5","simple-git-hooks":"^2.4.1","catch-uncommitted":"^1.6.2","@balena/jellycheck":"^0.1.1"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.27-renovate-non-major-380491d80bc1871dedf58b89f7db965ef24b1884_1619491159133_0.8146272021954759","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.27":{"name":"@balena/jellyfish-plugin-base","version":"2.1.27","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.1.27","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"9393e6f2bcc881e90de14fdea87944e4b9e49c14","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.27.tgz","fileCount":18,"integrity":"sha512-q8ZzKTrfGgEpJTrHF/hm2IGYWMVby9MthN071zmD/1AO4j9Q51v7i4rKwKOeEzXq3DWy5Rc0ms4Jj4rp3i5f0A==","signatures":[{"sig":"MEYCIQD9siOajb1ZAIFqtTGFbNkdpr8H+lO7AN6zPzRhU0rGhgIhAN/yktYHyTRAWFU26YKU6njKEAxkGF0bjAVHkJTo7SpT","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":41955,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgh3pGCRA9TVsSAnZWagAAzGwQAImjuOmISRec0e25+lvD\n77zG4dmikidYc8Fe46Y1i8phpisNcr1+Vva7Na9STt24yEx3OY3oZjzXHBKD\nqO8YGsni8RPiXowURnG1WLXTzWNZuQBKKabAOxRwMyjko9JUpYBBeuVQm+ei\n7G+Tql/WVLs3tyazH06+xEREwSdvfaD6Rv8x/ARBwPijgqDWs8cfP4wQzFPZ\n+px/Pb0VCtCwLizxflK75sZgNpEZylsqa20NDzP9Jdj81mSkfiMOpWg8sRHY\n8+eUjx99SVNgR32t1/4hVDNZjOzp68wSncvpdcgyeBsMC9BXp6+bL+w8kwHa\nDjS6rde+u33oN6D6jDaFGna2JwACmePQ+SkC4vvtTMcr6+OpzCxWKN46W9Tp\nhx45sizdUuGMAzwd3ma6SXXj0KJvTm+u1v89Q4TOgkqYD41zxKlAL4fBlUMn\nIGEzD+OSbH1yKEq9PXx6yneqBu4uNXbZRVaZ74mm0aVAzbUvCwihFsLHEY+p\nKXOzQhVYYSCxP3RYiLv6D/Wl+goaDdQiPASRkr+ujeu8nuc2gn8dtrnwpZ1D\nFOOA2WPdnm6ZXpnAm/u+ENQmeZbO7i3iwuEs5eua9JWiSll2jhqZQjne+Pie\nGH7WDa5FgXCrYW6MmrJEFmOT4Uq2gQ+hphV1Vz+u0AJCVl33x2neMVkg+79H\nwYb2\r\n=YW8T\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"33e84b665da2b7827f504d2a35433b15bbc6197d","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint --typescript lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --typescript --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --typescript --fix"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.3","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.5.59","@balena/jellyfish-logger":"^2.1.37"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^26.6.3","sinon":"^10.0.0","deplint":"^1.1.3","ts-jest":"^26.5.5","typedoc":"^0.20.36","depcheck":"^1.4.0","typescript":"^4.2.4","@types/jest":"^26.0.23","lint-staged":"^10.5.4","@balena/lint":"^5.4.1","@types/sinon":"^10.0.0","@types/semver":"^7.3.5","simple-git-hooks":"^2.4.1","catch-uncommitted":"^1.6.2","@balena/jellycheck":"^0.1.1"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.27_1619491398067_0.7622532127743329","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.28-renovate-non-major-675a942c10012905837cafc8672c6aaf10ecfbc1":{"name":"@balena/jellyfish-plugin-base","version":"2.1.28-renovate-non-major-675a942c10012905837cafc8672c6aaf10ecfbc1","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.1.28-renovate-non-major-675a942c10012905837cafc8672c6aaf10ecfbc1","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"e4c73f27d433fdcd4b9266058aa2de64c8d45a8e","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.28-renovate-non-major-675a942c10012905837cafc8672c6aaf10ecfbc1.tgz","fileCount":18,"integrity":"sha512-VGjw00MDZsDob8K4aKWv0RVPa4jVh5FuaBOBPnDgKN8AhTnK0EbFmgS2E3wDYzmOfSwiQAY9q+nUiEQWk0i8eQ==","signatures":[{"sig":"MEUCICxd0lCc2rQm+EctdHvXLEFRGAr0DHFnmH1eg4G9vvjPAiEAvho4adDP+9+uoKd+5ZWFY3LXsctTSPWwlGq66cyckNk=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":42099,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgiCoxCRA9TVsSAnZWagAAJKgQAI3qk32jf4qxR/IIsQqx\nqhGU/aztORrh4PN8xpMbStbc1ZPKxTIN58KyWScGOyp2d9ULJGN8xq8s6An7\nKh20U1Qszt/S/zajljyFZghbb/DCEu0j3/qQ5fd/hwjNYEodxurF6lw0XVW5\nnuhzzITXC2JL2G68G7ZC7EwqdCvHYy368UBjzAuDCBK7A/ztCemkIev+ztAv\nUrEB3+BDi36a+1Cljj2QyonWtDm154et4gN3t3QlG1di9RgZxWW1F/vwV4pK\n9y6W2pwuXi+WOh5dd3N4UpkSxTC6QZLN0zgptWBbUNIUyTkk8BuwBj5a/qXR\ns2J/OjaEsbPXSSvc7+KcQGzPZAgBLgpXDAsXKmqHfP3SpKLLVQo3alVce3/o\nLsbQDEvQ0TsdmvhwLDvsHwq9sNpf2cMvWaJwby5Rn2DlAfXQXGkm/v0+sHnJ\n7RB2lfnTTljK2n92nXNolqlKo97YPla3bJyu1H5SPZZDmXrAOILsXX5RUqKg\nGqcQvn8jTItmQsTyERP9rJv0J62bLZYrTnDLouB3T+AzEwTPE4fONj/Hzif7\nA4e1MATr6yzA8cgQiRhJ2iFiHnTqmTlnn0doTB8rcXBWWlcr6s19WZg4pQ5G\nw0bPg0+dfuD+LPWezBstsMzulpDbY2RQ3oLntr7xzxKKhoShmDvivZzlTSBY\nc3m2\r\n=OcAk\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\n[![Publish Documentation](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml/badge.svg)](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml)\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"675a942c10012905837cafc8672c6aaf10ecfbc1","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint --typescript lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --typescript --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --typescript --fix"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.5.59","@balena/jellyfish-logger":"^2.1.37"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^26.6.3","sinon":"^10.0.0","deplint":"^1.1.3","ts-jest":"^26.5.5","typedoc":"^0.20.36","depcheck":"^1.4.0","typescript":"^4.2.4","@types/jest":"^26.0.23","lint-staged":"^10.5.4","@balena/lint":"^5.4.1","@types/sinon":"^10.0.0","@types/semver":"^7.3.5","simple-git-hooks":"^2.4.1","catch-uncommitted":"^1.6.2","@balena/jellycheck":"^0.1.1"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.28-renovate-non-major-675a942c10012905837cafc8672c6aaf10ecfbc1_1619536432692_0.5570765258143484","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.28":{"name":"@balena/jellyfish-plugin-base","version":"2.1.28","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.1.28","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"637ca0ca128822da8d091b596100d80caf180f84","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.28.tgz","fileCount":18,"integrity":"sha512-mOZh6dYveu2nXX75mfTufDYCrspXeShxJ412uSk7QnJ/uLH5BVN6fDLDYieUrZ4SHBfhpvpZtcquBom0mGO/Qw==","signatures":[{"sig":"MEUCIEpDvWFiWCcjQW+LSxxhI5mmPDxktkr0q+vEWAYu+Hp7AiEApfCQlb03FJxtcmZLWGYb1yzySnAUAD/gWIj8D/FM2do=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":42039,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgiCsMCRA9TVsSAnZWagAAKi8P/jBk0uokEebOp2B+PKpT\nRbmvA9MQnornByY7QMhMWR8+5gEbvnNlAK7YuHILnCFrlTKnMTAc4zZDdDF8\npP8OvaWgEmyq745OF2EppHmfHUVxVmUCc6UftFxsjslaDJ9ohdDHVlW4ZqhI\nv4BS+z5DRQrKKGCWK7mGB/hyAr9AC0DRHxcn7UwNbKtiyTFLWKKLU32SL8p0\nZhGNOBZtqULBNZ+gA1KuADSwMGyX9ThIfJYOWYZEOZpF9FwXoN4bcrNyGN0s\nz7+MPu4TN/AlOyHQFdU46awsJEtCGfS/FTJA81IlcPmne7x0ujHSzmuunGUT\nzRKSWroDYbUHnKulQ6ExPlp3C+9QP1dtTORJvrWioMIpFh9+uFchpqNZcPqK\n2/qRSlIX5RylHwL2D3DY8nTvCxpxiqu/PnQOwz4Dnz9AZ7UJ23tT8i3h4gqP\nrw7IJCQU3UIHFEfvtdM3LSbPiTh2Ar621qIVA8xKTCK0mFnW2K9+ovyuhv89\nTkL/Ucsnrd/UpCwg+yVm+qj/JcDNR+BBZ17OFIavi9Uz/1MNodcP4pfuld4K\ncishCz0qHDOb8J3H5T2eFRosvQlgLoLBJFwUqKX9ffq124VwrhjTsY+nL9g/\nPMqkAQb+xPOUJTt+DllcZBsniTWf2IMgJyCOn8yCdf8Ml5P3mUpakSpGdVSf\nbioh\r\n=e67I\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"60e0184ced96b750355a6313005e63c5fbdbda1d","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint --typescript lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --typescript --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --typescript --fix"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.5.59","@balena/jellyfish-logger":"^2.1.37"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^26.6.3","sinon":"^10.0.0","deplint":"^1.1.3","ts-jest":"^26.5.5","typedoc":"^0.20.36","depcheck":"^1.4.0","typescript":"^4.2.4","@types/jest":"^26.0.23","lint-staged":"^10.5.4","@balena/lint":"^5.4.1","@types/sinon":"^10.0.0","@types/semver":"^7.3.5","simple-git-hooks":"^2.4.1","catch-uncommitted":"^1.6.2","@balena/jellycheck":"^0.1.1"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.28_1619536651685_0.8379846953741277","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.29-renovate-non-major-a94914a6d3b78ba16f66798c51ea903c1685ed24":{"name":"@balena/jellyfish-plugin-base","version":"2.1.29-renovate-non-major-a94914a6d3b78ba16f66798c51ea903c1685ed24","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.1.29-renovate-non-major-a94914a6d3b78ba16f66798c51ea903c1685ed24","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"59faf056a045a10d5b724493672306a23e95933b","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.29-renovate-non-major-a94914a6d3b78ba16f66798c51ea903c1685ed24.tgz","fileCount":18,"integrity":"sha512-JYYPGlvdtu1GR+Q+C+QkPQXjjMy0ZH0lzB8KPdj3Ydn3kM+z/ip/NhYHyt+pELovswjgjhBVuSGc4D4643Idkw==","signatures":[{"sig":"MEYCIQDNBbSbA6Z8kCWbsf9JpggmzKb7q5D8NJq9zv0LgcLbVQIhAJqVhZ4EKn8DHJ02g6DPio2DS47rWUeixULg6lGqhIxP","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":42202,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgiV6tCRA9TVsSAnZWagAA8UcP/3gHQGpjRJWOk2x90Uc8\ntvvpIf6DZLhzccJYRhsxibredvEguLwAcU/igseKgMvzgb5DBkHgSRwieUl1\nypuKWAZSEoiS5Ag5e8yc52qxn/EXA6cosrlPUTNyDbN5CQ9p+tR3ix2sr/d4\n+WbxqivK7namkJ8CC5FuAT+GU3pzBHBOn058diPd9Pua0h3QASH6H62kjlqF\nxTkJBrvqLQSNW9kPw+hvEyQy7F2OZ0zeCOkPz7tzhVxyRvrMdlerfFJW8a8D\nS4Z11JWgW8S34AtNshxVLSrUe1VUV1nON+2BJ1Lx7hveNq2HfudYcifaaGhu\nxsHNlDtvXhEx01ryqCCS7SCoR0iSe8ouFkxmsQuQpUqLcXsrdkCyt/t+c5JP\nswkEXGaYSNNx6UUHSNJtzRw8rNKD53GuOc31/vmtATOxXlIHTV/ZOZxCFXlJ\nyc5bQDuwe5530OKTr5Z9jakoVO6mC4r23UmRGazCQNMvau0Res4sKKt3fOVi\nmtw/FTsKKiFo1D9E2z6a4E1PgDyRPRn/8vIWDbA8doF3uPE6n3d6qm9eCPvX\nDOBDoIl4Zz+QYjWmzSNz82/4UqE61CWw2hgd6PvPRAlTHSgf3JGCHiNFBcrv\n7hpKueAdqu62RFSnxxkWRGeBwaFVfOQK7hVmvPHwEs2TrDvjqRaDF2gJxL1I\n1+g4\r\n=tFRN\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\n[![Publish Documentation](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml/badge.svg)](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml)\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"a94914a6d3b78ba16f66798c51ea903c1685ed24","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint --typescript lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --typescript --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --typescript --fix"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.5.59","@balena/jellyfish-logger":"^2.1.38"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^26.6.3","sinon":"^10.0.0","deplint":"^1.1.3","ts-jest":"^26.5.5","typedoc":"^0.20.36","depcheck":"^1.4.0","typescript":"^4.2.4","@types/jest":"^26.0.23","lint-staged":"^10.5.4","@balena/lint":"^5.4.1","@types/sinon":"^10.0.0","@types/semver":"^7.3.5","simple-git-hooks":"^2.4.1","catch-uncommitted":"^1.6.2","@balena/jellycheck":"^0.1.1"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.29-renovate-non-major-a94914a6d3b78ba16f66798c51ea903c1685ed24_1619615404683_0.8083091212420301","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.29":{"name":"@balena/jellyfish-plugin-base","version":"2.1.29","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.1.29","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"f5c2578349454eb9c10f828b958c4bcb16deaf5a","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.29.tgz","fileCount":18,"integrity":"sha512-zb1wmB5MLzRaAXOd7HS3/1nwxBo395gAJJDOzgeZEt5p9HHmiuKWm9RnqX3sa47MD9YvNDR9d5//3MM6LmJFng==","signatures":[{"sig":"MEYCIQCJCWN30bRuj/4xriDtFjWamUZYUENKDza5DIgpJB1ZSAIhAMZMwaBHokIvZl+xOe/lxyscLX5NHtoLOWNjvDv8Y+Z2","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":42142,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgiV+JCRA9TVsSAnZWagAA6RUP/RiFJirhZlFhW3BImJ51\nkrOPwVbJNDEnT79CQbW3QHQPoM0Z0aYbd17GgnStK3zNDY8ytIaam2GBUbCW\nIrWCYsCdNhI3Q0DA05BWSrCeuTRbiU+RLBqxuqu6h2pGulecOcMpMQvYtO/q\nJOXpA1P9gI9AiN1SOs9oJh4j8N3DzdFZRNBxmQihHFIOHSkAPj73ZwHBJ3P9\nh58NAdN3oMFjUv6McJx4QrjxaBpeiG0WzUGcV2xvjaB8Lh4h774ivf+VWn1C\nZl9HqVa0Ndzub+QjCESmQyfhe8HurZ48yKH5is3eXqPoIP+4/QpOQo41gXkr\n0b2txIpDljh4PDpQjbE1Go7VCpGmoq9/9pf2Tpl3liB4RbOCJa8SrBNTT6ce\nmN5ynD67kmn9mECHwZqQBaix+Xc346sMX7HgqPSPJXtSz9tfqrzjiqGoOGYX\nBgaj8fE67rHVeWJH8tImFnd4WM6AENV2oApOrMjcrQqlh5aTRt6WEKgloGDg\nZQsRJUG5NikMxLe2so/CNXVLRi1cJ6s8HHfpjgQHBM5DXTbMLRIuPAROePsF\nBxLPILteDQOOISjQyg4JNSyIxNZqBcpT7oKK6m8a3vbx7dhHD7o2NFlj+Xse\n5lAbCO+vFcHYLb3Ivxqc6N+FvcRcAH5HJsVEOCaDEFdbMVsI6IPppZkDmxlZ\n6YuE\r\n=t+WH\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"3e64f24dfef38ce7bdb40850a92c1027a709d860","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint --typescript lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --typescript --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --typescript --fix"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.5.59","@balena/jellyfish-logger":"^2.1.38"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^26.6.3","sinon":"^10.0.0","deplint":"^1.1.3","ts-jest":"^26.5.5","typedoc":"^0.20.36","depcheck":"^1.4.0","typescript":"^4.2.4","@types/jest":"^26.0.23","lint-staged":"^10.5.4","@balena/lint":"^5.4.1","@types/sinon":"^10.0.0","@types/semver":"^7.3.5","simple-git-hooks":"^2.4.1","catch-uncommitted":"^1.6.2","@balena/jellycheck":"^0.1.1"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.29_1619615625273_0.6435634617844057","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.30-renovate-non-major-97535f69353a973e97f176ba8ef90c41c32bd173":{"name":"@balena/jellyfish-plugin-base","version":"2.1.30-renovate-non-major-97535f69353a973e97f176ba8ef90c41c32bd173","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.1.30-renovate-non-major-97535f69353a973e97f176ba8ef90c41c32bd173","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"1cd1f435b1380e13ef1d9e9339f44325c72c6f8d","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.30-renovate-non-major-97535f69353a973e97f176ba8ef90c41c32bd173.tgz","fileCount":18,"integrity":"sha512-RiaOE0/lk6I0hvtv5bEg+eC/rhmchaU+Xf+4stgtd9qCMYOdAtksx+9DvGfqhbY34Tfcv7vxymSWzeOW4sCnaQ==","signatures":[{"sig":"MEUCIAwi4JiWbgsfMLkE0P1xGGCcjENKivGQdvIExWOWKIeYAiEArqBVmwzrDKg9xwRNVxKZz196EXEhCxHsg7CgMtCkKT0=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":42304,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgihdjCRA9TVsSAnZWagAAsVQP/2SzFxgt4c9vrFEr8zj8\nk/SMZyeY1qGPhtHCS5foQYvvGwlWkjTtO+BhsIzvnmIE/V61duJ2ap1rSOWX\nVjpS3c/74JIo1IQQ1fs7ZA89Bu4b4BLFYkNxnU844bADN8YL1OWN1HaWiY+l\nNDmfNvkAlLtfhNddlvLC4LlHbUsCsyG7o+ZKakSAUbhDlDX+E7CQL00JxCpW\nNiMH/7imCu0LV/66ikGpISIskU6QtlZ8YaHRGu8HI7cp1VpYhnq5/a/zPj+S\njv3swnkYDQv/hOBm+Tsg8yQfYNDp2V79sHQXjMYWjOh9RjXZNF8ZhNR/cVqe\nVmkgG9NLWbxtU5wXEvcrvglogtUThx4nfEwsntrGEFPOKN0XYKyOzi0ltoJR\n9ihgoYyPcAFYT6Xu/1c1uUBCkOe4aVXyFc+UYEkKby2vutO0iRLa/u7HHI78\nvgg/I0AmSe8Chpl6vM28D6DMfecI/YUGnMrQNwqPq8ceiq9BpJtQh5KQ66zF\nkSBPjPO9cptTLo7kEhdwaj75Xez0EohCNGX21fIM2d7sY8+Edu3jjqtbx8kM\nTfHL0leD1nzhPaPd/N0PqUaLsV/wTfqST8009MgQ6f1IDlHX8K6hBC+EfDqG\ncPQrlUMJpuAUXEf43S2BV8SERETkI1CddEPERhdGRF3ZTox4ge9mSKj2j3Cg\n6m/o\r\n=Fm/c\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\n[![Publish Documentation](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml/badge.svg)](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml)\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"97535f69353a973e97f176ba8ef90c41c32bd173","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint --typescript lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --typescript --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --typescript --fix"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.5.60","@balena/jellyfish-logger":"^2.1.38"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^26.6.3","sinon":"^10.0.0","deplint":"^1.1.3","ts-jest":"^26.5.5","typedoc":"^0.20.36","depcheck":"^1.4.0","typescript":"^4.2.4","@types/jest":"^26.0.23","lint-staged":"^10.5.4","@balena/lint":"^5.4.1","@types/sinon":"^10.0.0","@types/semver":"^7.3.5","simple-git-hooks":"^2.4.1","catch-uncommitted":"^1.6.2","@balena/jellycheck":"^0.1.1"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.30-renovate-non-major-97535f69353a973e97f176ba8ef90c41c32bd173_1619662691234_0.7878873658546741","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.30":{"name":"@balena/jellyfish-plugin-base","version":"2.1.30","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.1.30","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"3e5aa5492c76f1dea1252fc7242fb5abe0486f35","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.30.tgz","fileCount":18,"integrity":"sha512-9gwFTeO3dM05x5PhMDGe3nbwFUxCDpj1Pbp+sRKhX3QlfBsEu1ZKrkjWRENElCHYrZkTQW0MJ1mSt/jPZtbwpA==","signatures":[{"sig":"MEUCID9szIVvVw7VlKTxEPcPx5+LTe3uFyloKoACsP4XO85tAiEAmxAEocdqkC7y+a/ef4aS/35YtPCYTeBOsR98WHtCzio=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":42244,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgihhFCRA9TVsSAnZWagAA01cP+QF3i35QU2sK57dr+kJh\n6pu83Xsoc1vHtdRWvVWx1/K2SyHXychMckTwd2NyJC2e+t4fsPea+ha8bKh+\nFn6B8wQYXGuNX4jjz3eSK1pDtl1KQIm96utOz9IMSTv5ZMMaDCKuxKcxGl5w\nwqU+3j/BxE+n4iQHOPrBuOxMRsDEYoXEGDeJhhxgdNFBgSTVyzrmUrG/50aw\nneJ1ek1ateCRP/OEaVJswNcA5ioi2E84M9vDnBSwjz1GYUOyrHjPeQV+A9ac\nYJirb1I9edPbHJ2Gx/PCZA6msQypdnrVPTj2KlDmq43V1gZNA/CS2ApBjZLN\ntoFpt1mpTT3TdFPuIRuXGb92tf0A8wQDnZLZbZP9bG97bWF9k5o3+FI6ShD9\nZOvTm/huYrS164/oBpDhc//rJm/4NFbmUh73hmjguqWJg3otxmyPw7xbJMrv\nKOkUTaSLuLvadLu1LIK8pUwUCNMMx0RK10+M9H7NFcCUtLNTPt6ijXP6FMkM\nWd9rlJIYXi8fO7zBkngMXg6sZL3KPdTs8FQidA9GTO0Aiy849RP8R7+odW0i\nUi0ROVyLA4llOHROlwE9rlenvPWFfn5OuxTdAJ5Qut5izGdSLgKU8u73Bery\n02cqMDVkr2cQT5gbrW3Wagy5RdXI4vPYraBDrZ3eEXamq9sMWioP0+p5Zl8j\nvBDh\r\n=724b\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"feff1b161cade4f9076505eac8d4406f93b6d223","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint --typescript lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --typescript --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --typescript --fix"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.5.60","@balena/jellyfish-logger":"^2.1.38"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^26.6.3","sinon":"^10.0.0","deplint":"^1.1.3","ts-jest":"^26.5.5","typedoc":"^0.20.36","depcheck":"^1.4.0","typescript":"^4.2.4","@types/jest":"^26.0.23","lint-staged":"^10.5.4","@balena/lint":"^5.4.1","@types/sinon":"^10.0.0","@types/semver":"^7.3.5","simple-git-hooks":"^2.4.1","catch-uncommitted":"^1.6.2","@balena/jellycheck":"^0.1.1"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.30_1619662917243_0.3721189754123577","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.31-renovate-non-major-3101c0f719e93d21fd2675264c32f9613e79f6f3":{"name":"@balena/jellyfish-plugin-base","version":"2.1.31-renovate-non-major-3101c0f719e93d21fd2675264c32f9613e79f6f3","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.1.31-renovate-non-major-3101c0f719e93d21fd2675264c32f9613e79f6f3","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"aff0f4c8414273f36a5b81bf2b8c79683f327e9a","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.31-renovate-non-major-3101c0f719e93d21fd2675264c32f9613e79f6f3.tgz","fileCount":18,"integrity":"sha512-xgruHLRROlVim1XaOQopvVjqwy7NoAS8E13MlBQY87jdMWAMoOZ+8lMC5BlieeoqDF485fnmh0Ibp48MPtYnhg==","signatures":[{"sig":"MEUCIQC6zNtrh1SqPzEdGSHUzvX1RZNlGDl80gvlTXXl7KZrAgIgGDQUpyHWPifArXxhq7+jYN5n1oS7PQUXVlbXYNz9J3M=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":42406,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgiixLCRA9TVsSAnZWagAASm4P/2MKgYRfQ3W/PSSvl49w\nCubYqmt87+qSzgI1NWQOeAqG0ESh84MyGqFQiOJOu2CDQiHoqoz/X1Fb/JGK\nHruvnJ8j5asW5GoiCrXk3mPJbcXir/WWs/wnLaDnK8llCAd6ZOQ5E/dPhO9V\nkvh4hrMsfsqAD1N5AbHd7zZhqTzBKaArus/W5uq0sBXvGmX++ueQ3ITyF3Nj\nVK2e0GTIoggVHBKJBTqx5K2+NlnZJOcgsg/udo/KJyMDzgaSMMEdMeIr5oMt\n3M+KqNsWwWWG/q6ojAXM0iPQp71dB0uDHoJg7EHo5i4BliEDCbG8T7FYH7F1\nxMcJ/N8luNLiqIP5nUbrCo5NhOOaUFeURVvwwTEFhMofxOAxft4tCjyKsbQg\nnqsMwjSENrdixTLGwG34DDaRIokfqJ+o18auzjt55Vt6Y5EmeaczMFH7+PDQ\nOR72Tr+nxm1OdSCMsy/ZQiwiIOlW/RLhvKBmD0WYR7ntx9Z20p4dKw/DfhO5\nHbqerNBZw0yNXdx7pGQGpFKYB1ubh8uGK8SUcClMC8wtcY+YYdMz28jPx+6b\nR+rS+ueQFkWnzIkTzU5Ue/AbBLxWtf5uU6Z0Bt5eWoVnNkrYN54w/9wUj3zW\nFEsQUxzJQX0Fnc6l5BvKsrwfPtzGzk0AjFKLl9fRHVjQIO7tKv0Y6Jr9YTDq\nuAQD\r\n=8uNx\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\n[![Publish Documentation](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml/badge.svg)](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml)\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"3101c0f719e93d21fd2675264c32f9613e79f6f3","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint --typescript lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --typescript --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --typescript --fix"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.5.61","@balena/jellyfish-logger":"^2.1.38"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^26.6.3","sinon":"^10.0.0","deplint":"^1.1.3","ts-jest":"^26.5.5","typedoc":"^0.20.36","depcheck":"^1.4.0","typescript":"^4.2.4","@types/jest":"^26.0.23","lint-staged":"^10.5.4","@balena/lint":"^5.4.1","@types/sinon":"^10.0.0","@types/semver":"^7.3.5","simple-git-hooks":"^2.4.1","catch-uncommitted":"^1.6.2","@balena/jellycheck":"^0.1.1"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.31-renovate-non-major-3101c0f719e93d21fd2675264c32f9613e79f6f3_1619668043204_0.4654288093849155","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.31":{"name":"@balena/jellyfish-plugin-base","version":"2.1.31","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.1.31","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"14e6e89898e074ce0c33f3a8b74849b5a43cc478","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.31.tgz","fileCount":18,"integrity":"sha512-YcuteppkkDkVUzNMw9/3HmUl0C7ocesCD2cUumFjjyA4kRA+eZlNMvMzdttuyLcGJPXBbVIrw7X36280zd1KbQ==","signatures":[{"sig":"MEUCIQDYRD7UIGIU0cfc8nArWYVy2+0tFH/QnXgV0X+bQ7+yHgIgHnEzwpZe9TVhSC2qJ6Zt2qI9+9D4kNlCoxRqDxz3zJI=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":42346,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgii0aCRA9TVsSAnZWagAAfSUP/1sZYUPeu66I23tthzhf\n6nVaQB2eOdZ5uzEvprO5DxZ+KwPOLEFcuDGyVtLC/Mw79Gm0/toiWMjMgIZ8\nJEk5qJteJli34ObNpZxcuXM0G0SWPsjYqrvIDYPD923goYpHhGEQ5/QXgxIg\n5RMd+MQSg6gBumDT/+6AwGBZT9rG8M387Oi/iDndlJCxAEvxkMir47kmpffw\ngSbAgXJeUVaQ4CyDJXGaBx5wB5qWuvmI2gnsgvQEIB9YE/FGSiij9Mg5uD7k\ncIhyE4AfAcr0ijAvS4hsQZF+q0AQz4ZVeF+q5QC59zoRYjc6kDOPOb1rAm9m\nrRBPYTNb0lJNDOfAuNfuJ/w3A2PRt3dm6JWCNoVuGb8tjekEgZcGHHs8/s3Z\no55xtRlw78SYmgFusFa+Qr8USSWjfkmtQmmPrT0j5vj6lJf+7wtK4RIEaVm9\nmTwcLamr3Ipg+3SmRTzEzySDJriAQH4+B2wQm2v/Jnsqh8CL6YeW+rhwdnVg\ntQzspLNNo343teezQfSogxyWiKLnQfAhEvqWKFfqYcYKknr2lOADwiYWQ5DG\nBNxdT70TTUh78P/wxDQ1egEHVxs0Cyjds44Ih+N2nywFWUK/EMPkHmPxZkjg\nIr/f+B7TwVGgIbAnt90dbV4jPucKTyqhbJqLG+ruvi8dX6aF0CL4br5lHs+g\nVGix\r\n=wyks\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"61881ae7a8b1a085762eb7ac4a518c69e95de5e9","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint --typescript lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --typescript --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --typescript --fix"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.5.61","@balena/jellyfish-logger":"^2.1.38"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^26.6.3","sinon":"^10.0.0","deplint":"^1.1.3","ts-jest":"^26.5.5","typedoc":"^0.20.36","depcheck":"^1.4.0","typescript":"^4.2.4","@types/jest":"^26.0.23","lint-staged":"^10.5.4","@balena/lint":"^5.4.1","@types/sinon":"^10.0.0","@types/semver":"^7.3.5","simple-git-hooks":"^2.4.1","catch-uncommitted":"^1.6.2","@balena/jellycheck":"^0.1.1"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.31_1619668250270_0.13778837286975332","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.32-renovate-non-major-25cfa0d414d58c31578e9ba7a45971ffc9d80fec":{"name":"@balena/jellyfish-plugin-base","version":"2.1.32-renovate-non-major-25cfa0d414d58c31578e9ba7a45971ffc9d80fec","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.1.32-renovate-non-major-25cfa0d414d58c31578e9ba7a45971ffc9d80fec","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"12b0c0639688d96c218879d9fb934727054a41ff","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.32-renovate-non-major-25cfa0d414d58c31578e9ba7a45971ffc9d80fec.tgz","fileCount":18,"integrity":"sha512-Mpncxs9VJ2TPN/BuvXZCsV6h4/9Vy5dO0rP02Klq/CLYrbr9ITgzLonRvpz16zqK7uOpR1SQyblxsC+8ZWHLdA==","signatures":[{"sig":"MEUCIDgcvyjnygxBEl4V9/HcFPrudg+lkRsEKRd1mDG0GxpWAiEAkjQQSBJWMcyoZ4hw1UY5j5ECoSIeBKBq4zoHKAEOQL0=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":42508,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgimgnCRA9TVsSAnZWagAAl9kQAIPvN5cWtDSxBf22vYgp\n/mbjgcReaGHSRlR/cczNV+smAWtmc8nn0Vs5hk5qVO8oVzVA9yNUZiqUH9Dw\nyTd/6rXCc3WE8UHt+gfIfP6ExHviv2A6XfatAEwoZplKVNjU0/+b+ZB3vEQN\nmmAt7VEqG9EYWBrKmAnpiYZfGCWuBANIPjbH2dDzpdo2ibJVX4P0Xu1IN04p\nBBJnRztaqS+OtI/kpuI/siNT1IqVj1bSocJNSN/5c+jMa1Y3KCD7nwX61/Z2\n8XZABZ/lHMZPq8i5dsv4Ve2/Ei+cVs+4ik+ydawyTT5mN123Q2TvXHi5SY1q\nZDmEYDlUmW3PwB1P2SMWpKcpZ6+76ETwRd7PUuOoyepm+io+vhV36QDExzwY\nW5lpu/9KlKE+4wA7YCJgQd80gvnUVxWJ7Ch2P8FgdVMeuWNUg/Of5/YzYmH+\ncffkrhQYMU9tScJQKTs5yM4gcMqqRXC+mB57fXl6wBFUdtq2Feq2H5zbXLbn\nC0XsjgfyPFcRYUlIRz0Z9t8q1/pxmU4lhZ3WxVZDQFRYYmF5517xYczz90Y/\n/F825PwlxHUW7qh/9+BVHmVsVNdljl3eoR3HBQtA10DVliMsdJztW5AdOpbC\nmymizlpfdSFa3Kw4/ertXwbxgG2G3huH5vgkphuPZzJjSvKwOWVHhBOUCFYB\ngJLB\r\n=gjO9\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\n[![Publish Documentation](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml/badge.svg)](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml)\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"25cfa0d414d58c31578e9ba7a45971ffc9d80fec","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint --typescript lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --typescript --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --typescript --fix"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.5.63","@balena/jellyfish-logger":"^2.1.38"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^26.6.3","sinon":"^10.0.0","deplint":"^1.1.3","ts-jest":"^26.5.5","typedoc":"^0.20.36","depcheck":"^1.4.0","typescript":"^4.2.4","@types/jest":"^26.0.23","lint-staged":"^10.5.4","@balena/lint":"^5.4.1","@types/sinon":"^10.0.0","@types/semver":"^7.3.5","simple-git-hooks":"^2.4.1","catch-uncommitted":"^1.6.2","@balena/jellycheck":"^0.1.1"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.32-renovate-non-major-25cfa0d414d58c31578e9ba7a45971ffc9d80fec_1619683367313_0.07001691458395065","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.32":{"name":"@balena/jellyfish-plugin-base","version":"2.1.32","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.1.32","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"41125131343c1cf4d9b01e1ce9417293cdf161cf","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.32.tgz","fileCount":18,"integrity":"sha512-G5gR2yKu+1chWvEdDSD+vKcvWTWSvCwppwjZXuHSJZHIUH4SpU9GK+ZRAeRNZUEyozct9I9lf916F21PKqMgCg==","signatures":[{"sig":"MEUCIQC1uLBwlywK7TiSyN1PAIj4u97WNqPH0wIiAPOMqKTzRwIgTSM9sgePb4ksBhH5wRKMlMiftLa0tGj4altyCn/TjZI=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":42448,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgimngCRA9TVsSAnZWagAA4HIP/RP669yL9C2F+EW9Lo7i\n9FFwA5vzHvaPVCxJfmIYSNTsn6Lf47ulgnpDuGC7mHLKjgeAJjBXSgNHoHcC\nGwjWbc8cUtpL9Tra1gTF2B0/N0BKL/fTOaaEldUF/NkGH4VhpHRsZXk54adg\nqp/03lqiWRBKV4/IGSHBWb1yc0C7ZhUjU0LuMNDzjOMY6hq+T+c5T29maNDC\n5k+248pDoeDz/WzRmj6NModxSvD5ahATyX9XYF5mTZaR0eBl1QXVz8zPakrE\n72/OyTS3iYIbQj/HwkveBG5UItQUdhWYUPETw/rh8nVGGmFzx3ne9Itn6WPG\nxjPuk1YA9KajFYHSumTSb+Z7xxWkO6SR6ReREgrhQCVuqaTPfjNRDarNqn2U\nfHCKL6BsNiOQOM+odeaeGs4bZk6d0U1cjC9S+jnA7bdNB/9NCciTs9SOPWEy\nCLPWfuq81xyTo++hZNIjDqoup1+yia485pwzRjyfohYoWw8pGiGqoqtmnL22\nHZWHbPpuliPYdN/VDHvEgKPGyXkQ/PdEjGqQFksZJf7rwBH1XG9ixCQJPjUz\nyJh640nda6q4VOnWSN1BRtlB24KFbxyqXnbyiS+VrFHTX/l7aig5SfFucpcY\ne10P4GY+DeDfYdzI/psAHFqvwHqJnpwblG8/TgcNR1L84YPf4OmTPcTR15OX\nZyEx\r\n=xgjc\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"a34a22255f6e4c20ffd8470f49b04acd3670ae93","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint --typescript lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --typescript --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --typescript --fix"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.5.63","@balena/jellyfish-logger":"^2.1.38"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^26.6.3","sinon":"^10.0.0","deplint":"^1.1.3","ts-jest":"^26.5.5","typedoc":"^0.20.36","depcheck":"^1.4.0","typescript":"^4.2.4","@types/jest":"^26.0.23","lint-staged":"^10.5.4","@balena/lint":"^5.4.1","@types/sinon":"^10.0.0","@types/semver":"^7.3.5","simple-git-hooks":"^2.4.1","catch-uncommitted":"^1.6.2","@balena/jellycheck":"^0.1.1"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.32_1619683807675_0.37963559223126686","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.33-renovate-non-major-1bba704e8dc982e0224c76c729a25365b178e1c2":{"name":"@balena/jellyfish-plugin-base","version":"2.1.33-renovate-non-major-1bba704e8dc982e0224c76c729a25365b178e1c2","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.1.33-renovate-non-major-1bba704e8dc982e0224c76c729a25365b178e1c2","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"a61587dde2065afba45560592d50a51eca5b378b","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.33-renovate-non-major-1bba704e8dc982e0224c76c729a25365b178e1c2.tgz","fileCount":18,"integrity":"sha512-pf9BY+zgUOwwmSQNOFf7C+TVWMPE9wWPE5zWdK4Ag2OgfH28VM4ROBNDWMzGKzB+giSjyI8WTGqdx6vRlhSmTw==","signatures":[{"sig":"MEUCIQDFKx9oxC4Ew0V8WJwoDo37Ni3z6MXpQwc/2ZK86bg+gAIgPItbK9WBMDffGhoD5voSu8Hp2kYWMGy8YOctIwGkNrI=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":42574,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgio9WCRA9TVsSAnZWagAADyAP/3liliOQOU8qiZxscVGN\nJNwEeZoRjmi706W1BaZ97mZHG69mCjovbior0m7ETBJdWfGw+zm6hOlRbXzY\naz6VZTfLRzenAsG2+xIzlM3dbnPISRYN0arp9WYFttVybjauDBq9TKyu0mtU\nkyzYs0pmxb83gEVD+qIrh8lILgdmPApc2ZAFHMByrZrtvO/IBtosQHVcDvoa\n9VSE66T0G5znrdo5V7DG6JvIcc9u7qwdvnm1gmoOUaoMFcKm/rMY2Ju5+REb\nHB9PLayXIcnw77HMXBgxxqHgcMC+/9qV9ISiRRClvRVXQtx8IvzKC6NxBnAW\nXqYgixG9dfAwath3myPFsisCeZz/MQsea1uaiIqKkIGPBR3FJzXFxTAANVXn\ncGQkX//9NzzRviojIsn9RQaZd1FT6kq5YOsF0OOLvvxWOwNLMPm6AcZVkzR8\np0wwYmAmzwI3yq7tDgP0uMy5WDg7IzcF/lfBA9CPDWq2rPdKgfzM+sB4tFvb\nIi5fenbz7dvBRtn/EkfarKOGS7vmH+cXehYDTycwQZoQNpOQVX4457PMYbpV\nYQwu+si13BdnhuHK7f7G0QnxUMmUUvi7H+lyl3juRCFxp/QnHCxtKfDo86iX\nT1Of2Er2W/axnmvSQipPdlxVghksrZAYaVKNnajCURm6699936IdIXoWLx7o\nJyMu\r\n=xcJE\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\n[![Publish Documentation](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml/badge.svg)](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml)\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"1bba704e8dc982e0224c76c729a25365b178e1c2","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint --typescript lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --typescript --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --typescript --fix"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.5.64","@balena/jellyfish-logger":"^2.1.39"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^26.6.3","sinon":"^10.0.0","deplint":"^1.1.3","ts-jest":"^26.5.5","typedoc":"^0.20.36","depcheck":"^1.4.0","typescript":"^4.2.4","@types/jest":"^26.0.23","lint-staged":"^10.5.4","@balena/lint":"^5.4.1","@types/sinon":"^10.0.0","@types/semver":"^7.3.5","simple-git-hooks":"^2.4.1","catch-uncommitted":"^1.6.2","@balena/jellycheck":"^0.1.1"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.33-renovate-non-major-1bba704e8dc982e0224c76c729a25365b178e1c2_1619693398130_0.4671114136745078","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.33":{"name":"@balena/jellyfish-plugin-base","version":"2.1.33","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.1.33","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"60cd9ce5890f4d47fea678260d2dfbc99b751b96","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.33.tgz","fileCount":18,"integrity":"sha512-7ElXt49govuQj1Sg+54elVy8s/QMJD3VfC704W8Z/YkNbGgzRxrK1YdMqELWXEz7hsxOhNFNahF3rgpUTzr0Kg==","signatures":[{"sig":"MEYCIQCbVOFskrY7+t8GCSdFgAGuGpC8/BOBonsN8w+PLAv1XgIhAJoFnOJc0AQoU05DSaKYjLAsteOw4gXatSB3ziMKDv9C","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":42514,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgipAQCRA9TVsSAnZWagAANbAP/i+bBOxWDufG9lZt5RKx\nSPB+vqc/e6oHApuNPSy0zAz75dG4S869f1/X7olG/24HmR6aDdZyAY28wPVd\n9LAqc4ksluyHSTj3vX5WxprMYCnBfTfy5RDqJLceyQQE1HTlp2aPwNAaHOES\nvpWuByHr2R5bfaIEgzWjhV+HQPLbExm6Kvfr6fucDepf0mq7lwIFoRdHKZkl\nSnVvrCzCdYI0vjyU9pMZf7zeACCwpu4elJbTR7s7ByFO/5oPFa680sEPTTPP\nkMh2R+TGRp/eZduh2biQmK0/SR/lxvUwuSjlUpYnTA4ryiOh3sC9JJOQXHUL\nsJvsFEH5EeGTEqrYdrVwsi0paG2DXcHQtKLZ59DcQKLHD/+2+3UDG5ZPixe1\nkmCsk8cMzUkMkjY0z7ukhG5XN1lqKbZPFx2Ve2TMdMBEGq4ZCXNMFPjoESq+\n2aqUXuNmBRuf+7OE+dREWIJHFsdzAwfApIl5YkSJnAsQiIx9o35qcqH6w8d1\nCQ5154Vtwa66QT8BOz34mlBACqEqlZInThjKTclZ2mjtXET4O3CxMCbmsmfH\n4l8z9Yt4pr+JcEdq/ml27xhOzpsBefTBcKk4tj5yoT3agV1ha2A+NfYW8E6Y\nf4anx5MGdXsjMDM5a0WCdgLp9hTes8A2qIO7Q/NNHrfeGzcANePRbMXQq7vU\nqpv7\r\n=qTtm\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"722b3c7234b6b50426c7bdd3b3eb84da5b559cb8","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint --typescript lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --typescript --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --typescript --fix"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.5.64","@balena/jellyfish-logger":"^2.1.39"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^26.6.3","sinon":"^10.0.0","deplint":"^1.1.3","ts-jest":"^26.5.5","typedoc":"^0.20.36","depcheck":"^1.4.0","typescript":"^4.2.4","@types/jest":"^26.0.23","lint-staged":"^10.5.4","@balena/lint":"^5.4.1","@types/sinon":"^10.0.0","@types/semver":"^7.3.5","simple-git-hooks":"^2.4.1","catch-uncommitted":"^1.6.2","@balena/jellycheck":"^0.1.1"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.33_1619693584044_0.4686736947697412","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.34-renovate-non-major-64e2d8c595ff6dff0fcf982c66582d319c938b04":{"name":"@balena/jellyfish-plugin-base","version":"2.1.34-renovate-non-major-64e2d8c595ff6dff0fcf982c66582d319c938b04","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.1.34-renovate-non-major-64e2d8c595ff6dff0fcf982c66582d319c938b04","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"816a54a99c0b94ca7441b6f49251c56c41c9934d","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.34-renovate-non-major-64e2d8c595ff6dff0fcf982c66582d319c938b04.tgz","fileCount":18,"integrity":"sha512-rto6JusB6c7Baq8baPHxpvsO8TbAoR7KeEISYrPs0R+T2nsBU8dN0SoFdjpbaPF6WGbirRdIYQJD5MlnjHGwzQ==","signatures":[{"sig":"MEYCIQCRRS8uXTxSBbsUlW7ptawf0YbN9LocJzO9GHcJio2+ZwIhAMpHW1swJiBa8Jpr3s2uQuHhDFCdiAF5iAbyFaWjbI+p","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":42676,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgisYfCRA9TVsSAnZWagAA4+sP/0wOnbDvTbgx/y2eU+4p\ntHV4sqmELAie8EAVvuQ+i4/tRCvptNzZ+xF0gmsJKe84VP6iMeDyE2E5uV1F\nXgjFhg1JUk4ZN8X1aDfHEQ+OLGr5zlrtsZqugzNyJviKH8KhdLQ3ucN8X6ju\nDXUymsInHrGtM8RczSxv3y92sepLqheR9VbNPNkD3KdcG1lwZUNnp+bc/uLF\niVwqmIaqyDXLPrg1051g2ZWX5N1aCPLlmjZ677Gv5sfQAy3iLtZGslO2xrTY\nvfwSN4YcuNEQ4L6q0xiZO5bKMFzGoXi8r4N7qIBXPG1ToupKTm5hYF+rkR3x\n/pZWIH4D7eLq6jmj3jbGW8tqGmCckqG5H13Dhyg/vVxFPDDCiXIt8PhLuF5s\nbyQh/W5A42Dby0SQSWbZgMGMAJgm9YQ4Prq+EuZ2p1X7A0ChSaPD03ZU7TBj\n8JJPuc+0FKDAhjT1T4moxxf+0rVD5ZcH5lxJvvXQLipQVyFON65YHvjc4H+i\n/vhCkXyNirzKel4pJGN+mHGFoqgPG90CtlGRGMJ+lRsp16LnWcij3GIJBb14\nEH50ezqvqOqxIdLTNnDuT/rtO/5afxpg1tLGhlLjLlih4WekOS3Qc0MQ0oVQ\nMc789L2QT8FUjrzu9Rv/gOxHS8p6kjlN0GhZ1l7/kF44aUA80vqtFaPkCFxT\nrWS9\r\n=mPth\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\n[![Publish Documentation](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml/badge.svg)](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml)\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"64e2d8c595ff6dff0fcf982c66582d319c938b04","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint --typescript lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --typescript --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --typescript --fix"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.5.65","@balena/jellyfish-logger":"^2.1.39"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^26.6.3","sinon":"^10.0.0","deplint":"^1.1.3","ts-jest":"^26.5.5","typedoc":"^0.20.36","depcheck":"^1.4.0","typescript":"^4.2.4","@types/jest":"^26.0.23","lint-staged":"^10.5.4","@balena/lint":"^5.4.1","@types/sinon":"^10.0.0","@types/semver":"^7.3.5","simple-git-hooks":"^2.4.1","catch-uncommitted":"^1.6.2","@balena/jellycheck":"^0.1.1"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.34-renovate-non-major-64e2d8c595ff6dff0fcf982c66582d319c938b04_1619707422718_0.35668511505085787","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.34":{"name":"@balena/jellyfish-plugin-base","version":"2.1.34","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.1.34","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"566c3e64327d9eb80acfc81e1588b1391035eb1b","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.34.tgz","fileCount":18,"integrity":"sha512-UfhvSoj1BxYMbcNBOwy2rDTgx3kvctAIh5b90i5mpNWttgih7eZ1ceMk1wxDC2vxIUi/p9WrzObDni/2X/16Sg==","signatures":[{"sig":"MEYCIQC9OlUhijLqmwqUg1zZdQetce8yaXRzAzpaxVIATWYbVwIhAPJ1HFmg+z6bUt4jnLa5Q+Hnc+ZKY4+H/sbl8CfYrwmp","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":42616,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgiscVCRA9TVsSAnZWagAADfQP/iZdettiqlw/xRf0SGlU\naDuZNVlfY4Zrekr3WzbzxUIjruZq/xuedY+44ntYWKAN6m1RGk94aACPH+OO\nDa7WaWZLuFHIZRx0l1onnCAI0pWBLNuOBIJdBoPS0RovBUytcZsqrrC0IUT5\nRpNRiOpzSUZaPr0p9tz4YIY6JhIjPuPbIadUCsRtwC7WJiosWe+sSft/KpWr\nB/d16cLc175J5UaHMalHgSjK7A7ckw5iMkS/LBQp0+9xZ4s59GFr0c/y8DEL\nihMaxX/ZbdKS8+KKr3hq3SexrsuRuzyvxa2+eaVWltBtgtHqKR2dTheHHMO1\neKOhpJ9pXUs/IE7yHhDJ0ptfKVmxu88Kz/tx3DmSWOtaBg4racFhlA2bDR0Z\nEg9z0Br4Uy489tz4NTrEsZ2iwNijDDTg4XolqZaw4YmyExqO9AVIIe8hsQ0K\nSp1aqX3mUSX2UDgnHXBz17eqBv+ap1bdkQ8gxBNsUj+MgXmDp2VFZjQI46cx\nJ9y5u9kNCuibOdtDRpmVPyFO+Lm1VeOqr2V1Dv5g7rCPpArvaVsPEYHX62c+\nQICynYldCc/s9JmHQf+L94VyA3w1nP66T39X7DK0eC2H+B4Xk9ct3GgBxmsG\n1rDjNHbqKX+QV6NiwJ79ssGN5b2Op+CmlkBJf36GPYBJRchfhb0wfwuoizH9\n9RFC\r\n=djzi\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"62bb2574c8b017118751ccbd7f7dbe4ec3c2f3a8","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint --typescript lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --typescript --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --typescript --fix"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.5.65","@balena/jellyfish-logger":"^2.1.39"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^26.6.3","sinon":"^10.0.0","deplint":"^1.1.3","ts-jest":"^26.5.5","typedoc":"^0.20.36","depcheck":"^1.4.0","typescript":"^4.2.4","@types/jest":"^26.0.23","lint-staged":"^10.5.4","@balena/lint":"^5.4.1","@types/sinon":"^10.0.0","@types/semver":"^7.3.5","simple-git-hooks":"^2.4.1","catch-uncommitted":"^1.6.2","@balena/jellycheck":"^0.1.1"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.34_1619707669103_0.853588371270642","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.35-renovate-non-major-3c81de5c29b78cdf311afa1318c3b118eb94034a":{"name":"@balena/jellyfish-plugin-base","version":"2.1.35-renovate-non-major-3c81de5c29b78cdf311afa1318c3b118eb94034a","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.1.35-renovate-non-major-3c81de5c29b78cdf311afa1318c3b118eb94034a","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"7799a367a395f8c202b6842455df4b0425f19e31","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.35-renovate-non-major-3c81de5c29b78cdf311afa1318c3b118eb94034a.tgz","fileCount":18,"integrity":"sha512-jl1MsqsNtBvBrxNWBclzy57G/jd5DqhdNz9b7di509H/n4+mU4t+pzIHMfR13e3TvQskQ9fv5//Mk1rxNuh8qA==","signatures":[{"sig":"MEQCIC+w6r0TkzDYECeeoqFMdo3Hbgs1xDfbUTzkrJXLuGFHAiATJTLK0Blnornu8VDpc+U1sSxzDCfwXQuYfnbVq38kbA==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":42778,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgiu94CRA9TVsSAnZWagAAtnkP/iPAeVcqCjgnmvjyBtVN\nWSMt0e5WYJBfPgoOeFWNIFieDD2HXj+G+GeOjgJ5mWX50BQgMJcxWmVc9/r9\nqfJLdq0x5m8kAXd9Xuge8rt9sXwXOpnurvKFnRI0upr74/ZadM4LC5eOFt7L\nxourC6xBl+hz6MYXstj8YQWwBcVGb+PvwaNTR9tks1W2PZsFOXtQNJjnyzBK\nCj73gijsc5tL1NTtDOJlCWmgRX85GrXm9pQDYST/JqbDH3YxCaI4iGSeaMpC\n2fZ2Nj0m/klhd8Lvtv7A3Xk/k3a1duOYwaNr0lIm+ZIvmjZsC1D/zOpxfXQ0\n+h9DvQux44rBL/ILBLP7Wc0XU5IImDjt0qQbqG/8bZIp+GeUb6wXqE1aLX6z\nzxruXRi3/cA92IQRduQeoTdLzdTFCqOjXZqf1NYUAqLIWLT+Sh1Q5tUgfiK/\nQwsMr5SzUp9yOLId1SdniauvAnqpd8+o66InNFi/niiwjzJU7+QObvTWAwKZ\n19ExauHeV20BBC6icycIm+8zd+p7kLaHBaXAs1iP9sjhZ78/jL+CI65tU9R1\n0appzl3kIvjpHFcetJhCJoHZf3O2hsui3cZeVw/7CTO+tIBh/alCi8Sf2iOD\nj58PdY6C9JFLJX+Os8dK5XlY/S2eKSEhoyBGL9QrWYuFXoQh/FGnv4RX7z0s\nenq1\r\n=1rFo\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\n[![Publish Documentation](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml/badge.svg)](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml)\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"3c81de5c29b78cdf311afa1318c3b118eb94034a","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint --typescript lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --typescript --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --typescript --fix"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.5.66","@balena/jellyfish-logger":"^2.1.39"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^26.6.3","sinon":"^10.0.0","deplint":"^1.1.3","ts-jest":"^26.5.5","typedoc":"^0.20.36","depcheck":"^1.4.0","typescript":"^4.2.4","@types/jest":"^26.0.23","lint-staged":"^10.5.4","@balena/lint":"^5.4.1","@types/sinon":"^10.0.0","@types/semver":"^7.3.5","simple-git-hooks":"^2.4.1","catch-uncommitted":"^1.6.2","@balena/jellycheck":"^0.1.1"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.35-renovate-non-major-3c81de5c29b78cdf311afa1318c3b118eb94034a_1619718008361_0.6797047440820925","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.35":{"name":"@balena/jellyfish-plugin-base","version":"2.1.35","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.1.35","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"849b3ca56c8f2034733c116d2745b1378c8b44f7","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.35.tgz","fileCount":18,"integrity":"sha512-TtsKZpFJ0vxCVVOh06q5A9kHdYw31uJ5bvI2eA/7k5+zw1tJizrFkUc6DAxk6hUgj2xBJBfJkO2YbUP5l+QB0Q==","signatures":[{"sig":"MEYCIQDoPufOog9RxnlkQFJaghOygPhHbeMetBEfp2BF/PkrhgIhAKK6xtrP4N4pTRHlWj1e0g0T8VAXrjHBGmtBdWotHY/Y","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":42718,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgivBQCRA9TVsSAnZWagAA6m8P/0dGXPYDeg6zOmwtxPjL\nZrT+YQVQmri91Hu6DEG6NbnZ3+4PlBEkSK/jCDP80ExmN0a7QdT6pVuPIVbx\niw410/RoaAoh07l90ZKBRPC3aBLUCBxqC/FgfHrB9ZdTTO4J6TsbnbpZAEFg\nMXFOydHQG8kqzZEND/1H5ccBQJ5Z3g/Y6NYz0p8U6TnfdLY9k8Tguu3O+eqx\n9B6fCZ79cabdV0SFG8PBDLuXKjqnd7G3ruOcG8ZzUskqhrfGUZ4i1AEiNIxU\n3qvm1/TUyfX7KBacVNNDtmA7EtKTsOKhUY4Fm1+e8Jq1vaq6HI2s9jmFWctE\nhtNvlDW8ppcywTc4gV9lJKhsXJ42CPtrJtnK70Y7vCwRC4n2xzpwSvBYLg6Z\nThCUhtKEeo5Hq6TeZsS856B0GXGmzacI8xzU4VdJ9wTqxLcLO+n/I4Es1CvQ\nvF7lp0WfbXQeWZQpbGRYi3tpc6CsTuJAAp43h5QyItQpOK7i4xmhAxZdFqy+\nlnxB0D//WxrYNzNmP9wqYPNkQMYYP0eeVwtbZlc6/9Zb5J2ITJndKjBkoSaG\npyjEVK4PhQ6zv4imjBq3pVKsLBI2SxfcRVh+whd1GhclorHcozt4mUy6J3zK\nyuBZLNn6BoKannh3oqEgTMqA25JDcdwhPgJdWq3wlbbMc2oBak8XIpSthYBD\nX3bZ\r\n=LWEc\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"812fb48145b8681bd6b0d4faee9e143aac6f397c","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint --typescript lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --typescript --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --typescript --fix"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.5.66","@balena/jellyfish-logger":"^2.1.39"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^26.6.3","sinon":"^10.0.0","deplint":"^1.1.3","ts-jest":"^26.5.5","typedoc":"^0.20.36","depcheck":"^1.4.0","typescript":"^4.2.4","@types/jest":"^26.0.23","lint-staged":"^10.5.4","@balena/lint":"^5.4.1","@types/sinon":"^10.0.0","@types/semver":"^7.3.5","simple-git-hooks":"^2.4.1","catch-uncommitted":"^1.6.2","@balena/jellycheck":"^0.1.1"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.35_1619718224332_0.13927409117282696","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.36-renovate-non-major-3ef46e4c8a7789204d323134b6a153dfb1cd56e9":{"name":"@balena/jellyfish-plugin-base","version":"2.1.36-renovate-non-major-3ef46e4c8a7789204d323134b6a153dfb1cd56e9","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.1.36-renovate-non-major-3ef46e4c8a7789204d323134b6a153dfb1cd56e9","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"fb50f2126c230f311ab8fa8ec6bdedeae00225c8","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.36-renovate-non-major-3ef46e4c8a7789204d323134b6a153dfb1cd56e9.tgz","fileCount":18,"integrity":"sha512-44zO7/3C0btAYeZ3+CHQp/qEMGZydV9R5Tm5NVqHyCc0Wvf+9r0uiF2xUsfWBxYMUZVJv+7NaH+Vc+ochjkp3A==","signatures":[{"sig":"MEQCIFjG9EapPKdKJHYndXlPwexfRv1gWL1A5MaX4rnmR2nBAiBANOvzuHH0FFYigl77ihXTAMdvQctS7QZgOAFbR2HpBw==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":42880,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgixa3CRA9TVsSAnZWagAA58IQAJQ7JWDn1qWsuXjXF8vT\nY9WuwVQbb7YNs4l3ppdBfkJFJmA3Ga91tXstAxO1Xr4Srsmt7N5MdRUkr0WU\n3+wjkZiTcdsHN/hbnQxbY8ZRz1yULcp06plwVqDR+RIF6AObwQ/Ga0iA9JOy\nmv5m7mf6T1mP1r9U1BOOgoWVsP+1hpXUTRAUPh0HFz/vrdb+On+Oa7K8imVu\ntJzMAk7aUR6+g2+GDTieH0grtF6Gx5JaJAKjpWJIAfXIsdltbQ++9i9o/3SD\n2DkvG19dIWgo4QkAognGUOV0IgwO0TBFP2Dm83aAbESxwVTPwasQhw0P5rVI\nmp2NyQC8Sde2B3XnrW/ISnf2e49wNfTSZtA9d2LL0GyPp6XypjnHVn1n4Kb7\nFICj8Giye4wxJWlkAngNu6Xqd0Gh9Vtmp35oSTJ+uKv/1lVJFTxeJ0Cj268T\ngO4nZUD/Hjrg265riXPLP37msUv2pcMgRYQMp/xtv/WFYXIvxS60hYd0xYK4\ng86zdenpAFoJaOld1XK5S8HfVuzyaxF6S9icOqbppbLTuQd3sa0sDhIyqcdg\nnpND0NjkmFGZyG0ebM9Cd+sZiFB08vobSbVNTxiwRzFftLz5IJ21py6carXb\n/BVuulc93hD3GoxyRD6JIOVkDLQi9ztdHSaGoTneqyzvL7bVjFRQhosHyit4\nI9p5\r\n=Nh03\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\n[![Publish Documentation](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml/badge.svg)](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml)\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"3ef46e4c8a7789204d323134b6a153dfb1cd56e9","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint --typescript lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --typescript --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --typescript --fix"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.5.68","@balena/jellyfish-logger":"^2.1.39"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^26.6.3","sinon":"^10.0.0","deplint":"^1.1.3","ts-jest":"^26.5.5","typedoc":"^0.20.36","depcheck":"^1.4.0","typescript":"^4.2.4","@types/jest":"^26.0.23","lint-staged":"^10.5.4","@balena/lint":"^5.4.1","@types/sinon":"^10.0.0","@types/semver":"^7.3.5","simple-git-hooks":"^2.4.1","catch-uncommitted":"^1.6.2","@balena/jellycheck":"^0.1.1"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.36-renovate-non-major-3ef46e4c8a7789204d323134b6a153dfb1cd56e9_1619728055415_0.5165839312808502","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.36":{"name":"@balena/jellyfish-plugin-base","version":"2.1.36","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.1.36","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"516a466ac151213c04b0c257ffa468c902991bf1","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.36.tgz","fileCount":18,"integrity":"sha512-8VP3LZmwmMwejzZ0jH6G//qz8+TsgoEL2NMNu0ycRyPO+Jn4y3EbrhfzT0aZ6u+UfpkE4b3XszCzuAScGxjq/w==","signatures":[{"sig":"MEYCIQCMY41nwlWVL9kuCWjrkIMZ1Nx7nDPWgvtKUliEO/j4PAIhAINCx7kvFeaskZOt6Sj/BprECgMtVZDvY7VVjRfk3+4i","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":42820,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgixeVCRA9TVsSAnZWagAAqJcP/jzyJfzJdKEEElXEwFoJ\nvFQz6fglU2W1Cux7inW1Y2dUW/V4Yld24VwsdS6gIKDczAT3OxRiJh/n145k\n7WN+hiC9Sw3J7cV4XQpi0fPpHSbpywt5WgrYJDfY5ixao2CPSXDZ8oy7TMrn\n89GVOKSyRAh07TW+HKZi4OnXQvkv6fHhsZX/zpr+JuLn7J4s3jCtaF7h2/3f\n0yyfS5cxeiaYY7+Jt2KHsKm2dfZbEF88FkWSQ1O7rBlG+HGVYmXOKESaS0po\nGPPWzyEPAFQHMl+Wn/LMVLVNUEZNOZi+gJpHHw0RaS5qXcUlK843JHuWDDQg\n1gvFk492jZtQEEkJH7vyMytD8zpB/n1OH8Um3OALZgsCeBf+ZsvIAvfau0J3\n+yQkVLGY4MJQo+EZa8dJGFFagljP+NIkTpF0dzdKcpI3dk8baaR2hr2ObER+\nBNrk8gHIcTSGWJsM8q9Zs1rls0CCs+T/ykSPuoRH2x0b/RYH0VFi9WxFaR3a\nLkJlSMijP23G8l56WYH2pU+FqTvWgdzLvMq4c1Wd52wkdcfni9kraQekF2F1\nMuVjlg3aLxP+std5UJiKeefgVafttOKNe6F47UCUdFtw1kHumDsBQwhF5tV9\nmVaHr0B4ITIu9dFBh5II4cUcaEfmrdBG7VlZQ52yGB0IuK8OFFm1oFZEiHEo\nUrml\r\n=C0yJ\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"b404976d6dcc279b42b551fb000c222235489de4","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint --typescript lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --typescript --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --typescript --fix"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.5.68","@balena/jellyfish-logger":"^2.1.39"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^26.6.3","sinon":"^10.0.0","deplint":"^1.1.3","ts-jest":"^26.5.5","typedoc":"^0.20.36","depcheck":"^1.4.0","typescript":"^4.2.4","@types/jest":"^26.0.23","lint-staged":"^10.5.4","@balena/lint":"^5.4.1","@types/sinon":"^10.0.0","@types/semver":"^7.3.5","simple-git-hooks":"^2.4.1","catch-uncommitted":"^1.6.2","@balena/jellycheck":"^0.1.1"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.36_1619728276789_0.8649772469086738","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.37-renovate-non-major-4acfb7121f7573ef9f338f1c46213c24a5adbdd7":{"name":"@balena/jellyfish-plugin-base","version":"2.1.37-renovate-non-major-4acfb7121f7573ef9f338f1c46213c24a5adbdd7","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.1.37-renovate-non-major-4acfb7121f7573ef9f338f1c46213c24a5adbdd7","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"c4af45b651f0dc5dc490c85d2172e6cf87210296","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.37-renovate-non-major-4acfb7121f7573ef9f338f1c46213c24a5adbdd7.tgz","fileCount":18,"integrity":"sha512-ZinOvUifukLiWFtuZWt21ftWHSPBb6EU2Y4CK40raBUrWclg8rMMmoKK17+XvV+jQMgzmR/RVrGrmFMJcV6KbQ==","signatures":[{"sig":"MEUCIDsdobLv7v62Ozxo7+NybUElg5mnMtUk/+1a8ZgO/yWWAiEAwcNG6ZwFuBVngskaVcoIxheDeWuoEJIvX9bWShU/x3M=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":42982,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgi2rvCRA9TVsSAnZWagAAcg0P/ilS4hDhUnbd82jDQPc4\nZ7lVKUu+fnRRD6YhEwMmHOXLxishFvtKGnKHPNtz886jqi98iYu22oLORJIs\nHQL8SdZ8GiKXzFJ1JfC8n6O0cmbpxhe3S9vGE72gZrDAtS3qtFifpmXA+ovf\n+C1KGTbQLMtnJI4wLV50yPSDef5Vav0KThsNwooIFtfnsRMTucb22WlEYuxM\nWKi33aiCY7FJq1Isn9uMzFXtvIGuzLosy1ahR7uIfTln6JiPRBB1tl94+ice\n+XEpfXHCO8yTFPqIFjT4F9ZWg+hAvqganxP37Agl9X2wktHaRDX6D7hZtadj\nm+YQTkTMZqBiRFf1ZYEAXSG/LfWrbgnF+KzzhRJruai/udEAiqKUdCZGRoAm\nZIuBWMf16rvE5YMUSp8dYYoTCIir/n+s72L8alQMl4mJmVtdpGugVK/cFNb+\nUKH2cdnMpS8Urd971YLu+Ql9pRD8Etv92iVbJb07xLUZzkMtf+OrnZD6c3BC\nCnH1Hvla0RhRwdRbONciL8fEhLCvfaZUVfPP6OYmUsA5ienXW7mgZVq+/MLR\nOH7A1AFjdgQp2W6JQLfDt1IjlzdNwCL+K3BVnrjfh5FuKCbniUXg3SJ1zU1B\nCgPRKN/a5wrGmPwoV7jjOR/vzO3xrSUXej7UHklv/Fm5V7HDvnT7Gf+F/rpC\n/Ayx\r\n=RFvS\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\n[![Publish Documentation](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml/badge.svg)](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml)\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"4acfb7121f7573ef9f338f1c46213c24a5adbdd7","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint --typescript lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --typescript --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --typescript --fix"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.5.70","@balena/jellyfish-logger":"^2.1.39"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^26.6.3","sinon":"^10.0.0","deplint":"^1.1.3","ts-jest":"^26.5.5","typedoc":"^0.20.36","depcheck":"^1.4.0","typescript":"^4.2.4","@types/jest":"^26.0.23","lint-staged":"^10.5.4","@balena/lint":"^5.4.1","@types/sinon":"^10.0.0","@types/semver":"^7.3.5","simple-git-hooks":"^2.4.1","catch-uncommitted":"^1.6.2","@balena/jellycheck":"^0.1.1"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.37-renovate-non-major-4acfb7121f7573ef9f338f1c46213c24a5adbdd7_1619749615020_0.5060849923685335","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.37":{"name":"@balena/jellyfish-plugin-base","version":"2.1.37","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.1.37","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"2ca9b5e3b01b716aa400c8b44ef46e526b686c37","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.37.tgz","fileCount":18,"integrity":"sha512-1R0cXSO/Nq21tGrZvUojcGh86Q6+lIGWuTX1nEMC2g7zSCJ3C5JE0QHU+jRaWgFnt2FvIZmEkSlHQk85MxDLCg==","signatures":[{"sig":"MEQCIHt7OvJsolVX74aAg8S2E466V6gGFgQZITlLi77IC4a/AiALKY+bahbTY73eBOiMoxAv24whxGylvlzlFEg5Ujv9jA==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":42922,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgi2vSCRA9TVsSAnZWagAAHXYP/1N8SljDpAYpg6n77H1V\niwnjiBKapisAwysITYQbn9Jh0h6okSyMYjDO+vVhiBiOwV9KlOqG6Io76m8c\nFt0U44N7RDx/fncenqjc2e4LgntCEBhCFmaERAll9iHgwsDKGmNAYrJ0jKQw\ndAFUA9CDByTIvEBtWJhQv9HR2aIXv85nv/eOIhIzLPZS8TJx8hUxoTVLu5Em\n0h0kiyt9LgbXv3B6TADCVhOH9fy5H0/J1Hj9Vm3qAFtop6+Cm6KreNIxDThL\nycXjk/1auawfNgK7uKSHKj/Rm5zalaVSncFfhUWN3UqHzgA6f2JGkXKqayTH\nPYrqorpdvbSJ6a3CB67WkerhDwZbF4NS7M33GtXKdYGg+ZJZv49HxSsvwolb\nAkcgsZVh49rsCkf0arEQ6g6cL9APMy9ASuDQGEHqBrLqtdbL77qesHFJXrhz\nZI981xgKr/PiNNbD8W+DhtGi47DFQxmkcdHPqy2h9qsYJMxAhgidq7BSEDpg\n8pRD16SAqo+lk4/LZOQVObcDkZkKeFlxJE/PeF1MaqyCD9lZxZ8FM0y4dis1\n+Aq/r2gnnOGmdtSplgYy67rz7cGF2xhcbEYULI02pqEeYthaaw0jblGWUGk0\nlnTTKmOo+YW3mqvMcXz92dLjJvr1VufttFoPs3OYcLiz8OOo1HoTsXg5u7dR\nrMbL\r\n=Ewsp\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"07cefd7a2d06f05b4d0604d4073fa57aa8299150","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint --typescript lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --typescript --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --typescript --fix"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.5.70","@balena/jellyfish-logger":"^2.1.39"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^26.6.3","sinon":"^10.0.0","deplint":"^1.1.3","ts-jest":"^26.5.5","typedoc":"^0.20.36","depcheck":"^1.4.0","typescript":"^4.2.4","@types/jest":"^26.0.23","lint-staged":"^10.5.4","@balena/lint":"^5.4.1","@types/sinon":"^10.0.0","@types/semver":"^7.3.5","simple-git-hooks":"^2.4.1","catch-uncommitted":"^1.6.2","@balena/jellycheck":"^0.1.1"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.37_1619749841877_0.9976582857503518","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.38-renovate-non-major-933e1e0850e703c7cc20055f7891e0f167135e27":{"name":"@balena/jellyfish-plugin-base","version":"2.1.38-renovate-non-major-933e1e0850e703c7cc20055f7891e0f167135e27","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.1.38-renovate-non-major-933e1e0850e703c7cc20055f7891e0f167135e27","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"d8e448a907c80aa428dc47e0b8c6ad06fc96b9ba","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.38-renovate-non-major-933e1e0850e703c7cc20055f7891e0f167135e27.tgz","fileCount":18,"integrity":"sha512-Ep53rFvMlyMCcgW8PqhpQjWM9TvFEndM2VLP9ZahDJK7nnh4O4F4vW/NtRYQQqwejnyGhUMIJJLEx/OTZb4kmQ==","signatures":[{"sig":"MEYCIQDZFw9UnZLNumr1KiSGeKnH3fWbDCIS/1FjODmGz5WS2wIhAJ8pQGAcJiM3oTWTVFTmJHExMmOC8Ut1BmbfqzZe+LwX","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":43084,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgi4ukCRA9TVsSAnZWagAARa8P+wbg+ys6tca8G/th5Jsu\nHnZlvgPuPbOR56M9T2FssHl2AUtlKhXLYVVXiq4m3vQmVezq5hicr5zvPWeF\nDyeYZX4IVsCPlJPoYpYYLSHjqnaMlFI3Dyz3L0K4cib1RoB7RXwQKnthqbzk\nbmwmW/ObssS9YLKoU0a4aGRlqUfs/Kr7lqHYBN/aSnjKWAIMYk/o2Oujl4P+\nam6iVVrdPbVmEyRgm+nvX1RZIL4XUUoe3Ln2yXDmq8Hi/U2NTOuLrAd6X6BM\nSWYLZUBaDe/NbVUtgqzc5Bbiz87KKd4S+NuPcAcriH3ptIQ3WsltTjKu4JRM\nMQIXhMsqsDcJWBELvHS5T56gpiygx6jcAerBgNZLpEVOCJpB1BQ6AJIPa7he\nV4OuJ71J1BJwGC16zk4A5GjS6Bq+Lo+y/HxEVtykxq7uxA81qRiXjrsngzMt\nzk7QlV54N3SvW5+C1QPFaA5IuRdHWhNpJeBHSfXspE8UmnV3e69ztu+/9iX1\ngjcSWMPMaNF9Iw20z3/2hpt0++QddQockH9N5cDEAkDm50sYU0LT39EIq4zG\njvABmpg/pwzKrRRSfrizlybBDOEhpbuTyJEQtsOfzjM7EFyLy6xWYH+917HS\n0paOXBDsJzYlZ8byrOR5+uzVAGovStGjX8b5mqEyDROh3CEbFh85bbgtwBdO\nRC7v\r\n=fa29\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\n[![Publish Documentation](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml/badge.svg)](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml)\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"933e1e0850e703c7cc20055f7891e0f167135e27","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint --typescript lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --typescript --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --typescript --fix"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.5.71","@balena/jellyfish-logger":"^2.1.39"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^26.6.3","sinon":"^10.0.0","deplint":"^1.1.3","ts-jest":"^26.5.5","typedoc":"^0.20.36","depcheck":"^1.4.0","typescript":"^4.2.4","@types/jest":"^26.0.23","lint-staged":"^10.5.4","@balena/lint":"^5.4.1","@types/sinon":"^10.0.0","@types/semver":"^7.3.5","simple-git-hooks":"^2.4.1","catch-uncommitted":"^1.6.2","@balena/jellycheck":"^0.1.1"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.38-renovate-non-major-933e1e0850e703c7cc20055f7891e0f167135e27_1619757987629_0.7831402122236979","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.38":{"name":"@balena/jellyfish-plugin-base","version":"2.1.38","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.1.38","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"135e35c754a72e8f3ff2f7578276b26fa6345bbc","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.38.tgz","fileCount":18,"integrity":"sha512-3SdQPnLcjClVaEfkTJGw4LRUOC6H2rgyT46FGl22AZvx43nwh7eu9IkOob0G/rsJDnYrikHi0wWFxLF88cMdiw==","signatures":[{"sig":"MEUCIGIRNF1bkiTmrA6wqD0xkoZT5QnYVB03XJ6PpnkourcnAiEA26+aWozk0sqld1cRYiA++eyORVpXnguk+za/mSAsOQc=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":43024,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgi4xtCRA9TVsSAnZWagAAOXAQAKJfZhjcVmF0txkjKOnF\n4ofTTceVrJiUaGjADG8t943tXZBAyB3/X7q5vawg6KaVMLlPIunrfBQXiibI\nA2h/T1kssoM5nyPf9oizSJVUBwcpDt2yYJLA21NLH5a9RvZtaxidtoR7FFgM\nqu0M8nSGFJVXIGBVvhgc+aWzfuzXM1+IcUiC3DbTb1pMMSfDheoUrZhp3szl\naK81o/8U45y1ngGHlqZ/2i++ivo0aSbfjpCNL35vPulvc6kir0tLReoDWtwP\n1iyIowFGOuENIENlxEy7CwWqgUBJ+A2BB6nCNuMeWJct1oQiZHaiM2FFFgbD\naD6vK/jMjVJ/pbmRtD+8KxKSnBmSBLosZQQHyrCa/Gd+WrmDEOvQZU/VDV3t\nLuDW4WM6HXWJgQtwcvLaQXJRyj+UYDvekxldJK1hvu/JQYuFa9UWo6PFwWaK\nQAFh5SgxxkZRNkJ00ehr2GljL5V08Y0amm9AGWPRGwHTs7Dy3/w0Rf2bRBZP\nqgzSKElcXhJQfZEO9FisRs8H33M7ccRqUhf8AhM4eSTez8cahgjH9X7sqNCz\nnynuLVJihf/Fnn/zjUnEACqzCt6pEIELelCTtzDNME4bVO/LMI4gLIRf4uXm\nTaBZxDgjOPZNIHIyF/Ls4zRycLVCr705K2s9F7LVJO6uYEOxLRPr9VgngNVq\nHjIw\r\n=/JZK\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"15f6822f5334b78f205f6b7d8f8d3856e4a245e3","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint --typescript lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --typescript --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --typescript --fix"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.5.71","@balena/jellyfish-logger":"^2.1.39"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^26.6.3","sinon":"^10.0.0","deplint":"^1.1.3","ts-jest":"^26.5.5","typedoc":"^0.20.36","depcheck":"^1.4.0","typescript":"^4.2.4","@types/jest":"^26.0.23","lint-staged":"^10.5.4","@balena/lint":"^5.4.1","@types/sinon":"^10.0.0","@types/semver":"^7.3.5","simple-git-hooks":"^2.4.1","catch-uncommitted":"^1.6.2","@balena/jellycheck":"^0.1.1"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.38_1619758189143_0.25163591661210494","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.39-renovate-non-major-465fe66e2d58d47e4d60376fbf2b8bf21d2fbf3b":{"name":"@balena/jellyfish-plugin-base","version":"2.1.39-renovate-non-major-465fe66e2d58d47e4d60376fbf2b8bf21d2fbf3b","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.1.39-renovate-non-major-465fe66e2d58d47e4d60376fbf2b8bf21d2fbf3b","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"1a8ab6b426c7cdc3c3ef76264b4ab44b01e4b335","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.39-renovate-non-major-465fe66e2d58d47e4d60376fbf2b8bf21d2fbf3b.tgz","fileCount":18,"integrity":"sha512-dO5H2mDd2l2BuCVDdBqjlQLcaLzYdN+RM3g8gX7QRVJL3c5fW20UAjVMIR/Zpxf0nS2fPwlWMn6IDnzKZSNFTQ==","signatures":[{"sig":"MEQCICgjsuzUDfwUFSYlc2z5/U/mdbg+eOwFptUVyRP9FHYxAiAs+H6V82L831VtRDmZrsBkRP6cXRCBl9NXKbx6FsvHlQ==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":43186,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgi8kyCRA9TVsSAnZWagAARHEP/3Xr12BObvWxmmKhgzNZ\nj6GT6bvDOOfeWVOsm3G33yTxxzfS5VLide5A28kbXOx5/Gdo23UHW+0eSloF\n8JLW8dEJ6+J02cctpjN6HNZ4zOyPVAOBUikvnL+l8hBvZYuX7fsW9xvD5CsH\nQvo5Mbep8jUtN+DSm2nzUlVjBdHAmY1n8EWhPx/UMpvCysLliJ5DRV1a2Nbt\njWojkMC3h4AzwDipiPXwkFW52uvVXo7TvUTMV4zwBVpo98/Zext4oEH2rRKO\n0hcvNhqdBlqZklnUPxiNUJHqTT9z8iny6/EZtM22uevYEve83kAX4UImfBl0\nBA7XosDIslDimGGLn9fg0zu2SfHDeEOMHqxVAsI2VKopmdv91ObD1snAXtnP\nCbfxpsv/OqFV9ZZWNvYaX5yv30Y1e69BiyodpumkrRy4dHk/6cW/r35W5WMk\n8jj+T+ggz1wbq7fj12hilbXNenYg4umSpZ0/oA4+lUr+qFIRmKphoCjjP/HS\nu83IIURAtz/IN8Fh4670vnPPFait1hbqqwy77fWvqd4nGSHGEKbz/5FMp8d/\nHv8pH73G2P0A7XWbZI8ZYEw8KfSPmSxbHNjsR93eshd6T+ObQDhXa0xtGhwC\nbvevpYNgd4VKhfyUsOoHIfssKDX/KeSUy9+yzV1OARePCK4I8gXsQoNOA9xm\n/2O/\r\n=ZrEe\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\n[![Publish Documentation](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml/badge.svg)](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml)\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"465fe66e2d58d47e4d60376fbf2b8bf21d2fbf3b","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint --typescript lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --typescript --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --typescript --fix"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.5.72","@balena/jellyfish-logger":"^2.1.39"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^26.6.3","sinon":"^10.0.0","deplint":"^1.1.3","ts-jest":"^26.5.5","typedoc":"^0.20.36","depcheck":"^1.4.0","typescript":"^4.2.4","@types/jest":"^26.0.23","lint-staged":"^10.5.4","@balena/lint":"^5.4.1","@types/sinon":"^10.0.0","@types/semver":"^7.3.5","simple-git-hooks":"^2.4.1","catch-uncommitted":"^1.6.2","@balena/jellycheck":"^0.1.1"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.39-renovate-non-major-465fe66e2d58d47e4d60376fbf2b8bf21d2fbf3b_1619773745941_0.35779822320515264","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.39":{"name":"@balena/jellyfish-plugin-base","version":"2.1.39","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.1.39","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"1c4c18861c4708d2f74867f06b60e35c366f0fd8","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.39.tgz","fileCount":18,"integrity":"sha512-uslNty8y1A5tjOSK21Rzzn/Q8BppQTaupJfGCVTlLpY79waZhZgih9J0S6HDmiIoc1USu0x/k2qn7pU1tSMHbA==","signatures":[{"sig":"MEQCIEWvbNd5Rs7S17kxbaXlXXWl1e9jwlX9w3Mq1Jl/SVJhAiAeT8ZA3lFMve+LYj22u46owC7rn4cu+fs6ZD8qpuF33A==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":43126,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgi8o+CRA9TVsSAnZWagAATLIP/30SmyEcGvcWQ36c3WQ4\nuYIuFUw+I3j6UhArGHxzr8bMaXi92n5YwdDAxMbV14ccPc3HbJmNR0b5lXl9\nKxj0zZG+QW0avZsELslScOoK9mHGBiJa0vq2+s4Asm2VtwoH13YMiKm83YWs\ntNxRQAqz8t7b3fuSE1o6f/Wvz//gQjk9Csq4IOqMqoh5oFUiiSfutibYegbU\nVHUmyLKixweahojLY3nI7b9OTq2ddSajnMuagcl8pXaku2iYWknZiqqfP3Vl\njvgO28B19kMTeom798rvsNYkVGY0p7z/J1pYeQqtMuZnSsiM3ngRd0KStPAJ\nImXIr7sJhrt14nNYJnTnA8wOmy9qDrxHEakRs4NDvzT8y1u8uS+uH2HLuVCa\n92UPbr4zBYgPCUBdvZ0h+leVW6pvO4viLSUrYATeBAd324qumjXsj7UalhWi\n0Q6Hly9z+G2SNoH7DfwIvxTqMshguCYOn0XKmFrBpe1L9gRRzOofiivBwKXH\nL8MtB8kAUDXVdtPbZEb2N756kqXwlDZmbcAmL4eWxOgvxrvXzlhxEaNeJ1k4\nvwpg48/aMlXXOvJgHX3fFGUHfpMTaPZ7LMRavP5mm9yaV9lqaFpHZr9UCStf\nYybuHiOCVRsaaytEV1Umvq2EV2LG2kwRfqy6OEcvePHfMig0wtCu3gVaZyMV\nmRiH\r\n=Qidc\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"3eae2819876e29430ffc4cc24c4b8fc9c391a11b","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint --typescript lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --typescript --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --typescript --fix"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.5.72","@balena/jellyfish-logger":"^2.1.39"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^26.6.3","sinon":"^10.0.0","deplint":"^1.1.3","ts-jest":"^26.5.5","typedoc":"^0.20.36","depcheck":"^1.4.0","typescript":"^4.2.4","@types/jest":"^26.0.23","lint-staged":"^10.5.4","@balena/lint":"^5.4.1","@types/sinon":"^10.0.0","@types/semver":"^7.3.5","simple-git-hooks":"^2.4.1","catch-uncommitted":"^1.6.2","@balena/jellycheck":"^0.1.1"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.39_1619774013924_0.4736795210755267","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.40-renovate-non-major-2feb342d06f606e4c51a29eb600feded13387edc":{"name":"@balena/jellyfish-plugin-base","version":"2.1.40-renovate-non-major-2feb342d06f606e4c51a29eb600feded13387edc","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.1.40-renovate-non-major-2feb342d06f606e4c51a29eb600feded13387edc","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"79b9e7e7a07346a60e591b75d0fbb3f9cefd40d6","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.40-renovate-non-major-2feb342d06f606e4c51a29eb600feded13387edc.tgz","fileCount":18,"integrity":"sha512-pIUYit4+QFcIT7bNjPXXPHWz2nPqhHw4l8Ld0RgwfXF1NTdMixSotCgl8CiELFb5Wt3wDPmL95vsUpmLFaxI+Q==","signatures":[{"sig":"MEUCIQDHk4+yPo7LQqnZ6IDVl15aWQp2HPD6BxSgJo1ELTaIgQIgXdEyzrpYXr7RuUaY/0RKmuUvRBS6tPgIrC59K6CtY7Q=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":43289,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgjCP8CRA9TVsSAnZWagAAq5YP/0XSZi5p3yWBAJUINv9b\nEIn+hnHqCB4ISwKyYfRZmxqhZq5iIfsZvK4PnxQnTBsKElwHTbT1FPihnBpg\nycL//iEar9MR+z+t8M9BoDWobmWx4Bc+H4xnTwQIZ/zfp5prW8k8LpqsCZwL\nVS8hubxHKcrVZTPquf17PmPyskEI4oc/HYzA6W09nH6kw4NKZcTQ4YcabdsD\nUPVZtB2wtyMYY42cwtT8K01Nx84sVzub/kSSRNCI7u9pnSDyXXDTbgTQABsQ\ntm7DfPu0Y0UKGQu2F4hT4wR+mBmLiG3eRcTVe1S893sHFosP6cOu4CFy2Fsm\n0+6qtgZnAJUirBdUvsCcoofj7/HXIlxjI1v4sOJhvhkSAOq1Awir1KVsQidb\nu+2xgWGnVKuAy7bDKdcAV4ReuFV013Fuow8yaDL3iHMC1XI9v3IU1K6LhNV3\nGRUcqOi3s4gg3RBd+VQdf7HKu49W2I7dVrDr4AM77zBVxEC3XF1QJYvfBRUo\nxh6MFCPSNzRFMHPfemaLlbLRUKcfvwvPqDr39AdkK+sUR5ezxwuiMS3FHqJF\n29kFCCmaDeeNYrmrJMLj53e8Bey/uyjjsgHQ5gdwxsyu3cx3cn5DvMwPCtFg\n6CJZIK3osQ7CbH9Tewn129czRDI1TNb5qKAZwOUviIhEzLlXmnspUx1iIC8f\nWxUS\r\n=8UTX\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\n[![Publish Documentation](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml/badge.svg)](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml)\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"2feb342d06f606e4c51a29eb600feded13387edc","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint --typescript lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --typescript --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --typescript --fix"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.5.72","@balena/jellyfish-logger":"^2.1.40"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^26.6.3","sinon":"^10.0.0","deplint":"^1.1.3","ts-jest":"^26.5.5","typedoc":"^0.20.36","depcheck":"^1.4.0","typescript":"^4.2.4","@types/jest":"^26.0.23","lint-staged":"^10.5.4","@balena/lint":"^5.4.1","@types/sinon":"^10.0.0","@types/semver":"^7.3.5","simple-git-hooks":"^2.4.1","catch-uncommitted":"^1.6.2","@balena/jellycheck":"^0.1.1"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.40-renovate-non-major-2feb342d06f606e4c51a29eb600feded13387edc_1619796988401_0.41389645298377564","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.40":{"name":"@balena/jellyfish-plugin-base","version":"2.1.40","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.1.40","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"aeff9f67ee134601199c8c198c5a72edf43b3a0f","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.40.tgz","fileCount":18,"integrity":"sha512-yRNY2ra9gj3rLFf7nnVbFGemhHw8wTA81NCV9FLaTrztzmYjWLhrloJLIkFnJH9IEYX6Xkh6j3+kEjoU4zAS5A==","signatures":[{"sig":"MEUCIC6zWpC3Rwejjoynbe+F/kNqEyuPhgdqBiYwwKCGGKUCAiEAnljYRc6rMWAMvDyHl8caTSpccoPsEmIBXSdkukBxBCw=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":43229,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgjCTNCRA9TVsSAnZWagAAekIQAJC1zd1svex8XPYN4SaM\nEMGxTGLCZLB6avP1TOWbyL6a+IiiYEMSfLifIKy7DUV9yKM+sl6Dt5EC3g3d\n/Zb3h+Jjt2/23E8sKUgNkc3fjkWuo/Bo4ep+Z/ruhTr9cgp38nBQkUwzxMtz\nAFBlcW5q44SNRR1xiq5TdF9ciWWdf1hFN3MlcXV5EQuM0kKaek+ucZzE41Dc\n1IFNzLHS7s3Wovr0/LhDT8bb1b0NBCEy5aQH7NveAolp96GDS+l2+FFKNxXY\n5lL4nxsqeGl0gwTnG9TD/wDaCkpyFS/8ycZtMbkZRyxzwCgWNb8loMeP5HAf\nc60HyeOCLCgLZ/0w32qcYP9qiCA5RoKEflzfTYCTitR6yvwzRcAW2k8B0cut\nIVtVbMpt12G1dlqUyxaz3FwqHhx2EovgPJG2Q2eLATJJOTz+0OgCY9F7V6hn\nTvnzINSY5QRVz+ynkOyN0q8Jq4dHIJLdbrVnTdDi6F/JBL4HZEUywi+6XCBn\nZqRQ/e2N3PaMMXAt2zMbqnDvryWPLgoddP1hoQ+oLze2o5TtjpOPuVw496sw\nUJji/3ZiVcPCmIpns8JnL0dxQyDNJTk5fJDs1aq4NeYlr2FA8QXWSpQjfZYt\nhtAt5V4t0wXBbF3Fuz/zB9DDoKMA/tXP04rWt1nYOpmlzNGWLCWQm9RwlnbP\n/fkT\r\n=NWiP\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"45f9f6348a51afdc65cc5cc9a8ec5e87e655833a","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint --typescript lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --typescript --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --typescript --fix"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.5.72","@balena/jellyfish-logger":"^2.1.40"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^26.6.3","sinon":"^10.0.0","deplint":"^1.1.3","ts-jest":"^26.5.5","typedoc":"^0.20.36","depcheck":"^1.4.0","typescript":"^4.2.4","@types/jest":"^26.0.23","lint-staged":"^10.5.4","@balena/lint":"^5.4.1","@types/sinon":"^10.0.0","@types/semver":"^7.3.5","simple-git-hooks":"^2.4.1","catch-uncommitted":"^1.6.2","@balena/jellycheck":"^0.1.1"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.40_1619797197106_0.0020412537806739905","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.41-update-interfaces-5b7d6806d13071cb7f3de589861d8ceaa55ef042":{"name":"@balena/jellyfish-plugin-base","version":"2.1.41-update-interfaces-5b7d6806d13071cb7f3de589861d8ceaa55ef042","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.1.41-update-interfaces-5b7d6806d13071cb7f3de589861d8ceaa55ef042","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"446d3911e389aac5b9910554951ded8aced4bf5d","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.41-update-interfaces-5b7d6806d13071cb7f3de589861d8ceaa55ef042.tgz","fileCount":18,"integrity":"sha512-6vu+nu+4+kEcG9vj5ZROa3RLuSVJi+fsEb+SkxHwhSL5iDijgqlj3z10s7YErqHX74ZqY2rpo9ZdV2NKC7NbNw==","signatures":[{"sig":"MEUCID5VU/H0Epfxk4b+1ziTVE1PV+6Yd4oTI75kgV6gH7MZAiEA2J0+MCju/xufXQY6vIqaQhYn+ZNaJ59rlgJkEVRiJMQ=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":43944,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgjChMCRA9TVsSAnZWagAA5ccP/15QKJx2f2951wUFDofj\nJsT4KsreYBAiTC/LBCJ2iGNb3a9FSYwlOO3uK5Nb7wpytat26ycNKyuYMfiw\ndSnekLJMvkz90C+gwNZzPC1LDzm3Hy4pux402OhtpTDxVvPu/OWPx6It7soI\n33EuuBz07iCwZd4EKTeEaJJaXA9GEzTc112ND1eW1KlHdtje2qO6XZz7oEme\nj/iyzeFjWI8jSwf5k/GPSBYnHTEhPs2dvYC8jvvCr7wlMfLEAb75NqdIMdBS\nxLbLgo5ntawngFnXbBuT3k3uF3DB+rV7wesG0+FJ+dGL9+3AT9nctUniHDBD\nAToTBilSPm4YI2kFfKrQvkKUWFoAC3jZqngFklx09TyH1B1qCKTB1VQTmqil\n0th/NBgzNvLKHo8Y/4jbtox3DQsFJN012FO4kg1DSQ/BpcK4WsXtkFrV5Rou\nw7GNbhpSyJGSEnTAyHecj7iEZFRoeqS5lzlDn1YOcOr52DCzY5zTH5i14fJ9\nokrQsJj1z0KmmTwLH1f3mHnW0HUwuuFs7H+cDWdWPfLZqqo8stpSLBO8MHdb\nt3cXlEdBht+TsHLwKuQ3DWAHC8RqxgeueBBeG3tcTWf4RyO5LOTKVwC+IKhA\n5JfJ3J7uJP6VcwVuU5mkBY71SIQ33Sje4sdBFA58xZHt0b1aIxqnP80AuAEl\nJZqV\r\n=Cu4z\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\n[![Publish Documentation](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml/badge.svg)](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml)\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"5b7d6806d13071cb7f3de589861d8ceaa55ef042","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint --typescript lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --typescript --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --typescript --fix"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.5.72","@balena/jellyfish-logger":"^2.1.40"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^26.6.3","sinon":"^10.0.0","deplint":"^1.1.3","ts-jest":"^26.5.5","typedoc":"^0.20.36","depcheck":"^1.4.0","typescript":"^4.2.4","@types/jest":"^26.0.23","lint-staged":"^10.5.4","@balena/lint":"^5.4.1","@types/sinon":"^10.0.0","@types/semver":"^7.3.5","simple-git-hooks":"^2.4.1","catch-uncommitted":"^1.6.2","@balena/jellycheck":"^0.1.1"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.41-update-interfaces-5b7d6806d13071cb7f3de589861d8ceaa55ef042_1619798091509_0.23903608143322042","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.41":{"name":"@balena/jellyfish-plugin-base","version":"2.1.41","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.1.41","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"91b34ee0fadba53c5a2eaf4e61eec306be0fb94d","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.41.tgz","fileCount":18,"integrity":"sha512-cLq0irDHvuJ9YLntF4VexUF8dzFAvGcrnG3kFJb5f7Dx/juKdU6qjMnuAYRWAZdmYm3GzY0eLNGrwCsj8FlcxA==","signatures":[{"sig":"MEUCIQDmCSdcRpBpN6oh+L1C8oJsll4SJ5y7qH6xOQ83bOpWMgIgZjYXHNccsrWs++FrQuYKt2/alMENZn7pmmPW/bK7YmQ=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":43885,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgjCkzCRA9TVsSAnZWagAA4BYP/Rb2QWFhwH1rxYwkLJj+\nwgmjQZ2FGbvS6JMLvd9wFhr4mmFDG9cUnWCaUI6PD4awUT704wEiAgm45RRX\ni2V5sPomTm+LQR4VWpmQfXVS3G3ZowrElOLx60Za/DnRPGg+8WvqfZz4yRsE\n+RHEs4cR7qt4az82jt6NVY2cHkUFOH/jZ3zFrj6YlvLzjhVGUY4ABOpqT/HZ\niC2/1Yktoo0WLfW5HYP0q18GSGW2OWCUBO9nF/Rn1rZCOLkNCeoo0owKFVZ0\n8TvddtxHQ9lznP+5xTohoKZqEK5M1/5+fOKTNRsEREH2aooURS4QiIUuFwUj\nrQJkDF+/o3xBvnGznphQVxqYYtsXOLdqqp96bkz2q24DVsEDiFDrOr9qNplg\nV1lOzlV1bSR3OI/kxeBFC0EnJ2Uo1eC4E+m6FWaFSCpKHm2CqakNTpZ21kHD\nqbOSyj7Gk9DW9VcwP5bj019kFvrPH/tBUrwFxlnQIYvB+xdb5ptUB9ua6uQn\n77yeNtDn/o3K5rb/W2s7vQyqnDwF/LPtU+tyaIA+PqD8jD71m51y6Bl+UdFG\n+X85wRT76IgQ59RMaKE7LNntLWYsM+gLkdIIb+SdcfwtUkJKezJgEURcvNC8\nMw+qcELu71NinvcQ2G1gjiBk7IjkzS8ToYcQ2hltlUXp/cFyO1fHE1of2GZR\nsAVd\r\n=OuEZ\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"51627ca7674c28235ca65b6e71b0d70c7f6bf3c1","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint --typescript lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --typescript --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --typescript --fix"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.5.72","@balena/jellyfish-logger":"^2.1.40"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^26.6.3","sinon":"^10.0.0","deplint":"^1.1.3","ts-jest":"^26.5.5","typedoc":"^0.20.36","depcheck":"^1.4.0","typescript":"^4.2.4","@types/jest":"^26.0.23","lint-staged":"^10.5.4","@balena/lint":"^5.4.1","@types/sinon":"^10.0.0","@types/semver":"^7.3.5","simple-git-hooks":"^2.4.1","catch-uncommitted":"^1.6.2","@balena/jellycheck":"^0.1.1"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.41_1619798323466_0.4324979442334227","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.42-renovate-non-major-68d2908caf9ba560144f129f61df7ba2be3c719d":{"name":"@balena/jellyfish-plugin-base","version":"2.1.42-renovate-non-major-68d2908caf9ba560144f129f61df7ba2be3c719d","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.1.42-renovate-non-major-68d2908caf9ba560144f129f61df7ba2be3c719d","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"3950c6c15b2720312c34d9d90d5a7d46f48e62fa","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.42-renovate-non-major-68d2908caf9ba560144f129f61df7ba2be3c719d.tgz","fileCount":18,"integrity":"sha512-pQ3A3HDbwli1cuoLleNFLDwBMzzTgzZTlrFcQcOGaZYM84WnqWjmXd0BwXSgzqNNq1maR374AxhFvSekHe5+IA==","signatures":[{"sig":"MEUCIQDOcAtfp2c1DhsxRYcpwa6ZKAuY/fElN45/lG/xWPFHSgIgXt2kZa/pr1PFH0/IU6u6+3K2+gsTY4TLEe9W6O/5ZtA=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":44047,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgjLxpCRA9TVsSAnZWagAA87cP/24xW/p/L1IRGvVFFjh/\nvpQh7spZNLxbIOZTo7HvBNEef1o7+Kn8Ry8NE5FQjUK31e7sV+FuLIqyfqI0\nwEWZX65nr+izJlC+b69EnmW6WXPqWTBLrw2SBDnpmxC8LY9mv2g9MUr8cWbJ\n/CsqTUC0Jt3cIyWW3Z015nbu7Z5fpa9OoPTYRGLVCQk4xRuuqavUaFeeXidk\nqzy3jg5sn7Z89zo/uV5YBwn8uVSbvEgzWYbd8QiN2DHmLIhVhLWTtbt6SPaH\nh/RnKAijMqk1g/Bi3ex7OijV6qoXf78Fh3usK43vpHrxF8ub59wjjsgwlION\nWCNlQuoLdqFruP+qSPS4ledku2TSCaTNiVTCvxQ9FmBPFCvrHX2nR6UTEI2n\n6g3cp0D1/qjHhUigx7b84lZITCDN1Az+yU58JOY+29VLsJzZPcsp2TTGsyyK\nBJrXKOXwEhEtChFjSmdshwxd5sbrY/ULBGrej10OyXDrJpFe120x5LSk0ksz\nEu5pk4gxqDJ1yBf2C+gUUAghcEW917rs9HDBH3yXLcNHEoRgtrQulHVrnWIy\nVMyx+/g6Hgbv3RrVfY3GRS9N8iSAOahCGtIvw7Hh6dMo6bCkMvPeNjQl0wT5\nnEiOGLGExg/9a+jRjzdXofsnOgK5uoF6wpZFQJu/cxvnc+rGiraGRhOsg7Gm\nK7jY\r\n=Yo9B\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\n[![Publish Documentation](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml/badge.svg)](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml)\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"68d2908caf9ba560144f129f61df7ba2be3c719d","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint --typescript lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --typescript --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --typescript --fix"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.5.74","@balena/jellyfish-logger":"^2.1.40"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^26.6.3","sinon":"^10.0.0","deplint":"^1.1.3","ts-jest":"^26.5.5","typedoc":"^0.20.36","depcheck":"^1.4.0","typescript":"^4.2.4","@types/jest":"^26.0.23","lint-staged":"^10.5.4","@balena/lint":"^5.4.1","@types/sinon":"^10.0.0","@types/semver":"^7.3.5","simple-git-hooks":"^2.4.1","catch-uncommitted":"^1.6.2","@balena/jellycheck":"^0.1.1"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.42-renovate-non-major-68d2908caf9ba560144f129f61df7ba2be3c719d_1619836008357_0.9474590113758516","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.42":{"name":"@balena/jellyfish-plugin-base","version":"2.1.42","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.1.42","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"ea47728c7a35223ba943aae95452eb1e794192c5","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.42.tgz","fileCount":18,"integrity":"sha512-OjiLKXr6toutqzYIq8dESxIqyxI7j7B2ETz2Oj15yVEVHM4dyUWIUQ7oTmuheO2BM23sRlwEqAP4ftl6J9EObg==","signatures":[{"sig":"MEUCIQCcCGNH3nF14PPGqPfuQmg7H6hcDo9AlFCh0Rgqm+GA4QIgDq69n/GVJqxWZK5PGLM39tgx0FYgfvnJ255Z30+9/+o=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":43987,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgjL00CRA9TVsSAnZWagAAWFgP/iz0E3knZ2YaRFT/L3kw\n8mugVmzBH2W08eyY1SZzsXV5QZvvz7OttK/VjskNk/plpXccWJqX/KLjKUKD\nGeXpG/KXyZ4sKq4wZKEd7tTMDVIGO5ainaYh38nDzQHGIIROxSLP1NXWrP9i\nuI3rCmDt0WG+QVZ/gfXr02kqVnkRSIAQRcGweM59bfaiKzWgoYLw3u1SXJNx\n8yy6+kgv0y298EZqmpUk+k7BvIqNJAKyvCJErXMo5AJ0yu/g96zF6VDhFl7O\nX6Olv7P+yuT7v64RKaCTYt+O37FVG3mshzvYcmgmzOalOjzfyruDnq2Ikt6q\n6tPZ7xPKLSly3PDyaqJzgpN0264q6GzTb/HViGLgkkoew6UG/gnPyp6bpFSb\n/oGQzSMJtjwMTbdRN3b8YqDGFWji7JLbsIfFFWqIwRe1vgzJ+Pa1JDKwsRf6\naBkfR3DanOmTt49hbfcb/zuZ99ADUgEw0YjttA9bgh6cGideLSIiFdbP38ph\n5sTzN6v7mpgbI6iyOvHiimqvqKKFjFDrBQ1C1+7PU6k748UYHQzKadSWoi2z\nHgMQTzRylCLLW91Tl8Fm8vtG1TE0LioWVRwrymja18FX0ENTnDX4NSZ7cHA+\naxS2Y/XsjZmTQgKy0DyLYTHIhomfBL9AZAVmGOYCAumXOGLioUBx42fnkfEB\nnHvl\r\n=AZvH\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"b56d69668f44919ba20b27278be474a21ae8f027","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint --typescript lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --typescript --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --typescript --fix"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.5.74","@balena/jellyfish-logger":"^2.1.40"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^26.6.3","sinon":"^10.0.0","deplint":"^1.1.3","ts-jest":"^26.5.5","typedoc":"^0.20.36","depcheck":"^1.4.0","typescript":"^4.2.4","@types/jest":"^26.0.23","lint-staged":"^10.5.4","@balena/lint":"^5.4.1","@types/sinon":"^10.0.0","@types/semver":"^7.3.5","simple-git-hooks":"^2.4.1","catch-uncommitted":"^1.6.2","@balena/jellycheck":"^0.1.1"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.42_1619836211966_0.5714069810269837","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.43-renovate-non-major-962c910369fd5e394730c3a388d03b3a26cde8dd":{"name":"@balena/jellyfish-plugin-base","version":"2.1.43-renovate-non-major-962c910369fd5e394730c3a388d03b3a26cde8dd","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.1.43-renovate-non-major-962c910369fd5e394730c3a388d03b3a26cde8dd","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"bee9d414b5f8d31be49ba62d134dcd806dc6e47e","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.43-renovate-non-major-962c910369fd5e394730c3a388d03b3a26cde8dd.tgz","fileCount":18,"integrity":"sha512-nglWLGBN9skti9ZJaBlULmWdbPqfWzdjof+n+J+jx7V/z2ErW6qndgKTvrI0s1jGe+j+wpIrdzoX5ITPvKau3A==","signatures":[{"sig":"MEUCIQDXxJb2tkdrTlO+NRxw3ahQJk9krwUqlm1fHpu5Kcp+XQIgXrHQOtfQdGbLpqb80mgD9OmL6whPAYCvkuY4o03f40o=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":44149,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgjRPHCRA9TVsSAnZWagAAKR8P/1y8us4U07srnWlspsXB\nmllENIedoFuLzdtiJTGrMA/4xAgQQD26z14iWvRX3VOUiFBzXLWPUg9tqhP/\nmBDMcUWH4jYXRxFvF/305yuMjangP+r5lzSMs+V2xlTh/WpCf58ABuRuhTfi\nlkvu/mecED6ngWuGtFcl7LhQr+Hbty5hUvONJi9E1lSx23oqTy29DQTTCNtu\nkl0J/WvQQ+s/dmK2ins+zy21qws/NTSx8U+/4OTUitiSi0iBgqcVdTH3fSfI\nr/zV3wF/vhXbDP5kYXjCL9uZja/RUntjZGYuAnzGmBxfIdgN+JtN0rMvP484\nymVVOYmCAi9SrbrGY6oo16Fcz4LurFtvbl9/aGRS2jFuYv//DWrWvoTcB1qu\nPGhI6xpiGWHbi9gm2OuZ+Ej0por7C/ADNj0+uXW+vg1ndWBg/RuDjw3sajks\nWPTt5V4lvaK4EdZJ1OiwUMJL8U+Ix82AQrxey1sIV4vy/rJW22ZBYN9B4k7U\n508icqlBdjqHUp4HzPbq5dj4wfIHgJ85p2EdYsCyPpHyAhIRWJph+GbYUl1/\nFShGNW96jd7AObmyLve/5yBduqrdMQGhxRc0gruWkFjB3Z+skfxUHPKZFSwS\n4cOn3JLZw1WdbIxteeEohxIu5D4fvBSC3Muudbq76T7yF/e3fbgmG1i7S24L\nE8OY\r\n=8yXs\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\n[![Publish Documentation](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml/badge.svg)](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml)\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"962c910369fd5e394730c3a388d03b3a26cde8dd","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint --typescript lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --typescript --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --typescript --fix"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.5.75","@balena/jellyfish-logger":"^2.1.40"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^26.6.3","sinon":"^10.0.0","deplint":"^1.1.3","ts-jest":"^26.5.5","typedoc":"^0.20.36","depcheck":"^1.4.0","typescript":"^4.2.4","@types/jest":"^26.0.23","lint-staged":"^10.5.4","@balena/lint":"^5.4.1","@types/sinon":"^10.0.0","@types/semver":"^7.3.5","simple-git-hooks":"^2.4.1","catch-uncommitted":"^1.6.2","@balena/jellycheck":"^0.1.1"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.43-renovate-non-major-962c910369fd5e394730c3a388d03b3a26cde8dd_1619858374512_0.36431140147728835","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.43":{"name":"@balena/jellyfish-plugin-base","version":"2.1.43","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.1.43","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"674c978974abf1afee32dac316d021838b142311","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.43.tgz","fileCount":18,"integrity":"sha512-kR80wAaWp6ezx+yl48MPAVWa+vvZFZR01dp+3vjH3C03LteFIVT4fMOVDBVNwnKLXxEzDrsjjxpLtsmn5GM1tA==","signatures":[{"sig":"MEQCIQDH9IUA28WIEWD7zJgd+hG3iPFX13HadP47wAkvrXCx+AIfeDz5H0soLlivOtLMJg6M/VW0y7rnGtjJBxRd13uwow==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":44089,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgjRR6CRA9TVsSAnZWagAAvnYP/089DGJzT0TRi/wmiDZQ\njNtamU+fhThd6lxzDgpdFlA1vERQa+nhrB5mIdUy21HjiV6bT9zqXfvnUouH\nRtZZZGYYFnACfn2zJNjEQiYSFvOnYIUjdQ+BQPP2aHBFkZc/i0fhqroGSnhj\ng0nUtgRuQW+iB6ySKbfLz6Yic+ihfWN2SNVo3qOYZPc+4nOmB3+Jqryo1K0i\nV2OoeqiKSlkEmC/Y7jX7U4ESF1q/e+9rKaSXD9Fk4ci+sqBXMnMhBYgz2nKR\nQk4XCh7Ez3RzY1ZcMllXhu86VoOyRCCEipzeLWuXM8G2zzqz4516AVcYDhoj\nRzBtoI/pVOniY6LhZOhaS6+zoCn9ieyTtSUp9H6krI/Xa49Bk7w8Ca7FLoXt\nVVX4xIbe1oYCPbyL9rTZo+6bwkM0AJzgmMsjXn1yH5QseNxG8Lrg0alW3h0k\nlGMxro2xb/ZiyUw5EXzmjPBFsQMRKMlo6wrTUevKDyj+qaSWDDoZx7M710Cr\nadpHFnpakqcFqdzyf12cuUUHZE4edUW8BAkRAbYDvwXScrirT3xrUZmrmqK/\nFjEKlDLuOTEBvm2ru26Oaa2sAL4qrpfPyEvlXdWuwnNBy4XhZ6hUuHn9f9cC\nKgA0VjpA1sbQJc2fuO4hdbGNwWz4Fjn1h4IxlNX+SxeD8qciI3c4j72kyhCY\nu63O\r\n=jB2x\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"6dbde7bb0b871190b72ec05565feea8990446a1d","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint --typescript lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --typescript --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --typescript --fix"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.5.75","@balena/jellyfish-logger":"^2.1.40"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^26.6.3","sinon":"^10.0.0","deplint":"^1.1.3","ts-jest":"^26.5.5","typedoc":"^0.20.36","depcheck":"^1.4.0","typescript":"^4.2.4","@types/jest":"^26.0.23","lint-staged":"^10.5.4","@balena/lint":"^5.4.1","@types/sinon":"^10.0.0","@types/semver":"^7.3.5","simple-git-hooks":"^2.4.1","catch-uncommitted":"^1.6.2","@balena/jellycheck":"^0.1.1"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.43_1619858554055_0.9026738968256023","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.44-renovate-non-major-65f9960c3a4e5105e99660683474ce24533c9dda":{"name":"@balena/jellyfish-plugin-base","version":"2.1.44-renovate-non-major-65f9960c3a4e5105e99660683474ce24533c9dda","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.1.44-renovate-non-major-65f9960c3a4e5105e99660683474ce24533c9dda","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"b90f24aee4e8a4a2fdab2acb513c3ce68e48f078","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.44-renovate-non-major-65f9960c3a4e5105e99660683474ce24533c9dda.tgz","fileCount":18,"integrity":"sha512-74/ISwRVPIoD5eM/aLZ8L/oP37l8K6EvxVZjGf6STPQpvxjTf1TzgQU7aSIEym06XjjBw/6K5sxTXpAOmYIZLg==","signatures":[{"sig":"MEQCIFbN9RpSo7OU2wU8LfQp1GV9zZlFEzhNzWvpEG/RmwKBAiAqWiXtfNbsmNrjHJFjkAl/Itcq1AxvkyW97WY/VJljoA==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":44251,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgjTTtCRA9TVsSAnZWagAAhb4QAI+mTZAGv2rdtBUNFNrz\nBJw87Ik3Cnb52priTdk9qWRzI/u1t6rwq28R/+VR8p8QmPlFUoud2MyBkRt/\nomdfbPcvVVR/GW1Z7SaokAHtBgqZj2Qdml8/Gebkx5L6i39CcbaPRpd9H3ep\nDKUH0VdVh4oSEE6FwFCOx8C5esJgldhfT9AW/QFwngKcO6nf/XRaxsNp67FR\naE5k/AxeicqHJSh5S5zX62rgNqTaaMLODxtzuywXhEaw3bQn9+4yzuaX+tS6\nHKTpO5OibMORmmhzI62pk8sKo8EUDlw3tyIVZt//VzdZC6nOIEu+B4Sv34wU\n9bZHT+GnYigfLa3kZ1nzdXDqUKCbzob2+cKvOrAzk+OCJjLCjICPnQ6Ktn+J\nN1a5nSYGOAsznxbzEM9y4WxL6DSzl0cuCRwGxJ4PZAYmEM+I+EOpmWowfbEz\npudKL68zykcKZqOacnJCztbdAcgVSh43R3f7iHs0PiZPbAp5b6SgXqjN87JG\n5O3xsNNKEJvmQXsBgAPj47S1tqtO0AcnTQ1rdMcw88HhIZgT2ccCtJ9p1HGo\ndH+1OjK4dfsjm+Sx+aflQChdKcW/1u1abLEClDeIfDZSajdzsGvMbieXOrO5\nz7+IJkgNR8X1X8YTpeVA0hpySrdwoKb53JmeQtb2k8Ts6CQMfgbcZGuiPFRC\nKgsV\r\n=SqNy\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\n[![Publish Documentation](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml/badge.svg)](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml)\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"65f9960c3a4e5105e99660683474ce24533c9dda","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint --typescript lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --typescript --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --typescript --fix"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.5.76","@balena/jellyfish-logger":"^2.1.40"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^26.6.3","sinon":"^10.0.0","deplint":"^1.1.3","ts-jest":"^26.5.5","typedoc":"^0.20.36","depcheck":"^1.4.0","typescript":"^4.2.4","@types/jest":"^26.0.23","lint-staged":"^10.5.4","@balena/lint":"^5.4.1","@types/sinon":"^10.0.0","@types/semver":"^7.3.5","simple-git-hooks":"^2.4.1","catch-uncommitted":"^1.6.2","@balena/jellycheck":"^0.1.1"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.44-renovate-non-major-65f9960c3a4e5105e99660683474ce24533c9dda_1619866860922_0.2828701111408196","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.44":{"name":"@balena/jellyfish-plugin-base","version":"2.1.44","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.1.44","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"75f58d1beea9092fbe32fa9c3555d5f0ed9fbf05","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.44.tgz","fileCount":18,"integrity":"sha512-jX+drYUJsyxPlZ6ajQDNGeSLlJQTMMxhmNJ1VMXaef7oaTMG2XW6MvTIpHKBEQQFBIEkZYFh4cnkei6HWNahpA==","signatures":[{"sig":"MEQCIGJdIptY1yX6k8GnJbYr0stSCymwmQdAI3fP5DhZZqGgAiBuLO4lAeAtbj5JGB7wkomlSXjzFUguUYCksF1WjBGSfg==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":44191,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgjTXICRA9TVsSAnZWagAADl8P/1Mj/s+aliIm3MfU6k/7\nvgL7AhgxRM9aP9lGHnqIrLG5Xmg5jrNui1v0trHvcJUsJ5tgEWFUa7bGL3Zm\ntU0B9UgSYscIc6/gdfVclbixLsGOeCuFc1HGlOTvdND+L0cYq6/VBFmWPnEV\nfD6inxgzKY43khpZNJS0P4SlZ7Nc3cV1w348R0ojud9JA17GgH2ndf4SCXRs\nirmyEowikan8JtMmRIsQwKKY+9L1RVD8bE2ADEZcNAoDHP6ElILw6GFAHPof\nO5AdOOaTkTxRU6yIDc1RFooXJmY8kvl3siBZd2bOak6T1wCvG11tIaIrSXiO\nMOXD0WX3aXDunOre+g5XCygm0MC13Di45VmUx00vQ5kmIhSkPZwY/OD9G+ll\nGudhVTp9yH332R8U8GwPCBrwbIBso6qg7HLf120f8N43Z8qy1w3PeyF3qBUg\ntT8X16SMdYnptm9TWmfTTUUygA3mx14CulVrhxkJcKxGDtKoB1uMLoaijsjA\nEbemftQ9CSJStJ1d1BCPpoAkayk0ccXMkXP/svXhIFK9pGGTwU/CcmFugT01\nTy5isd0OmIuJ4K1FmCvtjYSdQa0ro73VjgZanq+ZFiAKDLFHOQ9cXxaOhxiZ\noWku1VgDiz3tM+wSLEjd1RXGPNPzl0rz19+HRws6qZoqas8lZUBJdHjovrBx\nsqNx\r\n=xhXO\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"76111ef8af7844fbbc1afbba44ec5096b6f0eff2","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint --typescript lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --typescript --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --typescript --fix"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.5.76","@balena/jellyfish-logger":"^2.1.40"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^26.6.3","sinon":"^10.0.0","deplint":"^1.1.3","ts-jest":"^26.5.5","typedoc":"^0.20.36","depcheck":"^1.4.0","typescript":"^4.2.4","@types/jest":"^26.0.23","lint-staged":"^10.5.4","@balena/lint":"^5.4.1","@types/sinon":"^10.0.0","@types/semver":"^7.3.5","simple-git-hooks":"^2.4.1","catch-uncommitted":"^1.6.2","@balena/jellycheck":"^0.1.1"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.44_1619867080114_0.5718446334638383","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.45-renovate-non-major-1b6c626af3b1edefcd18ee9562fa17a1dc2892f8":{"name":"@balena/jellyfish-plugin-base","version":"2.1.45-renovate-non-major-1b6c626af3b1edefcd18ee9562fa17a1dc2892f8","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.1.45-renovate-non-major-1b6c626af3b1edefcd18ee9562fa17a1dc2892f8","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"5959438892e6fbc9b155a8b5c2cba62f827a6d18","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.45-renovate-non-major-1b6c626af3b1edefcd18ee9562fa17a1dc2892f8.tgz","fileCount":18,"integrity":"sha512-nwbHE8LV6xAfRv8JpkNEnms/mRzV23L28wry75XHO8zD7Djg/l8qlrf+/VOqyJJQN2YQ/MA4yJupT6JPq8AMWA==","signatures":[{"sig":"MEUCIDnHk/9ftH9gNOq4F5U6m1le9ZgbYqqo/kNUu6/T6hs8AiEAkvzbPT8R4MDNKuW40chYbB6myFErFZecCRMgQY6qSXY=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":44353,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgjVRgCRA9TVsSAnZWagAA/tkP/0TdfLHuqHZkRC1lliGz\nU0UpS6pMP6JsrWAo8yeXXoBqPEELJjI9efNXqyzGoVZfG1hK+iVXVDCPkYZt\n070GdiUncAcRm1vt4iN5t/8N1p36cDdVIJvazkMi1d45hHXx/2Hg5BWPo0yP\n2AdF37jH2XPVwlSWenjpJHsnYrbzoZ2lfYyFjL5VUjDZn46F236kAj7Hsiav\n527Ik7RPN+1dOT+o3Y80SgG6e74+3s2xk8j4txBm5xWLIvktZxFQD25hrwjC\n4vHyjrlEqP4t3xBPHIE2Ow69FH6+MuJI6yzjnnDaxdcTW/eTvvB7U5r5egP6\npHtBIZzm7/JCTvjAA1Wyb+iP8EAGkT7IexiQ7UPbrLcJVwOh1BB6zDCFeuOL\neICC0wUTJNMYKIa6m7hOOEfAHd6N79vJBoVKDQKnRoeUtFMHKHXXI/lqlCcl\nG0fOU91hdrc+3wTeASC79MackKTuFlbyorGSblnpnBTNwpCYA4QlqwVGg0bW\nRScPFnkiyQyDG0lekW0xHKXcN4Pd/MshTuwRVZMfwqgQVd7k7EN1c2jUWOx9\nOnwkTW4QYX2XGjFHbn0J9QLs9h4dNDyRkwGTIah12iiwRwf3prKC/yKikTTY\ntM1Lz9HBcIn5zxboe1sPgJPrQ/thxVICClenbdkA3rfqaplHXC06FYANUYH4\nmUeW\r\n=a10e\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\n[![Publish Documentation](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml/badge.svg)](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml)\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"1b6c626af3b1edefcd18ee9562fa17a1dc2892f8","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint --typescript lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --typescript --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --typescript --fix"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.5.77","@balena/jellyfish-logger":"^2.1.40"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^26.6.3","sinon":"^10.0.0","deplint":"^1.1.3","ts-jest":"^26.5.5","typedoc":"^0.20.36","depcheck":"^1.4.0","typescript":"^4.2.4","@types/jest":"^26.0.23","lint-staged":"^10.5.4","@balena/lint":"^5.4.1","@types/sinon":"^10.0.0","@types/semver":"^7.3.5","simple-git-hooks":"^2.4.1","catch-uncommitted":"^1.6.2","@balena/jellycheck":"^0.1.1"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.45-renovate-non-major-1b6c626af3b1edefcd18ee9562fa17a1dc2892f8_1619874911571_0.24963522519752246","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.45":{"name":"@balena/jellyfish-plugin-base","version":"2.1.45","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.1.45","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"169c5fd386eb0784896cc16605e3d03c1506032e","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.45.tgz","fileCount":18,"integrity":"sha512-lUUEEk9ULT63iYnWpqwuXHZlYE7Ou2XdoaevTuwydjAH2R644GZbe2qZxlV2F8s2FwZXvZytuT/38EPED4yAVg==","signatures":[{"sig":"MEUCIApnZjcNdf0XgIb5fPervC+2RUqeZvg6DQqopdS4aMVXAiEA0ri+gLBAQR0/oFM8obaXA0iIrM2tGu3oJlZmA4Z4fFA=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":44293,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgjVU6CRA9TVsSAnZWagAAfG8QAInJV1ZPmynyGalmgHLV\ncFhIqnDzwFVu3c0C92gHjHsuh/0JdphMIzDLS3mpS8P3YnL6J/678cMNw29/\niSsto9wqyEMOYfu6NEFDlCn4HC1Ig3nyboTh7tRh+UE8EfsaXWP9C+25s6mJ\n9VgmzYVQnTFHZEOoxffW9I751cgc/wualjJmbJJRQwRHguqumhPGNnPZtpuL\nThkJIgYdVNqJQyNLU/ep9BUR+9ITBdzlQNguV3WpEVIyXy4Htbe/jX6rekX+\n3QpZSsLaGKj5dbW0M0rZ7sRM1+mq5dyygJrvN8276uowA2XOVsaTbewYFfQz\n4RMIhtDLgarzxrjTjt5b7zPsdV2kLZJEivvKCJKvsoMpEDODwPVQfL0YmruJ\nGL5rDo4x/ihhDwsuRoh8rWTxkzXgxZKj9OEnNzPAinBeUox30J9LwC3f6rve\nAuW1MQShutI1K7bca3JQG+vGoiMt9R/ubynvjy5FUmGAOEieH7fK2J2IY0A4\nBSu0mar+Z9mKZUKUxbzPaGjTz90RWQJ1jGvY1zkNyCD+VEw/p3/Upcp+Cavs\nLvoKm+zF1udtXwh67f5JiIuLHmwoI4JF7tojrKbcA+Uh1CvVLQRhW7CXaI0Y\nsKRsesIDH2JUgNUf5coiRXkxM/7VUhc+yLWBbZcaY5f2rJSKD4S9pZrrdsXt\nWrai\r\n=qvXv\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"9e388f0f2866cddef7407936b87e942aceb9ead8","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint --typescript lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --typescript --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --typescript --fix"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.5.77","@balena/jellyfish-logger":"^2.1.40"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^26.6.3","sinon":"^10.0.0","deplint":"^1.1.3","ts-jest":"^26.5.5","typedoc":"^0.20.36","depcheck":"^1.4.0","typescript":"^4.2.4","@types/jest":"^26.0.23","lint-staged":"^10.5.4","@balena/lint":"^5.4.1","@types/sinon":"^10.0.0","@types/semver":"^7.3.5","simple-git-hooks":"^2.4.1","catch-uncommitted":"^1.6.2","@balena/jellycheck":"^0.1.1"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.45_1619875130307_0.37390411815885427","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.46-renovate-non-major-e4a0aa06e8b7cba90e870ed41c5c17f9adffb3d9":{"name":"@balena/jellyfish-plugin-base","version":"2.1.46-renovate-non-major-e4a0aa06e8b7cba90e870ed41c5c17f9adffb3d9","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.1.46-renovate-non-major-e4a0aa06e8b7cba90e870ed41c5c17f9adffb3d9","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"21e535ef7d8098e7d52c10fc0467ab25b2ce9493","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.46-renovate-non-major-e4a0aa06e8b7cba90e870ed41c5c17f9adffb3d9.tgz","fileCount":18,"integrity":"sha512-aoGgtERrFK661d2Zy50cvyAE5cbB1ijN9TPCAN1B+glv+yDKcNXCYO1dAkV1HGkA3wg0qEyohVvCB9RRSIXz3Q==","signatures":[{"sig":"MEQCICUF0Q3krihXmOldkYr0BrSvmjOWZ2kV81NGUmx4najeAiBswDIe872ERAX/XlHj2lHyN1RT4ddnyZGF+psfTSYmwg==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":44455,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgjXAfCRA9TVsSAnZWagAAYaQQAJGKmNj8TET6/slsEhQJ\nM8tPaq80MqeTpi6RDmJJxZdsxlkN4pollM3/SNxOf2O2tsG7d0eYuNcxO7Dj\nHr3OEhuckCV+exg0pC36OKVPXdp+Aw0tE1vQvodtxamYuibYwSo+AKUAA5k/\n5gUOGcHwhj/hpwjz072v24SBQ4n+MCjuutSylo7HCIPV14BKAh0WXhUWwTTa\nDgEhdvMHJCWqp/GAwMo7zt76PtG8zyVxzqE+Fc7uOc6rCUUTgOAHgpGaVncp\n3yeuGLNDkcxlmGbt+l9+upg+HnJgZ8tIgBGB4kAaKHFglApM3NAKV3f+xlRf\nOV+bK0u3DsIDevZ0H1EGlWx7pF57zNY/VAdqNlY5nIQZhQ0/fHmPjDWU+QAg\ncjubbTNELLIenjwsBom2gzryZ5XYbieR/usYr17KVTzaSd72gkahejJ+VCY2\nleSD3PFyI3zgCReicU5f9zOHIk5g5NU286Z26N1Q77LqkarXM0Tnoof7aGDO\n7YHZCCtKAWQ3UcSh0HQR7fVMKcP5M1cuWy0XAwLWsXFCaFBlV/yVzw5qM5du\nSv73fcTnPzhnmyjFP2y6vNX2g88Lcm/+4U4pjoTdkv7LJNkZ+XIjx6blduc4\nWuCsVIAr0lvDIGtkUveV9K7PtfLC1V3KFDA3cljjovUUrq6GEkJUYFxeCq/+\nwldE\r\n=UBIs\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\n[![Publish Documentation](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml/badge.svg)](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml)\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"e4a0aa06e8b7cba90e870ed41c5c17f9adffb3d9","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint --typescript lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --typescript --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --typescript --fix"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.5.78","@balena/jellyfish-logger":"^2.1.40"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^26.6.3","sinon":"^10.0.0","deplint":"^1.1.3","ts-jest":"^26.5.5","typedoc":"^0.20.36","depcheck":"^1.4.0","typescript":"^4.2.4","@types/jest":"^26.0.23","lint-staged":"^10.5.4","@balena/lint":"^5.4.1","@types/sinon":"^10.0.0","@types/semver":"^7.3.5","simple-git-hooks":"^2.4.1","catch-uncommitted":"^1.6.2","@balena/jellycheck":"^0.1.1"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.46-renovate-non-major-e4a0aa06e8b7cba90e870ed41c5c17f9adffb3d9_1619882014868_0.24143354539089734","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.46":{"name":"@balena/jellyfish-plugin-base","version":"2.1.46","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.1.46","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"d9635fa197bed996cd658a4f7ed7652ec2d217e2","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.46.tgz","fileCount":18,"integrity":"sha512-5o1XLxMPNscmmLsHyiz4v0mI/MedloXNrLJ1GYiB/qeTIlRh5z3Yakl5NE6zEOO/iZZ8Bu+mP9ATP2mYM0K+6Q==","signatures":[{"sig":"MEQCIG7EFPVewnRKH6BohTXyBClxymnbd3l5qKW0aFYiOv+sAiAJ+fhFwwruwoZyGTnUgduRftSoSxeXYtGc7ubQBmYnBw==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":44395,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgjXDyCRA9TVsSAnZWagAAEKkP/R0oZS1Zi7brfa/BREKc\ngGsTA0bk5nF4kxnEY8+5sTaF9DMA4DAFdmjF5GDI1ZLmU7r6Xs9NKsBbUWwf\nuuOniaaG1Lwxi7XE7EyYS/nuZq2e0BndkDm7cqqLy+k0SalTCERJvIAb8XIq\ndwm8oPwOkJMeVE7nkHffx91ythgQNXdcR0nchuZdaSc4gfhzlijbjrc3Tbu6\n1IJ6d2xvn512qxq/ZISplz5xPnx3AALYMFl9EtWDiCZ6IRakbK44JLwfnWq3\nXEQ8YPkOoXi5J48sxANmdcIGxWclD99PqjXJWroLZODyHXA2eVndH9FWKeZH\nbT2sHa6Df5qfaVkEwTQ2pVmBG7JPdjSyzkv+Xc2kRbNeCf/gfStb2ku0WCpi\n/g9GxjbWzRskPjiQyRUTPFcnPsYxVZ49TNQaInRGKXvm9FXmEQt2/nLbCkXP\nPu08ack3ixytsiehVt72XaAKgCYuSB8nkrIV9sFkSKW4dDIffO6KqRU+g1n3\nEQcpGyvTJY6KOumh1bbPn1TwCsYOgcTOUdJUpZRiXfQ9iLpMOWA8aMNJDiKh\nwU5yyLNB3rOC5abcTjhFnRIU55adtmErVLbEN62mUU/6N6qfoRH/lqClQgwR\n9uh8HQrInXo3CqvMWqrzkd/6EMpuZMU3pkRAME3mMzQplC9mIG0iDMkxTrKZ\nz1SY\r\n=OwxU\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"bc42d5466df29531664fc7c6d488680174886d35","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint --typescript lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --typescript --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --typescript --fix"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.5.78","@balena/jellyfish-logger":"^2.1.40"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^26.6.3","sinon":"^10.0.0","deplint":"^1.1.3","ts-jest":"^26.5.5","typedoc":"^0.20.36","depcheck":"^1.4.0","typescript":"^4.2.4","@types/jest":"^26.0.23","lint-staged":"^10.5.4","@balena/lint":"^5.4.1","@types/sinon":"^10.0.0","@types/semver":"^7.3.5","simple-git-hooks":"^2.4.1","catch-uncommitted":"^1.6.2","@balena/jellycheck":"^0.1.1"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.46_1619882226049_0.3466190528491888","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.47-renovate-non-major-d142d35501ea442026b95ea7043e61da4d605aa7":{"name":"@balena/jellyfish-plugin-base","version":"2.1.47-renovate-non-major-d142d35501ea442026b95ea7043e61da4d605aa7","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.1.47-renovate-non-major-d142d35501ea442026b95ea7043e61da4d605aa7","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"881ea336a15b42d2bcc800334b4d1360ca381feb","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.47-renovate-non-major-d142d35501ea442026b95ea7043e61da4d605aa7.tgz","fileCount":18,"integrity":"sha512-mBGpfya8H71vuwDUhOXrZBCqCMr/ZRw4FT7QJ33Zx/IOmSPSS/aTeLZLrRrRH71HIdyN0j+iNXgVwVQ35q8esA==","signatures":[{"sig":"MEYCIQCirEtBhbSU3MmikLeOCjftvkLlK9vF0dt35ZG+kzNC/wIhALXZM4sQfrCOI2e0Y2cPUUvdhJwiCEJOcEONzL0VUmr9","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":44557,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgjYODCRA9TVsSAnZWagAArdMP/21VISxhtREgi1tEEtsD\nSNXImVb3DVIPfovu5MZifWQxi79yqx1sJhYYXdE0gdNvETTg+uno2kGpolZ9\nATPB5vwJtXMJ01pOeRuYZQDbtJUCIOE9+BBS1qqThyDy14jXkqljXT9ZyawZ\nFCtRpXMb0hWC6J3VcoGzqCTe4Sk3r5JNzflonjMYO9aEqLZurTj1rxWFPoln\ns1FAOy4zfpD1/OQghukTbQNi9gEqn4X4nchV0qNQLoH+fQxRA+trQy7Xt+rq\no6l8nEcZ0U0IWx8yZTqcdKsk2kiAVz1DSOU1mSi210QIlJK2P9yH0YG16uT3\ndeIgTKCbTx2UF0L8anEAUh6UwpmZHnLfYqAeS/lSKKCOzhq2nUd4OHaxwjQ9\nu8d4/E0dpJY1gOrbR3v5JEz4t66rUBvj07DuzPCxjktc2+MD8ZNu/Ele217G\nJTQPHn60Jw8yhSTYVIlkH9c11zZWsxM1C1ecdJkVc/jzXPRjHdVrlqs74j7h\nx3Elv/puHheiS10CQpjmPGHyAqBOQppBDRoThozQWrEmWS5LMaJdRJBge3bj\nYciLYT1PVK1sbFpqsDXbLfqxxaPV5RMKwpuJ0KcAwuy0BcN2oNUoMsV/KkeO\n9lRlBM8W23yr+PujdfLemwC7h3qe/IKtdtjdxdtFWpMyomC5IRgUFt3grKgT\n9OWv\r\n=KRIp\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\n[![Publish Documentation](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml/badge.svg)](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml)\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"d142d35501ea442026b95ea7043e61da4d605aa7","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint --typescript lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --typescript --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --typescript --fix"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.5.79","@balena/jellyfish-logger":"^2.1.40"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^26.6.3","sinon":"^10.0.0","deplint":"^1.1.3","ts-jest":"^26.5.5","typedoc":"^0.20.36","depcheck":"^1.4.0","typescript":"^4.2.4","@types/jest":"^26.0.23","lint-staged":"^10.5.4","@balena/lint":"^5.4.1","@types/sinon":"^10.0.0","@types/semver":"^7.3.5","simple-git-hooks":"^2.4.1","catch-uncommitted":"^1.6.2","@balena/jellycheck":"^0.1.1"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.47-renovate-non-major-d142d35501ea442026b95ea7043e61da4d605aa7_1619886978600_0.35878059281209485","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.47":{"name":"@balena/jellyfish-plugin-base","version":"2.1.47","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.1.47","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"9f35006145c229c3d222bdd6193ad784066464b2","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.47.tgz","fileCount":18,"integrity":"sha512-18LXRAB7nvJzQoyBVtIaFoLNy3i2+QIUzzQ7RhBZwIzo1VXjUBa7xrD3AKVGfbocJxX91pNRmCI4i81GNeGarw==","signatures":[{"sig":"MEUCIFiGqn0dULOGGVJyT8/bkT5ROJGQQDl1GGCyHH5W7sP2AiEAxPmSdGqM5LkUR4Zqx+6/UkjTaJwRNdS6VNkQ5bYk68Y=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":44497,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgjYRfCRA9TVsSAnZWagAAWmkP/3rahvohpWXlmMotRn5o\n8vqFwAcayFn+HGySK0fYwnzTDZoGygd251WJQwWEkAzH6vb24kw5ZBI20Z/9\n6dqQbyrY9SVrhYeF4S5BAGmJilgzZV1tRr6YopcFtnPPU0sKswWkHz+u6Z2J\nn8nm1YyE/q0bG11GXKYhg559zFmuGg7Q1VyLJ/fG6ntd4PNdUvYGfdkTHs7L\nBaq1yxGpjOpRSGZFThdneHdlcubOqeuvYBNcde7cUqcFM0yEoziv/MRslhWd\nzLP/SkqLk1sl/SmBtPFema8gwy3n7qZDSUTPshhhFP5RggAmqptMN4pyuZWb\niUgmzdToT19qe/xeiiMr/5YfPLsygqL8XYka0WNXJf0NOsbNGdP6nj7PnMGg\naRp6tapiw4B3TjU5nRxywTmrYffFc+pzz5wPHNEVtUErfekbGGElHw/7Pvqu\n84eCv0vj2J1HAHp297TOssukE++yKmAU2T+SS7IKNhbWmFcxVyzqZCrTMGTj\naDXcBu5+jVg4LCun0GaXnPbSM6NaydI/ZeAOuOIYmjIIwQywgG2+NiOqj0Yb\nTdJHl25X7sZWcY4xRsoHZLIyM21AmaLSw0U0lBLAvcjZjI6ftJfUJI5GB2zw\n/VDxfl7JIeilvxhHMw6Wky8An6h6MQL/eb+kRVB5R2pW5T9A6klFZTW60XYi\nT0FY\r\n=Btso\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"c9ea8dc536e31facdf6d6155094745f68828b9a8","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint --typescript lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --typescript --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --typescript --fix"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.5.79","@balena/jellyfish-logger":"^2.1.40"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^26.6.3","sinon":"^10.0.0","deplint":"^1.1.3","ts-jest":"^26.5.5","typedoc":"^0.20.36","depcheck":"^1.4.0","typescript":"^4.2.4","@types/jest":"^26.0.23","lint-staged":"^10.5.4","@balena/lint":"^5.4.1","@types/sinon":"^10.0.0","@types/semver":"^7.3.5","simple-git-hooks":"^2.4.1","catch-uncommitted":"^1.6.2","@balena/jellycheck":"^0.1.1"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.47_1619887198983_0.12340003851138959","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.48-renovate-non-major-62117f493ba945c4c4436148f230d3fdde2d7d52":{"name":"@balena/jellyfish-plugin-base","version":"2.1.48-renovate-non-major-62117f493ba945c4c4436148f230d3fdde2d7d52","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.1.48-renovate-non-major-62117f493ba945c4c4436148f230d3fdde2d7d52","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"eef1cddc03a9a8150ed883b1340be4c7dbd8a36a","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.48-renovate-non-major-62117f493ba945c4c4436148f230d3fdde2d7d52.tgz","fileCount":18,"integrity":"sha512-dKWQhNAflP9yojDKM9QZ7nexfUM1rOeBykLh5qdrbb/i42adw6+5kNgh2UZP+rM/cfSVhOF1qWvzGS/4uu0NAQ==","signatures":[{"sig":"MEUCIQDDZKlaO/SDoOpwX+eJI4qHpA4tYWhTQVEJU3/KZjWsvwIgNBmWmywDn135y6z9KePdRF9XcjQc50tESb6ncjWgoz0=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":44659,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgjgPHCRA9TVsSAnZWagAApMEP+wVcY6hp45vr3kWbimf2\nNs8u5Hl9j+HkiWY7ystyOa0ArHVVHmdURCwJa9wxNDO6jdmZFj/VAuiCYAUv\nERH1EQ/mqKzlT5TSJNRpI8FNf/rbpN0C41QycMtATEvwIXVd0Hqwu6gb0SgM\ncA5cot2j2e+Lyag+GtFIVCaA7Ia95YbyrL/hg+kD9UsKYYeXpz8/hQGYG7Gd\n8CCcS+KY8pdYEBNpBxkPT8H+aM9xAiP+Ccv8ddP3inUbI8nG2v/JOToq1C6E\nw+JTvJAUfcYvTf9WuMLR/0x5Exe/+Px6tkk4kf9z1zusYgyodTLUhiBxrPHr\nBcjGfbbQ7NghzyH+i3WaNwEHrmkjnACwlycbSG0F214CidCIYVgAXYCg5iW7\nRPSjYX8/EqF8Env29GgfrI3+1ZnMk6Mkins0BLS1rpLLpFbRG5Y9/ahCl9tm\nh4XpdJ1Ss25GWgQe4DLSohFq11WrWm0sfv+pJS01kUHeWXpTiOo1t/TUeARx\n8OFb+9ixZU1+93iUhVi7L8nBb9slcGHcSebhNHDB7ykREub+yzET35mNjj1m\nsZnuuNjHE4rjn1XrKjwa4bQZWhBPlRcWKSK/nVpGNNeOBDgLDjmzxLH52pix\n/4zMiU2QF6ffWKIPj01lPdAGCajg19ik3b3llp6lsB0wQv75DmtZWMdKRX9n\nbYJl\r\n=DbNf\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\n[![Publish Documentation](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml/badge.svg)](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml)\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"62117f493ba945c4c4436148f230d3fdde2d7d52","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint --typescript lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --typescript --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --typescript --fix"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.5.80","@balena/jellyfish-logger":"^2.1.40"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^26.6.3","sinon":"^10.0.0","deplint":"^1.1.3","ts-jest":"^26.5.5","typedoc":"^0.20.36","depcheck":"^1.4.0","typescript":"^4.2.4","@types/jest":"^26.0.23","lint-staged":"^10.5.4","@balena/lint":"^5.4.1","@types/sinon":"^10.0.0","@types/semver":"^7.3.5","simple-git-hooks":"^2.4.1","catch-uncommitted":"^1.6.2","@balena/jellycheck":"^0.1.1"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.48-renovate-non-major-62117f493ba945c4c4436148f230d3fdde2d7d52_1619919814853_0.8196842115205172","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.48":{"name":"@balena/jellyfish-plugin-base","version":"2.1.48","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.1.48","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"2f86a9145b0d5feaf888f3edf034995475f73a4f","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.48.tgz","fileCount":18,"integrity":"sha512-zjr+SgBtk15y5j2HhSGD3nM+9ig0NlzUB188OA2ASGoc6fgPyLoxgTuBDWq1YkEtGd47nbAa1a1aEUqZ5Xcz2Q==","signatures":[{"sig":"MEUCIGJ6cycJr29LpwdnmJn5AOMtsFQD9frFVxLyGzo6nEKkAiEAskdX1I2uDrve5rF9h1thcVd7kVBqtAkqq+ygksmHiSg=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":44599,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgjgScCRA9TVsSAnZWagAAbRgP+gPoBMu/kiHmVSAhXIpj\nc94WXQ9Zt2idRMAbIgKfuN9I4VVNHovD2f8Kwu/bwtxEBy2H+5S8dEXknJ8D\nc6QcNZ0tYcPXgYKXjOBtIOtKsxK8L6yDpOXlERxfZp6SPfM4QGFm0kcbdPll\npWpFpRXPJaTJdlehnIQm11wBjz9OdB8+TBBCkDl1ppHZOMjmp08jYDwXRdcs\ngeWJ6WIp4RKUavYmvF6b5z7U5iNfAhUs7q0ouRsPtLEK8wLe+7gz1USbPdmk\nnQQYlp/EA1F/516NlfpybV4dLeZhvqB6oZYQssmaVR+xAuVJ6OAhOqHn6suS\ngSmZ/SPju/ZoCSBdzjRUUif9muhipjYmFY2h5/Fo7kErLUUJNgt8jLt2/YEo\nkZkqGNIBVFpIPcX5tdsaHmvUA1Wg3LRcF/JUMwtiA5jVgXDJLsI6JrwQzpHS\noFevD1Jjsx8rbyVikldK7lhnzAkPnLAHDJdE+N5QLbh84WGTCzKYe7wbKzCH\nv3kqvPBNREDxcHo0UZxcOjONlEsbJYQq2o1J2XEGsavxK5aRxs60xV3uYADl\n6pVVY/k/D01whKG6kuoHE1sYth74Cbb8m4Vwf82PcnnY3fhXWfh3Mq+mPPG5\nmuvYLLwryWhSWp8KeN4kCAV3xIbf4YGdoKDtv4EylMlaXxsYi2J2Jwv484OZ\n5cjS\r\n=TTj/\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"f06b1f0f268031c8ebdf101b4fe9b82f558e8b09","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint --typescript lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --typescript --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --typescript --fix"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.5.80","@balena/jellyfish-logger":"^2.1.40"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^26.6.3","sinon":"^10.0.0","deplint":"^1.1.3","ts-jest":"^26.5.5","typedoc":"^0.20.36","depcheck":"^1.4.0","typescript":"^4.2.4","@types/jest":"^26.0.23","lint-staged":"^10.5.4","@balena/lint":"^5.4.1","@types/sinon":"^10.0.0","@types/semver":"^7.3.5","simple-git-hooks":"^2.4.1","catch-uncommitted":"^1.6.2","@balena/jellycheck":"^0.1.1"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.48_1619920028078_0.8899217807692261","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.49-renovate-non-major-73f47c03d82e9b3f14d698bca4157012495e8b45":{"name":"@balena/jellyfish-plugin-base","version":"2.1.49-renovate-non-major-73f47c03d82e9b3f14d698bca4157012495e8b45","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.1.49-renovate-non-major-73f47c03d82e9b3f14d698bca4157012495e8b45","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"8293825eb754d04ab2edc8243d6a3b64358c2795","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.49-renovate-non-major-73f47c03d82e9b3f14d698bca4157012495e8b45.tgz","fileCount":18,"integrity":"sha512-9Ep0suHQy+5gRYpIXT1khpasVxQteuubP+SmOMjddsuBwKktucldb/CjiDfUWf7+AvTjS3OD7mRHqYAN1Q1FxQ==","signatures":[{"sig":"MEQCIG9fRIjxceDr/lIdFIBixBzWAeT0pI7+1HVaHiqonfb2AiBHuMcu4mN6A9U7ZJm6LYef6+8CSP9GCZLArqKP27cOZA==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":44761,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgjhh9CRA9TVsSAnZWagAAT/gP/jE4bxXUjFp84zKaytBj\nA48PtjroY/tbJTK9r6PdmCE5rLChMgMr34QXIx5YZN4RhBr4REw6L8SS31Hq\nzED5B21mHf07E7hBQDESAnapgE70jUKYJ97JQo51qZhDjOmvrIZYpGgKEdmN\neH0qshiJRqEpFneyfqZmIySaDB3c21f2EexPOyXdHrjJZfqsAn23LBZq9CM7\nmW1yKqOPTJeZwyML2JrcI3apOhIKsQKd5llNFnNOWuyhf7PHyK7cjXnPVb4Y\nZ+PAGLgtkm3+EAJhtkuCUsEbRKOXY0Ysef+LDefaOoRpJ8HsKntpgvVNfpwI\nFNt0GYPl/S95qRaS57SAdkep0F5yLmAmMeARQevB6MzzOThMcmv7ydEGgALz\nY+X0QObdNz1BR1J8w2wsrEV9uRreke1RcBQL6N+rvCpMGW81J7n/gnk5rVY8\nRD5jBBHW9RSpzSUZzkBZ+QPCyTKf2WD70R1XGgJf9hMbj6KeUMz0k3EGjZtM\nof7C85Z3/u1pPaHUEMXemLH9qqKaf5jOSNJcNbFrgXgVQ64MeyV96eYVTE+I\nHpCgrtnI+4egdvlMqw1iiLAe6hgVswIPkHVs0P/SJGGSINi2dFj+aoxxGsKr\nSjULDgV92ZGjVFhY4LBBBdeoAd54KL+0+7bJd2aVd1EhEwN93p5OPfWkZ63N\na1Jp\r\n=HGeJ\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\n[![Publish Documentation](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml/badge.svg)](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml)\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"73f47c03d82e9b3f14d698bca4157012495e8b45","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint --typescript lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --typescript --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --typescript --fix"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.5.81","@balena/jellyfish-logger":"^2.1.40"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^26.6.3","sinon":"^10.0.0","deplint":"^1.1.3","ts-jest":"^26.5.5","typedoc":"^0.20.36","depcheck":"^1.4.0","typescript":"^4.2.4","@types/jest":"^26.0.23","lint-staged":"^10.5.4","@balena/lint":"^5.4.1","@types/sinon":"^10.0.0","@types/semver":"^7.3.5","simple-git-hooks":"^2.4.1","catch-uncommitted":"^1.6.2","@balena/jellycheck":"^0.1.1"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.49-renovate-non-major-73f47c03d82e9b3f14d698bca4157012495e8b45_1619925117322_0.3331966138997393","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.49":{"name":"@balena/jellyfish-plugin-base","version":"2.1.49","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.1.49","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"511276bae62b4d4634419ccdf4ad76639bc8b730","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.49.tgz","fileCount":18,"integrity":"sha512-a/YdVhZUoc9y9ZdOd5Uw8aK3VzHyxBkzwTNDrLp7FTaYiwlT+5SUxu0z5Fw7uLhGxRC7EJkEr0rSrx/8a9W1VQ==","signatures":[{"sig":"MEQCIEBk4dvXwCRx6RI/e2H5BcdRtZm2QZR+c3n9S00ZE8ZCAiA50NtLMnTQkMgnKCX45RvbPVQXlBvOmlMmX1ai/jI3ag==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":44701,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgjhlbCRA9TVsSAnZWagAAq40QAJ1VGQRtGh3RHPQcDBrm\ncOS2mcwXg6j0aDng4MInBu6YN58ylT67e47wV2E5oBwOyEsEvvu1MMFGKgAE\nGW/uK0w77SMix8c1woBEU4p/b0Co8dUm6rzxuwjJUxgVaqTx0b2WiKbNPDFK\nI+dnEM6McUv2ROh8ttVfvRYj95QBahsL63fefBfgpxoR9QhLrdj6G5ZoeAnA\n9UwdIAdZBsnQvnzCQI/Zx9t8I2qBLmErF36TEzowm9bww0GOqvm6a+xcu7qj\nmOF2K15FBUNX7zYQRPN/b3OJVr1LBAHpoITTs9Lt91UszACDxclzGeaVwQax\n2G+lh/+eKHhflLzK1XByZm1F/QHwXtip5FzUeU9+DGoTC7hiyIsKasIFDssj\nVAZLMTu1F9A3SqBdSm0ZPWzTSNQTKVhWA318f8sVKZ1e6dcaA9iE6J152erS\nOPapGwQW46qkx4DtXtQqlj1+kilNX0ofE4pK/wI7XxMqFxy0wI1IEeI5QRig\nDLh9CAncLqLIKojvNjLVhC0N6hc5dWV+4+p/w25MILDU8kSgptjvpwC8yOXp\nayV/hqckwqknvEEOWDPz3Fl9Kr/CzWzcqeiWlS4bxdthCJWExsGLYJwO8bxb\nCcE4/b7ij8BjAbZA1akCVhlMIM37c5nntbWmo4StEm2094dgMcjZ7ei0ND45\n8P4i\r\n=VsmK\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"80ec065abfa4df5eac1e2a1c6e57611b5a0eae36","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint --typescript lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --typescript --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --typescript --fix"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.5.81","@balena/jellyfish-logger":"^2.1.40"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^26.6.3","sinon":"^10.0.0","deplint":"^1.1.3","ts-jest":"^26.5.5","typedoc":"^0.20.36","depcheck":"^1.4.0","typescript":"^4.2.4","@types/jest":"^26.0.23","lint-staged":"^10.5.4","@balena/lint":"^5.4.1","@types/sinon":"^10.0.0","@types/semver":"^7.3.5","simple-git-hooks":"^2.4.1","catch-uncommitted":"^1.6.2","@balena/jellycheck":"^0.1.1"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.49_1619925339227_0.046339760023637266","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.50-renovate-non-major-3238fe143c518f250b5b64683b78ff088264b4c9":{"name":"@balena/jellyfish-plugin-base","version":"2.1.50-renovate-non-major-3238fe143c518f250b5b64683b78ff088264b4c9","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.1.50-renovate-non-major-3238fe143c518f250b5b64683b78ff088264b4c9","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"8f888bf6fc4a9a01799128b777acdd55845d3c57","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.50-renovate-non-major-3238fe143c518f250b5b64683b78ff088264b4c9.tgz","fileCount":18,"integrity":"sha512-UmXHkRk8EUxrFHZp0yf26HMsZvkp0AqYztP3/QpygFBV46o/s1zOFAnJ6F/I5sJCqMGPhrsCcSyrJH26tcFHnw==","signatures":[{"sig":"MEUCIFCQvNC+dJuSpanA93TV1FCXSsplNfp8eEzLEdTccnvuAiEA8FiJBfPiYwCXGhALJhrgDVDFDzIvXzQV+uI1YnsNIPs=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":44863,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgjjWzCRA9TVsSAnZWagAAqfsP/3h28XEfq08DoRJJ6tRr\nSzo2/KEnK+fdZeNDbTm8SGo+Cnlg9oKfglWef7K/XFbDnC3QE5ggOFvpfYJn\nIDiJ2MjQcPIEK0s4gRkGU7kTU66vZ1Y1w8kFbZM9pw3KPi/5QVq72OzVnNIh\nFaHzvNq1fqQvUPMR6WztNf+3Bo+pjeraDDh1lpwfkdXZihSprkkV1NNeoLk0\nPJj6e6x6DaSVSSmU1nzyKE3YGLiNbWlNgGrX9nCOqpg6Mq/FfXH2LkyDL2zr\nqbmPEWpsN+CalFs4gL1Cow4kreEtrbfkU9IEppC78bLy1OciBOw7wjpbRVGw\nKdFIYrjQrYuqkTWavLKhBnvXvMy9U+NCIhE33n6ev2V+EoaoS2DcHOpWhjLz\nUTmXHhakGUTdHbI7wJnR2msMS9VvsR3UniPVC1y7b4PLR9Na1RnwclhJ7UJy\nq2Mj9Rstx8wEPzx2HS/j218NMy2O8xZlX6T5vtEs89BhayC+EC06hL49CWqI\nmYigrewLiR/gJraToAtOSboF+KKRvYaTDKeUzsfDz3Efhs5J4fQh84K5chqE\n7MI5ulX7JMj9m1cnY/HmfFxyg/kdT435Lto/VcN469J60sJnt+S7+0iUNISg\nugXuLJnsDDxvRPHjN7aI0k5oazof8uNJOhHSkrWxPuDz4N5um7CT9xPI40VY\niGXT\r\n=GFpK\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\n[![Publish Documentation](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml/badge.svg)](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml)\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"3238fe143c518f250b5b64683b78ff088264b4c9","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint --typescript lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --typescript --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --typescript --fix"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.5.83","@balena/jellyfish-logger":"^2.1.40"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^26.6.3","sinon":"^10.0.0","deplint":"^1.1.3","ts-jest":"^26.5.5","typedoc":"^0.20.36","depcheck":"^1.4.0","typescript":"^4.2.4","@types/jest":"^26.0.23","lint-staged":"^10.5.4","@balena/lint":"^5.4.1","@types/sinon":"^10.0.0","@types/semver":"^7.3.5","simple-git-hooks":"^2.4.1","catch-uncommitted":"^1.6.2","@balena/jellycheck":"^0.1.1"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.50-renovate-non-major-3238fe143c518f250b5b64683b78ff088264b4c9_1619932594906_0.7259661638487083","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.50":{"name":"@balena/jellyfish-plugin-base","version":"2.1.50","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.1.50","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"510145b43a275351d7231e0d93e2abcf535fd6a6","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.50.tgz","fileCount":18,"integrity":"sha512-V2aLD4IoRKWFkYDwLQdtueqZOczuPV1v7N+bGnBzDS+HL4IS3N6W4z3+RX1OmwmVl9bYy5fBXVkL1O/h6Ztp8g==","signatures":[{"sig":"MEUCIQDArGihDpO+ZIwADN2t7bdNzHfY8LlnWcvOFclDKqhEmwIgbaf+3QHhrhqp1UOTl4G7UG+F9NuH9am5mJdchYZlLOI=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":44803,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgjjaGCRA9TVsSAnZWagAANAkP/2hTPr4ws5NpQ6IHW4V1\nhKbNs0T8ScZKHefTwQTfwcY8krt90ZNinKDmjgaqVtanzJbZOMSo0Mk/zTuf\nNxq3n7OjSlxmHTnwC7afgVWjPUHcV3V8HzG9jXsyBxmqOCeTeKRcMPDUY8ji\ncj9It75tnGcW5UUKin+SfIHNj4sJA750o5501OAkSCPcPvUGoNPBq4MJ+g4f\nNom2o8Re1jk9byvZEMvWePx2P89APW6fUxW6B57kgfM6im2/T2ppmDKJF2Qb\nw7AB4yIQYcExIhtE4i0kSrugM8jLq3ZAJAkVn1WB/hBaqeD6XWtaWhnXbIDV\nRneBMGkg2xZEkY5VrsEsk9SXjCQX3Wp9hbY8IjxKZ0yJ2OVskB76nZoOOUqv\n/3QThclJLxsWm1d/AWZP+vybNJkXKkmxLS4S2ep9YxT2CFf7k5lZ33IL7PEw\n9ztj1NKe2DkaksQIZ/tM2uwV5C5oo+PV5ZHJuRMXExD8ZXacL6mrJLUD0YB1\nomdXfaWPrkI2QMMWfWKCDbhBxFrvg5INBkTHdOMkv3erBp0KygoxFEdgrf1Q\ne6lDgo4z/5E33XJJ3yN6JuCf65W4ZW+WLsVz2K3yq/Uo74WgPiOgCnI6a/AS\nFP7OdzFOkrZEdJ9z3DoMQ5Q8ygi/FADV3vr5D/KtVpETOvfET2RPfIq3k4u+\nF3Qe\r\n=1xGP\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"92893df545ad6553fe532e1a05c542af4d89febc","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint --typescript lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --typescript --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --typescript --fix"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.5.83","@balena/jellyfish-logger":"^2.1.40"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^26.6.3","sinon":"^10.0.0","deplint":"^1.1.3","ts-jest":"^26.5.5","typedoc":"^0.20.36","depcheck":"^1.4.0","typescript":"^4.2.4","@types/jest":"^26.0.23","lint-staged":"^10.5.4","@balena/lint":"^5.4.1","@types/sinon":"^10.0.0","@types/semver":"^7.3.5","simple-git-hooks":"^2.4.1","catch-uncommitted":"^1.6.2","@balena/jellycheck":"^0.1.1"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.50_1619932805565_0.40516120782702303","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.51-renovate-non-major-3c84341592149198492bba71fe79fe17ff016d07":{"name":"@balena/jellyfish-plugin-base","version":"2.1.51-renovate-non-major-3c84341592149198492bba71fe79fe17ff016d07","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.1.51-renovate-non-major-3c84341592149198492bba71fe79fe17ff016d07","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"4db527170e8940964f857cec01bf40db8850f452","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.51-renovate-non-major-3c84341592149198492bba71fe79fe17ff016d07.tgz","fileCount":18,"integrity":"sha512-Xvbyj3l39ODEF1R2+MmnmGWo/2Lh+2bs32jlmN6JBpz5+P1VQ9xh8J/HnnHW9FcYwJzoigIMoQ8ZUwYZTpp5vA==","signatures":[{"sig":"MEUCIQCtPMkbY6n2WjZAQqD5dQw0QBnmwQjDPK+GiaXfJT1OuQIgW5kYgSk4WgVD1RxOwHHPYMfzx4Z1xFkWWlP5mZvQsxE=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":44965,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgjlxwCRA9TVsSAnZWagAAXEgP/RX9Eh0sl+m7CBm6C4KB\npdihRBs0GRCSfuaz48vT5H9t9+VK7nfAbAnUjTIOnsOjian/+G8gkpqxsq6U\npF2fDHVY/1scR25RYciFMgGhrOMZHeoBxf1qYCyROXTGJgP2ABu3gBLjHxAX\nB+Dsr4FudSh3F4mSyFIsrzv5nG0rp0d6toHC0admBdP9/o5oe5i6KTdaVlqk\nlM1ouDwt77QjFESgjm/JGPmQOJm2RISSnTtM8Juzypf6PxdoeS655e1S7yhh\nDY9BnRaOMw10K6601rtgSKz1x//Sl5e90ETF0oGaS4BfwTifU4Ftjf8Q8vvM\nEQzkV7ozdksd1O3uElRI3cMYubu7QM0XkY0t4fo/dlx999xaRHplKFWQaNbb\n+g43XDUnnWY7v/EsLIHcUfjsE+cqJeXe4DBN9IUrjGXtfU6mh6G7zKpWem39\n5nl2SY/gDDa/rePmPzByu3lkrmIcIR25O20rfVmJSwZ3XM2xtdSr7UzAD7XQ\nSnTJvxhspEDQLo5/gO/3NwQjQT4uMG2Xk8jO+UcrRfQsjrv6i4e3MC1JBwfU\nc4oQXWrUJVG2hlfcd8hxIq3o63cx5UVG60UwcmYOd9h62mpPOkJNZ/Y8DNGc\nA/k5O+mgKaJTOjCWLzCWeozNPOnl2Vp1XEE1OOzjm9t3fsF5GooFYNLnaL5/\ngIBf\r\n=nDzv\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\n[![Publish Documentation](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml/badge.svg)](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml)\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"3c84341592149198492bba71fe79fe17ff016d07","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint --typescript lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --typescript --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --typescript --fix"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.5.84","@balena/jellyfish-logger":"^2.1.40"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^26.6.3","sinon":"^10.0.0","deplint":"^1.1.3","ts-jest":"^26.5.5","typedoc":"^0.20.36","depcheck":"^1.4.0","typescript":"^4.2.4","@types/jest":"^26.0.23","lint-staged":"^10.5.4","@balena/lint":"^5.4.1","@types/sinon":"^10.0.0","@types/semver":"^7.3.5","simple-git-hooks":"^2.4.1","catch-uncommitted":"^1.6.2","@balena/jellycheck":"^0.1.1"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.51-renovate-non-major-3c84341592149198492bba71fe79fe17ff016d07_1619942511809_0.6677828665035765","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.51":{"name":"@balena/jellyfish-plugin-base","version":"2.1.51","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.1.51","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"a214d1cdb93ca36777ce6685f8d935e2a9dfd379","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.51.tgz","fileCount":18,"integrity":"sha512-8XShranxXOWQwanTzwO+yCvcgZKPteuXI5AGM1dCSLsuRKP8dOJdnmKnXlnSwQzB435vsebZ3o+gYGrM47cmww==","signatures":[{"sig":"MEUCIQDYGBnI3vUNeeUl3AvWQSkFpl4sEuV7bkBAPU9ET0yKWwIgP9SMlQ2+f/zhlvJcfD0eq/h+qdpr+hhl4ZOGTwQr8Ug=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":44905,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgjl1mCRA9TVsSAnZWagAAQ+AQAKAfNwoTHgWHEFDKuhRq\nyOe/whieasqx7cu0ToLPUkLaQs3uEMVYryu635HdU++J92y1x+QaoJw1ooNd\nNxdff84l96uhj/sFZL3RyCKA3YkzC3QjvmHjgnz8GyVetM4w8GTO3dIXgGwu\nnMLhJZcRIcKsE91E3u0wf6H+l1pG53b2ZEKJZLQ+7kCb1cV8VohpIlxWDH+y\nJG/xDMt+ib1ygfYvMZsehlvdjFzdlqIqt54emrOKuFCNr5RX3XPXRUcY9+JL\nGc9C1yL8rereic3lM/7I6J6lc2tu2qqznJh/hcSTVJFHPZt1GjxEPbpVJpIe\nazVoctiLNCqTUKfG5PcY+9OgfF/ZpQAPWWf3d1vU5/i900yozqIsldJCVIwT\n3/AyL68iOfRsdGzKuF3i0RrhLRqDhEIcejkicm6KsfVTo068Gby/uecF9iI7\nxNbzfFH3TpkLIMYmHfw8rF1fUVDpgkHlNgRLLf5hiWTOPmgjpCmas6a9ofls\niRBIm24LGCKGbcBkVhE4iyyRLqBQoo9+G0dDqbuO3onbWlx14y9ZAp4+YVvB\nsIsmpas3NyuBQ54A60jSL8GTH1acb6DtN/1wAtLZmT+t/oCBvMQgdJfjJwVO\nASyCqwW92HYl77W0p5lci4dcWCSU/+Xqvq49IBi57/3wmjt/qldushGL+9yY\nnz5C\r\n=GM4g\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"90f840c837153dbe91b854efec724108f05f33e9","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint --typescript lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --typescript --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --typescript --fix"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.5.84","@balena/jellyfish-logger":"^2.1.40"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^26.6.3","sinon":"^10.0.0","deplint":"^1.1.3","ts-jest":"^26.5.5","typedoc":"^0.20.36","depcheck":"^1.4.0","typescript":"^4.2.4","@types/jest":"^26.0.23","lint-staged":"^10.5.4","@balena/lint":"^5.4.1","@types/sinon":"^10.0.0","@types/semver":"^7.3.5","simple-git-hooks":"^2.4.1","catch-uncommitted":"^1.6.2","@balena/jellycheck":"^0.1.1"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.51_1619942758446_0.08808889877682113","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.52-renovate-non-major-296f8f3ee2390415912dbf9ca40b2d295b57bcb2":{"name":"@balena/jellyfish-plugin-base","version":"2.1.52-renovate-non-major-296f8f3ee2390415912dbf9ca40b2d295b57bcb2","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.1.52-renovate-non-major-296f8f3ee2390415912dbf9ca40b2d295b57bcb2","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"48b87958ff3408c7349e1be675640a89e547e3cc","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.52-renovate-non-major-296f8f3ee2390415912dbf9ca40b2d295b57bcb2.tgz","fileCount":18,"integrity":"sha512-lOfVg/Sa/8p7NruAPfjvvY6At0ZQv7M2bcLGR/Un1p28v97VQ+RBrr7jY3ZR+h3rmdQBZQjdBnwYN1wyiFCfwQ==","signatures":[{"sig":"MEQCIHMlLW1n6SjovcBUb2dRbuMNeXdBcA78IpJSjY1AW1pSAiABy3ZEgbe6l34CLftVwk2fYu5j/Iv7q7Be9LZbIx61vA==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":45067,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgj1UtCRA9TVsSAnZWagAA4dAP/RE3bdDB2/Ql7QGjK5OF\nXQstTmoE5E0ROVHJD4WUeGkhu1+HDbpEB18IaWYAi/32w8E6bMVzPrYa2bA2\nTMlfNBAi0O7Fl3Q39pdz+Ot0dWjCM5km9uBm3YWI0s6gs46JphE9avKMRJaT\nZNJ8lMeczMtD/t9r68TOFIKvQAP4uUJLBNeFivb2KwCjCTH3rylFpge+zh9e\nPRsxS01AtKuSUHXK7/0o7CmBTpfFD9KO9PQVGkdcb84qwTotpbfghytL/8kZ\nWSLFfftrF6r5aApmmqgur3GPPGsYcWlZbpd9ybkNxGN/mBCfas7T5eYLmljE\nX4oX0exrzlTTj/qArzYKb4QkoTPL6ciAXcfnqqbAZrk+xz08URrS65jLXc8d\nW9tO+vQuhYexJ0+v6ML1UeAIDjygTSoDPlYnFgjD/MON5xTAR+DuyQ0afKTb\n64KEz/6u79ZLRSiuOM0uK/99CAimjwWMebWy/epNJrI2ur8ZJHemByfqa3Ei\nmIPf0vupFy+to16w20lnjbVg9OQIG/uq73lJeDhuP7UjB/p+b9SCN2+9eOwZ\nlp3SiPo85XQYQ7jFk/MHPEwaT6fMPMQpaNSv5wf2dUHfVuu+W+ER4wKGTbZS\nRl8TDDxX9MEV/TmNVCzmWGwLJgAe/WBGSZx7BkUrifVIfeUidM+QBL7tydsv\nqq7l\r\n=Oqll\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\n[![Publish Documentation](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml/badge.svg)](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml)\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"296f8f3ee2390415912dbf9ca40b2d295b57bcb2","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint --typescript lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --typescript --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --typescript --fix"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.5.85","@balena/jellyfish-logger":"^2.1.40"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^26.6.3","sinon":"^10.0.0","deplint":"^1.1.3","ts-jest":"^26.5.5","typedoc":"^0.20.36","depcheck":"^1.4.0","typescript":"^4.2.4","@types/jest":"^26.0.23","lint-staged":"^10.5.4","@balena/lint":"^5.4.1","@types/sinon":"^10.0.0","@types/semver":"^7.3.5","simple-git-hooks":"^2.4.1","catch-uncommitted":"^1.6.2","@balena/jellycheck":"^0.1.1"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.52-renovate-non-major-296f8f3ee2390415912dbf9ca40b2d295b57bcb2_1620006189312_0.7030937470775902","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.52":{"name":"@balena/jellyfish-plugin-base","version":"2.1.52","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.1.52","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"5fc31f5702741add12c0f92028c256ba10de8248","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.52.tgz","fileCount":18,"integrity":"sha512-gBWB2s8KjlDiy5i/RBlKDS+H3ormo4M1lrFi2/W2PZG47aOIrTQuQuzquuEHa8SRzZTaNnZ8+HmQWjebLVp/fQ==","signatures":[{"sig":"MEUCIFiD7T/Gpw5iiDQ58Pkr0BodFVQfHJqkkbER3FcOFxURAiEAt6StI3Edn6pc4vZc4+eVhCpwMO+3eyZKfcu9ey0SzJ8=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":45007,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgj1YTCRA9TVsSAnZWagAAFK4QAKRt5u3la3z7zys3p8fO\n4VNI+gSVJthsZiTrwQHJlUTgkWnO+DVloxBX7kNm3/v62pY39t3duTX0J1yW\nZIyiTIjPiZ3HhZH39Dku4yvyEeXZW1Uo1GRt63GjCjrAndwwtLMw16TPOqdf\nsxijo0eCC+7Up6OF94G05W1ry3QTlAp6GleSxHimiHnQ57FuKfr65I/wvn5/\nqBR2QB9kK9oQJh/cteQkgpIIEY4EnXz0CKD5Vg0XHZIiYf2OBItaBVhAtWAI\nF3jPmfoMAmPDFDvwVGGreLFjmk0xEremVYT0sOyNz4/NN6F3in80onk3QbLU\nbjelRJsxvJ1vRlY+PnJgsXFvosn9slDeOAChCe7F64zwIgcmp9SILSVewiK7\nGkTYqwqIJD30/sKtjclbUmWgmMrMmm9G6hZl5wn0T6Q9eWrXlasSBnxKFGEv\n1rAVqmJBrtHVDYBSzbqnnHjAwwwCtDJz+LmGpRLe9J8cSXg03HrSDD+aoXcu\nkKnns3YWZUhZQLz/8z+NE5p7ffgE4WFDLLhHxWwOj3CUm/6cHb0z1G45oqbL\nxi7n7jLKvtZlAqiHjsWxdV1NEr2ncZCILutc/jAiBX1hcVmaJwHqHW8DUWHb\nM6wtjMn14XFYBouMWSHr2ckZvMg4KCpz3A0IFJEjv7mBzKfiEsTcLX9oPjqI\nZenM\r\n=SP+t\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"c0df9a5bc5f3687c14e3815e5f53071b512938f5","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint --typescript lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --typescript --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --typescript --fix"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.5.85","@balena/jellyfish-logger":"^2.1.40"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^26.6.3","sinon":"^10.0.0","deplint":"^1.1.3","ts-jest":"^26.5.5","typedoc":"^0.20.36","depcheck":"^1.4.0","typescript":"^4.2.4","@types/jest":"^26.0.23","lint-staged":"^10.5.4","@balena/lint":"^5.4.1","@types/sinon":"^10.0.0","@types/semver":"^7.3.5","simple-git-hooks":"^2.4.1","catch-uncommitted":"^1.6.2","@balena/jellycheck":"^0.1.1"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.52_1620006419220_0.48079055501014367","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.53-renovate-non-major-5c9aab9fa778ea9172f3039419e05af9c95239d6":{"name":"@balena/jellyfish-plugin-base","version":"2.1.53-renovate-non-major-5c9aab9fa778ea9172f3039419e05af9c95239d6","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.1.53-renovate-non-major-5c9aab9fa778ea9172f3039419e05af9c95239d6","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"780971c82d039ab3998dce606fbe2ea2300433f4","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.53-renovate-non-major-5c9aab9fa778ea9172f3039419e05af9c95239d6.tgz","fileCount":18,"integrity":"sha512-EVW33jVXSPzwS2m7XBV83lTNPivfVKUWUsiShzYBSuyo6iYh90jgcfOBc7CnXtMPj2eh2De6WxCQDyd4FcSDYw==","signatures":[{"sig":"MEYCIQCnatqQqTqzNqXAXDge/uCjgGghln9rdEeYoCEtu7KqpwIhAMT97UIVy1aeYGZLph5Gr/8Jk3DNUgFb5ZeHh4WldcpJ","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":45169,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgj42oCRA9TVsSAnZWagAAarAQAIQvmMNYmtuMwOGGJ6fk\nDOVZSS7VzqorCx+cPZpfCwAXjpDJ9Vye709F45ZidtCJNg0KyFbsCxNCpUpE\nf9PazZKfi0ZTaJRSPH6lkdEshv2sKCKnf8TVcO+Luow0KKZkFffwqUHgdcFm\nu7dMgNrn0/4+qFAhgotW+VS37PX4fmW85su2E4s5XGzXlRjCxZezPK8B5mxK\n+Z3yi4wvSMaUSaHdY6q6TH3VhzWy30Ac0tcAVuc7FdkdfVYYv1tlxOaVLuk2\nF6Mu6lldjrwILhSSoj0CYu2BaWElSNAK/tAu42O5wNdc9C84pmATszduD7b0\nT3ZW1XbSuaXk5Up9lNR6p+dKMPdu1JTDcOeoxlgk1OJhl9a54rVhTmSDRtHR\n5KjgSK/4uKvxDAawG+rGWfedKCEz5gdYsNa/6HWzCQAIxg0GqkVrCVkK8ejK\nPBkYgVvz5shyjM5tSq6aEaEY09MmqPQpHMmxHkEu4HaZs5R/ATbRkgkk22rM\nxLtXen2ib/HCvSyjZASpUmY6FGs+kLvrB2QcTRSjerkc3LabHmhmXLx3MWeT\n111DO94O1XJ3a2ZpN4KLSbqwIkYoFus+QRi0JrP9zs5TWCDKDcE9ftJ6nO15\nj/UAJLg+TKwF7umGhiT34TsoXnXptW/NoFWWOORCEKV/XckXYHD+j2Pc/j+G\n5b6L\r\n=gfcK\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\n[![Publish Documentation](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml/badge.svg)](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml)\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"5c9aab9fa778ea9172f3039419e05af9c95239d6","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint --typescript lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --typescript --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --typescript --fix"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.5.86","@balena/jellyfish-logger":"^2.1.40"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^26.6.3","sinon":"^10.0.0","deplint":"^1.1.3","ts-jest":"^26.5.5","typedoc":"^0.20.36","depcheck":"^1.4.0","typescript":"^4.2.4","@types/jest":"^26.0.23","lint-staged":"^10.5.4","@balena/lint":"^5.4.1","@types/sinon":"^10.0.0","@types/semver":"^7.3.5","simple-git-hooks":"^2.4.1","catch-uncommitted":"^1.6.2","@balena/jellycheck":"^0.1.1"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.53-renovate-non-major-5c9aab9fa778ea9172f3039419e05af9c95239d6_1620020648336_0.31593416387405227","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.53":{"name":"@balena/jellyfish-plugin-base","version":"2.1.53","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.1.53","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"6f898bca01bdcb96f6021fada8947f35529cbbc0","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.53.tgz","fileCount":18,"integrity":"sha512-SvmhKldtKPUiDUibbaCJv8NRG6zXT5+KOifH5Gpa1DfbD8G4W1uxvc7dKwahES4dtDEIovr29qiK9YU+SfA5yw==","signatures":[{"sig":"MEUCIF6NGjfYjF8uhlbMks5j5BGQeY/GMD7WuNDlhEVxMczZAiEA4UMRyIuPPBAFTSzthxSlNJNPq4Xb6cT9Tw8ji5UIHRY=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":45109,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgj47DCRA9TVsSAnZWagAAtLoP/iOSdMbM9zIxAF7EAHVy\ncAY7MTweBKkiy9wFOJ8N6w0jX++++kv206FhuBa7U8s70THWs2+eDhrxSQHs\n0tDZpCbdZZnULlr17o5ALSAMbzoa8A4VV4H2CO5PCQDDgVkuLU/x3Uh40JMv\nGiMr9/dMGf/Ejl9OqiAQeFxMekkm6sJMRDLMSHg/AOyJOocEN2H/9BspGPhO\n1FOAgF+m1ZtTXn4JSu5DmAeZd6N76T25tv9DXccb9xERzwua26EM2OeSgixq\nWp7hvevL/xoWczPcbrQfUdpd5lk7zDr4RiBJG2BIbEkvmHscpMUb5Cs3KLP9\nkMp54PqyKbifDd8EZWo9FmYKsIcYeL2hSlZ2MMv11aosg2WaifgyefJwAuDD\nX8yOGNh4cjL6eOZOJImozol8F5pjDCy2xjgBPzraBFaW8s5U3Y3C4qPHWpey\nT5cdrvXYA3VebUNAfpOo+bzlUGogwiu5Mx0/9EEWMQ6ShA0Lbn06R+pzdkS0\nQVElVv+G2xitCuj+q2FpgycpxEt9gkxZxa0Lh0oIxYC03n3FM0r7o5PQn8h0\n3k8V6KcgHaCi/L2zo7kfRYzyli20jT6PKXble39Q/aLGOQHnKJh5KXKgIzOQ\nVP1E0rNTf1GElN8PivicGb4YITHrm8hHxrDH5fPTNaI5n8uRZAar14R11Nuk\n3mj9\r\n=ggMY\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"ee565db070ae188ef2db379517c8e7d50df9ff2c","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint --typescript lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --typescript --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --typescript --fix"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.5.86","@balena/jellyfish-logger":"^2.1.40"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^26.6.3","sinon":"^10.0.0","deplint":"^1.1.3","ts-jest":"^26.5.5","typedoc":"^0.20.36","depcheck":"^1.4.0","typescript":"^4.2.4","@types/jest":"^26.0.23","lint-staged":"^10.5.4","@balena/lint":"^5.4.1","@types/sinon":"^10.0.0","@types/semver":"^7.3.5","simple-git-hooks":"^2.4.1","catch-uncommitted":"^1.6.2","@balena/jellycheck":"^0.1.1"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.53_1620020931100_0.30950888143834443","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.54-renovate-non-major-8b322774f6f950398eac9256c07a9a36a244e906":{"name":"@balena/jellyfish-plugin-base","version":"2.1.54-renovate-non-major-8b322774f6f950398eac9256c07a9a36a244e906","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.1.54-renovate-non-major-8b322774f6f950398eac9256c07a9a36a244e906","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"95d7fbf9716d11d70ab3dbe9b6856673c211946f","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.54-renovate-non-major-8b322774f6f950398eac9256c07a9a36a244e906.tgz","fileCount":18,"integrity":"sha512-h2YvfcbSzQUyPi3GfbTMJWLy83H6R7XwLq5I340bcc7DxmLh4dM6kmDPKKpnd82qcpspIm0cv7QgCAkxGQn9PQ==","signatures":[{"sig":"MEYCIQC4wTAgAdUptPhieQkugeLy50n1UQ9VNbKiiWh0f4bsbQIhALqA7+GdYrSvSuYvVyUwemOQaR8a3SfQzLPSMND2tplb","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":45271,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgj7PTCRA9TVsSAnZWagAA1CIP/0Gfb66iYMtRgWV8JjkL\nePMj+hiaKUvB972b0erpROYTgdUDjM8BnsEaEvsj2IbVwaUWhvXsJlG9LdaR\nXn/KEw07ysGVEKjAQ6WAJMHAj97djFK3K035r8IUeermJnXwwq138nrOEnrP\nLLv5+Seg5BrMx+Tze40GzgHes1SY8n6EqPeO32nWKS6SA6dft1VHwuGVqhfk\nrtbxc4E6xe4oq4Oob/OCFX1FTHYmPsKoIzOOkBzYH08fnX/tT31YDRGGBeLY\ndf9jNdZPglJJ4kCv/syo0sUuEVNieLHP2Sk9BdYDUNbmFydB6PahfVnxIH0i\npqZfDFK4oBSKNeTOy9zykduN1KK4paKKRckvp9+YxcUyc5eIo8RYF94a7oLl\n9SjolAdoDkIiwua/PQv7f0VMJbSzmBLNyMVGK5k3uCBz3+JWVgTSBXrOdJpM\n8ekqntMKIJiFdRd5a2ZBje+tpLk4CBlHtgezmKrw4JanuM8Xcs5J4R4wUcvs\nz9hl0iMO6gLIJLiYf5XnmnlfFn7ltuNfhcHjjwGkIum0O+ZsPsBT1baSBhPk\naRej10U8UcBAWUiManB2cgA4ZLYp0iM4k+B3vDG+oLvh54JGF6QFF7bLdFOb\ntGBBqEWg/KnQYnXn1bZuhtMFErHcVjepvXdznsbvCkcj+dLzHvgcOvW5UE+B\nefX7\r\n=tnln\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\n[![Publish Documentation](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml/badge.svg)](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml)\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"8b322774f6f950398eac9256c07a9a36a244e906","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint --typescript lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --typescript --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --typescript --fix"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.5.87","@balena/jellyfish-logger":"^2.1.40"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^26.6.3","sinon":"^10.0.0","deplint":"^1.1.3","ts-jest":"^26.5.5","typedoc":"^0.20.36","depcheck":"^1.4.0","typescript":"^4.2.4","@types/jest":"^26.0.23","lint-staged":"^10.5.4","@balena/lint":"^5.4.1","@types/sinon":"^10.0.0","@types/semver":"^7.3.5","simple-git-hooks":"^2.4.1","catch-uncommitted":"^1.6.2","@balena/jellycheck":"^0.1.1"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.54-renovate-non-major-8b322774f6f950398eac9256c07a9a36a244e906_1620030418650_0.9358067954350211","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.54":{"name":"@balena/jellyfish-plugin-base","version":"2.1.54","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.1.54","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"3d3e39df7614167a2ffaab1efb22e2e562f60e56","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.54.tgz","fileCount":18,"integrity":"sha512-JbtOcVwSIq8OV3f6mTWT9xn0QXPdz8diUudl96WRmxqRBiIMEqbYGUgEQ4jSQUV07i8ZCHWzQqUf6iWflU8E3w==","signatures":[{"sig":"MEUCIQDJZNT8DDt78oA4X7lWb74vYz3f3DSt3H36PPXoe5e83AIgK9BuTwv+s8wpB2zfhDYlfvfxPzTl3wWe4orvgLDHsJE=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":45211,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgj7TOCRA9TVsSAnZWagAAcCsP/jgEOHaMfspaheQetja/\nteze8VqGi7WW0ZFYIUt0lAAs0Qf4EW5ouPMlaYWWxiKOj7hfrKxddCfjor8y\nClyPYW2fPx1rLR0EMssbfaNAcZnDTjQ/Hg/6ohhFvkDKfmhB7Grb8qqvRdzA\nZ70G6xppOyCZacmG5e6sIy0xmoJYmuYV/PfAS79UmgHesr6jkMkXaWgXolnk\nisZ5fPCrfZZ/yDr9m42KIR/Orqln+/PNnF+5ivwekjawjvqRXwdroi/iHEo7\nj13zWqwYJhy8K8q58jxFhPsS/Vh6dOypulcdGqRLGfnkiO+LLVPBXEr8V56E\n/MNk8T/omVaLHriHB1fDQOZ3K6Lmgcg1LA4Gwl44uih2LIVwtiVvwdWFvmSu\n6pXN9p6+y43c0fPto8XQd7lepiu6dEIQVdWRpk89hiHPgWdAYcDAUhviRBYk\nw4CjC8gPFHlIV4qzjqf+fuFhBYdj3sBSmkiWZxIut/WyePOgAZH5GqG14vz+\ne3DXjV3ImF6+lIXtbY0TUbKOPvUGe+pWUyfw/jjnb89K3Q8Oa2P0KoH3VSce\n4+FEPl4h3kK2+mI8Gw/qxpzvRqix4azj8tVOPLFNbEhqAX6kLVP6bD8mqIa1\nmPJRmnrGNTNWZhBNcUTVCWqaJ79FbVtpFn8zCtrIBQR87Q6h7d7wxgHQ2gzO\nPggq\r\n=5LAn\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"5a707fa2e54599b4ada10dcd9c207f5840e13351","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint --typescript lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --typescript --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --typescript --fix"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.5.87","@balena/jellyfish-logger":"^2.1.40"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^26.6.3","sinon":"^10.0.0","deplint":"^1.1.3","ts-jest":"^26.5.5","typedoc":"^0.20.36","depcheck":"^1.4.0","typescript":"^4.2.4","@types/jest":"^26.0.23","lint-staged":"^10.5.4","@balena/lint":"^5.4.1","@types/sinon":"^10.0.0","@types/semver":"^7.3.5","simple-git-hooks":"^2.4.1","catch-uncommitted":"^1.6.2","@balena/jellycheck":"^0.1.1"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.54_1620030669664_0.32334379851483974","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.55-renovate-non-major-62a742911e15ae24d41688350fbb9a7eca06d589":{"name":"@balena/jellyfish-plugin-base","version":"2.1.55-renovate-non-major-62a742911e15ae24d41688350fbb9a7eca06d589","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.1.55-renovate-non-major-62a742911e15ae24d41688350fbb9a7eca06d589","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"afdd625a86653c4f66718f160861c28a880cea2a","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.55-renovate-non-major-62a742911e15ae24d41688350fbb9a7eca06d589.tgz","fileCount":18,"integrity":"sha512-Nm/fTdyl0VdRZdPmNvDvlZLURhBbBEldvyr7WfaOD5lEXYkquA3MuOeDQfynFsY+GoAWxnyL9M91aY42o1eLaw==","signatures":[{"sig":"MEUCIQDu79dg0YTQz2DiSea8/3KtBY4U24BLoH5WtP868TrIYQIgWgDL+i4G/IqFkxXn4vUsElwnhJkw1sAQOuRWeOD5zP0=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":45361,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgj8fWCRA9TVsSAnZWagAArmYP/1wW8N7r73Xk9rDUmZIa\nkDC7f4KZciMzwaQYasWXQ5FYMz+QjIRJjX1tu82gRjq7TpzOII5iiH6lGCe6\n2tlWdhWbAlIpxQceqTq6Cgu8ABLpSSdOjFHrXFaQz6KAxquZwVfqOyJxNxzf\n4RVg+JAw73DCRW3tdPPWFU1K4DWVfk0uW6oImcHnHSHJ3MI4C7ETpxbzXz6N\nIfoZsu79ZX8I17BVDF7/kiLmeprkJ5AwfN6h32JBDFVY23JRFH+vXjzpKqqf\n4CG9Jl6MlQZOqNmwPGD73CKHMCQdn8/CkMl6F3YZbOtvH018nfUf7pNJI73Z\nx52QuW3xKCkfZnlB34B9RLBtuSmkvDnTbWUwQYx3CA0ztl8JofjP/nDomBn6\n3i5AlX58AExoFBJkFkqdoERW5nwef01S89DQ3G/ziZ+cS6qXKq+/wONdd/+V\nz94IUDUemLS6QZaMb+jg8cDydkj8woZ+qKJtUynTLfcZAysaEYMvHcIt3Ksp\n1s7njP+bj8KbCU1RrR7J6OUK+55gEDwwNRRE/6NEjCKQINTzIdgRNkSgldUG\nWqXXBAus3r9XhYJP7Mk0kqTMQkiGmVGUWwJXUq7rILIe5V/lbgyuX6HrDzrv\norPuJtpOtTDMrQ59YCGjE+Yrx3tNVERgBd1vzRKRcIPDjvIn/9FafXc4qdZ2\ndpK2\r\n=esZj\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\n[![Publish Documentation](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml/badge.svg)](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml)\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"62a742911e15ae24d41688350fbb9a7eca06d589","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint --typescript lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --typescript --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --typescript --fix"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.5.87","@balena/jellyfish-logger":"^2.1.40"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^26.6.3","sinon":"^10.0.0","deplint":"^1.1.3","ts-jest":"^26.5.5","typedoc":"^0.20.36","depcheck":"^1.4.0","typescript":"^4.2.4","@types/jest":"^26.0.23","lint-staged":"^10.5.4","@balena/lint":"^5.4.2","@types/sinon":"^10.0.0","@types/semver":"^7.3.5","simple-git-hooks":"^2.4.1","catch-uncommitted":"^1.6.2","@balena/jellycheck":"^0.1.1"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.55-renovate-non-major-62a742911e15ae24d41688350fbb9a7eca06d589_1620035542319_0.12361223220973216","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.55":{"name":"@balena/jellyfish-plugin-base","version":"2.1.55","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.1.55","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"6a90ff4e304e16c0f5e5a2f6dc19cf462de47693","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.55.tgz","fileCount":18,"integrity":"sha512-YmNXTU6AulIuLE6QnJARfaZzTzl8V6edtV3nbAWfkHD97evhE5GvD9V+VQOY4g7NgYuzIcl6gGbakdhPvNs0nw==","signatures":[{"sig":"MEUCIQDwhMeT1/CZsty7gm9Dhomk9icEhTKkPPspXgI+tnI9WAIgfXm5P1ms2zVuIzbecvsjP7Radm8VAOAH3uyEwdyKHqg=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":45301,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgj8kkCRA9TVsSAnZWagAArpsP/iOamNJ+c7Q7RzrGaBzf\n+eezeBaeqhDOWFUdcZiQBvR3NxQ1vRxf8BTo7NNYr62ycGgoZ9w7hit+2M3j\nZo7K1ErS1+XzIWjy3ipm7XDUkUUIO2iGp0KP/VLR3mMS7Y87sShVE5iK/rI8\nik1AWfZdm0ZiHitCoaSRbYxaXru0cWQFBs/Lb+HwcxZfpPB/f6M2CdQpvyrB\nMYa7zhVVC0cYPpzfcWU6OLJPWDpObkH2ZRC0HzLWLWPaPk61rYRRTXA2zNre\ntqJc6jFGnzVujWpvZa8ttnGwXKeU8E/YzTkmuBErBfsAkIdYJaviJbFlWzEZ\nkdcFFCmpwQ8mCOlv5cCQSBcMeGBsjZGZ80lMV5X7jShrph3l+43IXHzSu5Th\noGX5ycLzQFo77YSZOL4zpMhMV1GV6St1WN7nHdiYQu0w5kTFwj+9ZVRTuNfD\nMDDLFsZdQGpzSQjRyuMFJ1X6P5VXMB2buL+uLT4zpCffnfnZExq7NDyg6uto\na6GZmaWYvzMQCPUQa+VqAi3aQT6v/NXS/swx+vcA+znMSmbtcF6/jLqh4Krv\n4g8J5UFTVJAgB/A9dikRXXn3Ck6aojbQntCJ2u9B0d2CVZDC0LV4CdEeXn3i\nfWRE2qEYJTK3qeY6nUVgrrObgZKvew2NqHYOhde0tZo9QSzf9M71R8BZMuiv\nQrKX\r\n=Fslr\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"e664ca57ee2f0903623eff89b9547ca8553141c2","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint --typescript lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --typescript --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --typescript --fix"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.5.87","@balena/jellyfish-logger":"^2.1.40"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^26.6.3","sinon":"^10.0.0","deplint":"^1.1.3","ts-jest":"^26.5.5","typedoc":"^0.20.36","depcheck":"^1.4.0","typescript":"^4.2.4","@types/jest":"^26.0.23","lint-staged":"^10.5.4","@balena/lint":"^5.4.2","@types/sinon":"^10.0.0","@types/semver":"^7.3.5","simple-git-hooks":"^2.4.1","catch-uncommitted":"^1.6.2","@balena/jellycheck":"^0.1.1"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.55_1620035876525_0.8195491830646908","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.56-renovate-non-major-5d19abc86cf2845f16531014f4a31ccbb84e00d2":{"name":"@balena/jellyfish-plugin-base","version":"2.1.56-renovate-non-major-5d19abc86cf2845f16531014f4a31ccbb84e00d2","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.1.56-renovate-non-major-5d19abc86cf2845f16531014f4a31ccbb84e00d2","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"41cc1669fff74db699abe66d74de469ae88484ad","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.56-renovate-non-major-5d19abc86cf2845f16531014f4a31ccbb84e00d2.tgz","fileCount":18,"integrity":"sha512-fQ5mtZ5gLmiNyK8Xt/N+9gPMMhsoau3MOSQuOf/D9HuBXxeXbbvnNpt40eYxqdN6j2RhG4aSkrgC7aCPi0hVXQ==","signatures":[{"sig":"MEYCIQDpfwWxdEfZd7GOU80PZTTICWRztKJIZYV0EkhnGfp+eQIhAIsRJIUP2p2M8ddgh/wjmgA9XaQM+XBDClF1TJ/1Il1l","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":45427,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgj+qVCRA9TVsSAnZWagAAGIUP/3mrxIliq/eJ9f6KwiKx\n5onyF39E0vAmCYrJMZ4abkMaGj/FoNS/6iR3CgsIvivLdt4DjUk5+cRBVkQs\nLtd0Lr16aOfuwCd4+2Ev+i/NqkLft1KMSbHc3WFdnXjy4jovoPwQHi9EmJDw\nzs7MA5ZvG2gru4P/bCAEz/xZVYy+/AusGPktEC5HSoUtyWjguTs2y+6HNN2p\n50mnZ/WEQ0WEDtWHHairP1vFIfxnILf1n3G2UWTLsfGOjimCzHA86xHtMpMm\nLeAPS3sGA4r5k/U1KK99RRuk60aBCJhJMHMY6yDwdZf7TTSdA3hLJt28GHaI\nCnpjWTMs1aXnvk+TRwtbHh9nkrcUfcvHm8KoVnl9bdsqmq7Nrg5QhgeEHiQy\na3lYhyuIOuDEqvF8zzo1VjpMD6an2uqnvR2JWJxy9Q3hA6p4J5fUsLGk7kCv\nQ9fb8/ge/FTOvihi/7y8ezeQvfbiSvH7iFfUCP56YnP68a1VmMDnObVvzut3\n1qO7WGnBySBEjIkGxYExRMG7kCTrYgv2K/I+pQ4ElLI/DIoMDrZjYDvhUhee\nWtaN9am+tDOTbvMcOXTJkKe/NU4rzCb2WwMJyjl5gDR3nbAom0Bx3w6HadxC\nfjK59FgQ0wACyiFjD266LEffFONbzBBZq3TrSBV3en4jW1DjA/RGZ3E4LgV4\nc6+P\r\n=XfkI\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\n[![Publish Documentation](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml/badge.svg)](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml)\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"5d19abc86cf2845f16531014f4a31ccbb84e00d2","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint --typescript lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --typescript --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --typescript --fix"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.5.89","@balena/jellyfish-logger":"^2.1.41"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^26.6.3","sinon":"^10.0.0","deplint":"^1.1.3","ts-jest":"^26.5.5","typedoc":"^0.20.36","depcheck":"^1.4.0","typescript":"^4.2.4","@types/jest":"^26.0.23","lint-staged":"^10.5.4","@balena/lint":"^5.4.2","@types/sinon":"^10.0.0","@types/semver":"^7.3.5","simple-git-hooks":"^2.4.1","catch-uncommitted":"^1.6.2","@balena/jellycheck":"^0.1.1"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.56-renovate-non-major-5d19abc86cf2845f16531014f4a31ccbb84e00d2_1620044437526_0.2948123383699701","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.56":{"name":"@balena/jellyfish-plugin-base","version":"2.1.56","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.1.56","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"5af51286ae0225126994f9a4b968c4c0473f9eea","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.56.tgz","fileCount":18,"integrity":"sha512-7iUmAXAJFi/FtlgpV4Vpq+x0SUY3Yuov2cerDJgEABU0Kpv7E0LJw/PJOk7ypyOaWc/9plHVu4mWYuElBCqMfg==","signatures":[{"sig":"MEUCIQCPL2q6rMXxA6m8wFI/V/DvQxPk7H4YNYauMjWJoxqYkAIgNnneeQOSYYbbjY4xlVrdjvM/dqt2Aonqs8kp7kkOcSY=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":45367,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgj+uOCRA9TVsSAnZWagAAm1QQAKN/Uzaqkw0vHE7em64D\ntaoM/4T7KJJoMyLnfu/tcNhy4/EpSJAn6ctCatWFvP/v4j/OIWwGxofUuTBs\ncn/20yHKrY3JS/Qerdv2F8Fw7TGmNTgZhH2/aawXuN42u1p+DRRnilB9zcL9\nY3Lv7N9TgTEXGXNgUQMlKO2ZtAeRHPnYOYbz5jnQz44V2/8mTGZ+OLixWoai\nrv0K4GmqoqsVMEI0noIeFg/JQAoyz7RlG3Dt8VDAPjwXHyaPYdIw+hvnN9fb\ndHaYP6Yl1/LrZgIv/36LCzUG3Xe5jRcppSARFsK9g2iWF/X5RIhLBhH1P/mj\nxKipeot4APFH1sVgYGlaN8tlRYFH+PTOV8zHyFSpfXsOZAfmzyXsqQ8bgqwA\n0ZiPv5Hg9FglCCYPcMefbS/fsPNeFnkdAJajNZkELhZcR9z5e2IvAhZi8ILv\nNhWbgcRB0J0wVwwKXlrEBqVeXAi8oM2l7EGKgZu3WXJGAXJl8D7AznHis065\nUGGf2Bbhdttld6ezu8hhmLKzXXMpjT5a8yFv9jClCuhzJfrYZHVo5BCbovjx\nz8ih/2BOt9GTaq7i42aa+RemscYe34GQeR//l3Fftt912n2YjdjHmlmnTxhc\noB8O/Ajt6epy6BbXbHkvjoYW9gQSTXDJwThgsSpSvCCPf4M5h9a3OHqfZdPa\ny6PK\r\n=VrwV\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"6f662a5fdd1b54464179f3dda533aed69fdfc979","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint --typescript lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --typescript --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --typescript --fix"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.5.89","@balena/jellyfish-logger":"^2.1.41"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^26.6.3","sinon":"^10.0.0","deplint":"^1.1.3","ts-jest":"^26.5.5","typedoc":"^0.20.36","depcheck":"^1.4.0","typescript":"^4.2.4","@types/jest":"^26.0.23","lint-staged":"^10.5.4","@balena/lint":"^5.4.2","@types/sinon":"^10.0.0","@types/semver":"^7.3.5","simple-git-hooks":"^2.4.1","catch-uncommitted":"^1.6.2","@balena/jellycheck":"^0.1.1"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.56_1620044685464_0.6820255184429909","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.57-renovate-non-major-5e96b6d1dbb217198767afc55f76f6dc0c3b9230":{"name":"@balena/jellyfish-plugin-base","version":"2.1.57-renovate-non-major-5e96b6d1dbb217198767afc55f76f6dc0c3b9230","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.1.57-renovate-non-major-5e96b6d1dbb217198767afc55f76f6dc0c3b9230","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"34a2daec098fc2133c48dc07f0ce69526b65cdf2","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.57-renovate-non-major-5e96b6d1dbb217198767afc55f76f6dc0c3b9230.tgz","fileCount":18,"integrity":"sha512-rxI3qEaoY2mhkwr8GM/U8JVZr9D7G9KHKN/0VzwMWC3PNszRUDBDcg2a5zZqOQXAkEwNCCtYkOE+QEZaV4rQMg==","signatures":[{"sig":"MEUCIAa8GkvTctgDHDWuEjXcv4eT0RUy+C8ONTTvvRTBZONxAiEAsYRHxbxn8IhKvbe44y67Mb2DBOlrx4CAMlHb3KWCjS0=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":45529,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgkBRQCRA9TVsSAnZWagAA+5YP/3HFL++4CHLWXtLx4wBf\nw32hUdLeHXHpAtp3Em3Q5q7JkCrdFr7ZWWIsMty6lkCi1qKJG2XsJ3lS9A7n\ncsmvT7yQZGmmYMJoSXl8yGcHEWFGJd3lIY7kiaM78Ka+nHvt5M1I1zOXXKDO\nLko1VkGzej3RN+75OtbdJHGlaGP6JQ1qquVi3yTT0LWJP60UcgJtRMAEflcv\nwaiUYxQFPQUhHBgWGmacQ2UWVbptGDrWUCJRSfiODP+uWQFexx/vO5IiJStq\n7nAJ8O22DN69n1mTbBADB9Mvh0oY+shWYNqJxuatPQot47wwrrEGAbQ8biZF\nfF3BdppnuifJ3Y4J0LP0s+DY6wTdZautuMchJm1GJ2zvSvQWMkfrlsgCb1Ge\now9856zATC67FD76dKsur0Ig7kJlJH1oaAxcpFYXhEajnc5DRAr0aJUrQiub\n0MPg0+zh7OMYFQ7Yd40VtLxHI2kKJxOcuQBdHNzEYFVO1584qGrbCn3oRkS/\nnTIhv8IGo57epJVYt781QoHxGfSJbCw+0Rt8i5GR94aoOvSVK9BF3zAHh/BC\nbJPTEIaIY+bgubW3Yrs84sK+dcOowfTrWVhxVYhIAfRDvGAgc5plSEk6tQtu\nvNSw6T0Jef3FSby7tfnznTwW8DBpC6WORsgchOO5GtOw6Lu8m8CDrNxuUdKF\nIIrz\r\n=CkXX\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\n[![Publish Documentation](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml/badge.svg)](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml)\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"5e96b6d1dbb217198767afc55f76f6dc0c3b9230","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint --typescript lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --typescript --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --typescript --fix"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.5.91","@balena/jellyfish-logger":"^2.1.41"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^26.6.3","sinon":"^10.0.0","deplint":"^1.1.3","ts-jest":"^26.5.5","typedoc":"^0.20.36","depcheck":"^1.4.0","typescript":"^4.2.4","@types/jest":"^26.0.23","lint-staged":"^10.5.4","@balena/lint":"^5.4.2","@types/sinon":"^10.0.0","@types/semver":"^7.3.5","simple-git-hooks":"^2.4.1","catch-uncommitted":"^1.6.2","@balena/jellycheck":"^0.1.1"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.57-renovate-non-major-5e96b6d1dbb217198767afc55f76f6dc0c3b9230_1620055120394_0.4335943060734859","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.57":{"name":"@balena/jellyfish-plugin-base","version":"2.1.57","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.1.57","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"9e87bea5540333cee12af41ff3ca0f8a806bd289","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.57.tgz","fileCount":18,"integrity":"sha512-EyMbq0+KMb+L3jGwELU0UoISuubLRqeKBL7prBUvtYq7i/+giBcQOjnxqz/IiA/MBHhihJkjinIebEg37CU8PQ==","signatures":[{"sig":"MEUCIQCgl5kqIdSI+n1GnYUsWHWObkHB8MzdUb5sitBRSj3D6AIgMmxzmwmMqfLOKDnfOt7JyWRIILfZCSru2NQE9PB5vC4=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":45469,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgkBUfCRA9TVsSAnZWagAA7yYQAJxW5st5prgfoi9v2nft\ndSZi1z5ZF6xocxHZXOCFymRPCpXkiX1Si1FcX8zdyZF//6gdI3RMT7aXV24f\nughIdAIgVJwvSoQUViBS7oLMSnCRcyd+uwhBTqwuCbnPfUccJGBMn2pgK47Q\nWBvIiFrWqt06fir3vBOR7I4zf+6kM2YYOuJ/aHyj2rjalZu03T9Le4+8vQ4u\ndB+FUBBepBxQ7rH55vZUzyc5VLPkL7fFNgeMhx0YQpX5Zfngx5peAisQMKoS\ngf4h356/SM48PsgcGWwaOL9UTyaTd7MraAYWL5JI59/uTtvuOzx+vpCQfrV+\ncCfKHnFtNM3hyv8aPoUMlOH3rvdgCebVLK23JgdZfplylSLWaHOs5kOjLS6I\nsTMuQCFF5Ll46ZoEE1p6nf079mAzXJFXsNA3Nm6+80Ho4c0fWpaTRvjPr1cm\nrwZYICzPaVjyP9sDfn3q9fhfDNb0cwNlXFXyfiiDCdGEtGoj6OXQLRT3Xm6v\nxlcXNVQ5ymg1PhgY2zLb9ANOtak7j+DWvxRqVveWg+aGSf1FBDRW0PWMLL9B\nB7pJBZ7ibRvHVrh9lgaQszngEILpeip/ivLqX70uL83wCq/j/1hZB9gjudBR\nduADLiWEm0QlpJ/a8AcEKR6XwCyXDnUSMHwQ4Wcwp+kDKh6xkO9TCMUGJ3+I\n0KOm\r\n=rtDz\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"80098f7f10ff63760f76a2605b538ccb60b1da70","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint --typescript lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --typescript --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --typescript --fix"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.5.91","@balena/jellyfish-logger":"^2.1.41"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^26.6.3","sinon":"^10.0.0","deplint":"^1.1.3","ts-jest":"^26.5.5","typedoc":"^0.20.36","depcheck":"^1.4.0","typescript":"^4.2.4","@types/jest":"^26.0.23","lint-staged":"^10.5.4","@balena/lint":"^5.4.2","@types/sinon":"^10.0.0","@types/semver":"^7.3.5","simple-git-hooks":"^2.4.1","catch-uncommitted":"^1.6.2","@balena/jellycheck":"^0.1.1"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.57_1620055326764_0.46954456978953396","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.58-renovate-non-major-13e3ce20a1fd03bcb9b148b6b80b305e239997ce":{"name":"@balena/jellyfish-plugin-base","version":"2.1.58-renovate-non-major-13e3ce20a1fd03bcb9b148b6b80b305e239997ce","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.1.58-renovate-non-major-13e3ce20a1fd03bcb9b148b6b80b305e239997ce","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"136b86d726ff2fe67314b49d644856b1e9642d75","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.58-renovate-non-major-13e3ce20a1fd03bcb9b148b6b80b305e239997ce.tgz","fileCount":18,"integrity":"sha512-HpncI4bXdRHHAggvSnyK3uj33PiyNXxOTUgMclalTX+aK6WYVmkSYPuzbMBzmQZO17eJul8AnY79jL3VJ3jsvA==","signatures":[{"sig":"MEUCIBrZ1ectoacefB8mlN1nozTArZXlkmtl4iBFQJ09oWpSAiEA7+JehYea7a4E6vYwH9eF2rxGgSUbiJL2Zc7WyE7HLVc=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":45631,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgkD6VCRA9TVsSAnZWagAArWgP/i9puoKQjTaE3q4gVauS\nib9ud8bxN6ad5urKLz0zjFcuvNs3dJVhcfrYZVDhimVXqb80z69d7g/FMy1f\npF31fCPiWVYehzxNrvXKC1FZeUaFi25TjxijZmmkKEp73SKBcLmxNtrLRhrm\nG6DtWHS1i5pkDYF0A2drySKEBzsb6JSjAxf8jePUpYdgfwqiepTnk9e2G6ir\nxkGLmYWxZ4lO3bkta6+xz6lx3F3vks7W3FCP02oLtS9+ZYk04dwfbzzhdaty\nXXiQdKl6ywnutDMFZil20happqBJgkZq+GrToebSEgMB2G7RfLT3VXqmVZ+8\ndgu5KeHxhYgZmSpzk5tGmYVO454lAva6oFw9IWfo8EBaqbd1kMAoOiQUq3ES\n6wCoF7CxPwYlukTODDh2jK6YxqwdWEpr5I+2MXE/IimMJprW5iNXXsRFbRhO\nrr1YIsXcHwBGQXENtN+WaMYo0hRSQ0caFMSvdKk5v6hju9i00RsAUUuPWAVC\nb8IS3ZdmspGuT1e3tdsjNu/65RE4yH3ZMEMQHREhU4JExHlwh7pLWElI14DT\ncSxefjP91W12He4H5LTx0HWWtkgkwQ4PezxRlX4JaGpP1oBizUQJHwOAH5Yy\n6AFjorNawBRS2ZYgXeLtmcMQVWbc29zxEQoRJrzfrPjd8nHvYgRyl1qchvqd\ntgty\r\n=6b2W\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\n[![Publish Documentation](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml/badge.svg)](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml)\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"13e3ce20a1fd03bcb9b148b6b80b305e239997ce","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint --typescript lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --typescript --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --typescript --fix"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.5.92","@balena/jellyfish-logger":"^2.1.41"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^26.6.3","sinon":"^10.0.0","deplint":"^1.1.3","ts-jest":"^26.5.5","typedoc":"^0.20.36","depcheck":"^1.4.0","typescript":"^4.2.4","@types/jest":"^26.0.23","lint-staged":"^10.5.4","@balena/lint":"^5.4.2","@types/sinon":"^10.0.0","@types/semver":"^7.3.5","simple-git-hooks":"^2.4.1","catch-uncommitted":"^1.6.2","@balena/jellycheck":"^0.1.1"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.58-renovate-non-major-13e3ce20a1fd03bcb9b148b6b80b305e239997ce_1620065940110_0.8460642197811292","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.58":{"name":"@balena/jellyfish-plugin-base","version":"2.1.58","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.1.58","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"f66d16f5917bc1c79ce3e1d31790c71fed610fbb","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.58.tgz","fileCount":18,"integrity":"sha512-J/DSAEaammOzZjMulmgWPhDS402e2Pw2uemwfL3YK7dFFrvlkxP7aHfJl4RyWVgHCovE8ixIjKo8oqCrJOW8Cw==","signatures":[{"sig":"MEUCIQC8FI4JOkzpb2mavGQH9NqPLPNaXEUOkRxaW8dzwP3/aAIgJ1LJxBHdBStX7MgNu74uu8yeLsVSzr+fkTrjRHFYdYI=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":45571,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgkD+uCRA9TVsSAnZWagAAcKgP/jCjpMKQp2tpHSyeuxJL\nHpzJaErE8vLXswqIFfsP+sQtaP83cKl7hxLxnlxG87ga4scx8rrYSbOktUNG\ngFIYobNTDOzIkBRe3U7Av0f1gFwaWe0L+Udf0TpRFWD0h/xKqClfriN6HTh+\nfHg6dWkXxh8hyo9HjdxVH82DLGqPf0fPNfwCar9OkCEZkm/sI/jf5fmLjgIH\nkb4nMQ1AyGIpnVDQ+jxAyWUQNR86XecSuEK0hHeWvXEx1nd2A1GNOqp2uAhd\nWRkAOPGyHy7kfSMkWgk1aQiibcuxsbmiIwZMPN3dLhZaTaF7a0D2m/Uc0ir0\n+YDpFfKjCpj9T81gTilw1BGKH1KDJFPQPefGzDcDYYTF4wsyZ7zpQwyJAagf\n1FLzoZH0Y4gCo+/DurmbtD45B3KsYNYogDBXhhtvPcI6UB/Ymvy7dAufubag\nL9VY96KdNY02/uvcyU2KALQfPp/+cl7K79dwTQdp5NLXNQQSczaU8H3p2yJN\nHorVub1VwhuCh6nzTDGEF+df1lpe+0G6X0NRAFjdd1Qmu5rtgurxEipgJvRO\nvL1gYFnjNCUpdAof9HCyjiNNpR/pQ7IItwU4ZgIWbTNQT2XIXRztX3crhU+n\nPAaHUi4OoMRGtXQGUsf2kzN1In0npUGA39ccYcb/AS5VRXQMRUdOrlGeAWhu\nkZR5\r\n=2LqT\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"4154f65c41f3361be0011cbb4c9c51ef638a244f","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint --typescript lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --typescript --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --typescript --fix"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.5.92","@balena/jellyfish-logger":"^2.1.41"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^26.6.3","sinon":"^10.0.0","deplint":"^1.1.3","ts-jest":"^26.5.5","typedoc":"^0.20.36","depcheck":"^1.4.0","typescript":"^4.2.4","@types/jest":"^26.0.23","lint-staged":"^10.5.4","@balena/lint":"^5.4.2","@types/sinon":"^10.0.0","@types/semver":"^7.3.5","simple-git-hooks":"^2.4.1","catch-uncommitted":"^1.6.2","@balena/jellycheck":"^0.1.1"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.58_1620066222500_0.7383152831090289","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.59-renovate-non-major-199fe35dfe96d96df8539d63215622ef7be36cbc":{"name":"@balena/jellyfish-plugin-base","version":"2.1.59-renovate-non-major-199fe35dfe96d96df8539d63215622ef7be36cbc","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.1.59-renovate-non-major-199fe35dfe96d96df8539d63215622ef7be36cbc","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"110d95676f7c4906cc683fa03eb4afb861dd6b84","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.59-renovate-non-major-199fe35dfe96d96df8539d63215622ef7be36cbc.tgz","fileCount":18,"integrity":"sha512-xq7y/mFdmXAXqkyo44RjM9xovBLfwTpIlIFu85d8BkII9ywZAM9UC+5+kwBjcWwJj0zT/nJceoJLf2BaQtzViw==","signatures":[{"sig":"MEUCIGnL0FoBCpg3Ah4df9/ZguTSFMZMVXdNCa19DvB6NaNwAiEAqtauQjorNmmXQr3wB42EmCfrjovvcqIq/fQDhpSDlbE=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":45733,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgkFL3CRA9TVsSAnZWagAA5Y8QAJ8oxE/8dVyljXIhoet0\nn5zbLyAktTqMA1yxIPTEUDdZigBoIzNFJ6nwPrvIMyXR4FehflH9o+j/1nLM\n1bt/p1Rlz0DuiZ8hT6/+2BZtKPMQQQKgo8Iq6cbDivnAnHYMjQSCkUdmL1zP\nwsx7yaEXi5ziGPeBsYr9laMT/8lmEzsTO3JMeHQs9yUMWbQX6LU9dMG9wKNh\nc9C0oGBdyTqTbDQ4ohqz5Yw4fz8oNSMKnnRpJjMPkhMoD7OTSyeJDsJo8h1V\n8ZcsEh+5J+b6lvEcl/oowUpRfXLkPr/LR1aIp1//xuiPDVuNVRzjjiY98Asy\nNX8xRpCtcXJmkZgeRakcypCRj98BN7VOpilw/5M7SfxZblMQpfMG/Cr7BFCj\nTr0gUyGi21tFWJHHQBssLxDiqCwM3RvfrKEvg4ZxY2DqIo5Bliissa0tpDqT\nCAK1zyonjcHkswG4EwtHXC0BfOkV84L/iHT1DV5GJgCku0PZhG/cQv3dj1qL\n0WZsVTgqCvctAlqLZCzwsQyNaMxF5o3Pxx8K8t35hBCKr+jkEF56Nc43MJQE\nAnuP06cs0eg48pDXcuXgWp8BT3hC3hShit4viK7GiR3jG+ECiIDC1Ht5OTfA\nr7xgDnSzEWdPdkHbkbWknD+61Lfo84KjSTTdr4xvAx85uV2/iIBqgN0dUkLM\nfixX\r\n=osnP\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\n[![Publish Documentation](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml/badge.svg)](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml)\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"199fe35dfe96d96df8539d63215622ef7be36cbc","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint --typescript lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --typescript --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --typescript --fix"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.5.93","@balena/jellyfish-logger":"^2.1.41"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^26.6.3","sinon":"^10.0.0","deplint":"^1.1.3","ts-jest":"^26.5.5","typedoc":"^0.20.36","depcheck":"^1.4.0","typescript":"^4.2.4","@types/jest":"^26.0.23","lint-staged":"^10.5.4","@balena/lint":"^5.4.2","@types/sinon":"^10.0.0","@types/semver":"^7.3.5","simple-git-hooks":"^2.4.1","catch-uncommitted":"^1.6.2","@balena/jellycheck":"^0.1.1"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.59-renovate-non-major-199fe35dfe96d96df8539d63215622ef7be36cbc_1620071159203_0.5135797863914775","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.59":{"name":"@balena/jellyfish-plugin-base","version":"2.1.59","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.1.59","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"775a6730092ceeb484ba1e807f5c6d1e06f8dfb9","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.59.tgz","fileCount":18,"integrity":"sha512-ILJJ6tDMsvppQUyIzoq5WSbo6GyWlPR5PAi+eSnq0zChdid8rIB0/8oz9xG9K40t7YE/j+33U/m78uVVfQpnDQ==","signatures":[{"sig":"MEYCIQDLoHyBjTfoopw6iOkUDo1MH01BVLhHusb1igDwc/tjwQIhAO4IupnkAp+j/A1JEvxzp3UmrVHWuP/Wd5KfBRHpy13s","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":45673,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgkFROCRA9TVsSAnZWagAAwYMP/31O8Tih7V0t6/fiJbvJ\noxCpHQ4M7mrozM/zhcluhNWt7J3+YmrFNHoOyUHJWs3sbJQiDdtcphzn5f8e\ntiDrNOZAPy2ABH9vEY8ILE+IO/KRimK2tt8FQCzVcyRLQ/hMsoc2ActntBP3\nzKSmYkpkD1QtHuEo5iWktjjzfoo37wa9x31zgnJdWUsAlBCFO2yqC68q8mQ7\nkJSnjsM7ol09DQhmvx0Po/1y2uHwF4PvjcZbcr8z5RKnzIeLmTtOk6dypopT\nDohbDvPP0rf0cCDMDdWkKQCbu/ASbigvyzZk8w6n97sEDmF8k954FVUwFOSE\nRj2tqQV5YZlNauFIxKzp/rtCS7oxAG5+OnM8dcovmtIn/yGzy/PLvboGRA+U\nx1kUzt36QK0heN6tPK5yJDm4GmSp5cY1FyuP7tvrlM0UEWpPR780ey4+pFH4\n4vbmjfw5b/ub04sBNM94iKYd8j9m/947ziLefYNK7H4kQc79LNOxzegVpbNe\n4P1+qcnvFF5xB7lpx/yBHhO/98aIIFhmSWSfRY17CL5UnRFzDF+QrzZXCgEZ\nulN8h/KPuU2v4Z1VTD38AzmWNcfLmDpa3yRmWrDWeMKG9PV/TPx6ro68P1F7\n/C2sD95SJYpv2dfT0vNmAF73a7nZmTDowFyPEp1RSC6nGzin83OuU5fW2X4g\npyZH\r\n=vWXw\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"6ba864c99fc692e2112fa80b206c0df29ab2508f","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint --typescript lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --typescript --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --typescript --fix"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.5.93","@balena/jellyfish-logger":"^2.1.41"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^26.6.3","sinon":"^10.0.0","deplint":"^1.1.3","ts-jest":"^26.5.5","typedoc":"^0.20.36","depcheck":"^1.4.0","typescript":"^4.2.4","@types/jest":"^26.0.23","lint-staged":"^10.5.4","@balena/lint":"^5.4.2","@types/sinon":"^10.0.0","@types/semver":"^7.3.5","simple-git-hooks":"^2.4.1","catch-uncommitted":"^1.6.2","@balena/jellycheck":"^0.1.1"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.59_1620071501793_0.5575592666004814","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.60-renovate-non-major-2e2972ba5d6bce1247605296fc8a17afe1c43f54":{"name":"@balena/jellyfish-plugin-base","version":"2.1.60-renovate-non-major-2e2972ba5d6bce1247605296fc8a17afe1c43f54","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.1.60-renovate-non-major-2e2972ba5d6bce1247605296fc8a17afe1c43f54","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"4fe7718ad1e8f8ba710d6dc16a66c6e114d4059d","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.60-renovate-non-major-2e2972ba5d6bce1247605296fc8a17afe1c43f54.tgz","fileCount":18,"integrity":"sha512-uondtdBTBU0RttlF819ehHGg3V9Zl6LEySZKHy6STP82uxjNBrAegK6SljrUnolN582SGSQHzlM/3Cb2cDdpSw==","signatures":[{"sig":"MEQCIHvzkjgTgvY4gXV3kNKO96vuckpZ8/TgWalAKpU7p8jlAiBcxlvxXeadMtAaflSHx2+DBq3pTwNcCZTPNBKD26bm8Q==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":45835,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgkJCdCRA9TVsSAnZWagAAe6IP/R/vN0fSWv2ZnHRxvMAW\ncd8yhU4S9EGvnrNJ3cRL8yT/ko1OCCQdhChjEUs7AkdvlAhOCbDfvbcgeOPS\nQlr3oiT/5t/SjtojGNbw0KsQ2lh3LmVBfouWmr7e24ayfPzSdXv18qzzaeQ8\nthXHZgfVwRKA6Lgzkq702bHI00K34it4+xQTYMBBCxRrAY7F/ue/VDXvWDFK\ndv43lhcuvDqnteTPIuBNTAk0C3BeLJBV5SnUpFrB8neL8Yk5d+gzxWljqUNh\n/Mu8HVpLlr/9c9TwkTcaWs7tXZUHhIz04PYcBjHh+OL64ptAEaQ5KGxc+GU6\nTDicvf4SmVYHEo3XuprHGNJCu1jwqLvyiZAlpXW4wj6m5QU1lAeK9RQLhdm5\nbpAorLG/j0yKRKL4XvBTv6GX8M1kEPVlfKuHlFSYcc+g9QfBgAzfa3t2JBmb\naAMPrJtJSgfB/rdCDiuIMhzLzMonw10BjVt+v5amaY2etj8Wonhsew8Tb2zK\nmSKNPG9/MgbkIFezWXPS28Wjomzoa0Btkh8CStA4+oxbn0+pQLLIiPNWJDnI\n/7OKeWZmrUv3fWatePKaJaZmfkBEPiARDrhbXUqwE4lp95Qp18AoG3qFnbT8\nw3hd5VZUu5KzNeZydKDCWS4BZAN8xuMYglDH6jWUn84LznWCNGn20uksI9oR\n3YZH\r\n=tZ82\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\n[![Publish Documentation](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml/badge.svg)](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml)\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"2e2972ba5d6bce1247605296fc8a17afe1c43f54","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint --typescript lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --typescript --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --typescript --fix"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.5.95","@balena/jellyfish-logger":"^2.1.41"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^26.6.3","sinon":"^10.0.0","deplint":"^1.1.3","ts-jest":"^26.5.5","typedoc":"^0.20.36","depcheck":"^1.4.0","typescript":"^4.2.4","@types/jest":"^26.0.23","lint-staged":"^10.5.4","@balena/lint":"^5.4.2","@types/sinon":"^10.0.0","@types/semver":"^7.3.5","simple-git-hooks":"^2.4.1","catch-uncommitted":"^1.6.2","@balena/jellycheck":"^0.1.1"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.60-renovate-non-major-2e2972ba5d6bce1247605296fc8a17afe1c43f54_1620086940552_0.5934171033118925","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.60":{"name":"@balena/jellyfish-plugin-base","version":"2.1.60","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.1.60","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"080f8305d9af20f5025be16f4561c0be0b435be1","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.60.tgz","fileCount":18,"integrity":"sha512-3HzHeIMto4ommE1LOP+k45Eorqjl6JcppIdpzqCeKyvNUhuAvXc3sor39Qh6fPiEwDNf7jTbpvfh7SDU/uSG9A==","signatures":[{"sig":"MEUCIQDCjl0ADs22C4fw1yacqVmv2rR9pvuZh9pnwjNhBlQZeAIgSdQU9x5SFjNzPHhnZjtUJEgm1bAKehhVs56r/8hOrgs=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":45775,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgkJHNCRA9TVsSAnZWagAAOxYQAKHINAXtPn+HpU5PoLoi\nvGlZ6plrJFP3h/xYNox0mMfjMovO++3pxHzhZAuCTx9f1Ox6PqkjQ9NTPTOW\nBUKGruGpUN024kIJGLGI5gDau68AKCZIgxpb0KO2GfBY96aIwrs81Ujnbk/v\nPP6rm4yFC6PdBjbF/u5N4UpX8DDjtqcvsn+eKTa0elJWF4mj0qjmPZ3MZZsZ\nBq0iOzgkEfta0mpOI+HjvM2G0KWUaozjhcDLu7HoIvMDjLswJsFfi0NLzd8d\nmE4o6v0+6PE4/G76oC6X0kqnyCvPPfio0Kjw/JX/tOId/7qOH9hGKf5cEVTS\n4YoTAbWf6DO2yUtliUHJrr3uH18xN6COFrdZ+lJhzI6tsfxDefnHB3duaVYY\nNh0DaBhkuwNMfb8nP8rGvGw1LSLiTz8UeGv1TuRz3yaDNjSk+F7UGugq6hBq\nG6sos+tQ9DUIO/VYfOy1oN9q2DHfTjdXLo4dJuWXTfroS5KNa412mvKJ5saB\nexjjvB92NSZO5Iwr/WMQn7yMpTxvAe4yzzLINOUHRX+Zj0/I6lluXwanM6Hb\nZDpHlKL8UGxXlcZNHbsC1tRLdgQdRIptujlo4GGImWEGSFCUrQFDlz6+SD77\nmvNsbKXIrByePaZTdz29VSRHBHKMKMfwmI+Dy/HGIlaGwYpS6K2gNBqqej3x\ndfzZ\r\n=OaUP\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"579391f6a5e9fa09aafcaf76585897eda5608ac5","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint --typescript lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --typescript --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --typescript --fix"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.5.95","@balena/jellyfish-logger":"^2.1.41"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^26.6.3","sinon":"^10.0.0","deplint":"^1.1.3","ts-jest":"^26.5.5","typedoc":"^0.20.36","depcheck":"^1.4.0","typescript":"^4.2.4","@types/jest":"^26.0.23","lint-staged":"^10.5.4","@balena/lint":"^5.4.2","@types/sinon":"^10.0.0","@types/semver":"^7.3.5","simple-git-hooks":"^2.4.1","catch-uncommitted":"^1.6.2","@balena/jellycheck":"^0.1.1"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.60_1620087245407_0.7809524952415237","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.61-renovate-non-major-b66cfcb3e6d75b922abca4487750de87a1f00399":{"name":"@balena/jellyfish-plugin-base","version":"2.1.61-renovate-non-major-b66cfcb3e6d75b922abca4487750de87a1f00399","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.1.61-renovate-non-major-b66cfcb3e6d75b922abca4487750de87a1f00399","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"1734d7ddda0a53c541395666752d392076b6e188","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.61-renovate-non-major-b66cfcb3e6d75b922abca4487750de87a1f00399.tgz","fileCount":18,"integrity":"sha512-GJX5Us1QtSkGXLOg9qNk7ynlR2MWRCfk6vLqcKruRsxugqHBGNdS6qMYCLw6108ImG9udazig58MW9AFFN0/Rg==","signatures":[{"sig":"MEUCIDEGJBdK6b2WEvYKGBzV8+tayCO16ZGS180Ob9x74DuZAiEAwXhO9N4ZJxIjklhUApdwwBZdGw3kBcE0DvxbzElNayI=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":45937,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgkKtxCRA9TVsSAnZWagAAoEkQAJotSqBcEuIgXfq2xHNu\nH6OXxJYGhr5kZ7t4WH9pkbWvRh7uyQxZy0AaZ7D3xm/fiOqie6Ci0R8xeH9o\nGQwGxK70+288cupr0MJnZGp4Lj7O9r+imtyGEGZtvB+coegn4aVQPjQPs3pQ\nTWRXJOawwie8op7xNQwM8e/HK7w0zGfZYQ5I1rRulsiyq+A34QZh7RVwINfg\nDcoojpbAFJNMqKWE7ktf5Yy1xmRfjfAIV/Muzy5uIrLqycfG6bFwVOjp5CFA\n7bbVPclcsUpqhBBo9nfkhwsXEU4xbJls1smmiACCx8vud0zdD6WLUF1e36zm\nN/Nv6g14JiA4zk7JH89VgbJF6BBY9WWg8EALQ92RqQWZee8IzDM2+JNtp4tB\ncRMYlFHHgfbuETt29DwBo8tMloQw4Z44638A9Lkel6MZeCrA+e/KwTbsAoKD\ncp/QpzOyNn3hkPUAh7X4PriwcZVD1cGgcGKLxeMvBnmEvSbZM1alQ0guhLAA\nDAubxVZdQweyCrjebyYpx56GzlvPQBREmhihebddgS8guUKGb09KMRF0iNmP\nOlXfD7EkCdnRPiPX5pX7EZPvKBppHjtqotoiuebrbdbTVy79e3c3Ui3BJh9H\nnXZO6LIoVJhhwIWkRb/oEX8RZKYa3TiV4LpfG435JV3hu7N1K7Ej7dzgg80B\n3y3b\r\n=NoCY\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\n[![Publish Documentation](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml/badge.svg)](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml)\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"b66cfcb3e6d75b922abca4487750de87a1f00399","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint --typescript lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --typescript --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --typescript --fix"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.5.96","@balena/jellyfish-logger":"^2.1.41"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^26.6.3","sinon":"^10.0.0","deplint":"^1.1.3","ts-jest":"^26.5.5","typedoc":"^0.20.36","depcheck":"^1.4.0","typescript":"^4.2.4","@types/jest":"^26.0.23","lint-staged":"^10.5.4","@balena/lint":"^5.4.2","@types/sinon":"^10.0.0","@types/semver":"^7.3.5","simple-git-hooks":"^2.4.1","catch-uncommitted":"^1.6.2","@balena/jellycheck":"^0.1.1"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.61-renovate-non-major-b66cfcb3e6d75b922abca4487750de87a1f00399_1620093809080_0.7839119324882111","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.61":{"name":"@balena/jellyfish-plugin-base","version":"2.1.61","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.1.61","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"0d5f018c02a383d0e69c111f3f5bda47cd1f5f87","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.61.tgz","fileCount":18,"integrity":"sha512-1t6MfnLNaiUZ2WjebcBhVrhMb61v9IQwqPpKmJg6kX7TyobxruB80P8gQVpc54wi+ksx03srI0J57kKc0C+09Q==","signatures":[{"sig":"MEUCIQD7QujxO4g4jQmgTg5o+aQtL0lRVtkfZK839Ee5Ae1yNwIgbPz3X8mCseWYr7pvQ0+LC/rnMtRe9PQx7OSjLdTzAWo=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":45877,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgkKxbCRA9TVsSAnZWagAAsC4QAJl8iwLY80AXp/DAQKJB\niRIha3qiiQbjhLyMwe51PpxtexSzB8D9i4uZw1x4kyQatTRwvlS2jKS4pyRG\ncU5nDHo0YhI2r2qc6jLHw+XgJNlyqKmUU71IdefwKdSO1VW784/utZe5jwlZ\ncezhgHefhxbuO+YIp3EcSa3RFc8sh0s9Qa8uB0zPb4SrbXjCq7cQ8fmRz3Xj\nDJcFYSwAXp+Vovc/EaY1dgLX91nZsYzJa7DWhzeBuZh3yD4Y8duFeaMByXI4\ngnnXhH0h58s99hC338FNwZJwJ7DKhljXwGS2/3rne4myXsTrDcNcOPnyCK6v\nJyzntBpoqny+IrOuWRq5qV+5+kYaXvxxxpS0nQU1yBfAzTMCgeXrXUYC0HPl\nvCuhRSFhpmS/Si1jcpsSoEwWzvTIzkyUvxQbMZBGWRNDBKrFUnLYZCgcQ8tu\nBZLutQCDeaLG2U5Ap6vXsBghEQWYRG5tUKVG7FYCfmjxFG8mJ3i6xXg+Svqb\nx4EfKvtkG6Oa3MyX5dhePE9Zl6ouKl24Sgp8Et/197g8gJ0CD7NLi2Rtb3cf\nVMp2oTHCdv2rLQfAErcK9AbEM32QxmLD5A4QmZcWWmOFzSxOPE2VJz8nVVHm\nf+WBt0V0CM+D4GgXlxpFLjs6gswNd9IW1vu6lrNix2XGjdD+yQR+EO5N+6KB\ntt7k\r\n=2qhl\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"98ee38d80dd8e312e21a33092bfec899f8391638","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint --typescript lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --typescript --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --typescript --fix"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.5.96","@balena/jellyfish-logger":"^2.1.41"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^26.6.3","sinon":"^10.0.0","deplint":"^1.1.3","ts-jest":"^26.5.5","typedoc":"^0.20.36","depcheck":"^1.4.0","typescript":"^4.2.4","@types/jest":"^26.0.23","lint-staged":"^10.5.4","@balena/lint":"^5.4.2","@types/sinon":"^10.0.0","@types/semver":"^7.3.5","simple-git-hooks":"^2.4.1","catch-uncommitted":"^1.6.2","@balena/jellycheck":"^0.1.1"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.61_1620094043059_0.40909340176556075","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.62-renovate-non-major-5a06a565bf7efb1cf66a93d00af6fd9b40c99d0e":{"name":"@balena/jellyfish-plugin-base","version":"2.1.62-renovate-non-major-5a06a565bf7efb1cf66a93d00af6fd9b40c99d0e","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.1.62-renovate-non-major-5a06a565bf7efb1cf66a93d00af6fd9b40c99d0e","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"7e9ae61f519593bc0c7cdcea455c69f547c672a7","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.62-renovate-non-major-5a06a565bf7efb1cf66a93d00af6fd9b40c99d0e.tgz","fileCount":18,"integrity":"sha512-gVaqhvtlABmQe/Ed5NokkvlbqNA5QcnPpQhwsrTbmU20jZtBQ4MQxCvHQ2UHbGCXGsMOHkFdehOjeovvqW8owA==","signatures":[{"sig":"MEYCIQC/O7mXdtBy+OTumXFwAS9ny0O+ClL7eSeX6tqnEhjzyAIhAK7YAxuxG4KRotzN3Wzz9g3X8ZNBAsHhocwQg0bMTU3M","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":46039,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgkM7TCRA9TVsSAnZWagAAUI8P/R0EH4XNHW/4GEl33Kf+\nh5cjgthXv5dWqCzPkboTYtuOOrvAvJminBitPrL0pYavCJ6wrCczbWeIgWkT\njU0EwfKFZDBqDmNiAhcg3lmtAiJFZNrnHvn2kxLtKp5yuUzdcoLt8yg2K4Qe\noxlO5th5BBsA/sxchmK1BZ75t8CWjduFG7I7YVVYTzc0ej+HEU8N8rvuRtgN\ni4xC1LtNDx/WmKLaYBCA7PSifD9QCy57UEBMmzSpGjqtLIbYYyAJY/CZ4ktr\n/wQv7H8Y7NatqPDrQdhXtHCSyKxEnGEYiWpZiLeUhSTsVNfbO/0SqN+qYKBQ\nDUNHeSOF7w8ncCmHiYhSe3FMRSiRypB3+hbUEVCuS1l4l81cuGwuNOZI4Dfx\nkS+Ps2IassosxKtkfI1GqBmZLMBxvPXRM++rYbS92vM6ko2CkLARBwqQsnB/\nndpOXkztqhdSzHIrQLKCsesXtE2iJQkgFLdFodT5YIye4ayeT5GvYYUKkBbh\nZad/tz8/blIpELPQUq8aW+RQFbG/gYjq1IkLEpQV6qHL+AktryElsnl9O3dv\nNoycs2q/pMXb9vd0nsiYRFeKx7h/7GQDBOg28YH87bfKZdXel5AN/tEwsxN4\n1IlViqnMHW303ELS5QP5b3uVo6rSVs04MwS8TOjAcMINkNdquw1TykiOL/jD\nCRRA\r\n=ndkv\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\n[![Publish Documentation](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml/badge.svg)](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml)\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"5a06a565bf7efb1cf66a93d00af6fd9b40c99d0e","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint --typescript lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --typescript --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --typescript --fix"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.5.97","@balena/jellyfish-logger":"^2.1.41"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^26.6.3","sinon":"^10.0.0","deplint":"^1.1.3","ts-jest":"^26.5.5","typedoc":"^0.20.36","depcheck":"^1.4.0","typescript":"^4.2.4","@types/jest":"^26.0.23","lint-staged":"^10.5.4","@balena/lint":"^5.4.2","@types/sinon":"^10.0.0","@types/semver":"^7.3.5","simple-git-hooks":"^2.4.1","catch-uncommitted":"^1.6.2","@balena/jellycheck":"^0.1.1"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.62-renovate-non-major-5a06a565bf7efb1cf66a93d00af6fd9b40c99d0e_1620102867426_0.7046854848782635","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.62":{"name":"@balena/jellyfish-plugin-base","version":"2.1.62","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.1.62","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"760a49c5a2e7a0f6a5d49de20010dec8d94b2688","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.62.tgz","fileCount":18,"integrity":"sha512-WCSoh+Jc2zLktRS5EnE2vB9Hsc+h9OL0Rb0Z1lRmWHzSvBuQpMaSqKYv4UTICxYkoY4h3jebUNT1bodZ5L/cXA==","signatures":[{"sig":"MEYCIQDyuRex+Sb2Clxt7wZitLVspqnYv/QkBy3gMFTRNu2naAIhAPLqbhTeVYwlz0T/8xzIfSt19Nw1l2PTN0iG4OtDFkY8","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":45979,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgkM+7CRA9TVsSAnZWagAAjocP/RZdw2PK4Tn0gxJCWhmL\ni9OBeTvUuxht9DiWidRch1baYrwkuw3+WVax8Dwuk8tcT85Q2leDNENvhU/D\nBwtzM0HaG1lxYjDNoHg8yM6MPfsoZeMyympwFOpo8dOUkU2iDTmPkVxlTUKO\n8jbEzhLF7HY9bq6sLncUggmQ7gyIcRNiwitTrq+JMl8cVSzFjFKATb0ZCFnD\n+XeXrFUADR+5FcILNxG0qfzYKbpUuHFFIsgdIDlAi95oJdl7X0PkMJfuGuz5\nPx7ktlQX6Ua6SQF4+Mqc3e73AePLjjnAGpJYJvSzKm5PUUUSCXReCIV7D66p\ncBcQw747hQUkUYzWsvdrI+ACoNzZQhfFDFBj9h0fJg+rlZmH1UbvjA/IsLDX\n66lPaT+ZNo3EULfSMo97e/ZlAvElMUNXjMbMVRZbVB2Mob/Zt+JiJJ71OzBT\naktJ0ocPIc0rSTSFGB7DGlW2LcBWdmeZh6UGzGNvd1AJkUIonZiRCaDiMdng\nIZY6fp39FxGQit2pLIgEL5ncAuK8BhEyngQtpLguzZZD9sYIwhnmfrv98OlN\nGEe6io22OKUXKVzdkiImkxN1CLKehZzm9Ok/k63tHt0T+ECqeJ/tRPk1mFIE\nw+jKPYlW4NYUQTI6fYFp64K4VRBKVyxHf/vq/kXO2szJ5Pe4op0p6ST5Fk7U\nONQk\r\n=x7R2\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"552130716821b1545c528dad5e81130ea792ee74","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint --typescript lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --typescript --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --typescript --fix"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.5.97","@balena/jellyfish-logger":"^2.1.41"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^26.6.3","sinon":"^10.0.0","deplint":"^1.1.3","ts-jest":"^26.5.5","typedoc":"^0.20.36","depcheck":"^1.4.0","typescript":"^4.2.4","@types/jest":"^26.0.23","lint-staged":"^10.5.4","@balena/lint":"^5.4.2","@types/sinon":"^10.0.0","@types/semver":"^7.3.5","simple-git-hooks":"^2.4.1","catch-uncommitted":"^1.6.2","@balena/jellycheck":"^0.1.1"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.62_1620103099414_0.8499228087787922","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.63-renovate-non-major-56127659a76d2326263e741ff5860a9923f9c4b1":{"name":"@balena/jellyfish-plugin-base","version":"2.1.63-renovate-non-major-56127659a76d2326263e741ff5860a9923f9c4b1","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.1.63-renovate-non-major-56127659a76d2326263e741ff5860a9923f9c4b1","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"7f2dd3b3dde9bfa7d8e275b7f911f30b975635bc","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.63-renovate-non-major-56127659a76d2326263e741ff5860a9923f9c4b1.tgz","fileCount":18,"integrity":"sha512-s+KzWRCqOWPFqTGMDzKQd1ZH2rmDPJAk6AtdXfc7sJj4kaiSgpDFr/DpkB0eR7ZtNnM96cwUAW3RenU8MHG0fw==","signatures":[{"sig":"MEUCIE3I/aiVSHkPjbUP8z8e53G5R3z7xtsivGySsCbt1hWcAiEAzx3xZsCawmwSEVf1uPSsbp2cuDJK5hRVIJRYKumnODg=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":46141,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgkQmMCRA9TVsSAnZWagAAZBcP/1Hoi9Vk3drOo8gizd4l\nq/MKLhkape3gidv8sNz9PBRk7s0cCjP/Cu5H9WFyeSxxK63wsRd+q9monSnz\n5C1qlCcsn3UZaFxr6YUpd6fA70VpjPn5DMq76u3XUO2BgPUypXkVxDy4bOE0\n/joglEBPv5kGmVrpw6ZvfSMCtMG+0V14AoRDMIf5V5O+yf9XjGoCci3BUmfA\nTzi97vviyW8dSl3RFg2iFCHT4fRBekFkW2MwE3fq9YgT+9lv65TFPBLOUHY1\niW2arjYHqcgvtk8Qe6V0LnUb4ZNurftmW1yzmNeHSO6yWXM1QJjxVWc4RYHi\nBtFUDSk7JiazvnFNiCuCNuGbxP4Kjrk7Lvullx1XxGNydJ7QCF1hLimB88W2\nR8EFNaRkWNQuPaq0yw7n07w0F6ur7K5NB8cfvFFf2E32ZiH/W1ZNRxnh1wl2\nkbQvNtQhn5JfZk8lgDIRuVCDEMj0ar+T1rYl5We+pPs76unhiNo6bf9eSthn\nI/zpt6RWsGmSZIVsLN7iyY8AGril4MyZj9MdDMY1xqhM5oQKt4YPzOc2tGQV\nt5MEO4oaKmzw/S73D/YxdIjcOVzRSuYbU1DB0BN6KVG9mAwtZRe7bvVo+o00\nE/lNEtSWV/GZRJnEIfg3Nz+nYYkR6hNU2DdLXsu+rJhgwN690k8wqTT4s16I\nTHlo\r\n=HAOA\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\n[![Publish Documentation](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml/badge.svg)](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml)\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"56127659a76d2326263e741ff5860a9923f9c4b1","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint --typescript lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --typescript --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --typescript --fix"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.5.99","@balena/jellyfish-logger":"^2.1.41"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^26.6.3","sinon":"^10.0.0","deplint":"^1.1.3","ts-jest":"^26.5.5","typedoc":"^0.20.36","depcheck":"^1.4.0","typescript":"^4.2.4","@types/jest":"^26.0.23","lint-staged":"^10.5.4","@balena/lint":"^5.4.2","@types/sinon":"^10.0.0","@types/semver":"^7.3.5","simple-git-hooks":"^2.4.1","catch-uncommitted":"^1.6.2","@balena/jellycheck":"^0.1.1"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.63-renovate-non-major-56127659a76d2326263e741ff5860a9923f9c4b1_1620117899693_0.5127314492351691","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.63":{"name":"@balena/jellyfish-plugin-base","version":"2.1.63","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.1.63","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"2ff6eda4bd635bef2b7a42f05df307ae91fe0241","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.63.tgz","fileCount":18,"integrity":"sha512-JjGGN6WvJpfomY8dezSbHv+rskb3HlP8mnRgqMCUYiZlMULKNJhfH7h60yKBrOUK7tldaxLa4q+hnRBunAaH/A==","signatures":[{"sig":"MEUCICtAKhAgE5sHvAxc8ZzAmU+ikhB9cJr4S3ghgtkQmmlMAiEAjPJOyJWQ52yXHngVi5XHYwMYTvAObAWLQkwvDBVe90o=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":46081,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgkQpVCRA9TVsSAnZWagAAgNAP/2kOL+4NVzNErfSSqOP8\nJFDSJKG9CDDFWwVOL/KYf+Sj9aImVLPY550rGPq6V+LzuLYF2R6OJVdsSmwi\nrkIH2uxKuLzc+RtdsYln4ItG9mvzSHHScgveNxeupdmNa1QDDgHvofv0tPDN\nbYjhyZE87xyT+IrvuWRONHGNRUQRbf1pibKRKSAKswJXJLISO34EPivpomHh\n2HgcMPSPV4ESiSJNf5V3x1V/7hlHUr+9KbwXdu8Unv45n5nfgpz8lRlI2xiX\nGOd2vw6kSPKlWomrxiuNRGiIWPAQHF6a+oJkqYh3QE9dlkxHLGOuElwkJ+sb\nrRX/d5yD4sdYVyf2rRCMvbvwAK6CTBkyMuD0XIlVkVe5sIBRXdjBpk//Bhed\nQUYZD2NbTySWWluY2ge1/DsAwgGS5jtqVM32ej/x6ovRJp2/txvPIFJkuNY6\nzTe/m2WwtawNPsDaRXkL4aWkY3I2j2aextk4Zlk4FHubLOX6TYSfUTfMUXup\nIrrd/p1tdLq0ec3ON38fhN7yt166bVxruR738EE+ovyXLhjq4oJtch2qen0I\nhBE+vPTL+9rxGj841vaGK+sNl9dlpQLW8dsdURfNKpVrhWbe4ImMiYrq2GQ2\nosiNW61dUalBH7PR4JhgEQlCt/t5fDMRtgVPaKEvesry4IoxwYIu2QVVebja\nCoAw\r\n=htOy\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"7b0edb31361779271150080f2dd2edbda90048bc","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint --typescript lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --typescript --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --typescript --fix"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.5.99","@balena/jellyfish-logger":"^2.1.41"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^26.6.3","sinon":"^10.0.0","deplint":"^1.1.3","ts-jest":"^26.5.5","typedoc":"^0.20.36","depcheck":"^1.4.0","typescript":"^4.2.4","@types/jest":"^26.0.23","lint-staged":"^10.5.4","@balena/lint":"^5.4.2","@types/sinon":"^10.0.0","@types/semver":"^7.3.5","simple-git-hooks":"^2.4.1","catch-uncommitted":"^1.6.2","@balena/jellycheck":"^0.1.1"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.63_1620118100999_0.48645459665432367","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.64-renovate-non-major-99e50900decd98b251ff8e6a7dd363bc0b2b5e8c":{"name":"@balena/jellyfish-plugin-base","version":"2.1.64-renovate-non-major-99e50900decd98b251ff8e6a7dd363bc0b2b5e8c","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.1.64-renovate-non-major-99e50900decd98b251ff8e6a7dd363bc0b2b5e8c","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"953f2d8e405e37da6e2b430e8b0ba8d564e2f6a7","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.64-renovate-non-major-99e50900decd98b251ff8e6a7dd363bc0b2b5e8c.tgz","fileCount":18,"integrity":"sha512-eBkiBOxsjDwVD9R1exikqb7cx5+ObChKHlUclMeW5O/zv6wQHMJ321WPKWubjiZk99OntcIzej6eruMsXXp9QQ==","signatures":[{"sig":"MEUCIGnqmmCzpMCtYiGyv2LcUas+5xOusnrIuXq4V4UmOQkDAiEAm5pYysBiMpGM0mgFjZsO7Vcn7D0IQg7EifdS85cHrZ8=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":46245,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgkRi1CRA9TVsSAnZWagAAoBgP/iEy/+EIFrMIpgo8BQWW\nEgglfnUtkAr+kNseVFuBFl3N+HETEZxmY8fFi2y9j120XLBErhGnU43zBIcM\n1PDcEuRWPd7t+Ofqwsmh0ilpZgKrScLFNt8mfOUqmqgp9fA5reK7GFaWZKsW\nck7cBuKTTurYaFIrnzscJ60W6zcssuNKLkNfLZsub53HFoj5Koz9lPvDBxmr\n2781achGHZOsnU0hrDR4/nFZXlukTvAT5/xiFkrGBXXRaJ1lT3bOsWRIpULx\nmq/KxSf2Zips26RI55QubruCYpFfBqv8IsLxgRugNm+36S4Ni9Qpe3CQkF8J\nmI5hdTzIvvzdBKAVYCzVB/cqSiZjeOfJ25q63ZoEO3xkyuHhH7YBJ8KCMKJX\ntWMAMGbIp6nCUAfq0vro5w18dAfuorvmLGIgrqkvVm8xamUF74A4EIswStK0\nQdfDQQkw1MA0mSnbSOyIi/Rs5qF2emYMGFV7ZIw3iayOdkwZgLPP+hOMq/JA\nINKVKeb9n7OVIs8rapBtAodkz4+XDpjS48hU4TdipjYyK8hdV7Z2ejhNXjcv\ndH0M8xLlmzNtCkkueVydyBUadAB5NyHeD4NwRy/PlFU4qO2OvsRrGa9j3InG\nvE2yvTu6UTHpo2HuprsBex6wEeZrOepWFWg/IfdZUrZ3L7iVApMACkBOPp6W\nnzDc\r\n=eyyC\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\n[![Publish Documentation](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml/badge.svg)](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml)\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"99e50900decd98b251ff8e6a7dd363bc0b2b5e8c","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint --typescript lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --typescript --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --typescript --fix"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.5.100","@balena/jellyfish-logger":"^2.1.41"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^26.6.3","sinon":"^10.0.0","deplint":"^1.1.3","ts-jest":"^26.5.5","typedoc":"^0.20.36","depcheck":"^1.4.0","typescript":"^4.2.4","@types/jest":"^26.0.23","lint-staged":"^10.5.4","@balena/lint":"^5.4.2","@types/sinon":"^10.0.0","@types/semver":"^7.3.5","simple-git-hooks":"^2.4.1","catch-uncommitted":"^1.6.2","@balena/jellycheck":"^0.1.1"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.64-renovate-non-major-99e50900decd98b251ff8e6a7dd363bc0b2b5e8c_1620121780751_0.3708465895533861","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.64":{"name":"@balena/jellyfish-plugin-base","version":"2.1.64","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.1.64","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"2e2ddb1682bd1df180eb9184cf26d1f77a07bfef","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.64.tgz","fileCount":18,"integrity":"sha512-nw05GKy9kUEm5RzVthPFL6+ZbAp7XFGDq625wbFRBCfka4p4PnKiA2jwBkSC7WkCkxSiJB35V/Isl0nQ9T81Kw==","signatures":[{"sig":"MEYCIQD9Bq+x074OYXQ6/sQeVQV4wfx1Cs77jgYsg0ucZtSKvwIhAN2Ft9Hp4GTOuM+ntYYvDz6RXLmOK7CoINuKDpp0SG9q","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":46185,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgkRl2CRA9TVsSAnZWagAAZpQP/3VzQsuE5aKKej46EP2H\n7ZwIngxVZRydX4VDsZBa8QJHlt4nFLLbYbtE2qem4Y6jYHGXsq+CYyFpH2CG\n89y0pm18WerllghAlVQEKQw6/PCEKPcA1AkSJfe2HOvHhCgeCWuj/RTT27Y/\nkqF09VFMkHKG7AFAJBnNOothw+wrryJvbUZQaBOtbs6q2Y+SbTpptVFljoaH\nwWkjrI65zJ5WBeqlbUI1+peNywwZ6tkilgmMii4lIYUI0Ga0MZKA/JXYwh0H\ncBAXW4U+r8rLeIjVeDrrJ+0zmHSbR96E6m+ADYB+JwR9TPWSidNXeTgs73m6\nKva1+j6mVd0htZWPROvLsGHnkk8Tnd1KVyqHX+T8OcD2wJXlnl60oqf+ZhXK\n4FUEeKkemMuiJphp4hBDy5IeK486bgPSYnD4STznUk7eeALzYi1Go4vKoi8x\n4tmzgayYwXbZ6NcHXobsBtJHKP00Mtuo8vgJIyn+tAPkGKacwkq7/GNg1VNp\njubPef2krFLCcTF1s2AjcvLiY7g/Iwj6GZrU6gvFd62x/W/z/rRZv0WgezcW\nYkSIjS0LWCPTBdTpLrwSEnSHQhUupEHdqWHf0+e+zhGKaJUDMsEUssKKIt6a\na9KQ7Ad05MSWcz/eQNuf8j737XtdDM4YlIJgqJuofnrc+Ze5+EjAowNY8KCD\nsu5Q\r\n=j842\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"cfbe7349a08e644f852d7d21b37794b4e1e784e9","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint --typescript lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --typescript --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --typescript --fix"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.5.100","@balena/jellyfish-logger":"^2.1.41"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^26.6.3","sinon":"^10.0.0","deplint":"^1.1.3","ts-jest":"^26.5.5","typedoc":"^0.20.36","depcheck":"^1.4.0","typescript":"^4.2.4","@types/jest":"^26.0.23","lint-staged":"^10.5.4","@balena/lint":"^5.4.2","@types/sinon":"^10.0.0","@types/semver":"^7.3.5","simple-git-hooks":"^2.4.1","catch-uncommitted":"^1.6.2","@balena/jellycheck":"^0.1.1"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.64_1620121973614_0.7870071713440527","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.65-renovate-non-major-30e57a9eeeedc60789f4b427e5cffef61e3d3505":{"name":"@balena/jellyfish-plugin-base","version":"2.1.65-renovate-non-major-30e57a9eeeedc60789f4b427e5cffef61e3d3505","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.1.65-renovate-non-major-30e57a9eeeedc60789f4b427e5cffef61e3d3505","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"430f866a140e016ec392a9a7c42dc89d13740000","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.65-renovate-non-major-30e57a9eeeedc60789f4b427e5cffef61e3d3505.tgz","fileCount":18,"integrity":"sha512-i5MMgu8ISuCkwSxaKa/Px6BNA9Oj6RQXESPcTkPFQxqQlQufkh7bxh/g4dOE1Qdfor/ctzMkw6Euecerd0u0ig==","signatures":[{"sig":"MEQCICI8BFnLVJ6VRQpxUNyOJe9wuhdCTfyyr96UnTzugkjOAiAE1oqM1O9CkQGfXOQWNKLPsLg/UhXLVtH9Sc0/yGQN6w==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":46348,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgkSvnCRA9TVsSAnZWagAAnBQQAIm4a1KLK5zk7n9XW0ec\nT5mvR5wb5yCjAxlxlWF/TPXtlknd76ddzIXUh7pDWaYWtTsYAR86PT8mDTgj\nvhr+l/nr9JlCXxX3QHOF8cGn9WhbQJC3ti2jNhgntuG2y11CuloMCKG4VxDS\nqCi5Dm9I3rVEbAl0iba8mc8IVFIC9lJBDLjYC2aIzDhUuryBE01Stx+8cmkI\nxm5hPBEMz/zPcvRUDCzAd4DQb+9h1/fxhdHWBATGV2QuNLhJRkAYLCezZeZ+\n9mBsKYLaTVBLJ972r+QtIHLO5fu+Srfl1JnSCxs6q8NKT4V2nCCd2oIPgmmY\n8bHXeRGsZuHhDMxX3cJWcUgGoV30b137ZbbhaAQzFO3fkbaWJheRnRoym23d\nPAcChxMQu93O19eInHiQJfmIOCoPCY97CF+YWTW0GLPqobQHhlkuqPtzjZ6D\nRloII0/i3VbkeHNslOH8OP8ZOPpCWaaeTgEXOWLxy0CldFThyQo7tBqnK7S7\niErbXRq0HEmu0a0NP5NHitJB/lNrkA9rL9+n2+oajuOI4h90H4VMZXfuTEum\nVdC4Rsi0H7wOaGcVcsLhiPEAm+7VMcYv+VzHGKpRWua2xiO8SQynJ9O2lsXC\nbI+ZEJ8YFQoqo8lsLhLFHeA4bLbzqIHCeeYob44di7RXst4kIXkSeta1C6hN\ngCaJ\r\n=NXR5\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\n[![Publish Documentation](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml/badge.svg)](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml)\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"30e57a9eeeedc60789f4b427e5cffef61e3d3505","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint --typescript lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --typescript --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --typescript --fix"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.5.102","@balena/jellyfish-logger":"^2.1.41"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^26.6.3","sinon":"^10.0.0","deplint":"^1.1.3","ts-jest":"^26.5.5","typedoc":"^0.20.36","depcheck":"^1.4.0","typescript":"^4.2.4","@types/jest":"^26.0.23","lint-staged":"^10.5.4","@balena/lint":"^5.4.2","@types/sinon":"^10.0.0","@types/semver":"^7.3.5","simple-git-hooks":"^2.4.1","catch-uncommitted":"^1.6.2","@balena/jellycheck":"^0.1.1"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.65-renovate-non-major-30e57a9eeeedc60789f4b427e5cffef61e3d3505_1620126695207_0.6899491937124465","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.65":{"name":"@balena/jellyfish-plugin-base","version":"2.1.65","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.1.65","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"6272f7ebcd33c2b3d78c1e08c91fa89aedc93f12","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.65.tgz","fileCount":18,"integrity":"sha512-i9M5pk+itPf5rKr7vLAc8wcODZBsagUzngo7TElOTSIqEtKXiyVsgvCP+Kq4hLBzlR/5nxo4KqMO2IsZXpeqhA==","signatures":[{"sig":"MEUCIDgcIx91cy9lYfu2rV1Y/AMmYibphSj59RQ40E28VwyYAiEArOD/SvSgyNc1S3hxAfItZ9i6FICf3BybVtAlla5aavY=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":46288,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgkSy9CRA9TVsSAnZWagAAlnQP/2uLoz08eTxzn22dX7cs\nBz/c0aWzAnaKmj9MtQ6SV01vfu35GW4jJwMCA9XKFOo18/4BoXOR2dqSTkUI\nwodj7cghjNZPSxEM9W/FYYCedzLzS1K+Ns6fvD643Gkm+rmGvVAbuJPChFXj\nUSUs8zH4H0ycDiwqOS2btAw+Mqkh5q/bT6mHzP2KtuT+x3p2jOdvtfsDC83k\n1Z4t5IFeHVeSZMuBMp4nPRef9eltHOOdKsP47vPXltTvZqTAIpfGcMsbs+5X\nXLXTMX+mfpNjlKqktb8e9UOEAZSP+6gb0p2f0UEqRYN/xn/bRS99vFRCDMnF\nbMrwKVIv8tnwJcxgfnqMWFhH3JtW2tS7mscsFUH8cU6EZTWKTXPo097w3Nmd\nx0j+BJYiA13dc6MuF/JgP6+TtPNvwq7yi23d81g1m9MrUgTEKtYLm5RXxwGd\newV0QbFKqmf6Y80UzDK7XlBGfmNSJS9KhCvtfU3ypLHmkhHWKkfTDlNOswEv\ng3WbeylpXefPQtyWfOy/8vFymTOxqbzkx9R99o83gVJrXuDX8lfMSagg+svO\neY6DAAZG2PeC5+k8Re95pZWOdIptfpLfIFhjSvKRMnZdKR8RaoruG+Geag6x\nesR8yEYMk6PsMbw2gw1vMad5QgePisfmE1DEBDnNs/IdOMa6eaEwAHctcTWF\nD8Mb\r\n=P3r5\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"a08940eed3b3c9e62ef7aa1b683fee221785230b","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint --typescript lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --typescript --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --typescript --fix"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.5.102","@balena/jellyfish-logger":"^2.1.41"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^26.6.3","sinon":"^10.0.0","deplint":"^1.1.3","ts-jest":"^26.5.5","typedoc":"^0.20.36","depcheck":"^1.4.0","typescript":"^4.2.4","@types/jest":"^26.0.23","lint-staged":"^10.5.4","@balena/lint":"^5.4.2","@types/sinon":"^10.0.0","@types/semver":"^7.3.5","simple-git-hooks":"^2.4.1","catch-uncommitted":"^1.6.2","@balena/jellycheck":"^0.1.1"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.65_1620126908853_0.8441485351899747","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.66-renovate-non-major-7386deb7a8afc5f1646699cb13d7a12c94d4b886":{"name":"@balena/jellyfish-plugin-base","version":"2.1.66-renovate-non-major-7386deb7a8afc5f1646699cb13d7a12c94d4b886","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.1.66-renovate-non-major-7386deb7a8afc5f1646699cb13d7a12c94d4b886","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"5475d81d36a6547e759c900a8323b96a19a79a02","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.66-renovate-non-major-7386deb7a8afc5f1646699cb13d7a12c94d4b886.tgz","fileCount":18,"integrity":"sha512-wPjyAzKfWpLivtyqH+5k4CzctYjRNpKr9ocMaS4M8BCWm9mJmBZSXCZ+ONOZm/9Foga9+nfeOvZixXxZK9zzIw==","signatures":[{"sig":"MEQCID3YXD1QVVHjQ24rijrdNBgf0cJh0lNu6Topsk7Cg6H3AiAhwzGOlilH3AaUA0CIErexSx5IdKQjfAq8aB2X3Sf8kA==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":46451,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgkVSFCRA9TVsSAnZWagAAOKAP/jI2oH3ih9PYd9VnGIAk\nUlDxDu75rkHx+yhOAMtCD7uXZqbMafTN9MSAhkQ4fGYCgESeibC1kcvDc6Vq\nNzOq5Sr1hJ3h9MaJqnx7YNMysRROowaCp3GHKXnK2aaG+G/yGiJKs8ElgjT/\nUKJI1t+kfYGr7R6lWtHpg8T3rNANLr16s8NxSnphxi31i5RCb8osXksA792U\nwXh+aPyBQHwwyyQjrrag4Jc49KGVE1iSLTivhreuiMVwet0ZwSTs8h/nOy2b\nGPwvPLVw52vgezUqeK14v08zFS3yl1eZtHi8xfOUOh0s+RSWnf/94K1tos8I\nmT0FFymI/NTkApvrFhqR/r2hE0GdvW8jTTCMGxZf9uYCddgVIa4O0F41b8M3\nuNG1Lgh2jar9WUADxKfjNqoHIrIY0FcwiKcXGUxbF+9IOUnOiq+gDKjUHtzN\nTdgHyGIJFdlfIhbtufDPaL9AsD1Wc/wT0zIW76URj8zo4tbdW+ynJW1JyH13\nDUWG/06tQjPpEyuR0aegklVTHBXhwXn8INR28qVt1nUJZn4fTmXD55KAJQqZ\nSOXU/JfKkSvbihUjIY1ars28MUxwpnV70IrqWpXpYoTT1DALcXNxV0LeonM3\nbwWR5z/1+JWZ0THqEnEVQK+/DFk9D5ePlOcIm7NSWlhTZRr0bnMfYEnlRLcV\nsXhE\r\n=MeT9\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\n[![Publish Documentation](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml/badge.svg)](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml)\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"7386deb7a8afc5f1646699cb13d7a12c94d4b886","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint --typescript lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --typescript --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --typescript --fix"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.5.103","@balena/jellyfish-logger":"^2.1.41"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^26.6.3","sinon":"^10.0.0","deplint":"^1.1.3","ts-jest":"^26.5.5","typedoc":"^0.20.36","depcheck":"^1.4.0","typescript":"^4.2.4","@types/jest":"^26.0.23","lint-staged":"^10.5.4","@balena/lint":"^5.4.2","@types/sinon":"^10.0.0","@types/semver":"^7.3.5","simple-git-hooks":"^2.4.1","catch-uncommitted":"^1.6.2","@balena/jellycheck":"^0.1.1"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.66-renovate-non-major-7386deb7a8afc5f1646699cb13d7a12c94d4b886_1620137093179_0.548511429249706","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.66":{"name":"@balena/jellyfish-plugin-base","version":"2.1.66","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.1.66","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"7bebda9b05baaafc549851ef02be86912f3cc721","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.66.tgz","fileCount":18,"integrity":"sha512-1jSdQfMvrndBde3o8TR3LBvAhSWq3VjrdNtcRJ7i2s2PegMtQf1gOlE98kfixQXroCM0ucGUtSTvVUmzRUXOEw==","signatures":[{"sig":"MEUCIQCwUhRI1Rq8A6Z38VsD2C2SqtGQtFDrWgdl4L148V9liAIgL8CnjyU7ebKGELF86eoPzARgYEOAqKJOyirw5Dtqp0I=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":46391,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgkVVbCRA9TVsSAnZWagAAV2EP/RhJtPI+igpkDaamkAHO\n2Z9Ub3Lq8KbQrcaWy0+/onxm4vKcPM0wINtkEvSEGvbKksrLA8dbxN0CIV8t\nCKAXfgBzoeoHxOnXUov1skZCuSiBfbHp+YKHIb0iI0DkVb3SouAfKpGJf0XF\nhsmbxx4ZjmcumxmRUiNqWty9rTgvWqZZy/X6rS447S2PpghPW58SMqeQFwF5\n2Yr8h+WT/iHJu8Eji9eGsIoRrc7kzd9nc0CfeVAUoqviNiRO/h/LUMBhPZy0\njgXG4YdX4pg511WbfpJP1KpW2ihErwyTMl5Bl6zKOjbxGDaU1SXCb8HL6y0J\nSlhumebBb1/5qfTo2RAf2uH7fu6GDWZgQfpKMqiLrPcKzNSiNp6sQ+vzHg85\nlVyhrd4lUwgB8jg6eAA4SJD+PolvfOf51BZSVh9/gAg//AGq7RPFnD8TH2Ro\nvO4i4+S4AxGEEZaKWDjpViSdXPUyhENsv500zKsM9BfiySFPxFqNqGSaq1y0\nbOX+Ougx4whuRQxjA0BPOM7JIpniNvHwQjlGNxUsFeMWgZSitbDCGlQi35bD\nbQ7FOJTF7GClSb9g/FD91czZI57wVYwxdvodQBU4mHNnRl6bcnYUIYHFzz/q\nvtIffakMpQ+VaGxnWj8VPORVCsYuR7cI4CANAb7E1XKb+A/Zs7Z1/9QLmMvl\nM1Ly\r\n=qMTE\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"f7e5d2731b0056703988cc2ed933a6ce9eb59295","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint --typescript lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --typescript --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --typescript --fix"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.5.103","@balena/jellyfish-logger":"^2.1.41"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^26.6.3","sinon":"^10.0.0","deplint":"^1.1.3","ts-jest":"^26.5.5","typedoc":"^0.20.36","depcheck":"^1.4.0","typescript":"^4.2.4","@types/jest":"^26.0.23","lint-staged":"^10.5.4","@balena/lint":"^5.4.2","@types/sinon":"^10.0.0","@types/semver":"^7.3.5","simple-git-hooks":"^2.4.1","catch-uncommitted":"^1.6.2","@balena/jellycheck":"^0.1.1"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.66_1620137306589_0.24030709129664785","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.67-renovate-non-major-d70e5b383722cfd077238efc6f0663ece6459be9":{"name":"@balena/jellyfish-plugin-base","version":"2.1.67-renovate-non-major-d70e5b383722cfd077238efc6f0663ece6459be9","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.1.67-renovate-non-major-d70e5b383722cfd077238efc6f0663ece6459be9","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"254672d19b89eb1cd033e8cecb810c50de2717fc","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.67-renovate-non-major-d70e5b383722cfd077238efc6f0663ece6459be9.tgz","fileCount":18,"integrity":"sha512-pgTvaUdHM8GnvNWXqQXnAYD5TkBlSX2g4qNwmQxrbU3yAoos3LUqZyIiBatFXjE+L+AGYtuHy0xVpMmGdkYyUQ==","signatures":[{"sig":"MEUCIQCNtUeW6c+X7GLzl3/qWTU6InJHKzCV+7vz3AEKGftgYwIgKXkGaZKQLAYCq9m5Uv2qBQTj8JRwT/tpQdFPDtwXQLI=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":46554,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgkV6ECRA9TVsSAnZWagAAwswP/0aj/6bgL87EScUC4hC/\nlQLrIE2HBp/Nv/PseLgyohb/P9NG7MBiTIrgOMTT7OrlSmvAIv3TFweuQQ90\nePYpM/TG96ZS1Tg8767qR7Bb1mW4+IRBuGFtLqFBcKmMGu4yyXv00TF1HQBE\nqnof+1ONXZRt94OdEtd+FNwzTy/Hz6nRSKgzhzRjlSZuJARnl1qp4jja7XGw\nT68G6cXtYP4OU/S9PRD8Gdomq+Ka5j+XvpHDNneSel3Q1ub85djSIqFyL0w4\n7PRQhwXhemSlZjDS5ezVp7ECWOJiAZXxZ6W3/CkzfWHMCRkL8Adperx+5uvQ\nl10BYlGiwZPtwsayBt0Gut2lp+z5WtDL0WtBIPDhBBB8dngeNrHJktPDfcwW\nRh/tT2Oh3dCnrlsyda8mQzuSE7FDrvCsyv/0sXfJlxlWH55MwzQIpn2ey5rs\nRir8MVtNPB4rXgQzFqw38rSQBfUrUvZ2EYIbN9+63ZJA1bm+fDyEu4NaVCVU\nyeo6fusY5K//3kKe6tHG209zMVU1XrPpjFWCxl/C8n62VNWdLxGAe1vE3jC7\ndhCfES2AkmcHsKJKGBfWCnSLZAO8NBasAirp/iV/fhUNPNKOVmbtQBcF9L5n\n58kjgpAzeNdhG2TK87hAkfdotewfA4vUWme0K0LrPhoYIYMcXvXczJtRNdDJ\n8rzE\r\n=YBh8\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\n[![Publish Documentation](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml/badge.svg)](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml)\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"d70e5b383722cfd077238efc6f0663ece6459be9","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint --typescript lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --typescript --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --typescript --fix"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.5.104","@balena/jellyfish-logger":"^2.1.41"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^26.6.3","sinon":"^10.0.0","deplint":"^1.1.3","ts-jest":"^26.5.5","typedoc":"^0.20.36","depcheck":"^1.4.0","typescript":"^4.2.4","@types/jest":"^26.0.23","lint-staged":"^10.5.4","@balena/lint":"^5.4.2","@types/sinon":"^10.0.0","@types/semver":"^7.3.5","simple-git-hooks":"^2.4.1","catch-uncommitted":"^1.6.2","@balena/jellycheck":"^0.1.1"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.67-renovate-non-major-d70e5b383722cfd077238efc6f0663ece6459be9_1620139652079_0.9159326599828752","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.67":{"name":"@balena/jellyfish-plugin-base","version":"2.1.67","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.1.67","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"3418d2661842c08cce931c0e8859ed1c3770b0c6","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.67.tgz","fileCount":18,"integrity":"sha512-0ndGbe4kC5pMZD6RVZt+PI87WPURmpdCzJodhB1wjkFCEIKLW8cYl7fs0/d6ECe/bqVoEmBtOFUWelGMZakiyA==","signatures":[{"sig":"MEUCIQCeJlsJCnhhD4ASmUlBmBAfg9BCYIM6F70ZMCK6R4LtsgIgfPe5QHFXpK4BDEmY60zVBPraxxNvByzDYPTyjEVfG9I=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":46494,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgkV9VCRA9TVsSAnZWagAAtBMQAIQkee+UQUZhaw52kvor\noXTZ3ekG6ddMogijVq3QV4nQ0EIrV3hI+wO9wubEdYa6mbuKJggzTnYSS3Ux\nJ08hNPMikRcpDEi7TpmZNahZVFJf6TUYE83xDG1tGW8TuzuTn3HDp4MZzcFZ\nQxKI0RetfPy1k7FUf7JQgRF+nmG6ZXRUpNfNPHQouI6w1KUVQPU8P7MLXIKi\nxqMJ02etneuZHpdA8BIRAzkacUAOUGqQOa9a1cI4p4p3iDXIWFqasbEzrp6q\nNhAre1wXwYsoa7LmWRZrt+bM2/OXPgxIkN6wRtxxtAgvx73Ws3lseTk+O2UB\nF7l/26suoauy7jW7nRZqbNZFvuCNlWIFH7OYKYg/aGYhRM3tKhWdFf6bylwP\njRgIoT3uPlZ89CG6qjtkny2GLms7q3jaGYuZJnTuiiH2fqXeX4Mpup8+Pyru\nTH9dQ7zjDilKadtEtPBAGqCJspuLMw/19Eq+i6Y6rj+lXRPw3O27uBS33S8a\nZC6xNP1lz2CoVy2ApEm+WUM5dpgDrSWDN22mnVwOpX3LuAcJDU+nys6+/OSO\ndLgOA005PN3QrDZgF7b+iUf4c/OMTcx0GFnu3j/M8zVZ+jFm2m03ISDshbWN\nwaMkJ8bU70INxgBc73jQEEnXA7StKW4OoleQL7xzto/+h8dydyHYR2aWE6hi\ns6PJ\r\n=lRTQ\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"937e29c932022720f086d523bbc156a0e32e8545","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint --typescript lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --typescript --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --typescript --fix"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.5.104","@balena/jellyfish-logger":"^2.1.41"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^26.6.3","sinon":"^10.0.0","deplint":"^1.1.3","ts-jest":"^26.5.5","typedoc":"^0.20.36","depcheck":"^1.4.0","typescript":"^4.2.4","@types/jest":"^26.0.23","lint-staged":"^10.5.4","@balena/lint":"^5.4.2","@types/sinon":"^10.0.0","@types/semver":"^7.3.5","simple-git-hooks":"^2.4.1","catch-uncommitted":"^1.6.2","@balena/jellycheck":"^0.1.1"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.67_1620139861369_0.012124720084248475","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.68-renovate-non-major-ebc4ff68bb6f319cd8e328746a6383cd0426140f":{"name":"@balena/jellyfish-plugin-base","version":"2.1.68-renovate-non-major-ebc4ff68bb6f319cd8e328746a6383cd0426140f","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.1.68-renovate-non-major-ebc4ff68bb6f319cd8e328746a6383cd0426140f","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"aa953483dc12a2cd22b9a7b181c3f66ed5e57d46","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.68-renovate-non-major-ebc4ff68bb6f319cd8e328746a6383cd0426140f.tgz","fileCount":18,"integrity":"sha512-1m+VH8IkzmOljrGlVSqCS4nEe0YquVmjwiWDvmcwbYSShZNMARgoCeFczhCHzf+UaRma77pXcA0ZIDRKvAQGrg==","signatures":[{"sig":"MEUCICqdHymFif+yWmTXm5JW51ce67lMYwEyBQf6Q2MH0zMSAiEA+HzMln3W47OxWoPtovhBPejCTZZtTRH3MVtrsiIml8s=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":46657,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgkXWDCRA9TVsSAnZWagAAkjIQAI2OUPzhwTFyoFa+NJVD\nvXDWGB+eaImhDjjuuY4Re9m0JRsrSHxamxtAtnQ8d0RJJB9gzT3MIlRWyPTS\n9kiyjoV4eZwt+9UqdmqGA7pJ27ctcyAofPUaXurntFxghCpGNVWLNR0cLa46\nUEVy77fbW5Z31qUmG3X4hpiHyK8h7MCRY+GOtg0yQ9u7ea/vfQW1hGd6qX3v\nx7Xt0LV9vRx0mpMqPrb/947Zcwheb9Xb5Cz8l/v8dUumjH5WcNh5p5B32axQ\nxtw38A0mFxRFIn4Jp3WtYPLoSAIQJq7AsDDcXi94FlADoABbkIQfx7/wUSC6\nmGoqpFJLvKj9hnBrDwZESzb90Qe04JpUOod0zylD7hA/lLg5H94LO8xo/AUT\nbgfgOMVDxzvwG6Mt01Ic+9UNV0YFvBpbv8QVa8utmJUcEbVj/nrlx0Ihchjo\nPuwUqgnquCul69QbcVfKNLethxRJxG4l3wN0SDUCsRK3BimKClj9weVbXArb\n8Y1hHIU42gLZmcXaFZgUewYPPj7X06uKB+2PSJUJHhFJHb3ZD3NYnhi6UgMR\nrcRZCUNnWCx8okH4yzx0WWiAJ5mX5/OLJKrIU6SPo9Hv5lQM0XXp3BL8xTiP\nhDbXYj3zqxI1O3DuDN+Hqt4WuZBkHQ+chjI0mMWytB/8laQZFwXedo1mlN3R\n7zGH\r\n=005H\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\n[![Publish Documentation](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml/badge.svg)](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml)\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"ebc4ff68bb6f319cd8e328746a6383cd0426140f","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint --typescript lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --typescript --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --typescript --fix"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.5.105","@balena/jellyfish-logger":"^2.1.41"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^26.6.3","sinon":"^10.0.0","deplint":"^1.1.3","ts-jest":"^26.5.5","typedoc":"^0.20.36","depcheck":"^1.4.0","typescript":"^4.2.4","@types/jest":"^26.0.23","lint-staged":"^10.5.4","@balena/lint":"^5.4.2","@types/sinon":"^10.0.0","@types/semver":"^7.3.5","simple-git-hooks":"^2.4.1","catch-uncommitted":"^1.6.2","@balena/jellycheck":"^0.1.1"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.68-renovate-non-major-ebc4ff68bb6f319cd8e328746a6383cd0426140f_1620145539390_0.48887901870444983","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.68":{"name":"@balena/jellyfish-plugin-base","version":"2.1.68","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.1.68","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"3a8decb43959c2f3a766f96c6aac05ff21c99629","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.68.tgz","fileCount":18,"integrity":"sha512-kw4YNjTRPIsEiOT0imng8bsCUXtDVkrzmyf6LslHWzfTDdH8xAMSS9PpClJSEJoChIgH0VF9xfyjekG2hU4omg==","signatures":[{"sig":"MEQCIGjEfePDqAsViH3TlhpG7tb49QZDww2S0E3EAm2OsI0pAiAl9DxWPgF+5nswc9DifzN/v9Egk38LbgfW/3mxkFUJhA==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":46597,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgkXZLCRA9TVsSAnZWagAAolYP/19cwn/oa4Aq0/3GRxMo\nwHvVcTxrj9X2fehR3fL8rU2E/IwcqvEfaBbh/wHT8Yeqec9f6KcoqKphl7xt\nK4B+QJDvQll5XYIU/SlKS0SqIXDVGaF4BHiDLWKEMC6AR6kotfEznCZ3IzJP\nffwB5gMP0lOpVUA1uPZFWHt9XFMlMDmywWP5vpNI8kVfEwgqkht4JpXLAGtY\nDCnxisVjj4BiFT/5ARYFS2ebCSGIx5Bz2Ffov3NWOLL8R3rpNy9AqYaiUiCT\ncXD6xQO+nDt5LiTpXXz+XDMUiUOWGJ1f6iLhPUatoTgHlRhzILjrGdmn8U1R\ny7nQrZJ+zPdavD2YLaz5w98NZ2yJf+/Jwt9YKYD5ctSKwTe7KtMpS1JpuqJS\nyBWchBrH2Zycq95JBOvWdG/RysIeArKbTz+FBlnXIS7+AB2mg385UV5d3oKe\nIoCKNIb3Ah2tNhKf9SW9F2zt0YfSJG+h+ALWHlPhgkhQQXhy8GaXXyZFs1lL\nOC9HFeZhag6imYjTnoWMgVyUiSmsfSGCLFNYxLxb9ksnT94QT7+wHOeBHsxe\nskRZ4Uf4tnzTva/DA6vv37QaTQt41MebLLSIwbBlJRcHg2D+WvfV17elccyw\ngaV+fugddLVOtnCdwXY9XvzdL44G+TlRfCkt8tXrbDJmNv0kdSUuaf33ap3h\nuwBy\r\n=AuWr\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"bb8d73979193b1dde6f3191fe8d8dccc3234181a","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint --typescript lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --typescript --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --typescript --fix"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.5.105","@balena/jellyfish-logger":"^2.1.41"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^26.6.3","sinon":"^10.0.0","deplint":"^1.1.3","ts-jest":"^26.5.5","typedoc":"^0.20.36","depcheck":"^1.4.0","typescript":"^4.2.4","@types/jest":"^26.0.23","lint-staged":"^10.5.4","@balena/lint":"^5.4.2","@types/sinon":"^10.0.0","@types/semver":"^7.3.5","simple-git-hooks":"^2.4.1","catch-uncommitted":"^1.6.2","@balena/jellycheck":"^0.1.1"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.68_1620145738914_0.8844496571559568","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.69-renovate-non-major-3338dedb9030a8916c80f2e51b73cb1ea57b6c84":{"name":"@balena/jellyfish-plugin-base","version":"2.1.69-renovate-non-major-3338dedb9030a8916c80f2e51b73cb1ea57b6c84","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.1.69-renovate-non-major-3338dedb9030a8916c80f2e51b73cb1ea57b6c84","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"0490d6b8bf33b05497dd8908e60d08f6b952ce58","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.69-renovate-non-major-3338dedb9030a8916c80f2e51b73cb1ea57b6c84.tgz","fileCount":18,"integrity":"sha512-AE2jcK6b6kxcol61CjKYPhhs43MpGqYv71F6Y5QvJMOMRIqwHr/K0QTT4ZpGiBYtJlMf+kGWSOCxjh0t4K+2Gw==","signatures":[{"sig":"MEUCIDsU/QtcxUiF+s2R296tS6cbIaouDz8brxmh8jyF1lhgAiEA59c64wWRg1EoVj8kxDvos1nCYRZNw6CksaCzebkf/ZI=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":46760,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgkab4CRA9TVsSAnZWagAAPtoP/3IBKAtSJlxRTAYUCj4H\nD7CqDnzD+R1VEBipKD7O52EzwT+iXoEjwQGLNNYTNqZ2Z8KU42Do/N4ujayq\nzWzSwzU7CtapL1i45HE0GKT8tdTEGYDP7WlUhDam+Q7J/uCcs+J9A4r5dcEZ\nmi3KkhIojPZH5EKf4QqLvv4bm3YkixD/5MTxuo1ZvHELUu1ZZoEy5bPRU0BS\nJi+MnDVWm0+Vowy7Hm/bQ6Qw+IVO3VJNd7oxkewITULSb1JwJqQaCnpW0cn4\ntoyY2TLyjcHZFbQuaieI2NiHAbWgW0efdW7RaZRJOsDgefUggqE5lE1swdak\nI5x88lsaqmWqbXhDH8R3GbLIVGP4sFElxhGAynupR68nOCE/jISgdzjIwOXn\nC/Z6DXln84BIRPu7cmAdUgbqk12GGbvbePmXzJNV+Ayx5w23JWY2m9qmSEgz\n0ye2EbkGrItdMZqwxEbl5MzI0naCE52/9oZ5l/86uqItvy/X4eNV/7U/Mq8M\n9AuLeuxdKXMbJ5cpv6Gd6fcieOxvmRQZ2RfALQd7aBs0Wlg/25Q8PJQgerUf\nNfZfSfuMzt9UOSO1gib7joyrkxXWHzOM4EylZTbInL69uRIOBTzbOtV6N7m6\nvYCJDqf9pyjE84uNWPlQfJc/sRTz6HU2A9vmFCAbd0cqyLtz8azZ9j7UctUX\ne0V2\r\n=w1MY\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\n[![Publish Documentation](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml/badge.svg)](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml)\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"3338dedb9030a8916c80f2e51b73cb1ea57b6c84","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint --typescript lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --typescript --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --typescript --fix"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.5.106","@balena/jellyfish-logger":"^2.1.41"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^26.6.3","sinon":"^10.0.0","deplint":"^1.1.3","ts-jest":"^26.5.5","typedoc":"^0.20.36","depcheck":"^1.4.0","typescript":"^4.2.4","@types/jest":"^26.0.23","lint-staged":"^10.5.4","@balena/lint":"^5.4.2","@types/sinon":"^10.0.0","@types/semver":"^7.3.5","simple-git-hooks":"^2.4.1","catch-uncommitted":"^1.6.2","@balena/jellycheck":"^0.1.1"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.69-renovate-non-major-3338dedb9030a8916c80f2e51b73cb1ea57b6c84_1620158200378_0.27551144852317755","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.69":{"name":"@balena/jellyfish-plugin-base","version":"2.1.69","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.1.69","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"adee3a4e2d9c796febf2ca99aebef96713ab4e34","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.69.tgz","fileCount":18,"integrity":"sha512-9N0UFvsG3H8Y8TsmVS9K6fF2IOZmJv7huZUBgyFtpOZamNniLCWrAtffSVee8GIjEkCnH31qEPFR2E1Z1SdnFA==","signatures":[{"sig":"MEUCIAPbPjYrJfUKVRGJkcAxYwuGY2aQsnwLttpgwMLfhDndAiEAwNfLH2vvuI4yok+0ITcKNCL90UFVTYbicyOnIQdHcuM=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":46700,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgkafiCRA9TVsSAnZWagAALnIP/R/Lk+G5ng7Ki4KFIhvf\nIQ8kRK4vkUqFyTYNK0c2CglSHIs19wq6THCPBWOsuZcl+1UpzC+xtS1HEbBG\nrpFSzrBszO5FAUC0jwE441JYDfIhAxscmKmw5B5NxJ+j/QTq6JKl9p9ejYWH\nZcwbMPgeJnVE0ekYYTaT4s1Nh3CvEngYlM00m/+hoXXX10Fdm31AZJuzgnZe\n9ht8jBCuxsXGzPmCMoGL9YyDjDzoTGAb3JlgbunAsFOks83fjckqKvw2L+sl\nt7dfV2naKHATjJqunnJkQ2aijua7fbYfuYkb9DkfPiA1v7R0sLANzX77v+dE\nHcPKgst/8xgQIgPDK2C1rSZgJSz8iwNRQgGEdiKPEk+c3esxKawx1CV2anpk\nLaSfM15U2RiqP3ULRYtTU1AkqSSvjduHRwN5iJBCeMSJm6CCJRKspj9pdRKb\n53pCxXnc7IdeEpAdHqs5UJumlba7iPQ3WRk+YvkzN3AE0Tw/MgAjZn71NJ1g\npkkBnxLXr1MX6G6bIcJ0/CmKk/+AvznSfBYbDWx9ExVCyEQg+u6ROPpGqFg/\nHio/S15yuNckf082QFYPNfE30xENM/eXavpUUVIORrWS/7ckJtw9iIaz/I4x\nBk8XWnryEin3H7pozMjPm9gctiPlF48mLXTMDnjgBT2x8cyXD7/DX3Z1MbfI\nBG+W\r\n=Ne+J\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"78c17de7bf9a7304795c084702792e2e4aafa6e9","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint --typescript lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --typescript --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --typescript --fix"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.5.106","@balena/jellyfish-logger":"^2.1.41"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^26.6.3","sinon":"^10.0.0","deplint":"^1.1.3","ts-jest":"^26.5.5","typedoc":"^0.20.36","depcheck":"^1.4.0","typescript":"^4.2.4","@types/jest":"^26.0.23","lint-staged":"^10.5.4","@balena/lint":"^5.4.2","@types/sinon":"^10.0.0","@types/semver":"^7.3.5","simple-git-hooks":"^2.4.1","catch-uncommitted":"^1.6.2","@balena/jellycheck":"^0.1.1"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.69_1620158434505_0.665911899497456","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.70-renovate-non-major-709b8982ab63af8dee69658379a6b1c4b4419b53":{"name":"@balena/jellyfish-plugin-base","version":"2.1.70-renovate-non-major-709b8982ab63af8dee69658379a6b1c4b4419b53","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.1.70-renovate-non-major-709b8982ab63af8dee69658379a6b1c4b4419b53","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"29b0980ac1c2475747c5d5ce2cc1265f49baa240","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.70-renovate-non-major-709b8982ab63af8dee69658379a6b1c4b4419b53.tgz","fileCount":18,"integrity":"sha512-QW9tPZ0af29nCq4w2Vv+cQt0w6CPCW7ForCTeohFZ2TK7eMnj0ElPzcpH6GPSrVDsL1Wvio+zSsh+rKC/hVJpw==","signatures":[{"sig":"MEUCIQD8z6DUxVByQmFDcQg9XXtJCyaWKYWQhOSep53BcICVugIgXFeoytATXrEYOZhuia3FeEClft+xQljg2hb9IC1LY48=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":46863,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgkboBCRA9TVsSAnZWagAAdUwP/2Gt0Uk6j2AjpQQJMRLx\nAPUlZlXwx5PkyEZMxrh8WIbJmtDFdWmZvhJd2nRfyL9qJ9SJ3WWDHgBKXoAR\ndi/r/6tb5/dlfCC8bYM7EULKg9Q0I/W+tBAKbUzcmDW5ySxWPho8Vkq/eVdV\n2hV+hHrBNxUeBXVix6Cha0Ekuj6xb+Bk9MBVsLJIriCtEB2j3KuFFLM+Dt+2\nEYUy9ou/NSbYVefUsFMAHHcJZ7ZX/ZDIEsMjQFv3ry0QL6evOj/b6MzVNIKL\nU2C1VAoraLwQTEstQoh/25iIz0VLMOS6cjXnwK/nH7hYcx5Y9kQUfJoupWaT\n+++t8jBj/nLQQYFieZhMGZKBjK/H4pnfaiqZlCAKWRqJmNecUNduzdgEJK5t\nVTVq7a8ZA0eGWFgsKqpZYwZ7PUI+VLiG31P9omhBYlGjWPV9IZlmsmKR/y+w\nq6yyXkZOV53szsNed5MuF4KfPw/5rK/cctLWeUkPLYyQ9AEEgVvdhrWMXBPy\n9N62YwjEund15da/0zM9PoNIZX3ui/JYeODKWZ+EnNIbGViaVc6tI0HTRb3s\nUjIBD+aGWVX+rRj+oVxYWfxlAeTM6JGuk/Z39ia+ik6X7dQUH8R1yvz0Oyt7\nEgWVbPNxEwKijaSmaivUq0MpvqRQQzeGL97ZfcW1H8BSMnyMiZZVy/ngTGNK\nQ90f\r\n=ZVCT\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\n[![Publish Documentation](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml/badge.svg)](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml)\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"709b8982ab63af8dee69658379a6b1c4b4419b53","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint --typescript lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --typescript --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --typescript --fix"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.5.107","@balena/jellyfish-logger":"^2.1.41"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^26.6.3","sinon":"^10.0.0","deplint":"^1.1.3","ts-jest":"^26.5.5","typedoc":"^0.20.36","depcheck":"^1.4.0","typescript":"^4.2.4","@types/jest":"^26.0.23","lint-staged":"^10.5.4","@balena/lint":"^5.4.2","@types/sinon":"^10.0.0","@types/semver":"^7.3.5","simple-git-hooks":"^2.4.1","catch-uncommitted":"^1.6.2","@balena/jellycheck":"^0.1.1"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.70-renovate-non-major-709b8982ab63af8dee69658379a6b1c4b4419b53_1620163073392_0.5628693400019904","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.70":{"name":"@balena/jellyfish-plugin-base","version":"2.1.70","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.1.70","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"6b8ca1175131106b0ef67288ae8e2ce532c6bf72","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.70.tgz","fileCount":18,"integrity":"sha512-EneC0JgnwfiAvF0nW5cjvcAoWix9vqgCg9stHYQ3L2Wy9KPzWqFfVR0xudfmAY7YjDHIBr532HzF2ON+hyMZcw==","signatures":[{"sig":"MEQCIAjKzGqEpz0TuEeG94DGkeVmSqlZxOMfQ9Vcwb7xx8CrAiBKx5Nd9fRfEj/501bx9PPSGXh4QKCEFUaQlPiKZgt5PA==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":46803,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgkbrQCRA9TVsSAnZWagAApZoP/A+3d0mTfPWRZONzLAZ6\nYw2ncopHEjccofhWHdSD0bH7JV+pcLpRa+HBgOA+We2aVW5q8kn81bXy8NKP\nEuy0UHvBKRkNojBMbVAx1F1XZ3ei07plFrh2NwlEuc6Snsfzo5iXnBSBeJHV\nOJ/FBAS4JoaZNE3cFa4qjjLP9Q4MJ+OCk4X98Y2CR34QnGwTqE4eECClEGwj\n+ZhH1CYHtJMfSKvwKmHSnHJHGJk5yiKTIxZ8jmVkEobFr0LiQzqMMTvHg0cy\n47Rq9ePjEFytnZ/sMy3DnFBZ3W9qIViqyAz2tjo3QMVq0l2Vd0cI6ef56SEB\nKAUdrhWFXD5BKtGMaJyfBYdponPxZMeSztPwYRmKUOeuvBT2epNh0XBXLZ0d\nQV1HPuCj7t0UbTT5urcVVCQ2cRanbzlnDlVNzxNUo8dBWWGtMSO4hiWecxZx\nC1HOdo3e+qb6ZhygUuAuI+GwhzYcg8gmcaXozrrMd2U2zYxxtTWhgCU1/JP6\nwjHNgx4x2pezDQkV489ftBnp982uxQoJbMvEy7JfzfLCh8l61qM6zRozTDnE\ncwH03xLqQZh0Q5n7csXpFVW05gql3mRazyByl1J/tO/BkXliLAqJuepMOEiY\nkPs0HKqOwd820UJeXbDmClLBhyNPNWsRKRGzi8wB2+Z2u8XeXoM7cj/yi0oZ\nD3ak\r\n=/d1t\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"7759e1c4f33dded1ce83f507bac805952560caf0","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint --typescript lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --typescript --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --typescript --fix"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.5.107","@balena/jellyfish-logger":"^2.1.41"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^26.6.3","sinon":"^10.0.0","deplint":"^1.1.3","ts-jest":"^26.5.5","typedoc":"^0.20.36","depcheck":"^1.4.0","typescript":"^4.2.4","@types/jest":"^26.0.23","lint-staged":"^10.5.4","@balena/lint":"^5.4.2","@types/sinon":"^10.0.0","@types/semver":"^7.3.5","simple-git-hooks":"^2.4.1","catch-uncommitted":"^1.6.2","@balena/jellycheck":"^0.1.1"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.70_1620163280226_0.30253702596843746","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.71-renovate-non-major-84e3be0943e759c59c472a32787771a2d7041908":{"name":"@balena/jellyfish-plugin-base","version":"2.1.71-renovate-non-major-84e3be0943e759c59c472a32787771a2d7041908","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.1.71-renovate-non-major-84e3be0943e759c59c472a32787771a2d7041908","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"17b75662f6a9e7a9ac16d6601bd472a8bc6324ec","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.71-renovate-non-major-84e3be0943e759c59c472a32787771a2d7041908.tgz","fileCount":18,"integrity":"sha512-pyK0SVGb8baIRxyf7WtjjmMBTe45h57/BhOF7z/yMj2Lmh/OYCAr9Ti52C/hZke3+ELF23ZX7tEy3ccMYh65qQ==","signatures":[{"sig":"MEUCIQDLyyCVWB6ggtZ7G42pGA+oJGYHljdpxZEX6ubw/YCBLAIgBSzXqGwsPBiRsmo4dxO21t0G8NplFBmgG7mUYEWNMo4=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":46966,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgkdLCCRA9TVsSAnZWagAA+94QAIX187TVoplZlKifrRSp\nJiGiu7zLedz/8H3C0wooJLoONFGLsg3NKSvhj537/ug1a+vAH5MXuAwy6Gvy\n8/RIVExPoHdn3dzC3+FBpqGyRE3NlYOGC4PzOPIGzEjswUt+lRW6HxBmvkSE\nBz0ikbS5M5UqzOV80lu3JWyF+/E7FSxfin/q7fb0cjAhw4ciRaysaGTLH8Rq\nyH+j0APzquP7tX53InTlbzQSE0I4A/04kF353yVD0dp8aG/EYdwiMejD6tHm\n9X5/JYrOI44UtLItKF1LLV4e74pGSjLo8JCb7imZpg1iW8ocsSPAHju3AhT3\niJl6Gl06Z7OhWk0KGMbGi5BRmvtQFfkNbYSXTiCWVz5UAhl2PlhBtbN7FX5V\nKjKRfsOf/PzPGFe+zmx7KkOjCFQXN+82IV1DDPCK5jBoO05hLiqhkkRY4oTv\n3giKFQyvukYvdjHb2/j3YKrr08yk75yetM1RjX0UXsz+XNQZ1IoDg15Kw2fI\n9/wXWN9pbU83WDzfBTaaKkJfo7C40Wlgs1VPKGLPZIp+Ni8mZ5KuWX+hFnna\npzekv5n2IzdL8JtEr2ph0qt5WO43VQB63Ol2OWMHi6c3Kx3OMPrjBeWuQn9c\n3/A6DGcn5CZVGQ280D9aK4OWDyS9b7FFObW+kpZdjgekhzkEqZJ4AV9NxqZt\n5kLt\r\n=TDEs\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\n[![Publish Documentation](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml/badge.svg)](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml)\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"84e3be0943e759c59c472a32787771a2d7041908","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint --typescript lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --typescript --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --typescript --fix"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.5.109","@balena/jellyfish-logger":"^2.1.41"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^26.6.3","sinon":"^10.0.0","deplint":"^1.1.3","ts-jest":"^26.5.5","typedoc":"^0.20.36","depcheck":"^1.4.0","typescript":"^4.2.4","@types/jest":"^26.0.23","lint-staged":"^10.5.4","@balena/lint":"^5.4.2","@types/sinon":"^10.0.0","@types/semver":"^7.3.5","simple-git-hooks":"^2.4.1","catch-uncommitted":"^1.6.2","@balena/jellycheck":"^0.1.1"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.71-renovate-non-major-84e3be0943e759c59c472a32787771a2d7041908_1620169409882_0.14173781881588932","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.71":{"name":"@balena/jellyfish-plugin-base","version":"2.1.71","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.1.71","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"c9955134def9f5b37126bb3b8d18ddf173256e19","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.71.tgz","fileCount":18,"integrity":"sha512-nf3ENYcjQr+oqq3mhS4aXL92HkkqaHPFDq9BJyxv2ieW78GT2Rj4mnpJAWLJ9g1FVjX6ftlqDGjq861SNT6VmQ==","signatures":[{"sig":"MEQCIAae2ga+4INxSjcBwyWqQJNync1SAt8fDYggIdoMYP5+AiAWzDpIc7C9I/2q8mJ5HxPufI8qA6nq/34da6DiTjWNaQ==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":46906,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgkdOaCRA9TVsSAnZWagAAeKkQAIuwW3l//vU35jy/cVUq\n8bdXiwAMvkO3gChqftsmfmiK+eAsQYF7vjQ4iL1yMgVuTAAz5dI4+TUBFycJ\nxVHzWSywNFFlSGHLsib2imZHwKyVwTtNp1RMUGtMv02FXS/rZW2ZmPRI8b9J\npWnSU6NuDw41FuKLkNFjzdz1aYMByia9DthcHfMTcjxEOU2bgCOAIIbWwGVp\n0F8moUVJRRbFUCUpgn7loKgMhmRkVS5FFdI2Mw6WXEdDke/y55F324nI5T49\nbDGVfT5TeHejAEdyw/n2lNutbzt65NRkpmA50emlNkTEHpPGlipcAtcYtxm9\nqQMfeqPIAQPczHnByAR+I2npWatRfLvoSMhE7gDErEwKuP7/WDcOou42iy7G\nezrOdBnp9nZ9RV/wUKfu6E6D8ZaU1TlS+MeHNfXkJ5iPnEFcXT2BkrW0DnfD\nWVqT2wVgP0f4cyRmRGF6MrB3QuvLtNVCVyzu/BXuDRzCT/0Keya1gSGT6jXn\nGfg+qtOx9LZwzczEwyJ7Aft++tqGxRHUbaIwCUEgEb3nenm/XzmLvPMpRUrV\nxfEDPDiyt9WghhdWQlqrqGXav9DR3EwGMCwcEm0+e9o1h9jJDDjF/yG3XQoQ\n72xRd68N1eR3Mveg9vut2tkHbDd5SNg6QsKZWTGAKqVrBaIeCPQd3+kbcfqz\nmm6w\r\n=zkbG\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"eb85d14378b136ed3ba42e866ad102ac30acc15a","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint --typescript lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --typescript --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --typescript --fix"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.5.109","@balena/jellyfish-logger":"^2.1.41"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^26.6.3","sinon":"^10.0.0","deplint":"^1.1.3","ts-jest":"^26.5.5","typedoc":"^0.20.36","depcheck":"^1.4.0","typescript":"^4.2.4","@types/jest":"^26.0.23","lint-staged":"^10.5.4","@balena/lint":"^5.4.2","@types/sinon":"^10.0.0","@types/semver":"^7.3.5","simple-git-hooks":"^2.4.1","catch-uncommitted":"^1.6.2","@balena/jellycheck":"^0.1.1"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.71_1620169625441_0.26159088148347576","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.72-looser-request-type-2e1a94548804516c3d0e18dbb2f6be92c6d959da":{"name":"@balena/jellyfish-plugin-base","version":"2.1.72-looser-request-type-2e1a94548804516c3d0e18dbb2f6be92c6d959da","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.1.72-looser-request-type-2e1a94548804516c3d0e18dbb2f6be92c6d959da","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"f32abca493850b4fcbbb2c1f3562ff26c0c492e8","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.72-looser-request-type-2e1a94548804516c3d0e18dbb2f6be92c6d959da.tgz","fileCount":18,"integrity":"sha512-sruxpFgvslVZp65JfNwKELnZEtrY8CZEJ790//yUQg+KeoVrIb/qb/1wWTivPZ//+YZ4olzcuki1nQTy9X5xjg==","signatures":[{"sig":"MEYCIQCT8uDtGfCQHYllNI++k2BeC3HGiHHHW76kLS9vG8MAmQIhANYsMuqq+2UmtGbexB7fWMH7cQMGEo58NZh72XLPc1x+","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":47054,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgkktACRA9TVsSAnZWagAAY20P/21s1ykTfKeeO8nAfFYl\nM6NW3SWrbAtzXTrKrMiMlwWSL3SfJ3DAbhEWqHEC61cCGrxJtnshUbx0fT5/\nmxXN1hH6n7YAyVevcCf8Py3yFV0ja5dpPlyi9Qj298UV7SxrLBrYbGfECnNV\n0KijzLCwDqPrwv5q6Sq9wTQ2XIOWgLrlz6igProaVrY+JSG5XVDd/gG6u9Ki\ni1SH/IKSrk3l2WgbVTwqcoITXRSsVicncinb0Z9ahsZTz8pz2zxbutzv0Ihe\nxOe6uhYeipOtm37fMJ0zf2EMnUVsfgz+LpaCrwvM76pAXJbFfgTdLpSg5QFf\nyEQWul2SozMn/dbkCwKt9/0gwQuoGQKx/D0acuTC4rirc10y6dwhpWkh00IC\n+LI+5EugMzUCR5BqqmTFrDtl/ySvRPqaubnIS6IIgzY8TMsSk+4rGo7f2jMz\n1LaUg+N2+1ldBFL7wRNb44C8ncBmF5yRFBVdl6nQWi79tmDIriTOW25WIFTH\n5FyNgV0osrEw6u5rz21gBvMIjGvdgZgS0boxnz7RwgK8DXNxvARg9ud6wnhK\n2AaSpGDNuHzO+Jy1Sjw99pksKukwLcNE1jZOxkOe3E6ErpLC2WKkRqaRN1AR\nSiXMyJZ9dYrts1Gjre31oI5wmL4TtKIPlC+tZ7fxpM+SMgd+RbDYH+wKrpn2\ny99D\r\n=1foy\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\n[![Publish Documentation](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml/badge.svg)](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml)\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"2e1a94548804516c3d0e18dbb2f6be92c6d959da","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint --typescript lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --typescript --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --typescript --fix"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.5.109","@balena/jellyfish-logger":"^2.1.41"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^26.6.3","sinon":"^10.0.0","deplint":"^1.1.3","ts-jest":"^26.5.5","typedoc":"^0.20.36","depcheck":"^1.4.0","typescript":"^4.2.4","@types/jest":"^26.0.23","lint-staged":"^10.5.4","@balena/lint":"^5.4.2","@types/sinon":"^10.0.0","@types/semver":"^7.3.5","simple-git-hooks":"^2.4.1","catch-uncommitted":"^1.6.2","@balena/jellycheck":"^0.1.1"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.72-looser-request-type-2e1a94548804516c3d0e18dbb2f6be92c6d959da_1620200256469_0.1790552137577286","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.72":{"name":"@balena/jellyfish-plugin-base","version":"2.1.72","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.1.72","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"a1057c299dd0705f1550218cbc521b3c61e4f14c","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.72.tgz","fileCount":18,"integrity":"sha512-iGbhrJpYen7D7s2G3nwtQAZZE4Ex5/25ONbXv0Ij78gBRnkbKBhojskgOGB5jDPSdtL80xgXlUppvvhboS3PGw==","signatures":[{"sig":"MEUCIQCLJ7bXk35p5wIC5Tq0uHpY7n1zz5mxYQHzg83+GpuTJwIgY1aEXfx5trP8bD4ZH3qa7D9HqKPJFDM02gPNG0flwsc=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":46993,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgkldJCRA9TVsSAnZWagAAjTcP/jwTXpEWRhfjRDec+L2o\nDgYWpla5E3c5+Qu0jYAxqDwrEHsQjz+dghn8DCa0cKjRGKGdxhaUGXPYsxPs\nzkZ+7c0REP5urdT6wEQO4GOr9WaizUM2Jlda/XVw7iHKa9xtgV8kDRMdfZ/d\noqlG260dXCtDQlixqwQDLT98ExVxytBCYyuKT8yBY21eK7YC7hyY+eQjCvId\nilQjFOt9WQ+M9Hd4RxqqIqnrvbETFukCFtWtIRieUZ+U8CzHQO+mEtoY/Xh2\nEClfDx7VU1rNAqYW47852kZyjxzFjV07rvzAfJn8a28DMPKXZY3/akuednDI\nobk20oDR6YpD15p4dpgXdSMQYutUrYJeC/HnuaAO9TaymdmbnHsf1H+EIXhd\nVBlb+HzwrIf4m5kERtMSE3kaYZZB6v8/eVpbZGHwOClPh/FIwhSWfvPzL4n/\ng3ZXE2L8299Z6JfDD1Fqbo0+HP9VL1JYe9lsKOQf5YLCBhZRd+/FMUmjWaxO\nyZm6hHrRt8BPgFqFVl9XJsCNmjxZ+gXddEZyFwX4/LaB7oFjgYs6e6vTUSh6\nS9pxpYZQOaL3jFJ2a/OO2rV54+z1HJ0m8ngOHYyUDGuC4ECE8/tKWlWNFt9O\nzEnPaTLfTTZBvhRYg3iqyk2EmNYIljvUldwvYAqAwZinBJl2adjvirwQqewn\n8R0w\r\n=yeyN\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"4423fa638ad95a2766724546d122230f962cdeb5","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint --typescript lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --typescript --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --typescript --fix"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.5.109","@balena/jellyfish-logger":"^2.1.41"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^26.6.3","sinon":"^10.0.0","deplint":"^1.1.3","ts-jest":"^26.5.5","typedoc":"^0.20.36","depcheck":"^1.4.0","typescript":"^4.2.4","@types/jest":"^26.0.23","lint-staged":"^10.5.4","@balena/lint":"^5.4.2","@types/sinon":"^10.0.0","@types/semver":"^7.3.5","simple-git-hooks":"^2.4.1","catch-uncommitted":"^1.6.2","@balena/jellycheck":"^0.1.1"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.72_1620203337525_0.02189089481155504","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.73-renovate-non-major-5c8bd95906ed4999014bf12756d819134c32d950":{"name":"@balena/jellyfish-plugin-base","version":"2.1.73-renovate-non-major-5c8bd95906ed4999014bf12756d819134c32d950","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.1.73-renovate-non-major-5c8bd95906ed4999014bf12756d819134c32d950","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"b167bca5a9edcc31113e8c2aff4ccc2cdaaa73a1","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.73-renovate-non-major-5c8bd95906ed4999014bf12756d819134c32d950.tgz","fileCount":18,"integrity":"sha512-/oHuRAp+I7myvBa0VHEyA3C9grZ4YbMy4a6ISXUGI9x0kOu+gGJjPnZE8Pe2WK8BXZskRwgU6GDJyNeSapt9aQ==","signatures":[{"sig":"MEUCIDCpu0Qn6KL+5x/Oyk6fmuOMULGeZrSS4qMEhamxkMAYAiEA4c+YxTWYhKOddzdZVm7IcrdHipM+szoeWqNTCEOhlY8=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":47156,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgklipCRA9TVsSAnZWagAAB60P+QGZJqYo+cQzPYLxwbyS\nJik7eTaO/6uOJBZm48op6J672rVuTeRlk9jJkSiBW8Nr/ub9qjwnNdyXIXdW\nqrKEacfsSqt/KuqH63/HnybQ8ARSKHXXsdFiNfZeoX31liH6o9uxOQmuUgdh\nHe1vPBTQzVqBQRp1qwdUcSlMesGbi1YR61c+ssVim8fqOpJN8ylTbXT7QMcQ\nXzNp//3m59AWXWevD/VnFYoohWIp/n0+vpZZXIcoJcxGANdlhXX0Bcw98IqT\ncqGHDhROLQIqWfnPRa8DS2IGDFw2cz7Nbadn2aGk3nWb/EZaZez+/c7U3dhs\nBP5W9eWXs+PFg/aBr7ZsAbW111iK2LJIwC4ZzRlr1Vqjvd/lX8loJ2JVxj0/\nbXHQIhbulrtHCvBgmRf5/VY88Hwc0BvjDi0SisxyWs1FvjEz9g/fpenpQQHo\nGkFqE088nKCeHy0d9k9wuuwpaHshGkz/eJoa8eKkOKcqEo5v8KJOTsPK0eo2\nRSCwuL+jZoaADjudH+p7zcLFjzjjCXYawEjzxAqwfqIzGFRm1BWyZITqHXTj\nGQlvNyamZ59eo993uDUaty/I+SNvvzIcKI1gNQ5BjC9w1+S5s93zyvc9OeBl\nS65zdHti8YCig0ICL2rlEkMovGS4bmRLQAFe91+kowJUS9Ly1q4cqwT4zA8N\n0sZk\r\n=ZRIK\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\n[![Publish Documentation](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml/badge.svg)](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml)\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"5c8bd95906ed4999014bf12756d819134c32d950","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint --typescript lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --typescript --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --typescript --fix"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.5.110","@balena/jellyfish-logger":"^2.1.41"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^26.6.3","sinon":"^10.0.0","deplint":"^1.1.3","ts-jest":"^26.5.5","typedoc":"^0.20.36","depcheck":"^1.4.0","typescript":"^4.2.4","@types/jest":"^26.0.23","lint-staged":"^10.5.4","@balena/lint":"^5.4.2","@types/sinon":"^10.0.0","@types/semver":"^7.3.5","simple-git-hooks":"^2.4.1","catch-uncommitted":"^1.6.2","@balena/jellycheck":"^0.1.1"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.73-renovate-non-major-5c8bd95906ed4999014bf12756d819134c32d950_1620203688854_0.5646407740798791","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.73":{"name":"@balena/jellyfish-plugin-base","version":"2.1.73","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.1.73","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"ce81929ee40e860b7ebb4a61094c35a989a2e54e","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.73.tgz","fileCount":18,"integrity":"sha512-GLRrOn+1N5Byb3S6TIRIeO3EyPoSJ/qz6S5j0lg4RGtA4cD4fJ+TnVT3ek0jKBBpRzPG2BYLI00kzc+ATd7bsQ==","signatures":[{"sig":"MEUCIDH3e5y8GjLfa0mGzxJjMjNURVENFMsuzZpt6bHYT4toAiEApWeUQ7/dEtqUEubjcVAExcnTZvoC2NbGhtM+K0HDAec=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":47096,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgklmbCRA9TVsSAnZWagAA1G4P+gM9C+yuUUKJy7Vr8816\nM3vQokNh7GNnSXj1lYVZc6kI5ByzPt6K3TJZPEWAsPU/XwvAdjMucYmj/nUw\nvVWriau6D/3Aiku6wut9y27WJGuDS9xLpajxfqmPuwR46HfnemjR/HcX7u2M\nxiv1JFaf46LX7WjQhTyiaJy2dSrOpAF3rd1PDCjxryuksFetu28Z/urA6S4i\narKysGBrYp8dp1B0IG9R2q9Sifqcmp5/Q5tUdP00nwWwUYzI0Ll9ss/jl40e\nQxSk+7Vy+YPd2PxA4ZiClsWCKnweJpXcRhKwfdC7X2oDedq/1sSjTHaLKxGk\n3MHfnDVOUpYIbzx67fYfvkB/6Mejl5+J9cZKgfD/F2QrLhkMC3wr9vlBOIzE\nRrk8eQSfmRTjuJOmPYEP43qoAeF/e5FFpgo1NMfPMIkQt4NWk9WbEbO0USQj\nDw1CLwWYQnpp5Hi58KTCg++WGzElKaC0YDUNVWsN7+LZNf27aGRMiKLj9b5j\ntsCvsJ9AwkTXIO+0GFxjAHm6+c9dvA1cOY/Ozn835Q6NB90B16GXsGdIuEwc\naEBY5hH+6lfY0QHJhl3j+pqyYMyMRx9rIg4K/7pnBhJVJmtYAuJmFhKnvMNy\nl3I0KmOo7cq9LZUZeZYyvTx7LZkOF5ZHZnj/KSDdf0y5QPFIvWvTfqnbpK3M\nSl3R\r\n=RMWg\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"77a3fe6659be1788ef7f597567a5803cd0815d5c","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint --typescript lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --typescript --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --typescript --fix"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.5.110","@balena/jellyfish-logger":"^2.1.41"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^26.6.3","sinon":"^10.0.0","deplint":"^1.1.3","ts-jest":"^26.5.5","typedoc":"^0.20.36","depcheck":"^1.4.0","typescript":"^4.2.4","@types/jest":"^26.0.23","lint-staged":"^10.5.4","@balena/lint":"^5.4.2","@types/sinon":"^10.0.0","@types/semver":"^7.3.5","simple-git-hooks":"^2.4.1","catch-uncommitted":"^1.6.2","@balena/jellycheck":"^0.1.1"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.73_1620203931103_0.9182147217955139","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.74-renovate-non-major-c67c7fdaad6b8a931cd460f6ec960d46bdfa45f7":{"name":"@balena/jellyfish-plugin-base","version":"2.1.74-renovate-non-major-c67c7fdaad6b8a931cd460f6ec960d46bdfa45f7","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.1.74-renovate-non-major-c67c7fdaad6b8a931cd460f6ec960d46bdfa45f7","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"08f33d977520216df82c258633b99fb191d69649","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.74-renovate-non-major-c67c7fdaad6b8a931cd460f6ec960d46bdfa45f7.tgz","fileCount":18,"integrity":"sha512-ALhaKETET361tVcICkd/UZB0AIPp8WrQaTCDJLTQK4QIuaWUPVloYOUHt19ZyL3W7/dJSJH2oK2Xh+qR5R0knQ==","signatures":[{"sig":"MEQCIGlI+8OMgIp/pMHrSzCBj7CJCZmTtC1oCcwg5OlTwJxdAiA1hXAKjx98PFhSl/tHZLGLdN9SYXqwD9JA+UEg1syQbg==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":47242,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgkqzhCRA9TVsSAnZWagAAvXoQAIw38CXNrI1vs7tZzf9A\nSFK+8YPAItQfuOM5NvxbiPKZkUFO8w6eJsSCC1h3bJ0PxA2TPqwMTD7Lr3S1\nV8OELH/ZSpYzih/+wf0rGYrPk4AVIgFUpIJRm892SMzouyka8IZQZEM1fbQE\n0kuRUJF5yz+udhlvfw6PycfLuZ161NcN/siIRrkILPqgTrXWspfCReP/rFjZ\nzsNc76jr0f9+8OwN/0JHvQ1yFmEPOnYUkC6ScQoNtcKUJKXIsj5fH7KVpOtH\nI47OJvwh9YUBNz/80BKCrWAKUPCJvjYEkjFHUQy7hTlbRW9gs5gG/KfbqJra\nqZ1PpUfC1KKnoookzGC2cCtMhrz4rXPsplIX657/Ro8flpm63h9WG+JGOoC1\niVqa6HitNcQ5XzQsEyYtpke/YxpyWFQX9YafLW1rO1sTmFgkfNGzSEZnrrOq\nKQDBPj1LuIz+Dq46ld+Bjorhf9/pyvPaNnDsnDOse3Eb+rE1EaCtRCxh48bj\niUmaGSZOFAji3EGkWboOkS/13CJXuZdxIjrz1TkpfiRNnFecSTQ/OW3r63eN\n4z3SgpmjWYHyICygGRDOznFbtuvgevCsKKr2wwAtQzYuR13LsWR8lFoRGIMo\nxY4dop/pxcqlL8LHGmSMjOTGum2D7h3BduIfQYy9lSoUsI0cEN6CZuBtBzYX\nPP12\r\n=OWay\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\n[![Publish Documentation](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml/badge.svg)](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml)\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"c67c7fdaad6b8a931cd460f6ec960d46bdfa45f7","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint --typescript lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --typescript --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --typescript --fix"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.5.110","@balena/jellyfish-logger":"^2.1.41"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^26.6.3","sinon":"^10.0.0","deplint":"^1.1.3","ts-jest":"^26.5.6","typedoc":"^0.20.36","depcheck":"^1.4.0","typescript":"^4.2.4","@types/jest":"^26.0.23","lint-staged":"^10.5.4","@balena/lint":"^5.4.2","@types/sinon":"^10.0.0","@types/semver":"^7.3.5","simple-git-hooks":"^2.4.1","catch-uncommitted":"^1.6.2","@balena/jellycheck":"^0.1.1"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.74-renovate-non-major-c67c7fdaad6b8a931cd460f6ec960d46bdfa45f7_1620225249226_0.3726952909529433","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.74":{"name":"@balena/jellyfish-plugin-base","version":"2.1.74","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.1.74","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"f094eb5ea1f2a86f8a080ab20fa3ab39f4265dbb","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.74.tgz","fileCount":18,"integrity":"sha512-qZuBi9GCcncqB42uCxDdLeFsM3bzN+qZV5r6OJeOfeAF52cAgxvB14ZmXepXKWVU/lQP7pUEbm+SUNXueCnyyQ==","signatures":[{"sig":"MEQCIBphJmaqrnn7F3Mk7lDzcC5rofFXKQlbWggMctTk5bEeAiAU/Efj4zA09PYPCXlVjaK7/vFkLWqX+A3ixdqVoKDbyA==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":47182,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgkq3BCRA9TVsSAnZWagAAKtMP/2e8kP+QTe6eVu5TSB+G\nXLhByN6OpqUjrGZsvKG4bfFTZu06zUk+FZoE38NRQcAYUgbCl9e1zUKDVdb4\n3yR2IlwUvYt8rSRCGpkPKGhkRHTipnn4TfUSvhuunIIjrK4krfpQSkxXWH/6\nKSpnq2LvqZG0jXjj1bqE0/bfa2dfOdGnkRQCj7g64ygDF7gbmWmcjFOdINpz\nU7pF6bArTrjgVB1e/1rm15cTsUur60dUZv/KYsAJf8lF/9dNDwECWb40DDfT\nqyMHPtTJclmPIO6eedh5/KX8AEdR0h3NqxCejcYaJWkVEPkvDbJBKifmOgNn\nIlleb9nv1JIbuOwH1gKpfyAmrU07lmfh8jSvMwZnnok8SPTmA6lY9gvGabNL\nnvv3h0yhZCDRZs4g0UzAEXH4vjm5uC1nNI5cbEljdbBVn4VN/wa+SegfHZ1m\nFPMWEmesOfxJ8zuTJqDwe75DCauU8CbJw3+Fquw3tj2bMQzumarc/LybKLwN\ngsKX2Q3hibnfvXeAcJOapAwIPfI/eH3QejyQN8ZZeYiJXJVIJP8ZWM2eZmt+\nCUs2MerMFS+PDNwRJWUhfeg5wogHqXGvf7vrNbHkhZpXg6rjC0qp1E9N5i1M\nCn8KIKVs9wl8h20cTnkivJpmsOrs3ktj9rDWohr+lbUbQ5spmIOvbiDL41Rt\nhSFJ\r\n=WtAx\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"8fc06c89898ad5ed8f618b0e228dd5cd7b523959","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint --typescript lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --typescript --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --typescript --fix"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.5.110","@balena/jellyfish-logger":"^2.1.41"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^26.6.3","sinon":"^10.0.0","deplint":"^1.1.3","ts-jest":"^26.5.6","typedoc":"^0.20.36","depcheck":"^1.4.0","typescript":"^4.2.4","@types/jest":"^26.0.23","lint-staged":"^10.5.4","@balena/lint":"^5.4.2","@types/sinon":"^10.0.0","@types/semver":"^7.3.5","simple-git-hooks":"^2.4.1","catch-uncommitted":"^1.6.2","@balena/jellycheck":"^0.1.1"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.74_1620225473087_0.21288084702034515","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.75-renovate-non-major-95704de993e77760db8d20d4070f5458673f0392":{"name":"@balena/jellyfish-plugin-base","version":"2.1.75-renovate-non-major-95704de993e77760db8d20d4070f5458673f0392","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.1.75-renovate-non-major-95704de993e77760db8d20d4070f5458673f0392","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"69d0554e8e25bb897b0e568d354dc373ced99621","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.75-renovate-non-major-95704de993e77760db8d20d4070f5458673f0392.tgz","fileCount":18,"integrity":"sha512-JD4ZQyDJNUVe3sRDnw2COg5u8+gcCptGxPUkR+gR9hqoPcD/snTMcBx3bSsl3Dfjr8SpyC6YvsndCHhv7idtcA==","signatures":[{"sig":"MEYCIQCkKyUDrYBQ0xahA5KU0zyfAjLZZ+9vqDX9YELhy6U52gIhAKxTMNJlRGKcQy6SeWvcn8x62I0qeyd7ysnH6fw6H8fS","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":47308,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgkr53CRA9TVsSAnZWagAAHX8P/joUYz7ZwG8ha9yB/pQt\n8JsOztdQQ+vkGvIGjuz1Tyc54yjJ7Sajl2YPL3lfZA2varvXssEjStS8FPvv\nMEs2/ZPGqTROLbkhLeXAQyzBeu57pQGSWNqYNPIH5wkkX0pxbIUNX/RrGAIu\nPGKdfS3TJTjPPrNQFocb7X4/6ZTMNa+jcIGSldSgQJgQvG/fIKazwtt1U9gO\nCAzh1bAC6ymrlJsM6sAi6gOMQEbOMf03FP1nOiKbx5LBwwfFNFzv21nl1yG3\nFvHV+EkJaFijQjKF8Y9h+oPSMBH2v4xNDX6GVdIYBqhsYIB+U06Is0nfkLYP\nLCbkiZuiE72lyv5Gt/wO8E802IwQDCo+SRkLitLyq4Uge4+aghvIKsA8uIBa\nK5qJS8Uhi+kEHaoSAr4ZZGGrAAgC74UZMd4F9Uzx/jhn6hXWwrYOAEqE1JbW\nA92BSTa8FTyDb0Al2i7b7BCsfCNL565h0aXX5hqq7oU3CKoIhYDnoXsky5O0\n6hlJF6H9dxBINvSXrPpY9ePevGoWGZ+JRMrLnhn9SDBF5Y8DmorqBi+4EPyw\nFmlxHMro2gXNx45MIgfERyPaVm9rp+fEXxM4LE5HMT2Z8g92XT00CUe5Q0jR\n2QR68ukca+SPpTMUeIjs+MpB7jIDZ3gUWQmpNSZ0kN7yRG4T3z+13Z2+26PO\nlW8t\r\n=1Bib\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\n[![Publish Documentation](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml/badge.svg)](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml)\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"95704de993e77760db8d20d4070f5458673f0392","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint --typescript lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --typescript --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --typescript --fix"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.5.111","@balena/jellyfish-logger":"^2.1.42"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^26.6.3","sinon":"^10.0.0","deplint":"^1.1.3","ts-jest":"^26.5.6","typedoc":"^0.20.36","depcheck":"^1.4.0","typescript":"^4.2.4","@types/jest":"^26.0.23","lint-staged":"^10.5.4","@balena/lint":"^5.4.2","@types/sinon":"^10.0.0","@types/semver":"^7.3.5","simple-git-hooks":"^2.4.1","catch-uncommitted":"^1.6.2","@balena/jellycheck":"^0.1.1"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.75-renovate-non-major-95704de993e77760db8d20d4070f5458673f0392_1620229751035_0.3291029407371848","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.75":{"name":"@balena/jellyfish-plugin-base","version":"2.1.75","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.1.75","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"235d95ffaa21b47e84cc550ba14cd14b530afd92","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.75.tgz","fileCount":18,"integrity":"sha512-jpKIzzv3VJmFLz4gehsQ+hXPW1y4njXocAit1rraJLYwlbdvLPk55rFzfChDmQ2zoblJ4HxKqrKxC0/XENF3cg==","signatures":[{"sig":"MEQCIEuVUTk/njEb7Igzv6AOmZdcECUGGIPOeLpqKlgOmim7AiA4C3BPUh44h6qlA+BhnLfW7eTHEEnq8x+LyFAmF58uyw==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":47248,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgkr9VCRA9TVsSAnZWagAADQYQAJC6ZwY1S9c2ZLYKlW+n\nfyDLQprMBpv8FsvBehOjTOedQD4NreubM9Q3DW9/8qQhru6pEW0OAWhV4xn2\nPqZ4wdC1odQ7M5ruz3y6rbz9gy88zKlhi2Ela5oUwg+W914a02LKLie3uSyT\nvpYrA1sAzXO9XZLueAjSLNHmVj1mJ7Fa8J2ys+46K7aY83HuQvQVdvwt3DW0\ng63pCJ+Nul15ttEwwZ7dZxItCGN2gc45yztt3UBw9rJgoqSOqnJklGr6XD0E\nfmC1Q8WMdZTGRiMi9JNqQGmEe8m7N2Rp7dHqNQBCbX8ni63Z5SDaqbjjpeTm\nfbp5DskFBoeMXTs47brl8MBQ8wfgsjW1I0MZNAtkFax6bdV6P0JDFRRsOEAG\nWgT1JS0XPLnczjlKos9znJ6KWAkSpg5RhsEV/B4LwZfBGvI0EYxNOKGgLu08\nl6cLzbc0njLnsVaJbu7ldXpoSCGaVGQ4cg5JUS4/odYDREXnP8CDaer4scyt\nRhmY7EvTvAnVYTP1K1a8E1MO3C/bF/FFfu32ObeSDnWGp6TpEkbGl1Rc+7km\nI+q92HPX43tlHQZV9mgRTGSTF3UdR0WwuTiaokjNtkfWquDzp6uMUw5zXCkt\nMGuouGxuMPUZYDQyKGkj87vBDLQFXi/dPqNlwkD1tykg+XSw/AcKKJpE5Olm\nDzIQ\r\n=q0Ny\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"30a0aacb9c7dfedf715988f25bcba829fda9cd1e","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint --typescript lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --typescript --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --typescript --fix"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.5.111","@balena/jellyfish-logger":"^2.1.42"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^26.6.3","sinon":"^10.0.0","deplint":"^1.1.3","ts-jest":"^26.5.6","typedoc":"^0.20.36","depcheck":"^1.4.0","typescript":"^4.2.4","@types/jest":"^26.0.23","lint-staged":"^10.5.4","@balena/lint":"^5.4.2","@types/sinon":"^10.0.0","@types/semver":"^7.3.5","simple-git-hooks":"^2.4.1","catch-uncommitted":"^1.6.2","@balena/jellycheck":"^0.1.1"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.75_1620229972979_0.43195716664168615","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.76-renovate-non-major-09b318344daef0d49c05d91791ad1f39873ab544":{"name":"@balena/jellyfish-plugin-base","version":"2.1.76-renovate-non-major-09b318344daef0d49c05d91791ad1f39873ab544","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.1.76-renovate-non-major-09b318344daef0d49c05d91791ad1f39873ab544","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"cdb850139ccfd6774771c525b479e398e6386641","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.76-renovate-non-major-09b318344daef0d49c05d91791ad1f39873ab544.tgz","fileCount":18,"integrity":"sha512-WTt7uAlt1ux41UeHXPkNh0pSldvOowRdSFIGiLRz9rxdeG0HYpk6Y6PGSz9+bpHWohSIE+9cOrDhJQLq14st0g==","signatures":[{"sig":"MEUCIH3NqTF0r5CztWUKPs+44ZpjADYRe+AWFlmCrqX6aWEUAiEAqUH9zfLIwTCeaiaRNuBPIkmc9IqmYy2JiSEnDHhzBcE=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":47411,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgktTqCRA9TVsSAnZWagAAc1IQAJzKDa9tBnNDMyFRXHOn\nixmIxcyYJs4UGtHUh3FuyKJ2La23Ttf/LVtAIlzb2XBn7YUvTQqiCTu97VEJ\nDP0w/tMTx39ObH9qEIT5xa8jQRBZZfLVxVpWzFuB5ONMdkt53xIObYSKpqMo\nYFGLejShDdrrf2ec7BRIBZw5dTMqj90uGazDCWe5v+Br4G15aD/BXus4NNlJ\nAQ0qdIC+rfrerbqrAwm+MU81CYqkJ9p/Lh6X6+C9POwK1nZp7b+FZdOzW+64\nolBZKlklG/d84nFiEO9Haq998sZc2f1Ue9x7ZFWcuDpwIiBSNeqGlcIJxiEL\nHb7aezDefu8gHiEK5w5xbR5TM6O0PZ4tCOdeMOM5f+uXezhXGMk6Pm3FCbKx\nH6wuM0H5lpqPomDbpaIctmc2IyVylw4EihqvJd+nVXGXdV/bneAGvj5nhUxe\n9IQkaF7UMvlq+oejk8GfkEmvobGlhCAATHtx8Iw/lWWr7Qzof9Tph+SMLHVo\nNEBCSoDSRPltKJwV6i5tEwwBwsAT27a2hqbR5vqoP7FCzRWpLMIsVfNlnya3\nJMcERT8apg3gp8q5KjmlvvpTg9Geq5T/AmJIw61CbjcLAjEFGcLYtc8y8cS8\nScTnkUtGzyAH7ng06d3AvtaXGZHolni1Bwa1GI2tYYfvEjaecopzk/rxy9uX\nJ1ir\r\n=bjjQ\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\n[![Publish Documentation](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml/badge.svg)](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml)\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"09b318344daef0d49c05d91791ad1f39873ab544","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint --typescript lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --typescript --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --typescript --fix"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.5.111","@balena/jellyfish-logger":"^2.1.43"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^26.6.3","sinon":"^10.0.0","deplint":"^1.1.3","ts-jest":"^26.5.6","typedoc":"^0.20.36","depcheck":"^1.4.0","typescript":"^4.2.4","@types/jest":"^26.0.23","lint-staged":"^10.5.4","@balena/lint":"^5.4.2","@types/sinon":"^10.0.0","@types/semver":"^7.3.5","simple-git-hooks":"^2.4.1","catch-uncommitted":"^1.6.2","@balena/jellycheck":"^0.1.1"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.76-renovate-non-major-09b318344daef0d49c05d91791ad1f39873ab544_1620235498377_0.6184727376045673","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.76":{"name":"@balena/jellyfish-plugin-base","version":"2.1.76","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.1.76","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"1137415c522f832c508e8ab37e47e3bc3cac3a6a","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.76.tgz","fileCount":18,"integrity":"sha512-cH0X+GgEn7KpTz7KGjYE7e4RfsL5DqDKsATQF94weaeHdgnV4nAHt15SKjf+UfI3Ct0/33J8DL4PkPcPfYdUWQ==","signatures":[{"sig":"MEQCIH4WZM5ZevkBCx0ixLQ6K8ICCW6uq4w4jQv1yrpOOjLLAiBS1ZHECwZhcN95ASUEoIlORHUWRE78Hg8rwRVdCIT35g==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":47351,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgktXECRA9TVsSAnZWagAAmv0P/1qr/4Bi8+PAOpCcNcou\ng7Klz8GzsNE4adYpRocYjfPOcoQRnl4IcHTvUelfeK3ha1IIdqNp6JMtB2wY\nqeD8IVs0gZSnkARK3Yg6+gPVPqLL7YLgVhdELEZ7TNXt3kY2YrK4BAlFbPwY\n2HAZnJWEVNkat7zWxq9AZf0Z6e2hhTRdyejV27YdEvGzr94g5s1/KJHS+3OH\nlwpKkMPSQx91rt4l8DwcG24GgRvEKzm/xcZt16Jsqc/4Y0o0qat0DI3YbvZb\nG3iSbeEtBaEXyfiVzXxfSV5Lh1SZuWDT3O2HAELLXCX9VH43AC67InW0k7JU\neXtAB69TApQpfFhDP9yEoLpxmuenNFf3SJMACahA3eOGy5ZT96XZvt0w62DA\nkPrHaU3P38csqgPIEIT5G44OvCRjIT/Hn3v+gbjMvZcbUn1G2coGPojN3Wo5\nHbxPrwQcvc27dDV/PQvz4gyxCCRqfA0YXEu2Gm09DGF/44Yraj/6k8aEqSV1\n9Qq5FrSkhmrHiI0WOUSxDptdkQJw/iz3CTFM4rApvnFhgmtYNcrZXv8meaQA\nsqVC1MUnxlztkUH83mhmX983Sc1iZoDaJNyy+Tim/yuhDbUCutDBtLLw9nWM\n4EdQ0FUlpNY0JSMx21ivAvBh5Qnmn4/gaXQoKA/5tanyW7Fs0rjXIxlyyaW1\nQNJQ\r\n=0vQj\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"a16ea4dd1678bbd3d8cde149b832f71b60396b10","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint --typescript lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --typescript --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --typescript --fix"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.5.111","@balena/jellyfish-logger":"^2.1.43"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^26.6.3","sinon":"^10.0.0","deplint":"^1.1.3","ts-jest":"^26.5.6","typedoc":"^0.20.36","depcheck":"^1.4.0","typescript":"^4.2.4","@types/jest":"^26.0.23","lint-staged":"^10.5.4","@balena/lint":"^5.4.2","@types/sinon":"^10.0.0","@types/semver":"^7.3.5","simple-git-hooks":"^2.4.1","catch-uncommitted":"^1.6.2","@balena/jellycheck":"^0.1.1"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.76_1620235715771_0.6959078946339288","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.77-renovate-catch-uncommitted-2-x-a16d934d2a32a0c74f8ef55a539cb4e023ba3884":{"name":"@balena/jellyfish-plugin-base","version":"2.1.77-renovate-catch-uncommitted-2-x-a16d934d2a32a0c74f8ef55a539cb4e023ba3884","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.1.77-renovate-catch-uncommitted-2-x-a16d934d2a32a0c74f8ef55a539cb4e023ba3884","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"3c97f60cd782131fb531a595a80166ff670585bd","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.77-renovate-catch-uncommitted-2-x-a16d934d2a32a0c74f8ef55a539cb4e023ba3884.tgz","fileCount":18,"integrity":"sha512-ly+IaN2+2Riy9aSPWpYwn3mUhPONG2Hpf96dR5eoPylBOTEW7FsnCIv9aBNROftnZA3527tvVFeVhDsz6n2y7w==","signatures":[{"sig":"MEYCIQD4shXPglhe5LKDwddCCC+vhC2wGpnw1qmBKzsRknHhrAIhANMg+RvJqEi8e1QJiXwXgaSPgsVC0kYpvia+SuZgBc2R","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":47514,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgkwmACRA9TVsSAnZWagAA6hEP/1Mmpg6r6+T/7/zvsNMe\nMpmQEPWSzNIf7Iuflo8hqFz+6nJtI2dC1BzNb3vXpkdpX+jfwp8F3b3Bj/ji\nUojgZjxCWcl4Tlb6ODZ0kQxe7oHOBikBcNgUXGbBFj0NivhehOuf80NA6/xH\nF3jDDWvEVpj2D1R5N2GyW08g1mk/egrSE5cTt7jbMHkc8lo2/NA2cNoB4Mfp\nOSnXTsnw7P7rl71qN6RyGXoMJYtkQKwmI2IdtZbQEenX3PuUpSTTF0S8wB3y\nbyII+rCeXf7kA/qY+WAuyywKEP5YJn1qW3Vru3sYFRrlt3GL2JHclv7QVFF4\n8fzA/fsm93LgJcu1sdkRKiPjEBESKw8ZqGJam9o2lirmlTBvFyquhYdYXySD\nYNgF1+0h5K7+DHj9TqwB6ZGjAujzprGVSZ7QgEONAyrjyn0yZ+zY0m5a/Fh0\n4PcmBo8lD3aT2Pw4Zh8cdqa8rZXEQ7kiRXuMDzpuxQSqPggsyNFi24U88k/u\nE0QKa3paQCGEqRpnicXjRTFuz8YpBm3aN2wHSm1rj7MNskH9NuL2CSJ9eR0F\nd38O9yHeE9srM/OKe317rsN1kEXemwSlmRAeRfIw/sIKx2sMRfSOxWcqCc8V\nk7F7KKnq4lNMMuTNLxuJdVvD2udrMcO2ZMOqO+CKf2XlyZ6D7XRokBWwIsbg\nr+cC\r\n=8aqs\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\n[![Publish Documentation](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml/badge.svg)](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml)\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"a16d934d2a32a0c74f8ef55a539cb4e023ba3884","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint --typescript lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --typescript --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --typescript --fix"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.5.111","@balena/jellyfish-logger":"^2.1.43"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^26.6.3","sinon":"^10.0.0","deplint":"^1.1.3","ts-jest":"^26.5.6","typedoc":"^0.20.36","depcheck":"^1.4.0","typescript":"^4.2.4","@types/jest":"^26.0.23","lint-staged":"^10.5.4","@balena/lint":"^5.4.2","@types/sinon":"^10.0.0","@types/semver":"^7.3.5","simple-git-hooks":"^2.4.1","catch-uncommitted":"^2.0.0","@balena/jellycheck":"^0.1.1"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.77-renovate-catch-uncommitted-2-x-a16d934d2a32a0c74f8ef55a539cb4e023ba3884_1620248959972_0.26683436996204923","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.77":{"name":"@balena/jellyfish-plugin-base","version":"2.1.77","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.1.77","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"5aae85d433222583c5367070ecc04a64384cf31d","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.77.tgz","fileCount":18,"integrity":"sha512-MDdgU6m5dnRqQwS4eRnu/+Ybb4/vFQ2g6hPHafvYFyKWPS/2DNKvX1WbEDmAkPQVaSX/11f02SXcv+a/NaKKtA==","signatures":[{"sig":"MEUCIH82BQfJINwSlhtLvcwtZ5a7jtYHeToVmqKIL+3EvmPtAiEAuU8zkfp+7xUdnfSOxlxHl8FHcSj7+WC7ttrZi5WuPxQ=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":47442,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgkyawCRA9TVsSAnZWagAA9+0P/jgMn13nUwx1lAZFKE4t\nRZT7URglxEIO/iLDCFBvUAjzKrVlrqaXO1zoxaI4/dF/WcAHSkIbZ7fq9DnR\nrxbMo5T+azsvj3fTnMgU+f7HrDKTBtJ6arZAPKoUKcoYUqCEZ9wzhuv2DtKb\nWpBjlWlwBbYyXJ9BQ4cplqf43q20zQVBBIRGMV5g3WGFbD9Ltsa8xcQnvJBw\nw1ttRwME8S5acsR03HZcVrTzRfbPFrLgjADEd5BkoNq4xQ799qGxg+usurWZ\nojwshdds0ugTaBFJxnlQHtMyEkBYFpuw4IkxtySsy3eFKH3ojLnuKmFsxbf0\nk02dCI1Wajlw1axjPM5hzRf1HgOoycdRkAe0NRzU5QscFf/Xy9Vlm7CN1ebi\nBPphuatHoHMPba15QPKH3OuIyznuN+45yEJKz5ot3W/ShrmReE1bBvqKoAjt\nbbUQO4VQNXV3EEAhS2awAaMVINIuZ6YcUBQaaCEPdc2ViCkPMswOFrdKAss+\nj2MwUrxEjU1+rvfQ/3c072ehdCRUuvJOsoHmFfaMWQx+aZoYDGywZQcTEHB/\nY5n71b6nv2hDDAZPWmmgi/u2tgtWVJLxGh9ydNIY8s9gmdw0vlmj3bLIZr1i\nAPcR6BfcSm8wVjXaJVqCY7ZA8OrG9ZiRBU++0yO5o7Os0hShLqTBHst1GlW0\nf01j\r\n=6OS3\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"84b0bf23463263c014eeca9c0885afaf03fcbb89","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint --typescript lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --typescript --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --typescript --fix"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.5.111","@balena/jellyfish-logger":"^2.1.43"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^26.6.3","sinon":"^10.0.0","deplint":"^1.1.3","ts-jest":"^26.5.6","typedoc":"^0.20.36","depcheck":"^1.4.0","typescript":"^4.2.4","@types/jest":"^26.0.23","lint-staged":"^10.5.4","@balena/lint":"^5.4.2","@types/sinon":"^10.0.0","@types/semver":"^7.3.5","simple-git-hooks":"^2.4.1","catch-uncommitted":"^2.0.0","@balena/jellycheck":"^0.1.1"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.77_1620256431702_0.49122062602265637","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.78-renovate-non-major-27d30cadf7c0d7ca82ac9164bf3a49865cb17399":{"name":"@balena/jellyfish-plugin-base","version":"2.1.78-renovate-non-major-27d30cadf7c0d7ca82ac9164bf3a49865cb17399","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.1.78-renovate-non-major-27d30cadf7c0d7ca82ac9164bf3a49865cb17399","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"bdc787699e57726ef0d13316906f03f8a6a9d185","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.78-renovate-non-major-27d30cadf7c0d7ca82ac9164bf3a49865cb17399.tgz","fileCount":18,"integrity":"sha512-RucDWpMienqjAjMen8emxH3JLUHQSBFK80etKWCW/N7/M3QlDSVnQhEOPmiP/YY7ItZe6vFrfOKEb7Vba1yeGA==","signatures":[{"sig":"MEUCICu3MR0Fh5F3SCaH+VliaYXEvlSn3rmElgiH1G45oCQYAiEAiQpYoDc48bAGYhNZ2RhNXNh27zZ2+hST4Vjv2R1Ogyg=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":47605,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgkyonCRA9TVsSAnZWagAA3F8P/1xK1NZ6sonXf9oSCtsj\nq04dMFZ4ymiOi49CFXz4GF0kND+rE0C0VQEUUkYjMy+vrJbGydFDx09qSu9E\na3Z8uvySLHoQsT4re6zr63T/ICc0MVo0VATmDHP0P8mRFTToikSp/JgiiiLy\nCxj8XeiMjNM+Svow1aejcd/q+8rFMVjHWj61PJSuUVuYCHQb0nN//k4kU5WO\nvVjxnhvXjcUOH8heuBpV7l18X4MpGp3Xzc+qn0KuD4xmgoUbJ0/+wSftkW19\nJllOUZ+h7i8D0EhkpmyV5bFaDENZIQc78iiRca3fV/JHQr9CBiz5yfsns+7T\naruuhB63prPCiJkzKAbybjEgIpsvIy1iJCMPhijfWF2lbxONa9oQ+iwHgNOX\nGE4LWpdfAFyg9lKAI+uFHKr5mv5tMf5w4Dk6XL4gtN14H0RLUj4ZxAD4aaJg\npIFw5gUr4M0af7cISuciawp+v9okBRSBKg5BW8Bdu7e3ZH5wqYp5+NyJpsHQ\n+SC9gp8bu927uRKbhN9OBJb0n8lZR7PX9IUQvjpEgCbz355SY+xpARUO7HBn\n1V+T4uwPZl8h1JyiV7ISZteZoFTcZpSRwp+J4XYsOc5/CXtEizhc6XtH77TO\n13T/ex0IudC4jf3kqTxq22tceQ+TNl/3QbX5hbVnQmB0rntR5PocdHPkem8s\namrK\r\n=LnH2\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\n[![Publish Documentation](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml/badge.svg)](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml)\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"27d30cadf7c0d7ca82ac9164bf3a49865cb17399","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint --typescript lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --typescript --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --typescript --fix"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.5.111","@balena/jellyfish-logger":"^2.1.44"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^26.6.3","sinon":"^10.0.0","deplint":"^1.1.3","ts-jest":"^26.5.6","typedoc":"^0.20.36","depcheck":"^1.4.0","typescript":"^4.2.4","@types/jest":"^26.0.23","lint-staged":"^10.5.4","@balena/lint":"^5.4.2","@types/sinon":"^10.0.0","@types/semver":"^7.3.5","simple-git-hooks":"^2.4.1","catch-uncommitted":"^2.0.0","@balena/jellycheck":"^0.1.1"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.78-renovate-non-major-27d30cadf7c0d7ca82ac9164bf3a49865cb17399_1620257318638_0.7881120057702711","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.78-renovate-non-major-5855e25c80822f1926ac59fb1242ff597e28383a":{"name":"@balena/jellyfish-plugin-base","version":"2.1.78-renovate-non-major-5855e25c80822f1926ac59fb1242ff597e28383a","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.1.78-renovate-non-major-5855e25c80822f1926ac59fb1242ff597e28383a","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"bf9a335426631f59e725e6d0aadd0f237bb8a09b","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.78-renovate-non-major-5855e25c80822f1926ac59fb1242ff597e28383a.tgz","fileCount":18,"integrity":"sha512-vr0zKgBVPb5s5PqfhT8GCPCcoQzjm8v21WfRLUji63MTIYrAwhvekNknyITLbB9k9XhhilJ1xYYI5pvR2B4FVQ==","signatures":[{"sig":"MEYCIQCDH4zQySmEpKjgKKTWaEYtJdMl94mlw/JBzG/pSNg1IwIhAP9NCf82lZtniR6M2wKpvRLjAOuTmrx212oO3c+ftzmb","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":47568,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgk0gSCRA9TVsSAnZWagAAi+AP/0s3vwZ+BLTFF5VVJ394\nHOtt3zqNzTGUmVM4kMOuRbAJq/Xob73IPwTPhClgj1BTc2qXRf3vpQ6NjdGv\n0y0JlHUxBpuVJfp5EyFLhlrDsiHUyNsHrT5WMkQGrcy5x4VhzfPvHS2LnxG0\nRe4xtoeCPzHIGlAkSRWA9EKkXPctFkxk1rtSqts+y80LJefNDUFGtyQwa/US\njt04VUI7Ji1HjgXfRhEClrVDXGVhoh0jVpnHzdqaOVGTFfG3DYl/Vr9+3B3t\nIlUOOWr1qmx8iHNpXwUrrF3uIrKGeKY1bzQD5QocbfTRPPWxXCUxB0lzLvc+\n3qtX1FAOBt2MKIuKD7CyWZiA8I+KqC8CxGrQkr/7BLduQmvhOchZgCBGGPg7\n6Y5B53j8YR8b7Hm2H7rkJZRfetcdObRkJRD4mYChaersnz0B/Q97Cr5k8cXM\nIHyosnHmpYje+L5B6llZ+mL67Fo4Tm61ocm/jLBGxFgKDvgmPECd39BychdJ\nS24MdEijUgo57BNmZ8RiQEXG9Pfx26drNtEmWq7tNTytqgASveUmEoDZHkXz\n+VcT5xQnMq+vmIfgsbRIMug2gyK57gMzlsNjPB3zFsZVuIE5qVKKJ7Il7wWq\nZ9vs3Xgcstc0RZm1ji7rU6nu5M1SgJ/mKBTTwAwq0dNtY4icBM3A933kg4wo\nbeIb\r\n=fObC\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\n[![Publish Documentation](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml/badge.svg)](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml)\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"5855e25c80822f1926ac59fb1242ff597e28383a","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint --typescript lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --typescript --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --typescript --fix"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.5.112","@balena/jellyfish-logger":"^2.1.45"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^26.6.3","sinon":"^10.0.0","deplint":"^1.1.3","ts-jest":"^26.5.6","typedoc":"^0.20.36","depcheck":"^1.4.0","typescript":"^4.2.4","@types/jest":"^26.0.23","lint-staged":"^10.5.4","@balena/lint":"^5.4.2","@types/sinon":"^10.0.0","@types/semver":"^7.3.5","simple-git-hooks":"^2.4.1","catch-uncommitted":"^2.0.0","@balena/jellycheck":"^0.1.1"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.78-renovate-non-major-5855e25c80822f1926ac59fb1242ff597e28383a_1620264978087_0.06622967981342498","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.78":{"name":"@balena/jellyfish-plugin-base","version":"2.1.78","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.1.78","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"668f091e2cb5f8f1499c883a1f8be7db77e72535","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.78.tgz","fileCount":18,"integrity":"sha512-+AUPSuVFoGlZq7igPxj+Fcd7Vc2lqXDG8qWtWT3ONjf6ISHlZyYOW1Uzdj4ISo6o6jVG1/sHkig8ecJakSp8Cg==","signatures":[{"sig":"MEUCIQCF1X3Ir82MyJvv0k62pNP0+ykOgrn/sb84dteAGRh6iAIgTNTI2rwsiEHeFJ5ksOr7mAfY2izhgRPMSQVXwye4Npg=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":47508,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgk0j9CRA9TVsSAnZWagAAXYAP/j+8OIP+KJ0spgaRZebC\nWwhfi/wht+eTAX9n/3OnYCoivIskSQMA9oxtJprdz2QI/+YjodBe99rUnnrt\n/gfaK/BCGPIzO74+LkK9xrZaHcaeSQqJxhfdD+vybgAQrnVP+CN7/fX9Z3DP\nOQ/VtoVl0ibkdS+yBrI1rPz8fmKJMmiQl89z8uQuZkzgVLML0tgrlUZPVdii\ns5xLzbuH9KvvVVSIA86IdlOi3Nnfl1+cuOnUG2Jx4tSIeFWQEtKGjcngzxuZ\nqBMDpZeAni6sDEDDfqKbq6OuA3G8OhQ/w8Dv4PrlTY1lw8vUcxWuU23ScvlS\nShlenJsbqQjMWcqmmJP8Wp9BDdgTdd5KzjGca3OVaN0K9f1dz8+5ur68d8kh\n0QB7ZUQ99WoOcltedlrdDXcCc0qb5kiHgpPehIn411KhC52i7g3StY5tQ5IB\nCEyJ8+4ja+APeYz452QAWGXHCjFaB/QY3846Rv/9sZ9kUTWZbQYMc2yrNA2G\ncczqCGNh0PJHmBx8pIDt+8gTZAyP1yQBH+q96lNc1M/ShCy21D+LUOz3o94p\nIKQA/cf/c/jS4fd1EdTIFA7mymijF642/8ma7uXFJFbifJJT+Xr0FY8kQBeb\nGqWPLpxHvGAQDtlo6KklzqxDdi/zYsqMb3vKU8GZ1i+skBOU1bKQkr39iw+J\nLOUc\r\n=GFom\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"b213dcbc848658183c0a0e2506669e9f1f7eaddc","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint --typescript lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --typescript --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --typescript --fix"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.5.112","@balena/jellyfish-logger":"^2.1.45"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^26.6.3","sinon":"^10.0.0","deplint":"^1.1.3","ts-jest":"^26.5.6","typedoc":"^0.20.36","depcheck":"^1.4.0","typescript":"^4.2.4","@types/jest":"^26.0.23","lint-staged":"^10.5.4","@balena/lint":"^5.4.2","@types/sinon":"^10.0.0","@types/semver":"^7.3.5","simple-git-hooks":"^2.4.1","catch-uncommitted":"^2.0.0","@balena/jellycheck":"^0.1.1"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.78_1620265213279_0.20060093428222858","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.79-renovate-lint-staged-11-x-92b3460662657e350714646afd5977843a12bd78":{"name":"@balena/jellyfish-plugin-base","version":"2.1.79-renovate-lint-staged-11-x-92b3460662657e350714646afd5977843a12bd78","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.1.79-renovate-lint-staged-11-x-92b3460662657e350714646afd5977843a12bd78","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"fc654e27de8c0b23e5a6f865fd228cb45dcd2e84","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.79-renovate-lint-staged-11-x-92b3460662657e350714646afd5977843a12bd78.tgz","fileCount":18,"integrity":"sha512-+iOeH5YzZX0bjVW4dU2Acv+m+JnYaHcXgRdDYzqvGlP7TcA1Rpts2sb9R2SL89Z4vtVkparjpXEVQy84wa1Z4g==","signatures":[{"sig":"MEYCIQCtall1oqjooYHpqe2By1vEcjFhK4XyUj0+0UoSixSY5gIhAPIdK1O6j8m7GIDOZHOCkwy/WylFld0dHnIX7XtDVCfO","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":47661,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJglXQkCRA9TVsSAnZWagAAjlAP/RaGcFMn6OSjeH1Yr+Up\nkJ9/5Iqy1id6TgJhNBJYi1gXuZNVzf2dX/0TtDYCj487HpsVv3AHPVut+fOe\n7tKqAF7dtbQq1cZrvJJvDj2K/DAenvWUz/2whsTLpDi21I2hFS9pgUDdLby6\n3kbDPCeAK+VFExfwJfiFfUbc78DDP3uomeeunhKgZkz3DYiw3WZPajcCbSvZ\nO5KeZ1YfClqEOWQUiU8WEKoHqyrhmVmwxeKgbmJbiAiB5KNBjtyT6nTHRenm\nQmtadiS+MRt07U7fAVKlEeVaSgrJ+WbVUz85IYjMS2e1AaE3azG+Rfh1+qpS\nM91uzcM/CJBznUkeRIuwB1Jb9aXiSc8mTk5DAG9JYJShpbKTPX4ccw8Ho6wP\nX5zakocOGos4mU2ifC8RebXlV0WQFgbFE+kvuIqsFeeuaU4gjYRK54HBtPsY\nsTZhufZgU+oBpg7joGduM9fb16qaJUK/ba4/mbkr4j1nSByrQC0Z/2b7vmV9\nyTi9QOGhkm2m8AHvUspIjB2ZOHD0ffXo/cIEreQsnXsOMo2rBoXyEOkiYokD\nhgImeLy3quVnh/2KMhAIl7k19H4tUgKvtTaOY8kmRtdda0e9GZqMAeexY3kZ\nnSAxPY+uZVwzgAtNAHeUIJWIgO5LN+CU1w/5mPmv7jApfxKoZ2uqQPwLIsXN\nyP+x\r\n=+3cp\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\n[![Publish Documentation](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml/badge.svg)](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml)\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"92b3460662657e350714646afd5977843a12bd78","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint --typescript lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --typescript --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --typescript --fix"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.5.112","@balena/jellyfish-logger":"^2.1.45"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^26.6.3","sinon":"^10.0.0","deplint":"^1.1.3","ts-jest":"^26.5.6","typedoc":"^0.20.36","depcheck":"^1.4.0","typescript":"^4.2.4","@types/jest":"^26.0.23","lint-staged":"^11.0.0","@balena/lint":"^5.4.2","@types/sinon":"^10.0.0","@types/semver":"^7.3.5","simple-git-hooks":"^2.4.1","catch-uncommitted":"^2.0.0","@balena/jellycheck":"^0.1.1"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.79-renovate-lint-staged-11-x-92b3460662657e350714646afd5977843a12bd78_1620407332187_0.9439365226476957","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.79":{"name":"@balena/jellyfish-plugin-base","version":"2.1.79","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.1.79","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"3eda965e7036a159c874136244b5891d1b4ca388","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.79.tgz","fileCount":18,"integrity":"sha512-p6MIwaCQgiL/etXwwHIMf5zJ81IEING07vmtBkzM2o2mVtsV5iGF0lpkY5AtM0FBPUO9B2ivqc8iEujwIBhTTQ==","signatures":[{"sig":"MEUCIFe8KKrWQ416wnO9P6hocKcybgETTbCOHsIxiMCnrEVnAiEA9I+nK+3EL8uuqgdoCbWU9RqZSYumjS9lMw17lBX5YE0=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":47594,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgldfECRA9TVsSAnZWagAAHa0P/02Y4bVZ827IxPNlCwEI\n5U//k/rF1T1HCCvv9QsYvcUjrlr/fHEEKZy5kSITzgUxhh36XE8usjZeXcuw\nETZpcmRFBXYH54Rs5g63T1bYX2l2LwaEefbMI0x80AOTZm5TI0p5XzB2R/dW\nhru1K4UE3Fq8gmy8JbTvxynULcQFvY5+i0D9pCdUScjogDv+Ml5kyvkDKrqA\nTYfoXu9MQ/UzBgYgELjGHcc82l2mul4vRCrqg+pZDVU2X+NZYDFLufFDedXf\nhmoDv618Fg9wh5t7adwliLe0A/hk0VULUkvayVmKCxElEomkKpKZ9SG7sp2s\nGav2sXNurKHfgYk6fBmMaxjg+gpOpiDhzam2t1uL56jGub5lMgKpROex37OJ\nK9Z4cW9j+zbh2isfp9UhK8UsKaOP2E+EILIj5qJ0U57HRYJhPLkJmnRQRp6V\n4oQKMnVCOJjmvLRw6/J9SA8zqlYyTUC3VizenHhCvF0Ves/NxLBT112LHVwM\nz08tYdjY/O6pcABCRxvsSGV+5TgqMHGmF7AJM/V6J7VW2mS/jt8sOavvLtbw\n+n2/bESKcIDasR1iE5Nm/WH9FXRzCA0MQj4GPxpAozAibv+vT0P2KRKfebBY\nzz+R/sKfuqQNmannPDC4yYSObC3Xnxnc1quItQfGduRUsSfYUCZWCAu4Mr/A\nQb66\r\n=XLdi\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"31b40e99d259eae265eee8c48e3629e8bedd25c5","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint --typescript lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --typescript --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --typescript --fix"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.5.112","@balena/jellyfish-logger":"^2.1.45"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^26.6.3","sinon":"^10.0.0","deplint":"^1.1.3","ts-jest":"^26.5.6","typedoc":"^0.20.36","depcheck":"^1.4.0","typescript":"^4.2.4","@types/jest":"^26.0.23","lint-staged":"^11.0.0","@balena/lint":"^5.4.2","@types/sinon":"^10.0.0","@types/semver":"^7.3.5","simple-git-hooks":"^2.4.1","catch-uncommitted":"^2.0.0","@balena/jellycheck":"^0.1.1"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.79_1620432836507_0.587202932926302","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.80-renovate-non-major-9b562ef2ca7db5d3ed348a4030e139862c2451ec":{"name":"@balena/jellyfish-plugin-base","version":"2.1.80-renovate-non-major-9b562ef2ca7db5d3ed348a4030e139862c2451ec","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.1.80-renovate-non-major-9b562ef2ca7db5d3ed348a4030e139862c2451ec","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"88b649a61f63e33e4fc735ce94d419b3656a78ab","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.80-renovate-non-major-9b562ef2ca7db5d3ed348a4030e139862c2451ec.tgz","fileCount":18,"integrity":"sha512-bIb+EyvNFWp+YPqiTv5+z8UWyR6JQ+FoNKEaX7eXr5WLY7ilCJoaDyU/JoNuR8tJf8xtYYuCQlEMn5PVQZwsHA==","signatures":[{"sig":"MEUCIQC3Um3UzlGGCuUvuQUmeE0MFv5yfqDuIbW26ehROm2GrQIgUkNw5TcB/0p0HHdnXdirjugWm5W6Oa6qpxdwPhIboZo=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":47757,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgldo7CRA9TVsSAnZWagAAVG4P/iQeMF6ddadkQmpwxy2V\ndzmtIcTofiOeCsq37QIxsEwHLkkePD2s69PhqciZzZAAk4blSNg4yM0WXCD9\nK7Y0jM0pZnLu9U9c5FZxL0WimNh0r5x3KU6sX7dCZ3mCSmslFevTarKnmoII\nRjZxyAKV/XNxy45O4+eaA/SSFjBAjRQ7EZl0l2Hazq1iHaAX7td5i1biW3MI\nPqCdTUVz5YtTv63qL9iF9SMi12+22JfwejuFQUoNh/5o/rM8dQLjkzALOx/s\nnGcjNNhceSjYbpW2WMmCGtcnYlChf2n011SNoFAJVGvFEq7AfLrnTkrOs1+9\nDW+/vo6WfwclsYS2vvKub/yjsJ+4kBQ/SjK8LP46qCNQwWc4NPPjrCKgZpA4\njDINPAIihxwwZXu/VitL8DQ+Bf4LbBNHezidiG3dRtL+Ub8x4JkciyfNET2l\nZGYZfTrnE5j5n7W/6VBPpvQ9ylAJ2AJFJiEgn1TcpsBWth0cltKAmKvp6oCG\nTL+BZgkH2+suTGRCKJAMps77LZ8vUnxzNK7q6mPNlZSciQqkhEuXLKNWluie\nrBQg2bEefTgo1aT0Cz035QCpJPDituXfUvBH4FjDmNvFiiMaM3VsjZAtekq3\nuZW+glc63f+GbX9T0WoWDb87zI9UQ5tm0KqpkwS3uE4k8aZZvnls/9MwU7Gw\nqr+3\r\n=DV1T\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\n[![Publish Documentation](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml/badge.svg)](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml)\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"9b562ef2ca7db5d3ed348a4030e139862c2451ec","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint --typescript lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --typescript --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --typescript --fix"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.5.112","@balena/jellyfish-logger":"^2.1.48"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^26.6.3","sinon":"^10.0.0","deplint":"^1.1.3","ts-jest":"^26.5.6","typedoc":"^0.20.36","depcheck":"^1.4.0","typescript":"^4.2.4","@types/jest":"^26.0.23","lint-staged":"^11.0.0","@balena/lint":"^5.4.2","@types/sinon":"^10.0.0","@types/semver":"^7.3.5","simple-git-hooks":"^2.4.1","catch-uncommitted":"^2.0.0","@balena/jellycheck":"^0.1.1"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.80-renovate-non-major-9b562ef2ca7db5d3ed348a4030e139862c2451ec_1620433466908_0.11069164275228194","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.80-renovate-non-major-8f1f08c3dae9879e8a7c9a56f1a520918ae80a4f":{"name":"@balena/jellyfish-plugin-base","version":"2.1.80-renovate-non-major-8f1f08c3dae9879e8a7c9a56f1a520918ae80a4f","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.1.80-renovate-non-major-8f1f08c3dae9879e8a7c9a56f1a520918ae80a4f","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"021bc9a53d491c3c9ba56cade8599380d19ab429","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.80-renovate-non-major-8f1f08c3dae9879e8a7c9a56f1a520918ae80a4f.tgz","fileCount":18,"integrity":"sha512-ZgLzk+YKNYe7XpL22Pydl2SEotgKlVDyWwQ5V40juj5B2x5kMqCXO5PfXKMuSHlVvVRIKmbj9CleTJ5sUN4BuQ==","signatures":[{"sig":"MEQCICZB2jYfYnwgeBS9m39Rjj9pwGl6fFlBhVGKYDfj98+WAiBq4/jcYoeFPXjYSHcoeJX0D5r3nIZPn3AruVDykNq2RQ==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":47720,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgld3ZCRA9TVsSAnZWagAAIqgP/Asc0hs5GWEpefqXUkil\novpr9X8NTF0tzXBvdZbv3Ell/cgBIbsQgOLd/V636fpWiLz3646pREAVmXYV\n86/HVruEi3mDXaJ1wtZKtjkRK67gAHxeCdHj3YFnupvmbWSdIkCkeyA7wwfs\nRWFWM7G/y7dcvdOzQ+BdnNy2XiCHRkWe/sQYwNjnlobS7Na8W4dZ92z1EgrL\nqT2kStPYrAt+YWmCMT7coBs/dPxtFnXyikq66XsQ7DEgFqxqyii3tRpc8c1H\nluUq5IttlNkCvup9ZoddS3voF8HHpUq+2bLuUM0j6JVKMV/tkwx1ZWzdzxHk\nNUVD/SvJV8bVAE9+IZVjg6ZJ2O1rK9Bzo3COjPmIfI/Xv+oQZWMnRdGr9TPZ\nlfw+le63OtVVK5noUyVwFg1jPbULnSbs4LFoBT6r1Mvpawzg0OIzNQlTNu8h\nAJHvF0MuFqjruxcINnAOcvwYgHvvVS0cxoSwXALBtrBslRr36Qh3FVgS9xBj\nUqe9TKL9vV/gMVdexTLnMAZfMJ4fLGDlUUSp3cZt1o4DTNLlwFWjhcQR2iZs\nBr920CE2crD2FDB8owxZgxGysdJb+D5l0++tMVnqnUcn3js/+wbGTfR0Bv6K\njVO0FT4eXZBLkf6eBKyOxvOxGtR4c13ck644uD4AzMfKUq4bNGdYFBf2mTc0\nc07Y\r\n=Yhaf\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\n[![Publish Documentation](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml/badge.svg)](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml)\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"8f1f08c3dae9879e8a7c9a56f1a520918ae80a4f","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint --typescript lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --typescript --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --typescript --fix"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.5.113","@balena/jellyfish-logger":"^2.1.48"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^26.6.3","sinon":"^10.0.0","deplint":"^1.1.3","ts-jest":"^26.5.6","typedoc":"^0.20.36","depcheck":"^1.4.0","typescript":"^4.2.4","@types/jest":"^26.0.23","lint-staged":"^11.0.0","@balena/lint":"^5.4.2","@types/sinon":"^10.0.0","@types/semver":"^7.3.5","simple-git-hooks":"^2.4.1","catch-uncommitted":"^2.0.0","@balena/jellycheck":"^0.1.1"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.80-renovate-non-major-8f1f08c3dae9879e8a7c9a56f1a520918ae80a4f_1620434392443_0.8910082220406499","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.80-renovate-non-major-482b48624f713e7fd22ddebf4ba364ef4024865b":{"name":"@balena/jellyfish-plugin-base","version":"2.1.80-renovate-non-major-482b48624f713e7fd22ddebf4ba364ef4024865b","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.1.80-renovate-non-major-482b48624f713e7fd22ddebf4ba364ef4024865b","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"47c49d1bfcd620cee5f22a12d8c23541af0b25ee","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.80-renovate-non-major-482b48624f713e7fd22ddebf4ba364ef4024865b.tgz","fileCount":18,"integrity":"sha512-6PR/kCxkADD1rNJ3+Q/BwfDBhyqaWXb/ef5Nx5nPsbUxKMSt3ccBTs6kUU9Yvpr7b9KQo2uKsxCZcLe/IPCOLw==","signatures":[{"sig":"MEYCIQCB7u6e+ymNqBr7xeqJisLSXlFTmVasLWHrgPqer5Qi8gIhAO5RhdMa7Fxu7pNSmcwSNZB/yWIh6FD5n3I/4d63Bl4o","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":47720,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgleGKCRA9TVsSAnZWagAA8DUP/1JvcsFw0XIbXp8IES5Q\n++E1MCZeuljUgUm6JZesCHjlRyXg7rxS6g61h3+MXvjyugPpCFl+7EA1YYZw\n0xBTVZIcqcrCgoeA4BFuOtq3K6oG6tHW+cIQd7Hh3zHlt7KdvK8P80k/Kb0i\ns+9cO00ze8uPLEr5KAuAyWvKjk/a2pKW4FwxoftXfYjexn1CCfzNfHWlxIoQ\n7shNNh/zE8kz18LnaWkU3AGLStcK5bzqJOZcbCDsmjjID+YL/vWP7IpTH0vJ\nP3oN3w6QwP2itiiS/C5BelS2ghov1oeNFuua3h8I/Id0viTbC6xXcEgh1vKs\nPVKWrDb8Xta2bAmnu+VkofkIQF0OnwoR9L+2WoXXqnGCiTWuYI+W5BW7aKN1\nINlz1VjVofk+QoW+1B6Unc/MWmagckpVUEV5axPQJflOQU+YE2QDhwa7KnnF\nkA+ouKOPJUSB43JOq5HaDoOYinIQAOcEzT7C8cRvT+nLEWmkpu7JChsVOKr6\nknoolaQMyo9/fJvJXQlLuS0UAWnhDqn38ZUf7u15fcz75lLdS+09owaGyrN4\nNgXZ4BnIOJriuKTVqPToI7rvmdBvI5o4G3/FPynq26W08Brg5k+yB/Xz1+qM\ndl4lKn2MvXpOpQFPsjkhC0i8XUAJfnelapak7v4ZQhKN5vKk7Xi7sejIKjbd\n3fBA\r\n=TExw\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\n[![Publish Documentation](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml/badge.svg)](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml)\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"482b48624f713e7fd22ddebf4ba364ef4024865b","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint --typescript lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --typescript --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --typescript --fix"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.5.113","@balena/jellyfish-logger":"^2.1.49"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^26.6.3","sinon":"^10.0.0","deplint":"^1.1.3","ts-jest":"^26.5.6","typedoc":"^0.20.36","depcheck":"^1.4.0","typescript":"^4.2.4","@types/jest":"^26.0.23","lint-staged":"^11.0.0","@balena/lint":"^5.4.2","@types/sinon":"^10.0.0","@types/semver":"^7.3.5","simple-git-hooks":"^2.4.1","catch-uncommitted":"^2.0.0","@balena/jellycheck":"^0.1.1"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.80-renovate-non-major-482b48624f713e7fd22ddebf4ba364ef4024865b_1620435337592_0.39828582530310075","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.80":{"name":"@balena/jellyfish-plugin-base","version":"2.1.80","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.1.80","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"bc39b90ea738c0f43c728d9e9b5c23f4a5066912","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.80.tgz","fileCount":18,"integrity":"sha512-rkTN9Up7zIgemh73WADZhYUhnnQdXKxaXcBhSDhyCyewvk0L1rBoXUu1sofg9UqjAmaxCSYcFk72CVT4Ab626Q==","signatures":[{"sig":"MEYCIQCSif6J6Y9bCy9ipp5G8DX+ubWgxpZm0Mf5gL7lRvshgQIhAKvPjdWx32L6HpV2lJlQF79Bb4rx8Q94fssM3t0/ZVKA","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":47660,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgleNnCRA9TVsSAnZWagAAZSQP/2HWbacKCx/l4tZsd7An\nyH7oBgzh1GqzKKTIOYmWrgOXdL8Iq14kv9OVNt5PYCvUHj2HQJKtuhhq22Cu\nK4TbM1v1LUqRRRIyVpdS0raHSFKOG3+RGHNP/9a5FDaxfMZaGTHYEolzvkbn\nH+cBtYp+UuqJTG+BaDS28GwV2oMGvvyVBqHYlJbcp98WwIxltby/3MypwndT\nr5dLTHB9fTwDeJTyOmVl58eq3wbLoERX/n56z84IUnCA5hlkpv8exRlnG/l7\nlwGrXu/rKF+nlv+lDtitgpklzom+BMeUmjDBPROmmStWkPjvqpgSBLPqcZ1q\nFiV6dgWA9cmfpffCZ6J6U6dtCBDHgDlAOAuSNSIl+fPbkr1H4SvN+lGOW/WA\nBgYQwxXJoQRYOZdNTcpYyP2UuyC0Eg2RPCpN3AB7NhhNkNk/TmruKUTtBOY+\nfTYL+V84Czgu3zSHn+cmGtNI3/qe0HM08RXpE3szFOk5Sjnx9jjfQIXdnz+l\ndDuj5uCSP1NJYiqRVy/MEMlx8bnF0BysXlOZ6LUrxKrlC6u2tsGANqj0IXtq\nFwf2aXcqVN5/MaOW+2ctDcR//Cw0op5sofYTOhnrmfoUqB9WCk1dlz7pJ4AD\nFnQUBmHTqiCMBK9Ry5eSfMU8HYhpOKtgsLkp01e9bLGF7GnD7go+b6pjSyyN\nXADh\r\n=1N0A\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"08d9aa44d597d8588fa568caf0d0542d785cb742","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint --typescript lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --typescript --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --typescript --fix"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.5.113","@balena/jellyfish-logger":"^2.1.49"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^26.6.3","sinon":"^10.0.0","deplint":"^1.1.3","ts-jest":"^26.5.6","typedoc":"^0.20.36","depcheck":"^1.4.0","typescript":"^4.2.4","@types/jest":"^26.0.23","lint-staged":"^11.0.0","@balena/lint":"^5.4.2","@types/sinon":"^10.0.0","@types/semver":"^7.3.5","simple-git-hooks":"^2.4.1","catch-uncommitted":"^2.0.0","@balena/jellycheck":"^0.1.1"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.80_1620435814989_0.8443650416527408","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.81-renovate-non-major-8800f117f38a4a1b56552642127ad8539a64cf12":{"name":"@balena/jellyfish-plugin-base","version":"2.1.81-renovate-non-major-8800f117f38a4a1b56552642127ad8539a64cf12","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.1.81-renovate-non-major-8800f117f38a4a1b56552642127ad8539a64cf12","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"d791ab2bba760b5cb4db30c2172d0b3527579787","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.81-renovate-non-major-8800f117f38a4a1b56552642127ad8539a64cf12.tgz","fileCount":18,"integrity":"sha512-BvVSkhHYBNlIk72KDRbTGqefxFhg2lqh8CA+Sys+8BfWMHLDhz/KOW3wbo8hiFWzUFmeDBEQmeFVhyNMC+uYuA==","signatures":[{"sig":"MEYCIQDbSyveggKSE1qQ1pLd4BNSko9PxAQopZTGCOy9trjpvAIhAI9JRa7EV76B8xLNt1q2rXBa8/vhiFHEKclrei9D0RXY","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":47786,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJglhbnCRA9TVsSAnZWagAAMvwP/3cjY0SQYqdwBhRlZ1E/\n0c3FNiU+9qxT/+hrBlZNHVUEDKDy4ZdS30aCx5LFp0mBgL+FVizXvT2+98B9\nYVLtyM8NDQaQsXuJHk2GKH+qWDnLnUTlTJ0dc6tlSElFXhhy3h0Vk2GWO7eM\nQUKgpczJvKV4t3wa3iBnJLbSOoSjdimgvv0b/GApv8OJE+ayra/PJgzDLoBM\nrRzmeuiIQ9ZpS+KLNbLa10b5a5BgdmepXhc1o14AnE+7tJYFDoJdLpaQsKyF\nHrifiWLug6habHxPFnX9s4mEcg2/mXI5RH0uh4URiHSTL2qRJWopb1D0pFFx\nbr78nnlkaKFgryRpltdIllO54CkArS1GSacgIH7fezFnw3yyt3uEGtPxBrd/\nYv+pw5qngwnbF8GjfMu5W7I7IuYBYhuPt6mW0a4U6SkeBBpl7/CirBBI6xU+\nvdJONCfROBhN64FR/6jWKlaG2ZLMM6kDu7lh6Cmu58qC5FsXoFUorlChU/i3\nbPGmgPJorQZHGUl50QCwyZyQQsNDkiRXM5IM7uDJrFSz+lHAo88eTlYtvUNU\nOYsyMpkyJ8jeHDZHu2vn77C+WSwuZ9pAIshBOX8NjfWj/bGHigtmsf3yE20U\n6HZtP5If7XQszDJJkfExWSKGrsGtzaX1L7MwZUACXJWB4yzEP9KbvrZXyBFI\nzYcX\r\n=SNRZ\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\n[![Publish Documentation](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml/badge.svg)](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml)\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"8800f117f38a4a1b56552642127ad8539a64cf12","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint --typescript lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --typescript --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --typescript --fix"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.5.114","@balena/jellyfish-logger":"^2.1.50"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^26.6.3","sinon":"^10.0.0","deplint":"^1.1.3","ts-jest":"^26.5.6","typedoc":"^0.20.36","depcheck":"^1.4.0","typescript":"^4.2.4","@types/jest":"^26.0.23","lint-staged":"^11.0.0","@balena/lint":"^5.4.2","@types/sinon":"^10.0.0","@types/semver":"^7.3.5","simple-git-hooks":"^2.4.1","catch-uncommitted":"^2.0.0","@balena/jellycheck":"^0.1.1"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.81-renovate-non-major-8800f117f38a4a1b56552642127ad8539a64cf12_1620448999416_0.32594743552734773","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.81":{"name":"@balena/jellyfish-plugin-base","version":"2.1.81","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.1.81","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"bda2469a4abc5072c29ce74e9fd6d657ffde066d","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.81.tgz","fileCount":18,"integrity":"sha512-2sxBXYkk5t9oh/a93WPSOco36b5Ur2gPI00TulgERQVZy2EmX9Z6e1wAYMfHxyplg4XNJJkjKlJvoCY1ijNUAw==","signatures":[{"sig":"MEUCIQDXh6yPGN86X6kakzldg7dzH2m0WA3igqzQqcfyRzgvcwIgfD+eKUsezRL6jKf3r5EJIlTxMJ3YDpTl8zYJuV/0FUU=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":47726,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJglheoCRA9TVsSAnZWagAAUewP/2KuYR9QA0hOhRGLVVTh\ntoTDWO6VFdD7y530w1L7k8sWf9dEFw5rPIwKxc2aAVorkowXT0dcFoBzhdtX\nQjoSNPVQb31Uc6yITcK4/XrbnwgZN+1u8/PBqaVxWweHXaV+c1rXAOIotdbL\nbtxRTnR1QT5Mie9ynNW41Wvgn00ESo95eE/eeSW5H3EjR1wtoaobrJ/x1yCQ\n8B9QjzKUkMH+BZAz71aFJeYF5JD84R2f9bf6Au+Ss+v9nvr9yH5OM6DkVhn6\nqzETHICYTwwR9GjKkI/io50xYok0EFRlKhfc29tyc44HL0KFXEc/jvorO8yK\n56dn0pkOtBhNUkcV9bX7RJfzfI7kztRjhCG6MEUY4lbG3StYIGHM+bqsh16h\n9UjQqYdmjkuQdVvg/P/wVM3iUfg/Ipdm628zdEokUgr/DQKBH6BnNfd/TSWS\nIEX1+hYv9EKRKGPjv4lhUZGRBjq8fZA6X/2MCnvBEKStRwz6myy0uQAtxuMG\n/e0o+0vEFI/wHj7uQyVPdwhY2cgoMQNg/6pt11cD4gOWCfFoHX0cbNB8auzk\nE/l7bKTMBxCjv5QuTlWIjAaKJdCtEmalknxSBo1KDj0MuMIqz0mAffjYYsbb\n1CsukvvV8oGNydjPcoD+sacU1NpmEP9h4yhVOeJH80sQFXTBOKtihLAkSwPO\n9eO7\r\n=QEie\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"2059676d3485a2f7d23c6c29e25ee64788c2aca2","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint --typescript lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --typescript --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --typescript --fix"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.5.114","@balena/jellyfish-logger":"^2.1.50"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^26.6.3","sinon":"^10.0.0","deplint":"^1.1.3","ts-jest":"^26.5.6","typedoc":"^0.20.36","depcheck":"^1.4.0","typescript":"^4.2.4","@types/jest":"^26.0.23","lint-staged":"^11.0.0","@balena/lint":"^5.4.2","@types/sinon":"^10.0.0","@types/semver":"^7.3.5","simple-git-hooks":"^2.4.1","catch-uncommitted":"^2.0.0","@balena/jellycheck":"^0.1.1"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.81_1620449191689_0.2888002650394794","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.82-renovate-non-major-ae9f7f7e1c08b0a3d4652276f08576dc89ccaf1e":{"name":"@balena/jellyfish-plugin-base","version":"2.1.82-renovate-non-major-ae9f7f7e1c08b0a3d4652276f08576dc89ccaf1e","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.1.82-renovate-non-major-ae9f7f7e1c08b0a3d4652276f08576dc89ccaf1e","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"e4e54e587613d39e278e6fa0a0c7e3e0ae186d08","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.82-renovate-non-major-ae9f7f7e1c08b0a3d4652276f08576dc89ccaf1e.tgz","fileCount":18,"integrity":"sha512-wyQKNnlMRdieGt7OZIHXDokZsPQGBqpLX5lQSiAGchgArdFDRwi+rWmCaj2kZd01sqpz9xG5eqBv2SdIyRxXdw==","signatures":[{"sig":"MEQCIDgw5OC3F/fbClQiYj7Pv7787Gi3ZII5xGsFVMWNyy5rAiAp5WPlnBTxZ2s8jmImyA8KHmT25Ry/g+JjBrGlO42iSg==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":47889,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJglkZFCRA9TVsSAnZWagAAeM0P/iGnGNiYvfh3P25qPy9g\n1dsJu5hrCcSOam/e4mNmDXCWjoCshUgZNOBWyV3Sl/fu6BqugLXC2kT284l0\nnL4bRlhrSgv42rUf6Oi/ptBYc8qgeHoKFQLo61R+HjaFM/05kajdCzZ3PH7j\n6J2d+RQEAw1sQZb93vTvkP5WWmp1JCPdxoX9txGyqxn0+BF73wes32452DJE\nrtO1uRVRF522raTCAyHviemkKzBrULv76ckM7wirR8E5FfCresDLwDHUO5z1\nZLCR8r7OCbCaOiQK71cP0MlcEngXasvDQ5X9HPDjDadjvMlmrkxnDaUkjkvH\nCokjdCrX9nvBtD9mOYOhJ3Iso5XiXV6ggycRTjWbBEs5XB+YE410npG4Ho8Y\nCDqf0Fpi5IaP33vZz2OhZEOfdF8e978fC2TYs1nL3BQsrh8AlwJoErhg8v6W\nYVyTiQekODcBbw8xTQZQ9EDMRWCpfNIssy+cjnWpXAJ6rn7qKBrmQ4WHBOeA\nTdY9Uiv+VxZGKhslRi7Yx5edjLIgMkfW57sj/rEukSiWJOd9MnfHSR3kYpB0\n4txjBO/p1xvGD5FMR7tUDe2nb61N1v+nUOn9ySEuvEplltx/xyo1oN/d/pxS\nPAzexOaooEeqH/3QB7+4sD7P9DqLoGl9FNrGWRM2gIQ++NDs4WWlOw7TQeyd\n1LTg\r\n=Ltg1\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\n[![Publish Documentation](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml/badge.svg)](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml)\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"ae9f7f7e1c08b0a3d4652276f08576dc89ccaf1e","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint --typescript lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --typescript --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --typescript --fix"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.5.114","@balena/jellyfish-logger":"^2.1.53"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^26.6.3","sinon":"^10.0.0","deplint":"^1.1.3","ts-jest":"^26.5.6","typedoc":"^0.20.36","depcheck":"^1.4.0","typescript":"^4.2.4","@types/jest":"^26.0.23","lint-staged":"^11.0.0","@balena/lint":"^5.4.2","@types/sinon":"^10.0.0","@types/semver":"^7.3.5","simple-git-hooks":"^2.4.1","catch-uncommitted":"^2.0.0","@balena/jellycheck":"^0.1.1"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.82-renovate-non-major-ae9f7f7e1c08b0a3d4652276f08576dc89ccaf1e_1620461124522_0.04313605989641478","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.82":{"name":"@balena/jellyfish-plugin-base","version":"2.1.82","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.1.82","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"65e349852084d94222cf8d5dbfd865d328971471","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.82.tgz","fileCount":18,"integrity":"sha512-62o6oFI8fqeXNhfb+Up7XpBjwY+EY5U7n+Gii0d6sWGBak3xBWuDv8/gQwNV/DpCr+jEgHBET60yYzjGbw8eog==","signatures":[{"sig":"MEUCIQDD8Wrnbx6VQtot2IuSoIn8oyMDhT4XPg0cWMDmccK0eAIgLBFUAMMJGUvObWWqBLLd9oI+pgm8mVNYmy7UewOMj70=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":47829,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJglkb4CRA9TVsSAnZWagAAfYMP/3KqM1wgNNfsnuJKxSJG\n7dQZdGhFd49cm6uxQLlJKUCBLQRUowTDyWEiC9qyn9yyCTwAlU25tedyINd/\nynAVOStAOkkwWfUJC/y1qMY2peCdpZLHlFsuYiFoQmsINn12ipxyPgp8Hs8y\nGt09YxT9+WkyzAhUsNlXH2p5CejG1MoclVSTPyg5NUI4WhMT0dDM/37cRub9\nnWZzEuDbVLJ5gMpxTuky32pmGASywUIxCs77yggfnxTYEUY3QiHW5FK7DUO6\nF6WKGMbCLHWOKAbUkIuxOaO+VDcktFxiR11mM3yvMac6xLX02eoR9qHjkVzC\nXJfFUFMhj1J1LqxseK4E65lRT+eyZO548gWkJLLtkbQVhcg8Jt6EHSz8K9Vu\nmmeQjCaxMM1HYhi1X2H19uqsRZFKDbQWrGsL4ATlvEwjaKCJf4JVlBChnvgS\nCBQvYEFrZGGyEVgvwMbDVRsJ8J/RJbwah6BAUlgC+jCI7gYrSFMI6xEOxgnK\npsvbpS/DUjGN8Ow0EmPxdAQj0nkJf3uLvf/APNSNmiKI3lTV7u1E0h7yBkB6\n7iQ9I+EEI/vuJqo/9QDdGRDyiiqcDwOeI9BX+0NSD5v+aNDoxf/BnG0vMI2n\nbT1mMwFovxiDSDF+niigCA4bM1hW6X/fCQs48lfozubNfY0U46SHfd+1108R\nUJEh\r\n=1vY2\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"c3c948664f371347e92fcdb64a7a83cfbde6fac9","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint --typescript lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --typescript --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --typescript --fix"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.5.114","@balena/jellyfish-logger":"^2.1.53"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^26.6.3","sinon":"^10.0.0","deplint":"^1.1.3","ts-jest":"^26.5.6","typedoc":"^0.20.36","depcheck":"^1.4.0","typescript":"^4.2.4","@types/jest":"^26.0.23","lint-staged":"^11.0.0","@balena/lint":"^5.4.2","@types/sinon":"^10.0.0","@types/semver":"^7.3.5","simple-git-hooks":"^2.4.1","catch-uncommitted":"^2.0.0","@balena/jellycheck":"^0.1.1"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.82_1620461303651_0.13410764784866425","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.83-renovate-non-major-8571a4686cfa89de5082695e5de84ceca24cfc25":{"name":"@balena/jellyfish-plugin-base","version":"2.1.83-renovate-non-major-8571a4686cfa89de5082695e5de84ceca24cfc25","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.1.83-renovate-non-major-8571a4686cfa89de5082695e5de84ceca24cfc25","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"7c305c5f67c4c0d91eb5dd76101cf0d2f296194c","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.83-renovate-non-major-8571a4686cfa89de5082695e5de84ceca24cfc25.tgz","fileCount":18,"integrity":"sha512-v54B70hyLvSLlwkR6cdtvbdJKlI/zWQeOa88GpXnIPk1PI7w/rG9j7pc6/JBir5PuiahFG+4s1PaWqaPGqDl8Q==","signatures":[{"sig":"MEYCIQDcCPEVttiig3hkz1Uue18uOjliI4fSQ0bIhpy7ZJXOPwIhAKd5HX1f5vINdG2AI77YsxcyOBrsQ6R3zN7BXEX7SlrG","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":47992,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgmONTCRA9TVsSAnZWagAAG6cP/3WSRWsLkpIFH/3h+OCR\nEeKvM84E9agdd2/8Q+7Q8vMo29CsLFj9AdXg65kSFnVBNoJMn8z36LCEDqtb\nxUBI+Hu4mKxT/Y2hU70ueRJIzyapbBJuQG04rN3i79J/mnhZT7OzdBd1J4t4\nf7yIee4wWGm9y6MiIdKNNSAZiY00zZ+PHuqQ+HCao5/bUhfFFvNLDO0+XCcN\nwtaPIpjvX3G+NHRsNEzkYnbj64xoIwefZwX86DOLlfeKk+Qc6Wcdy6Qbwbmj\nJOeJTaum0V8or44WqxWkOmYBocDcThHyx1rq91zkjnZj9N6TVQO8Dh/8RAqS\nNDqZpInJmpeDqzDTbyAm9F4AyvUMd/bK5xMDjl1XDZfqpEPXDQwIO8TGIbut\nqvKZ9ibIiCzKgjBCDVpB5rQQ06N62GRZ0hbi9TPM3ZqQiYanEARzcxzLaSm8\nFKI1VupEmwZnafgmp5fjYDjzzIpW5AaeabfmcB9vU4SLwTcaaPZAOwA+eaxN\n6WUM3XcGPpZTie6KcirGU7SMnhclbmi8C9pyrnWNIAW/AAibyNNdTeV3ZTbR\nw8T5xNPpn5Su0zJhWozOPpYSjVOs6Q+9VsFZ543WOSMVrvNITmx4RXo7laEG\nYl00bKhNJf6QRcNtL24zzGY6npDX62GPrqSNvn7l8bczXe0aW5DjV5nhZGWT\nOwpY\r\n=hv5K\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\n[![Publish Documentation](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml/badge.svg)](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml)\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"8571a4686cfa89de5082695e5de84ceca24cfc25","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint --typescript lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --typescript --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --typescript --fix"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.5.115","@balena/jellyfish-logger":"^2.1.53"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^26.6.3","sinon":"^10.0.0","deplint":"^1.1.3","ts-jest":"^26.5.6","typedoc":"^0.20.36","depcheck":"^1.4.0","typescript":"^4.2.4","@types/jest":"^26.0.23","lint-staged":"^11.0.0","@balena/lint":"^5.4.2","@types/sinon":"^10.0.0","@types/semver":"^7.3.5","simple-git-hooks":"^2.4.1","catch-uncommitted":"^2.0.0","@balena/jellycheck":"^0.1.1"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.83-renovate-non-major-8571a4686cfa89de5082695e5de84ceca24cfc25_1620632402298_0.7120472367132811","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.83":{"name":"@balena/jellyfish-plugin-base","version":"2.1.83","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.1.83","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"9a5fcbfe55ebadbb5df56218d6ce68b257a8db51","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.83.tgz","fileCount":18,"integrity":"sha512-uySjgw6d58OtInMDWQNK3ODXuS8ZnIOhPlQQR+L60/eBHsVxSQ1Pcc+1s6saJMfuiG2fYsHyKeFHH2Fhe6spEQ==","signatures":[{"sig":"MEQCIA/VHDJWq1lYH0YkNyJYLiz0ISpwphqvHeBhTvVqcsBuAiBU2Ou1OoAKtDe2shFLD0Nqc9RPgxevbSkBm6AkpR/d6g==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":47932,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgmOQ8CRA9TVsSAnZWagAAXmYP/RVfY2sr+dyrRVNxJ2Ol\nxn/iStHXT1sZh5CchacHp3I0IdeBLanwqIhBv7kRhFnNdF06UpiCzvLyafYx\nS1PEuWGxgWUzeFbiGuoZ0o2/P2/YAKG8muSjy4Qsnqt7Vc2zKke/2ftxLpkZ\nmWWROLfXRQ+SbMdCr3O72kXNy9GTIPY5nmJ4gyMjh/4eIWIjYwSYeTnFJWiX\ni0/1tmH2yenPnCzWgtXNaK2WAEQiY4RpgwAnbaF78SCkL5pwo2gDT2Jy9ojV\n0aMyNhCgMNzvMKjC1qEuA/mv1k8YGgdZMhDeCJVRrvPc1OIQK4YnU9FwL6qk\nPdju18oUwdH+jMBP+qi1aXC4Jo+2RgDQcJU13u0bqk0K9+4nVI4MYWVTS1jD\ng+vyfrtk27z4mAVbmmePxCpHAADLHiAFSlbAoUZFcT0xkVyuwGF+2wkt5VVJ\nPmriiYXyiVYDVNapvcXJZsNuWgqzhz1ohSw9LdmLuMYS4ZP1MB5a2thrrwzI\nU2ZjCxErDqRRgd8RCH6sSTVlOzz+usTS51+QZhqSGYVJPjmT0v6Xce16cElL\nzBHj77Lt14y87FJrifk0zHhPBvETDP5IcCN0a8JVSfoje5BFZBP7UIvbK4OD\njh1Ut3SbY05tNPuTEtTgXRYFmlsSHDs8PP7n/YYi0BhHYSXKUHOHGND5ts/G\nr92x\r\n=cY5/\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"e756fbacd0cf0d0602116487f3e70e8e14b9926c","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint --typescript lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --typescript --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --typescript --fix"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.5.115","@balena/jellyfish-logger":"^2.1.53"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^26.6.3","sinon":"^10.0.0","deplint":"^1.1.3","ts-jest":"^26.5.6","typedoc":"^0.20.36","depcheck":"^1.4.0","typescript":"^4.2.4","@types/jest":"^26.0.23","lint-staged":"^11.0.0","@balena/lint":"^5.4.2","@types/sinon":"^10.0.0","@types/semver":"^7.3.5","simple-git-hooks":"^2.4.1","catch-uncommitted":"^2.0.0","@balena/jellycheck":"^0.1.1"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.83_1620632635893_0.613511267353994","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.84-renovate-non-major-080f30051f329485ad5f6df48952a68a08cc879e":{"name":"@balena/jellyfish-plugin-base","version":"2.1.84-renovate-non-major-080f30051f329485ad5f6df48952a68a08cc879e","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.1.84-renovate-non-major-080f30051f329485ad5f6df48952a68a08cc879e","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"9dbaee3568a95c385bd9ac3a2eb1c25e2ebbec57","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.84-renovate-non-major-080f30051f329485ad5f6df48952a68a08cc879e.tgz","fileCount":18,"integrity":"sha512-9beBAtWxVkCyMLKwEqLg5J84FDkSY+clFr2EWJnYlFIi6FMDXFG5h0e8+eEaE0iVTOaNt0aEmOcRqL82N0+6Vw==","signatures":[{"sig":"MEYCIQC3DRbGSOXyplJMkBUyBIL6GoplHZ0pBR3HbhXa4QDd1QIhAPs+eZbAxN3tvE+MG5dr08+H6Lp+CnRhi9gXZj4sHSIT","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":48095,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgmQr2CRA9TVsSAnZWagAAZBYP/1iafgmDxXONDYZxaHOi\n8uIEEBfjFvwMz19NjgimQgvPMfSklQp8fJjXz/WSkbubJB3VXfu9llTwe3Nd\ng3xa0iTl4bvdRpdIxiEbkkzrRq4yxf7aOLUCQS3TrhEi19OZyey24y4Vvexy\n1CjC/HbBbzO8H14A3dK2fQCcHSx+LGX1z71QLsyTV7t1uLiZhTAi1SMskksl\nuRZMWlyYuqLfCCQhNGQcb+78w9Vxh4S99rbgkumDsNr3s+FpTklR7U8ZvkDe\n7O3yIeCvf1kLvtLwYgkw1o3qUbJvGrVvqtXnbe1NBdkoTZnJOuiSYRY9pedp\nXayjhFnxf6kBUe0tG9dsEKIYnmhDoaVEagAIpLc0L+iBePal814+PjIyKgum\nuWDvZ0G80rm7dRjInmd+aDeKOrbAwtj91HNY4D16ZHDp/p+GOemWE1ufAwUU\ntvZXl4WhFaZUCX3w0bDCgw6czc2Ph1LrfqvcU4qqlt0iVC6JtSRZslfZ0afX\nNYXfgEvAgodN71G8DvG6GKCXXb+iIMOlrUBHHwdVOxaDSWAsagxyKMzUKIya\n86dhHeTNJA+BcXWmq5S0jMaIVrFl1RM3heZZGqOGjOFi8GTYRLSE0hChKiDR\nRZwcZe0ECCDtcH6dShIOyFLxIL+OLWk1xOeCbVPA4vdw1lwf2wD5f+ABoZVH\nA0Dp\r\n=DLXs\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\n[![Publish Documentation](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml/badge.svg)](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml)\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"080f30051f329485ad5f6df48952a68a08cc879e","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint --typescript lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --typescript --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --typescript --fix"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.5.115","@balena/jellyfish-logger":"^2.1.54"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^26.6.3","sinon":"^10.0.0","deplint":"^1.1.3","ts-jest":"^26.5.6","typedoc":"^0.20.36","depcheck":"^1.4.0","typescript":"^4.2.4","@types/jest":"^26.0.23","lint-staged":"^11.0.0","@balena/lint":"^5.4.2","@types/sinon":"^10.0.0","@types/semver":"^7.3.5","simple-git-hooks":"^2.4.1","catch-uncommitted":"^2.0.0","@balena/jellycheck":"^0.1.1"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.84-renovate-non-major-080f30051f329485ad5f6df48952a68a08cc879e_1620642549958_0.8883363675994855","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.84":{"name":"@balena/jellyfish-plugin-base","version":"2.1.84","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.1.84","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"4c6b676f7b78220978c2dbab49d976d26c96839b","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.84.tgz","fileCount":18,"integrity":"sha512-/PEZ5Ccxd7FbvFoPR+NID0q8psK6MNQfXv6Hi8BD+Bi2Bd6CIOB/wlIZ/9e5k0jxruFYB8x1ENw60lHK9FGHqA==","signatures":[{"sig":"MEQCIAWjqR7d/58wimgvbJkfhA43/MGbBtu9zLjqZdiOSBmGAiAaRIzs+b/UhSCoxuYTC/15H5sjSlLFybhU6tG6pyEAqg==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":48035,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgmQvECRA9TVsSAnZWagAAGUUP/0HtO+9ZXPZRjaNzEra6\nXjMRrToIqLaSF9+CWMuf1dq/T5lZ2Y5BWz3X3X5reAwOSz2c19xB1JPJFhlc\nabdNDlVubjHIh7t7oI37Lqf4dxehtDi0SLIdYPvwq6Ee2co40/fr9CenuzCi\neIXBc8PGhAbc9RiTBvIWVxnN9e+0Lw1JOfl9kX+UNCmYpW073edU3SMhLvri\nW/mrtqigthEhqRvByvBRwBRFkfcBOLJeQD3iVwFO/Nn8uKIq8ogzwHI8bjPC\nrQKQTJq0jR+D47ev9TIngBHnCodAnS+e4QOy70Jnl7Rgs4rrWgRD5aZfTk9k\nG/f0UChO64SK2EKhHmplxSFdXmUk1LKazfUvm1fa/oK8KU7JDgzU9G8uc23U\nA/jztX1NvVk8yQuTuSLAZgUxA1Ron0akdQnQeoNvWmAPJyg5G7jgjjCPZOQF\nSjW3BG4yLQXz8qLuBRnz/vyfxM3ywivVXUMfo/kHregMwKCCQehD7ZYO2GY5\nmG9LswVDE8+uQjOd7ryicWaqWVCzZwY6tiT96EfJ7ntEcFGV9zz6ygREW28D\n14ydxJoTjp7uTX7no1eIiHLEoPu+jdA2r6eqOR65E4dZWeOti68yr/6rK7l3\nirAXamN2ITrYSWZ4hTFqjttPIA4/l5pQ4w3H3rFnPZ1Nd1GSgOUMmKdtVVyo\ndKzV\r\n=fk7T\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"2bf0d09556c8a467382d5c319981e4fcc376d40c","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint --typescript lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --typescript --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --typescript --fix"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.5.115","@balena/jellyfish-logger":"^2.1.54"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^26.6.3","sinon":"^10.0.0","deplint":"^1.1.3","ts-jest":"^26.5.6","typedoc":"^0.20.36","depcheck":"^1.4.0","typescript":"^4.2.4","@types/jest":"^26.0.23","lint-staged":"^11.0.0","@balena/lint":"^5.4.2","@types/sinon":"^10.0.0","@types/semver":"^7.3.5","simple-git-hooks":"^2.4.1","catch-uncommitted":"^2.0.0","@balena/jellycheck":"^0.1.1"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.84_1620642756508_0.25271081027211006","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.85-renovate-non-major-3d93de9413b955aa294108a1732b1312f88f21ed":{"name":"@balena/jellyfish-plugin-base","version":"2.1.85-renovate-non-major-3d93de9413b955aa294108a1732b1312f88f21ed","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.1.85-renovate-non-major-3d93de9413b955aa294108a1732b1312f88f21ed","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"578b7caa28478ecc5ed2cce3256901c266b87352","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.85-renovate-non-major-3d93de9413b955aa294108a1732b1312f88f21ed.tgz","fileCount":18,"integrity":"sha512-j0zwywuw8KcKjqryIKElzXaeCaUQVj00vdNHNT4VHt6RTUzjU+gre2w7hSi/pH/DlcigM+mUMHpA2OPnPjRuuA==","signatures":[{"sig":"MEUCIQC8zohEyHNDi1wPXF0t6F+aFYcvms500up5VLHxauyklQIgAyGidQLGLzqQNbBt1NPPTF3k0oo+gvIbCDVLA2Zn+Q4=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":48161,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgmkZSCRA9TVsSAnZWagAAx+8P/RUmHtSUFKyOFzNd1vPn\n1DpshZdveKwNDWoYiBw/Oufv8eAAPdx+6SWGcG6pc73lcJM9tWISmrO/zTUg\nMRSp5MX5v3Kz2KIArQ0AAIjHoOSq9qq1SWPk8z2fiIBZu2q9THntdUVrcmlh\nmzSEd89UtLs0PT042GbxExedxW5RPE+00RxuqJmEOFMm7dXZbOq+qlrg4Nlw\nQy0oOoXgHC5lfv3/f/R7YYW4VlxvssxEFc3o8tFCo5kG4+jbXn8fiydoSJcF\nGEEZDs9tGsJqD9S0jyZFmFO3fnB8fvO+p2Eova5c3hyoj3C4WiiJfKUQ4ZWX\nXCtAwk0RIbPPv7H3SSyuwi8X2UjIA41GkcmzxQGEZXGiEdLRa9p8O5VTPpad\naEAJUxjQ7ReEc91PqNnMQev/fHl/agJb5FnEzSPjPaZhdm9Q9nvePa/2YoU3\n7F8FeADLmRVpwiaPXSuiU8IAiWOS2DdnmNSXI9h4eHgsHd6TQ01rA/jFqzet\nAR0Rwj1WJJOWzoqTIWlFRr9LXI+EmZDFyVBnpK7OfyPMh8xxHxyn2owS3+57\nmWdcRngMWE3B9sSez4mdR5l4pUNYDtAsyLoI4NM1d6vp4HDXx20Fzu/iT0In\nQtlk2ppHKnpyd36Z5UYhaHfpWxhO3o4ndqzd0EqahJX6ZLCohNfRl7ZVtvr6\nW4+z\r\n=HLWU\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\n[![Publish Documentation](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml/badge.svg)](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml)\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"3d93de9413b955aa294108a1732b1312f88f21ed","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint --typescript lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --typescript --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --typescript --fix"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.5.115","@balena/jellyfish-logger":"^2.1.56"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^26.6.3","sinon":"^10.0.0","deplint":"^1.1.3","ts-jest":"^26.5.6","typedoc":"^0.20.36","depcheck":"^1.4.1","typescript":"^4.2.4","@types/jest":"^26.0.23","lint-staged":"^11.0.0","@balena/lint":"^5.4.2","@types/sinon":"^10.0.0","@types/semver":"^7.3.5","simple-git-hooks":"^2.4.1","catch-uncommitted":"^2.0.0","@balena/jellycheck":"^0.1.1"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.85-renovate-non-major-3d93de9413b955aa294108a1732b1312f88f21ed_1620723282141_0.3156942432089469","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.85":{"name":"@balena/jellyfish-plugin-base","version":"2.1.85","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.1.85","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"aa4a324bbf33091bf923c2ba30633c6eea5a37db","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.85.tgz","fileCount":18,"integrity":"sha512-6guzGGK19E3NsJwpOC9JZZcXvywUS70hWXFlmyF0zKZn225iOR+JtfN+YuAN15QuUEiS26M7rtbhVJ0CBCskgg==","signatures":[{"sig":"MEUCIQDfJqJ4Yx8ssWYAPoi2iTEukq9PWUcghIvpPnNNFtOcngIgXIusdbhiTqJucSYABs9S5faPQxr8WKAdXKo5Aw9cAJs=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":48101,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgmkcQCRA9TVsSAnZWagAAbsoP/jHdZk27OONgZ6Ju6aga\nFNj8NbyLKAMYQAGgez+wizH1gtrkozJ/cWUnN7gMw5l3ONU3onhy+t2NDiRv\nNBSDq+dmR6c+0WuEfhxQluPby4Aer/L2VExkiVpVfuVGVqJ1stGfHcZs8ul/\nFiWgFFsVMlROCWSyuuVVK8cJmeP5JjUW3AwfXdLVh4tn71y9GBAwtE1nSTvJ\nyffa6bw3Aj4m2YvDE+1krHPSd67qJbocz4F8zI865f+GARj/or/6EIABA7tz\nQMoCr4iuYUIR5UsmJtQmUf+IEWz8+oP8/MRuTuHWCTCmWOLOQtNQCsATe/TL\nzwYXqCKW04nHnHN1Bw4raypNgjT0h5IJk9O3EMl1NoZePxpV5yMvmqdFjtTy\nicuxwaBAJj4/c86Oj3G2t+3LtDQ/yh003NSencBGz+T+NSga4ABZrpIsw8Xt\nJaUGpogpYIjlc/bnXLQw/PNopyMEZdSJY16QLd469tG1z/mZBFqegeo+GfbK\nETKRusJ+LHF2QWPXUgw9PXDeDl1milZBPU/xQaAss2TPFCfZ7xKAIR6AiIAN\nK8IeS66xYEjBT9kK1VM6bsJOtQXF1b3yxQysyeGCIwKGhFftSvHIRRTuFQt/\nMfq9TB33VH/Ie84Ikbr+gGjTZXCTDoTz8zMOQGzsEQMVoybwQpqe/WwKsEmP\ncr1b\r\n=koe8\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"6b603f295fe444cabfae67798c310b2eb41b8fa2","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint --typescript lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --typescript --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --typescript --fix"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.5.115","@balena/jellyfish-logger":"^2.1.56"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^26.6.3","sinon":"^10.0.0","deplint":"^1.1.3","ts-jest":"^26.5.6","typedoc":"^0.20.36","depcheck":"^1.4.1","typescript":"^4.2.4","@types/jest":"^26.0.23","lint-staged":"^11.0.0","@balena/lint":"^5.4.2","@types/sinon":"^10.0.0","@types/semver":"^7.3.5","simple-git-hooks":"^2.4.1","catch-uncommitted":"^2.0.0","@balena/jellycheck":"^0.1.1"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.85_1620723471778_0.3068514941819138","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.86-renovate-non-major-127c87e4d1ea62fc152fe2db930888933a390bf0":{"name":"@balena/jellyfish-plugin-base","version":"2.1.86-renovate-non-major-127c87e4d1ea62fc152fe2db930888933a390bf0","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.1.86-renovate-non-major-127c87e4d1ea62fc152fe2db930888933a390bf0","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"9d66abe661490c7ac965987249538311ed8401bb","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.86-renovate-non-major-127c87e4d1ea62fc152fe2db930888933a390bf0.tgz","fileCount":18,"integrity":"sha512-HDfBD51VQX1eZg+8eGQ5EVZcROGm5KjAjbPLrFQXgbJMW7yQUfeL4qnPQTLtmD37s5stvgXdY/ZDEJy8uR4STg==","signatures":[{"sig":"MEYCIQDC28S2bOUp5X8qRpdV4gf3cunWuAWON9M+Wsl5VRoYMgIhAJ5fuMvdIQPu9Z+L8Q1N/Z1gfHGq7dDuzkYVp+JfLnfL","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":48264,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgmkhCCRA9TVsSAnZWagAAjmYP/is3zQp/mZKbGyeoURvE\n2gv3v/2eF/LRqIBC8txSdaPolgnvTGrqPRZICn9qDYwNmw13u+AfEl5h8Kgd\nE+eRMa3rc5FT2hto4OHqAl3Gxx8rfG9JHTvQVharqCViWjNdGmqOLkduhqVj\n796B19E61sUzUT2wd7OUN46Yt2NYaTrdavxq19WE99G9HcKTxTh8W9xNjEOg\n8Cnh2JxnRyIiHUqdqKwY5lFc+kZ0/+3EuzSOXZ9Cy/6/+ekAAaYQGu4a9To6\nwoaiCeiPzZcmMWiltY0MB69xmioctEIswi3VtFgoniukS19YFSNWGt14O7jo\nva8icoAFKY0A08fzq7fZ0PG4/0de1qyGBwMY9CtqDubrajGpNLNHoP4pZDqz\njHYCwLAUBe223SiC3q4yqBripJHTrUhqw596GeFa9zdn/JMheFtIX1V6QhYv\n+qNbSw8sbnNorbfn+pnWijWOliFarIe3SfRmPxnxViMh7tFomM80ugUWl1KL\nWfNizvD1/qR5mXYCPh+lyYGvnUCqxHRNGBnXJFV5ob+9fqN/oqOCtPJC7ewI\n2p+peRIVr2IDtcDPCO+CQhebDT95qY/TB0163wg9ozE1eSkGmaQDqUvq8iBo\nHFlS2rjIOb4GS5TExObwamVqsxrCEO+xyaBha8rtFNw7Tuexq0O3PNtRRSJw\nS9I1\r\n=3bBM\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\n[![Publish Documentation](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml/badge.svg)](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml)\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"127c87e4d1ea62fc152fe2db930888933a390bf0","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint --typescript lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --typescript --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --typescript --fix"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.5.116","@balena/jellyfish-logger":"^2.1.56"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^26.6.3","sinon":"^10.0.0","deplint":"^1.1.3","ts-jest":"^26.5.6","typedoc":"^0.20.36","depcheck":"^1.4.1","typescript":"^4.2.4","@types/jest":"^26.0.23","lint-staged":"^11.0.0","@balena/lint":"^5.4.2","@types/sinon":"^10.0.0","@types/semver":"^7.3.5","simple-git-hooks":"^2.4.1","catch-uncommitted":"^2.0.0","@balena/jellycheck":"^0.1.1"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.86-renovate-non-major-127c87e4d1ea62fc152fe2db930888933a390bf0_1620723778062_0.8887971608951395","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.86":{"name":"@balena/jellyfish-plugin-base","version":"2.1.86","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.1.86","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"5819e2ff9ced4465a15374a447f3db37760c36ab","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.86.tgz","fileCount":18,"integrity":"sha512-o3hn6Tptcycc4fyApiH5WdbIRuq19bxCadqV05ForVBoLgm6gxTF6VoiZEVO6Fq4xP0ubNWWAQs2lHGtgQKV0w==","signatures":[{"sig":"MEQCIDCScdxwvG6m+z40u6ukZEDm96cGPuPT8JFPCuy8p3IvAiBr+RsCc/EFBvvnTi6SkK7aMiQdsW+M2U32Q0N4HGvvUw==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":48204,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgmko8CRA9TVsSAnZWagAAPK8P/RCjyYhiANYZHfhJDd+E\nZMnoc5owSwgLufDb2CYSqYMYHQlbgQ+gd7UKRq3HF9VxfRLqQv4OAbTtbNB/\nHWLVHrJENgbSH7KQmelqRNXYbPPJumDeULHLVcsA8FRwtG25V+g9Gq0m8fms\nnjzoHFzvzFh2GeKoLtMk8opSntkqATL+j/sLR+E0Y6MSGn2Gl/E6AT8KLg9R\nr7Pk+iqAL6V+uUOOZTEhbKAiOmV2ORfk9KbLJo1ACFfZhvX117qJQXKVKl7N\nJ48TthjKEJEPQahaKd5qlXwBmVV6djxP4mD05XvG334jEOtEPI+DIKLxSbrj\nyfQ9xGL7BoT6//de18T/ADkm9ml79mx2PVfO50vBflNp17+d5vRiJsNkoogb\nEy9cG8L88J1DxAO3NQbbMzH6lBotiQq53cBI1HgMDD+BrnKwa6xOEp7yclLq\nL4e2ypt51/aF09GVpJZW4PXyRQ5U2nIQk+5w4pV0sk967AQYvl0eTwivG4be\n8bG/4wLk3wuiEa/sCewx0geFKM1AF0EkMU1v2IE5zWNIb4H3d/3wRTDlWuDf\nWAGeO7r74Q6xdYpkGcikKclOwJmNqa5WhGxhxBDRpazx53FgVDB+SYkasx73\n75Z83gBVvgA7UZ4MGgXY1bt9EfirHWdWu9mjg1JwkwdhbqxkPY2OxluoHKF9\nKTr3\r\n=6+iE\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"05558f7853bc759e89562f0e3f7dd08dc837267c","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint --typescript lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --typescript --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --typescript --fix"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.5.116","@balena/jellyfish-logger":"^2.1.56"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^26.6.3","sinon":"^10.0.0","deplint":"^1.1.3","ts-jest":"^26.5.6","typedoc":"^0.20.36","depcheck":"^1.4.1","typescript":"^4.2.4","@types/jest":"^26.0.23","lint-staged":"^11.0.0","@balena/lint":"^5.4.2","@types/sinon":"^10.0.0","@types/semver":"^7.3.5","simple-git-hooks":"^2.4.1","catch-uncommitted":"^2.0.0","@balena/jellycheck":"^0.1.1"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.86_1620724284236_0.06388077551775617","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.87-renovate-non-major-feffe6eff58340b047bf424377ebdee67646c623":{"name":"@balena/jellyfish-plugin-base","version":"2.1.87-renovate-non-major-feffe6eff58340b047bf424377ebdee67646c623","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.1.87-renovate-non-major-feffe6eff58340b047bf424377ebdee67646c623","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"81fcf225b1f58cbc6cbdec5a3eede081dbbbb0d4","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.87-renovate-non-major-feffe6eff58340b047bf424377ebdee67646c623.tgz","fileCount":18,"integrity":"sha512-w8QdTFVmhV1CcZlxCSKToP2GpLrMBjcjwmWKLgz6jm1U6vaYVEQwdNoFRCXFbT/xRVotLRblcMj54P/sMKJcxQ==","signatures":[{"sig":"MEUCIQCPIKSjkBwXURDdHeAxhnWWniOQj46hi3+l4htMqw8gegIgQJ8ou9EsBdrtfOrrR4z7o/HQmnM9p9CC+Dmol3UL+bg=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":48367,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgm6kTCRA9TVsSAnZWagAAF6wP/3RLoH9XEqfX/Ela+Nd7\nfmBcQyxtxSLpBvDDz+KWG+0aVnM1NFCHxbghogdJkfIh36gLqpLzOfb5rZuI\ndwDyS31tRicxBHh8FpIxzdl7bZwez+gN48FSTJhgqX47tKUfhSA5WHUmjXlX\nVlTUDRVFRTdKenS5Kuyph5nadwQgorlc2iNZnrW80kqRINmMFiJLZ9E3c38r\nGapNFFR1h7yPrLp6a9zmoYcNpl9be1hnCpLv9nb0frdo6C9TLalIJRcsGHMQ\nFLU7lufYbnnCui8PcyMYY2SRsdPzgwTp7pFaGMMcEiSXNsMg1yg1BXX7gTZr\nwkaX1gUMN/OR1wGa5k5yxGgRb3ttEJ4m6dby9mtKqXrAS8M7GtnMRRGp1lgV\nNyNeKxE7lObdxldpU5Wmk+w377S2pzwcgfGOMhsZLxdWhbopOO0xky7mq3Nv\ngqKRfNIejFPE6BoxisabtvjHPGUl4Mnr+aT3P9bL80fFtt2eC0KBfxUzpqGE\nO4TPmcF89ceZfz6+GHWztZ0zbHQxVjYrA9A2V95qzkbaxVxaOWdvCHxT+7OD\nBOidl7UhdrlLlKPuK6VEtlANE/jiR4aIufVsnFzhnvDwqrnTjjwstR9xhEDW\nKXJRj8zLQEbTbH+Fs6Bh+PyOjEzMji6r3bSUpyFgc/hvJLh4Yf5zepM7mWHz\nb1Bn\r\n=iDiK\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\n[![Publish Documentation](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml/badge.svg)](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml)\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"feffe6eff58340b047bf424377ebdee67646c623","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint --typescript lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --typescript --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --typescript --fix"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.5.116","@balena/jellyfish-logger":"^2.1.58"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^26.6.3","sinon":"^10.0.0","deplint":"^1.1.3","ts-jest":"^26.5.6","typedoc":"^0.20.36","depcheck":"^1.4.1","typescript":"^4.2.4","@types/jest":"^26.0.23","lint-staged":"^11.0.0","@balena/lint":"^5.4.2","@types/sinon":"^10.0.0","@types/semver":"^7.3.5","simple-git-hooks":"^2.4.1","catch-uncommitted":"^2.0.0","@balena/jellycheck":"^0.1.1"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.87-renovate-non-major-feffe6eff58340b047bf424377ebdee67646c623_1620814098266_0.3731343177384787","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.87":{"name":"@balena/jellyfish-plugin-base","version":"2.1.87","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.1.87","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"5a17c97cff28711d505f42a7de68bce099a82c32","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.87.tgz","fileCount":18,"integrity":"sha512-ae9MxiE4vrwyTzZBrmbA6ku9eyOzlY0HtJolvjV2JG8ySPyECYH/mlMkY3p3qMSt2pGvsJYhhyw6LR1rRQ2hDg==","signatures":[{"sig":"MEUCIQCGT6YUeY6tmradfJjL+amWEnT/1iqH4DIW+PIF7IjibgIgZxtpQqa4kHWJ5w0CJ7Eil+Q2Za572IgHaO1u4f81F5I=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":48307,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgm6oOCRA9TVsSAnZWagAA860P/2fYzr63AUkK0qggcVws\nJOzuO83z1dQIQiACI4skG7MJGbLhHzzc4w0xY63zLBNrF83tGwlfiL042QIY\nNawpvidYY/kgPJZAdbUO0JI3Rck1VvW97J9TR1zNMAfOK8ZPqQmLw5bw7mAA\ndwJtiMzFNLJ5WpEQpDngzBkQog9btl8G8yPpxD6A5+ej36oo5GEWCyHjzRJJ\nQ8mVHLPc5mCjgNxDDrbeEEr/tAjy+zHMe0WB3+ZrBFfZVW/g+XgrwGjr9d12\noMliB5wA/Lbyk2iieH3wQjIAKNh1U/0G0NKjVDLPWcFC5oH4KvyDUiJsVR2y\n4uiyvp+6ZdA+RDJpNaIpjwuvzmAOeeaGxtlzrS/q//ZZ+pzs8FyUrfE55NDC\nt+L9+ATkn9Jx9chfSWY13TYGJqMbCGUJVIgT1VPIHaMzf/XhbWSVV2zXjsgo\n02E0uEXdsXM6GGGobkXGUl5iDqZv252ugoNtDlEWI7sZoVwtyv9vfhaD34XN\nLYTa1WimQpiE5w5evGktuNRCON0KtEQymYDUHuXcNPKmwXcJdwuPFO2EwbDQ\ntODmLNAqrY1v+XaeCvHjvS1zdS7q1YQPhBvdSG5C4GLeEUwUj2QIQ+SO+zv6\nVRzgOt3bezjEpWpSHsydDTOEkZ0IfXp8IZEWnMw3CQoJw3TFE+aC8V5WvAg/\nGxi8\r\n=Cddh\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"53caa51e28c64f44987fed141f3ea97ce4e1f2b7","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint --typescript lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --typescript --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --typescript --fix"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.5.116","@balena/jellyfish-logger":"^2.1.58"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^26.6.3","sinon":"^10.0.0","deplint":"^1.1.3","ts-jest":"^26.5.6","typedoc":"^0.20.36","depcheck":"^1.4.1","typescript":"^4.2.4","@types/jest":"^26.0.23","lint-staged":"^11.0.0","@balena/lint":"^5.4.2","@types/sinon":"^10.0.0","@types/semver":"^7.3.5","simple-git-hooks":"^2.4.1","catch-uncommitted":"^2.0.0","@balena/jellycheck":"^0.1.1"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.87_1620814350277_0.9582714875840443","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.88-renovate-non-major-0cc678e5cbaa9388b076ba98e0203da5d60590b6":{"name":"@balena/jellyfish-plugin-base","version":"2.1.88-renovate-non-major-0cc678e5cbaa9388b076ba98e0203da5d60590b6","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.1.88-renovate-non-major-0cc678e5cbaa9388b076ba98e0203da5d60590b6","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"11198f8f7c2314ba5d9d72628565ba3e84fe8eb3","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.88-renovate-non-major-0cc678e5cbaa9388b076ba98e0203da5d60590b6.tgz","fileCount":18,"integrity":"sha512-7TRykT/Qnu2juY/2Qyt4dUV+2CvrehtBrHMrZlI0f1UTO2Pn/EjVOJyJ1TY90ZxF+brvDgueh+2kh8vEeTDwGA==","signatures":[{"sig":"MEUCIQDz6+bfI2MUZI5KRqBBLJi6CXlFlVKxwy1bNa2uyjdTjQIgapfaxyEC6pXqAS8GGxyFpqIQQQT6Oy1UJIw5hAG/VUY=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":48433,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgnW3mCRA9TVsSAnZWagAAlD4P+QAYMHAJdyXIls2wuu08\nye1Pv1CRdPLhyO2G7zcfejrto5Aw520KquTGo2rdjUq+XSjdwj3QQHKeDBpH\nP7+jWAnUC4HBSmKOrSjii2tHnQM6kkQHkxuAjp8CN4bktTgmrro2jKq1E2YX\nGUCxDzCz0/gdlak2545R9JKhNTLmrtLoz6No7Axk5R408xuOchOY0fBDD3T1\nRwKXsYXF4p/qXe55AwfMX55CoWUWlyWVhnwZiX6rGaA+a5joUk0tvjZIEO4m\njjXCdy4wqbLi9AWwP0i6e04nYkwmnK/RtQPLStjBcMaNVAeoAqUg7UV7Fmux\nOkte11s/zMnBWwCW6ddnW3C5HrODhMhyPdxmHXj4fAe8cC2BIvU+rO+gEE0f\nZCE71VZTHboBKhCSrtFyEGjRi5chgo3AcnYShRdoptoelwOiBoKpNRCfsEZt\ntPUDTqjHCw87GwSROyOPynoehPYTWwcKPso9fo6rC39g8nwR5yjepkmeAd6j\nR7Yx6+5Pq+z4vcj+3/iZM4HDFSQAQN1hkCz3boYlM9W3ouIIexueGpG+MlEU\nNIt1IGzsAfzxkXzOq3MoKiO5d591/ScCSB1abvg8zgGKBYMiOjDalCKxRjwf\nvLPvJmPCT1iyOK7p+8KYuLmEnDHleaz5eCGQ5lwVHgcim5psaDCZTfrERLgY\nqtwi\r\n=jPNm\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\n[![Publish Documentation](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml/badge.svg)](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml)\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"0cc678e5cbaa9388b076ba98e0203da5d60590b6","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint --typescript lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --typescript --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --typescript --fix"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.5.116","@balena/jellyfish-logger":"^2.1.59"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^26.6.3","sinon":"^10.0.0","deplint":"^1.1.3","ts-jest":"^26.5.6","typedoc":"^0.20.36","depcheck":"^1.4.1","typescript":"^4.2.4","@types/jest":"^26.0.23","lint-staged":"^11.0.0","@balena/lint":"^5.4.2","@types/sinon":"^10.0.0","@types/semver":"^7.3.6","simple-git-hooks":"^2.4.1","catch-uncommitted":"^2.0.0","@balena/jellycheck":"^0.1.1"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.88-renovate-non-major-0cc678e5cbaa9388b076ba98e0203da5d60590b6_1620930021801_0.05196856645180992","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.88":{"name":"@balena/jellyfish-plugin-base","version":"2.1.88","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.1.88","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"a234ebd26884436481d22a300afa57854d6ab40e","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.88.tgz","fileCount":18,"integrity":"sha512-T9X29Tmajjp/tE0PBKggBu4zJ8TZi0NHrLUTV3GuAcCTC14lpG/Pona0rL61XONeSR2ZqRBAjk6pexQcbVBxfw==","signatures":[{"sig":"MEUCIQChrXrkkMpcBqTVe3mTll8ph50Ce8DqKV87PMcnS624eQIgSe75/gQEOfOBxcaeBidvBRwMnW8hioLmU6reSruiYlE=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":48373,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgnW7MCRA9TVsSAnZWagAA7FEP/jlBGXyN7JFwvSenxOAF\nPy49OVs9xEwFqVK7o+/TNF4F7jbU1rkAvprshaEUq2UPat0aWwfhB8S1XeIH\niq5+0RdeOpOW68rbq2Sgfil9jbJXiXgOVZlKdqG5EF381tuBoupvdUVf5uWr\nDv8xSwlwyDGH7RdHGxwxgbmYHyK/VAELrJeSx3XkzYORn8vtYcJCYZwh2KwU\nfSNyTGzPncqgfavWvqqRHhS6MRmMJxxo0Nvoajf+j09/NDk+bF78bvgXlGQW\n5ck1BG7WYt5dybJquRRA0a4XdsUSnSFAStV3xNA41vDYyH1g1vnKntdF5TGA\nQJR6U42bNeIInh8cEd0dt9XxxjnL3PW1mZu2XkySLLrUqw5MKuFPfxQYKIZt\npq1rKodicJot5hpy8vR8fslPWiRVPL9qo8/duBGsW1hqoqlRWDEMyerAhms+\nmEZcEzWd6ym03mjW1N8IrTuo4Ed9myj7hRK08UG4GQpN7ajB0toCJWmEGpOR\nu52R8vp/FUMQj8tNnj+pLdEujT2hQvvhKdvG+dnUnqSloEBIHuppBEAMAEwZ\nuDN5HKqeZPXLhwS46bFg9Ih3y4v2TaXV75z2e+ltEqrL2yxUphMwbCeXMEYO\nAa4py9TTKHJ6XkV7FgDRrOMDyckslvK+l5JDCcW5WLRe09VwMhXZronDE4hO\nv6AA\r\n=8Vmy\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"99b0c1d01409371a62ea23b37bfdd91a88363e9d","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint --typescript lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --typescript --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --typescript --fix"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.5.116","@balena/jellyfish-logger":"^2.1.59"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^26.6.3","sinon":"^10.0.0","deplint":"^1.1.3","ts-jest":"^26.5.6","typedoc":"^0.20.36","depcheck":"^1.4.1","typescript":"^4.2.4","@types/jest":"^26.0.23","lint-staged":"^11.0.0","@balena/lint":"^5.4.2","@types/sinon":"^10.0.0","@types/semver":"^7.3.6","simple-git-hooks":"^2.4.1","catch-uncommitted":"^2.0.0","@balena/jellycheck":"^0.1.1"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.88_1620930252375_0.686266490003203","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.89-renovate-non-major-b52a51ae3d59643c845cd071c3782096a6e7f219":{"name":"@balena/jellyfish-plugin-base","version":"2.1.89-renovate-non-major-b52a51ae3d59643c845cd071c3782096a6e7f219","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.1.89-renovate-non-major-b52a51ae3d59643c845cd071c3782096a6e7f219","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"d9e8f922a89ee2611d76b7d596bf79e8da3efd35","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.89-renovate-non-major-b52a51ae3d59643c845cd071c3782096a6e7f219.tgz","fileCount":18,"integrity":"sha512-fFvRAS0l1PYTs9fhbjniaExQwjrjHXwSpHhh16wIwzMZbx6uEh0UPtiFYf97UpNfTCF4hUrYO7vHEJK7q8bezg==","signatures":[{"sig":"MEYCIQCjw9jh1POAkDsxpz1G9H+cXUnKGLri7eJI5thCE8iUwgIhAJZm32jMxwtBpnbwMQns+qzkYNqWn8yoMVn8KaJuLhbB","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":48536,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgojoICRA9TVsSAnZWagAAUG4P/Rm/M6GnuGknGUsNKmge\nuyCpyi7fHXI+te2G06Ov2TYhSRMLSJxhFNuEg7n0wd+255Jincdt3v7/d9P3\nzNl8B4jWAqtZeqY/uydnV4d6c2K8rLcL1Hx8wdbpvLw/fb1KvCSsq7GSKBqn\njuLnLPQ10CgDA4wPE1TZFGzXOM8Mms4sIGl4Yc8cRC2HvLjsx2WbquMgS150\nvqenLtIk8k1YEPjNVM0b5kb/xWgDglv4C85TdontmglK6+RaFIvCiLyZ6Kix\ngJD0WFB4Vk+s+dTK4Bz580YxZlY7b2cDnO4t0b7eZT0h8Pl1S6bWfOd5KepU\nFt/hAVhKZLwt+Gk/X25JZSWivpUWasJ1HdVqSoqreOLvCAMbThbov70k5N6X\n4SyM2pwd/NpVSDpSJWzUclgcKLo1wasJ6SiEgKB+g1TMWzIjAWoyGXZRMaYH\nZk40Ec8ICTBy2ppc+XKYhJ19OYMGHDtSubUMKIR6tt9oJz+9JBGqLdvgtqeC\njUYZakJXj6CH3/Qj7JnWpJu0Qq18cdiGC2Y9MdsZEQeHU/EH2q8HrZLgTkpz\n+ZuNkNzIHSQqVuXU662bxrY/DgpCsbZoIlZmpKr0H4MbhO+ntSoErt8nksGl\nPA2YgptDOxO77Jo02oOpd+U8Td4oPM8YsMtr/3SQJdoUmhDdC89vFmn3QFyc\n5xu6\r\n=OQzY\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\n[![Publish Documentation](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml/badge.svg)](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml)\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"b52a51ae3d59643c845cd071c3782096a6e7f219","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint --typescript lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --typescript --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --typescript --fix"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.5.116","@balena/jellyfish-logger":"^2.1.60"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^26.6.3","sinon":"^10.0.0","deplint":"^1.1.3","ts-jest":"^26.5.6","typedoc":"^0.20.36","depcheck":"^1.4.1","typescript":"^4.2.4","@types/jest":"^26.0.23","lint-staged":"^11.0.0","@balena/lint":"^5.4.2","@types/sinon":"^10.0.0","@types/semver":"^7.3.6","simple-git-hooks":"^2.4.1","catch-uncommitted":"^2.0.0","@balena/jellycheck":"^0.1.1"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.89-renovate-non-major-b52a51ae3d59643c845cd071c3782096a6e7f219_1621244424273_0.35827322186454236","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.89":{"name":"@balena/jellyfish-plugin-base","version":"2.1.89","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.1.89","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"a14c9a14acf65c4d41b526ecda51f5ea2ed0038c","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.89.tgz","fileCount":18,"integrity":"sha512-AxFD25soV2FhP8Qy3Z/CyjQOrLG8PxfX0id317qG3HaWA5quY6Of0HEPqyzMOmZld63kgFntprSvC3fOVlT9xA==","signatures":[{"sig":"MEUCIQDhfhWfLeS45D6uu9CIEETEZ3suR4ZBSUim59Iz7LeF0QIgTGokEWBRyM9xQXkmsFMalknM1t8rZx0ZpQST1uBJLMw=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":48476,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgojrECRA9TVsSAnZWagAA+cwQAJW+i92z+X/gnAXm9Ubb\n0/WJfnd+YjVwc2Mnl0lRrSaeMt9VwDM3YQ8RO9bLxkCui+dHUQqqWUkIXbXo\n0yfXm2rNqY7y9W8goRFimIT55e29s6YjPiopLifP43V/Cd22vgcM8EK3CNKu\nFStQPonWMSMGew7zStkYhSVq/7p8F4HhuaFZbxN/RNkucxvKPqp4slcv/zk0\nhURlHJinbldRMiwagtiTalM4KQ/eMw1bKLgcW56P/2YIZyGFyyoxKF7nO52F\nFj+N5DuxE/b6lhRgviyDm/JMlNfqd4utKJ8QkT38jhZD7Jq/sIC+cePPOcjp\ndJ/LiYzprodbafqy32PNGdCM4LlQKuFXUjKS4N519z+WwVLVue8BxMZ0RFTb\nne0RbTO845Yhkcq/SctJCDL/cwMgfl62SeC85OhYqR2TwdczSrNUBdHYf+P8\nAPWU8061j9duYWxXRMrFUVAGCPBvYjA+Xp3UZRgUFAPFoZM7sOUQd/kT8E2P\npMyx3efIybGm/5fQSyNKRszQl0J+23X0YjJEJUSwjI6pHL14NwyqTYNrBwu9\nlkY1US/eKk5UULAwmscmk/s6uf3DqYI56parT0ta2xx82XUYuRXyuhvDwLhf\ndR/icmiX7iZFfhLaxS2YjCrvBPb3w8vtUDCTAzcQUqsD40OFj1AhJmk6pb8C\n8yZ+\r\n=dM6b\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"27674c182e257f6486ee2ab5b3c4207bcbfe8478","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint --typescript lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --typescript --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --typescript --fix"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.5.116","@balena/jellyfish-logger":"^2.1.60"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^26.6.3","sinon":"^10.0.0","deplint":"^1.1.3","ts-jest":"^26.5.6","typedoc":"^0.20.36","depcheck":"^1.4.1","typescript":"^4.2.4","@types/jest":"^26.0.23","lint-staged":"^11.0.0","@balena/lint":"^5.4.2","@types/sinon":"^10.0.0","@types/semver":"^7.3.6","simple-git-hooks":"^2.4.1","catch-uncommitted":"^2.0.0","@balena/jellycheck":"^0.1.1"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.89_1621244611774_0.6786365420526532","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.90-renovate-internal-non-major-c1df32bb18c89e23fadf3b237332600f028829bd":{"name":"@balena/jellyfish-plugin-base","version":"2.1.90-renovate-internal-non-major-c1df32bb18c89e23fadf3b237332600f028829bd","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.1.90-renovate-internal-non-major-c1df32bb18c89e23fadf3b237332600f028829bd","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"ad1464bf43707cc471e200bbe7af96ea88bdc02e","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.90-renovate-internal-non-major-c1df32bb18c89e23fadf3b237332600f028829bd.tgz","fileCount":18,"integrity":"sha512-uUtTvFTj1meGSb9S3MeaZKLBcXbtrmsuNqm96i3I6ZzzpONLAvh7WTbtHGYAqDeJ9xygFm8DBNwqIQH4mJwCOw==","signatures":[{"sig":"MEQCICnQga0csvnNNYaPwAFUuiSnAX6FIe5Rty7S7czZ4Af9AiAukmsVS/32b3WXbNdieOVnoOiTOGAl3XMhUnKo5eRxWw==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":48648,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgp2ZQCRA9TVsSAnZWagAAFr4QAIHhy65D7NcYPEcVST9f\nvlOBFXzi9rteVjxe3pqrJ8cAoTa6eD8PU+gF/eNHLK17UzOsr1osYcMHECVs\nn7r06oz2xVyrzY5kjrW0QYtBs2zd1rdokEAzWZ7dJU1tyejeYFbp62GnhZXY\noTg2xc4hRAagBUiZVULUfUKAjHko/3zLA/ZKAa3MpaErxq4ujr2CkjaZ6jlX\nh5+/Edpk9Drqg/5lAGAJ3jr9phIOGK/IuTbSIA0TKD4rL3dlIcOOy0/dFuYA\nTrNIsvqIhqBATuG/Uel/XrqODjg24Qv9Oj5HYOfLog6TaJi5wYBXX5bkTr0f\nlyPYpHkRRywbF+vtsPnxB95c2HUPzsPzQfV0E6GTDUaUEa04bPXny5Kyo4lb\ntOxS0HE3yN5/bkQOJVWGqJHfJPb1Pizacr04xSWXjEqD7HXRRw2iJcyKItBC\n7HQDMgovco8jCjN5IymejmYOWgClhaT9AlN76nhJRtFK7J3jPcPw3GIzYmaU\nkM4Xpw2k3qVOSbpNGZgyqNU2BSZdg6s66dvwSiH1kOevH7J7fG9qxMmq4bXg\nWL19kSTc1fSgSLrUM4neYy2zJYiBY4oPW3Hw3+Erl0aX49Ow+8GtFcFJVYsb\nqYuhrmoQ3Bz/VQ9W67HpHxbeG6rFJp8Fud48uA7w8/8WuGMhd/9bXqUtt+NI\nDCbs\r\n=yPNp\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\n[![Publish Documentation](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml/badge.svg)](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml)\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"c1df32bb18c89e23fadf3b237332600f028829bd","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint --typescript lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --typescript --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --typescript --fix"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.5.116","@balena/jellyfish-logger":"^2.1.64"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^26.6.3","sinon":"^10.0.0","deplint":"^1.1.3","ts-jest":"^26.5.6","typedoc":"^0.20.36","depcheck":"^1.4.1","typescript":"^4.2.4","@types/jest":"^26.0.23","lint-staged":"^11.0.0","@balena/lint":"^5.4.2","@types/sinon":"^10.0.0","@types/semver":"^7.3.6","simple-git-hooks":"^2.4.1","catch-uncommitted":"^2.0.0","@balena/jellycheck":"^0.1.1"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.90-renovate-internal-non-major-c1df32bb18c89e23fadf3b237332600f028829bd_1621583440087_0.8058768676558195","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.90":{"name":"@balena/jellyfish-plugin-base","version":"2.1.90","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.1.90","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"325c4fa4d4325c4da536beb05d21e3684c6fadce","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.90.tgz","fileCount":18,"integrity":"sha512-a+6mJrL2nMNnMT/DVzSD0xncX9OaQ3yrMAAvr8FtQIYjUBmqdpkVWrAWFHwha4EunS0pQwlu5dVERMPqTIJ/YA==","signatures":[{"sig":"MEYCIQDcKmCM/fy1M8+MdzTRpwdsw56+A+eoZNT9BAee26wJngIhANZ799UbDbNecKMSdUpjGZgl5uVrRaOdulLxQaEuaQcY","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":48579,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgp2cKCRA9TVsSAnZWagAASScP/jj/BeX5B9ub2J9ghUHQ\nxRegRzSmc09n3OJWGka8I3pQrMuOpXYwIMpNUwrjiS86hl0FoG0wQ3lqNBVz\nqazl05+4KVFOIUxN3HrP3YA4ICOP3C8f+MOnvvM5GgEuy0J31UHv90BmjoJ6\niS6AzgPgiy6YOX9f6PS/zZJSwN1ukLOYIrEgx7EOLnGqw4lsR+860EE+yRf4\ny9LZsVdaRxOHKhXqne0D4sBX8Nooh0HUgF9ihyPJxtM0VVIAKfNCaa7s94Tm\n3tCE7p6MfRdQVtg3KonAblM2AJI/Mp3IGufVtUjVbzoV2MR/J0OFw22iJYW5\nBnBZJ5cQeIz0ZNSfqDpbmqUow7f8IrQzmRT3/BDThOG900IsnoTaqduxGsDc\n/woyHRuQxcQMr10qdgWeq7HOQP0ipaktpbsib3pHtINlrjt/ZkEEWYb1oejv\n6knG9Hur8mtV4dhFghmMSd7urrkF6a2RCFJWHOaYMWjrsMnlM+WK2SS4vp3+\nFLivkABd0ScO1Aq9MdCFoqwYHjgIffDRMPR6uuzemvxTB0jhgcuS4gqLI/ww\n7VtAWZPgyWdkGpeTOSvZEUXmk4m1uF+oHarMdAUHXenEZE8FzmiYwJEXTMiQ\nXTqEL+dwNbQUDkblJ+r5GCcMw74k1asNMx9jCEtmHM287qJ5oQY1HcuIcJaX\nbWE9\r\n=cu3Y\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"5fd32fd898f163f163cd680f04e1462fdfa3d960","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint --typescript lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --typescript --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --typescript --fix"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.5.116","@balena/jellyfish-logger":"^2.1.64"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^26.6.3","sinon":"^10.0.0","deplint":"^1.1.3","ts-jest":"^26.5.6","typedoc":"^0.20.36","depcheck":"^1.4.1","typescript":"^4.2.4","@types/jest":"^26.0.23","lint-staged":"^11.0.0","@balena/lint":"^5.4.2","@types/sinon":"^10.0.0","@types/semver":"^7.3.6","simple-git-hooks":"^2.4.1","catch-uncommitted":"^2.0.0","@balena/jellycheck":"^0.1.1"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.90_1621583625731_0.5531680138829576","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.91-renovate-internal-non-major-8f49bbd81cd51298bbcb5fc26a0bf6d1b174f9c7":{"name":"@balena/jellyfish-plugin-base","version":"2.1.91-renovate-internal-non-major-8f49bbd81cd51298bbcb5fc26a0bf6d1b174f9c7","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.1.91-renovate-internal-non-major-8f49bbd81cd51298bbcb5fc26a0bf6d1b174f9c7","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"104f96e926c0a13cafb5eb296302cf8cdfa06df5","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.91-renovate-internal-non-major-8f49bbd81cd51298bbcb5fc26a0bf6d1b174f9c7.tgz","fileCount":18,"integrity":"sha512-qxWjq+5gUBbMLeUUoT1t9qKU11Sz8zcPKryWqHDdNVIJn7ry4AA+xYCWoEJZMW+jtReLVjS5ZBpGPPUZYEcd4g==","signatures":[{"sig":"MEYCIQDbjdD3I7y4D/zVbY+/6odpw8FRVp0QIbNGhGVTHoeN0AIhAPY+tYUYrTF5A92EVe7rJdECNSzQUnRxTOYeUQgkR2Jd","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":48751,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgp4QACRA9TVsSAnZWagAAduoP/RhYHfkiocMbXweeqiNF\n1UTu/kszEHqb07KkO8ASd1AbZ0VkagKNkBORACLjHyIxj0ajraTltWAnMPJ4\niyKcOd5Ksq/hWkU63h6FwIThUjxDy+E4WzIdQEl6X3Ck3cYqH5PaSPg6DRJN\neWI0IKBUUP/Efs9Cz6W20EJkT77nafEiGI6f2a/JB56NVEfWLGJeJseMsqeX\n72pK3ebyveNlFtZFHQ9xXyrqy0p9bueBe6spEbY1AH+wLD+VB8ikCltoo+Lh\nVkq4HwUGShj+tbHcWL8xjDTB1thOaC+bSgXkWsONslVhu9wv6c2A/Y/skjuj\nZB2uz7di5wM5X4En6sSfUA1aGR/c3XbwAClVo8iEIubBe9V1u2HrbVN4jgL2\nZ6/1NMMwFQIfm1uX0dK6FS1JYGBjVmXdyr0g3loLLVeOCKmW56M7hpVRri+F\nLa7SjtSouNAzqcFNemOKs5ftoxQQpaovR2lNTUWY/EVPAps7rnpFBDetdqMl\n518YZ6+34EiGfJJwPweaX14sJaZF1YaFyyYQjSPec84/8mzYGAWi9G+BGD7g\n2A3vbASu6vlJ73R/HOt/Do3FX4CetDdn+eGNnKyElorznfOFWRPFbwLjYfhN\nMsQKwApFHsbdPQB9l7a1Yw+qLuU8/XV9BZP3YweR1NVyGufW64Q4PkA+ScJn\nU2VD\r\n=mYH+\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\n[![Publish Documentation](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml/badge.svg)](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml)\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"8f49bbd81cd51298bbcb5fc26a0bf6d1b174f9c7","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint --typescript lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --typescript --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --typescript --fix"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.5.116","@balena/jellyfish-logger":"^2.1.65"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^26.6.3","sinon":"^10.0.0","deplint":"^1.1.3","ts-jest":"^26.5.6","typedoc":"^0.20.36","depcheck":"^1.4.1","typescript":"^4.2.4","@types/jest":"^26.0.23","lint-staged":"^11.0.0","@balena/lint":"^5.4.2","@types/sinon":"^10.0.0","@types/semver":"^7.3.6","simple-git-hooks":"^2.4.1","catch-uncommitted":"^2.0.0","@balena/jellycheck":"^0.1.1"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.91-renovate-internal-non-major-8f49bbd81cd51298bbcb5fc26a0bf6d1b174f9c7_1621591040280_0.6391417124827334","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.91":{"name":"@balena/jellyfish-plugin-base","version":"2.1.91","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.1.91","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"aaac646fd039c17d4ed4dda4b1706a5453cdd3c1","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.91.tgz","fileCount":18,"integrity":"sha512-BbOhl8H95XP0RL23qEEvz0Ti0OOIMWHigvbm5hx4jHbQmSbXWK0GhU30enfEYvSciH/orkzEpH2WU54MJXI0MQ==","signatures":[{"sig":"MEUCIQCuj73sQqA46hgmJC3zd/pyZS3Mc4QZgvDzHSTl+j7XXAIga5/xNsC6NC3vQOuqmWhm34ZhScrMSwlsff4bEIsgBgg=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":48682,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgp4TOCRA9TVsSAnZWagAAti4P/iFpnnl7bLftTuFpUMOK\nY6wY0xBoINwKtlm1Ll2te2xapjz8z1ajs7YsNTuavlEQbRVf0HOjdkvyFN1s\ns3pVRdNauLa1RLdKDDX6zhn8phmgp/MMAb7b79YvyR+4LjZmSYM5s+gW8wUq\nZCGliVltwrQekTTGtrMb+bmMxMF7tov8nfCuSZyNdEpT/Dt0JHP4wDrllOOt\nH58rQveowUYljILO0DdZemhZ+31stdX0IftjStqVLvL1XrXgdtZsqdZ2fB60\nNvC5VT9EVR7+cekeQ7zMFrnW313i8dJtrQQbEnufyFXLOCHmNhpLQy2nnCgS\ndeJyqdMivOsIJG5N6aR4KjIYrI1C41UTJt9pDzP2rTMcpGMxO3UoriANk0v1\nPW0fx+Qe+HKo9ZVNykBMwH8Pitn6b5Nzd2xW8AaMLzEazvsjqkhBv5WaPKcu\nKsbkCcHevMtFzYkxkRUKRyL51ZPG/At0ibAAGiR6Ac4eFOWJwyMeDKIkAbH+\nnHPsG6zdx4GecMjG9OYu0myU/69QY7MRBj4ZzebmpULZmiSfCMtsUgsy3h4X\n5Y4zzYfnJZOVj5dJqAhVRIZQEZDKL0u9kvkyFJPIGWpSOmb5cbrzcR4qUqvN\nGk1ZOnCRCJWsfYoMZgIaI+PajivWBfDqbCQ/iBF+7Z43OCqS/WXv+mzsfHLS\ntE3C\r\n=A6TS\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"cbb0a54c39b6a97ee6fa63a92c28c76d643540eb","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint --typescript lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --typescript --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --typescript --fix"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.5.116","@balena/jellyfish-logger":"^2.1.65"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^26.6.3","sinon":"^10.0.0","deplint":"^1.1.3","ts-jest":"^26.5.6","typedoc":"^0.20.36","depcheck":"^1.4.1","typescript":"^4.2.4","@types/jest":"^26.0.23","lint-staged":"^11.0.0","@balena/lint":"^5.4.2","@types/sinon":"^10.0.0","@types/semver":"^7.3.6","simple-git-hooks":"^2.4.1","catch-uncommitted":"^2.0.0","@balena/jellycheck":"^0.1.1"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.91_1621591245859_0.3463730093629671","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.92-renovate-internal-non-major-f03debf8c9ddb84917b7c32162bb19b3e6372edd":{"name":"@balena/jellyfish-plugin-base","version":"2.1.92-renovate-internal-non-major-f03debf8c9ddb84917b7c32162bb19b3e6372edd","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.1.92-renovate-internal-non-major-f03debf8c9ddb84917b7c32162bb19b3e6372edd","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"273c945acb9839e01bff5289819681f1d8d83832","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.92-renovate-internal-non-major-f03debf8c9ddb84917b7c32162bb19b3e6372edd.tgz","fileCount":18,"integrity":"sha512-n6ENtvUnxCThcEo/bpuT8bre20RxHs5jddiwAs1kjUAYQ6WU6ZBXPpwdZHNdWmGD+bt82gtrl7uWlBbEjA11+Q==","signatures":[{"sig":"MEQCIC/nWcOE0fYTCq/AbXQxPn50mhoyj1JRzbWneSwnjlWUAiAIBDKQFYorxJUZyWwoEW15sDw9y7rM7vZPhyPy6y/sxw==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":48854,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgp53kCRA9TVsSAnZWagAANbIQAKS+VmXadW7XmeMI5sDe\nYt60egLaoCttRKXzHrK6/z4ZJBj+vj22mz6std3q0FWYwc1sqqmbSpVfXVJt\nfTqrOabSbJc7TIk14iL9zky6DJhppZKHnUrpSo/ctx81VOoI6K3sv5fBNapn\nGhbsGglvzmpnpBhsLCULpqzqE8Gcm0UntsUbdA1CfFZ3yLWsEG3zYbAlXkvv\nfeIxR50KoPsASRiSkJ/VoadEVYCtAZBJo6aLcS7ef1H8BcaQfZJcBquPWleO\nuvqEkfrjzgJlw7N1bjO7FS2idgbp/7OtLkISbkz4kuBpTKddhisRRK/+iqma\nBrEtXAmEbDt2OrN0a28SJzXnUXAqrRdL6QOvDPGl+U7SJ8YSWrspL5YgcmWH\ne12I/FRwq16s5UUeqHNQ9aByhRkUeMlqmfWVtEDyYfhSl00Snc82Zv3vtF1B\nTzHIcrGgoO2UWm6k8lqCblUvIiXP6hBdq5ps3pMEW+5zC6dnys2KhOmzYT0i\n1aRt279pULXhRjtL6iGm5zVXNzbhVHKD3Fki/RJGArDFnXdDnk0EXUX2k/MA\nVgbDDbmncPc6fRKkhfdlO9k3jte+Ro8SjlFQQgygukPRDtriiXygIxCkpstI\nbgcPQY5rlFSHz3Lvof/xmS5r95owBxO2XzOLlPoanDwh0AmP8lvRe02XSxA1\nOqD6\r\n=yYPy\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\n[![Publish Documentation](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml/badge.svg)](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml)\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"f03debf8c9ddb84917b7c32162bb19b3e6372edd","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint --typescript lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --typescript --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --typescript --fix"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.5.116","@balena/jellyfish-logger":"^2.1.66"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^26.6.3","sinon":"^10.0.0","deplint":"^1.1.3","ts-jest":"^26.5.6","typedoc":"^0.20.36","depcheck":"^1.4.1","typescript":"^4.2.4","@types/jest":"^26.0.23","lint-staged":"^11.0.0","@balena/lint":"^5.4.2","@types/sinon":"^10.0.0","@types/semver":"^7.3.6","simple-git-hooks":"^2.4.1","catch-uncommitted":"^2.0.0","@balena/jellycheck":"^0.1.1"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.92-renovate-internal-non-major-f03debf8c9ddb84917b7c32162bb19b3e6372edd_1621597667992_0.10291535835163357","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.92":{"name":"@balena/jellyfish-plugin-base","version":"2.1.92","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.1.92","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"67e3d6e5e5c0da82804718fb91b64d5843fc5ef8","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.92.tgz","fileCount":18,"integrity":"sha512-43PKuslXc9eejmKBEibs1GDHw50m2nI/elA0o/cDK319L9hFqTj9S6Acw6alBUy0sKq0I1U/blwoLaBibBMKZQ==","signatures":[{"sig":"MEUCIBjidsofwbL7sWVVReWcWcxQdcpShqU/BbsFW2i/KLJ/AiEA4bFR1DH+4X7JwONrGhLTbEFT8bQwsm3jAmOi8JOAqug=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":48785,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgp56lCRA9TVsSAnZWagAAK3EQAJ/uOzFDLu0sPn5U4oaV\niJGK270ox+o7S5TMkdri07eUNJGqcv+rjEbvrFHGRdv+UacjrsqduXay4CQx\nmV6+39lyfMICndalGK5HvGWDdf7lDrT6mIpcg05X0ZZLhTLfxgv4J13rsRZt\nXdPFAnKvor1nqAYF/lW/nwGtr3CrlTXWq46vF2DS2/x2SBJss/DOSgz6c2Cu\nI1G00tmf3CQrUl33xuvWsAME8SRaNwbhSkBddYVJ9eQGHSlK9Cb4XWAymfVL\nHEMxjOA438aleAaVfmiSe0RvkBgVXkDEdguxJrHt5nb0iUHq4XzjiDDMQnIt\nq4Ok9RmNCGl5yV/zOLkS3lHmu/37w6VfDsjzKrc/vByeTMn/6QomxwzP8duQ\n3NJ56HGFLrqaHFmP12ECYhs2AifhrMKfHODE9+KhItnY+3KXpHVrFgSNABFa\n0zdF7u1d5Vg/XOfegqp9GFMCpKF+0s+wRyncacvfipNdjOqTT3428RSd2GM+\nw4vWjxBjCDiNci2DNSo2ygdoRzXA5JbKPJofqFUJb85Ug7/F7p1bISReVf7O\nmX2ohTTqbNwmglAzlpO3DVvQ/jSrztJiKAN6f/xkgG26twT6kijEyxQ5bsMQ\nLa0c5ZWdd+uetl7dMKYmQ01LICokHBM8O2H+5NJLbZ/HXGwDx8+s17wljk3U\nerLz\r\n=CM6M\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"f2b070731dd6a80c13238086e3090880a096255c","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint --typescript lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --typescript --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --typescript --fix"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.5.116","@balena/jellyfish-logger":"^2.1.66"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^26.6.3","sinon":"^10.0.0","deplint":"^1.1.3","ts-jest":"^26.5.6","typedoc":"^0.20.36","depcheck":"^1.4.1","typescript":"^4.2.4","@types/jest":"^26.0.23","lint-staged":"^11.0.0","@balena/lint":"^5.4.2","@types/sinon":"^10.0.0","@types/semver":"^7.3.6","simple-git-hooks":"^2.4.1","catch-uncommitted":"^2.0.0","@balena/jellycheck":"^0.1.1"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.92_1621597860572_0.5687938421360506","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.93-renovate-balena-lint-6-x-ea381b41f72bb400cffbd5f85bb8d8c20195b982":{"name":"@balena/jellyfish-plugin-base","version":"2.1.93-renovate-balena-lint-6-x-ea381b41f72bb400cffbd5f85bb8d8c20195b982","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.1.93-renovate-balena-lint-6-x-ea381b41f72bb400cffbd5f85bb8d8c20195b982","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"8cb38061d8bc389d1dd7df3b989fa9c1c274d6f4","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.93-renovate-balena-lint-6-x-ea381b41f72bb400cffbd5f85bb8d8c20195b982.tgz","fileCount":18,"integrity":"sha512-YT7jdvIMX0GSrpQ+st9UmN3eXgmQ6quglfQ6H9Sxw41SP1g9WWl7baoIJ8XheH1wyjrxE+h99S7Ky/tK28zpVw==","signatures":[{"sig":"MEUCIQDYuoHsg7hRi94yz64Zw3oApLN7oVW+XIxHSktTwAAJrQIgC+B9caRhJTbKLnhiPRRN9/bL+5ET8faaK+xHhwTKT7Y=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":48937,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgp/RjCRA9TVsSAnZWagAAQx4QAJ/TOQxzZ0rH+xvE4hu2\nAhy5n4wCZJsCjuoDTOCmeCARy8gVTLj4GTlEZ9v+LxCq/YwaUcjpxqjsoWQq\nIFT/3BDnED//mT9WA/L3EGRiBNsxVeCZkx8gerDTs9qrqJkDK/sjkWyFkjLY\nILELNxHBGy12T3LexbHmyBYNLeEJiY7lJu4oPIU3+8Xsv93uEDWM95w8z/pd\nzNNPjakvTVbAd7hQ9nXmWQiCK+eF0Gsi9bBds4vhck5b2zKP3O24/tpWJCZ9\np54tY4E6fFq0JiYUgp05LWEdqZUjZHuWsSO1krePSEiAE/vsLJGRM003wjML\nFsdMvA9YASF6KCwoEyQS7fijhdqUTGwTvEYozA9QmbkbQFYP6W7sXx36eF4G\nyRJEFgQzeoqh+iNd8Gpx1c/rvEQIVXC5avGRNgNDlZrXMAw6DbIeVV6cp2A+\nkrvk3pt5wSFWXSoiwHWwGwLFP2NhPoByRcfrJuBxafC39ivVe4ZO5XATQoEd\nxVHjFE03L647m15NtyXl4mgSzMbrPg9MgkvD5bJdotzRH4G4ejw61Uop88Bu\nzV0OTXgQIc7VzLoF4nI1dWZK33cbIuw29dMp91xytwOrhDxMnyZPvFeTpxns\n0wSqUUvbRLkRlYlSBodRDGRj3Tx3+dRWXLPFSkSfanZe3xTNm4v/cQNIgkmm\n/rDa\r\n=cZ97\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\n[![Publish Documentation](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml/badge.svg)](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml)\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"ea381b41f72bb400cffbd5f85bb8d8c20195b982","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint --typescript lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --typescript --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --typescript --fix"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.5.116","@balena/jellyfish-logger":"^2.1.66"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^26.6.3","sinon":"^10.0.0","deplint":"^1.1.3","ts-jest":"^26.5.6","typedoc":"^0.20.36","depcheck":"^1.4.1","typescript":"^4.2.4","@types/jest":"^26.0.23","lint-staged":"^11.0.0","@balena/lint":"^6.0.0","@types/sinon":"^10.0.0","@types/semver":"^7.3.6","simple-git-hooks":"^2.4.1","catch-uncommitted":"^2.0.0","@balena/jellycheck":"^0.1.1"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.93-renovate-balena-lint-6-x-ea381b41f72bb400cffbd5f85bb8d8c20195b982_1621619811360_0.4440038111790756","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.93-renovate-internal-non-major-d15bb1d6a7c7697cf304ad139302ae157b3bd6b4":{"name":"@balena/jellyfish-plugin-base","version":"2.1.93-renovate-internal-non-major-d15bb1d6a7c7697cf304ad139302ae157b3bd6b4","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.1.93-renovate-internal-non-major-d15bb1d6a7c7697cf304ad139302ae157b3bd6b4","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"d811f735e053374dfb5a74331862851df23acec2","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.93-renovate-internal-non-major-d15bb1d6a7c7697cf304ad139302ae157b3bd6b4.tgz","fileCount":18,"integrity":"sha512-5If48jGwHD5b3sAA7lCXzD9xICPNZXxtDvuJ/V0H26NnfiQRLwUjFDs6OaLE/bwJsMnsI5Ph3hCeD1nIuH12+g==","signatures":[{"sig":"MEQCIBq0wNkeD9ThPNqV5l+esn/Xnzkch7K/2Qd0vMamFrCaAiA1y5QyZderrOiWjeAtz1kf7w7HhAsXAhF83vFToCchjA==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":48957,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgqGRxCRA9TVsSAnZWagAAjbsP/2Gw6ixZElhNu8ijK0Xy\n1xnaM/tmrvLTdpJxqZS2BPcIo2cLfPp/H7AcZDqG0q2MDbDVb0pGjke2tf1g\nHx9j//ksbwBoPSeNS/hnoF0AsZYtDY6P8RvXqUMd7ox1sT3G0IPwhqOVTsL6\n3vl36v4s2wudKgSraiBalAzEkVCtYzuskJSuMj91KhSmgmm+QjbrOopvBcdu\nCWrqYttr+7TmUb53MXKulhTP5ZPfV2EBZk5FSmMzS6aCpxy9NSLjYXoJd2vN\nMKlNRU7cOH66HYqcPlv4VVEaCtGw7mFnqen28BodlRXu21i6Tv9y38DUT9eW\ny9vnrGEnpthbNbrfZWyPhFnTDmvmJkWoM+cuVbC7A9xB3wpMpOmHq7Gzd69y\ngl4G5OBCxg5BWVSRzMVSd8m2jQLqnNU2AOoiwll4j2c0ljBgmr9dcii1HDfM\n9Ohbdml4Ct3EvpHNmSYlhQux/yARhRVzD4mNFRyTS8bjYX5MevOVLF/l0RSK\nBPtWL2jqRLfcaAq/LYOc3CxIJQ7sxqHe9q8s+phwY8YzHWtz+FYglqxbeZCx\nF9BJ2CZGvPrnTA/3Lsi+pxnHI+yJ5zXxHTNzU1CQLZQA6gVLa2BQmCgTGNYy\ng580KgzoRSU6YKXAsceGkQgrcqsbSppYYCZqr66clQunpavsYTjMvmHzRhb0\nwY9l\r\n=LfS/\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\n[![Publish Documentation](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml/badge.svg)](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml)\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"d15bb1d6a7c7697cf304ad139302ae157b3bd6b4","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint --typescript lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --typescript --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --typescript --fix"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.5.116","@balena/jellyfish-logger":"^2.1.68"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^26.6.3","sinon":"^10.0.0","deplint":"^1.1.3","ts-jest":"^26.5.6","typedoc":"^0.20.36","depcheck":"^1.4.1","typescript":"^4.2.4","@types/jest":"^26.0.23","lint-staged":"^11.0.0","@balena/lint":"^5.4.2","@types/sinon":"^10.0.0","@types/semver":"^7.3.6","simple-git-hooks":"^2.4.1","catch-uncommitted":"^2.0.0","@balena/jellycheck":"^0.1.1"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.93-renovate-internal-non-major-d15bb1d6a7c7697cf304ad139302ae157b3bd6b4_1621648496345_0.4507387517733292","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.93":{"name":"@balena/jellyfish-plugin-base","version":"2.1.93","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.1.93","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"92b1553a307f682db008a3e6c348ad109b315da3","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.93.tgz","fileCount":18,"integrity":"sha512-o1PoG+Qs1qs8CIdCu2gYIfem8Vr60ZxxYvp4GMehw4vJDLxmsbFJhh+nvYFYX2ASOCOJ8IGbzrscM+miUfaVhw==","signatures":[{"sig":"MEUCIQC15Jmbk767wP315xZsDMhYMixozTXjo1ovYEpPRvUYBwIgefW3AN0YN10kMQr4o+3UDSGfYxwNWSRGsT1m65x/z1k=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":48888,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgqGVKCRA9TVsSAnZWagAAWosP/jk/4PnkksHL3RjDPO4i\ne66rLl9vwDtZjWwPUeOmi+nipaQSU346C1nMjqKFU3DxtcJPVtnYUH72UdQE\nP/tdHdo886uF6TEPz0mONx3VlO44HrMEY50p6AjxrxmTAWNyHyfpCBz+BESI\nlJEPkAgYVePU6THtCvy7nFQuFBE1LnDH00h4tiSAgNkyMQOmcQoOBU8icVq3\nu/hrJ5CQ7ijcHyx1srGhBrKSV8QUotwuCewGgI4b8K79Gb0EMnBqrCLKdtmc\n82zw0PfuIFHDuE3cNx8E2JK44WMg4bWgGKF98ektm+RwwY19vX+wgmBivk2Z\n8XMGIhxhTlO5XR9EIm/bQmPda2c6bEMoLTLKjZlFw5o4u6mlGOIo+/gEDo1w\nQyLT0O+8cqPQ7vaALtvWsYChzF+L4EwxJrM/xpp0rO37wmfxSs6DKvGflyBH\n6CpyMU5MokgXDxVnKRIfODds6TXTICEzwOan1BpRb3foGkBd4pWE7leKYbez\nwxpzLNCSv5hn9YS3IGEl/aNg/oKexV+3H1TQQdxShcSsSw/a7PSTf52BJ6Co\ndT1tfUf7hwbPloerKe90ClHIPqZ4wq+AFSNazcD2qW+hQj0SR+v4X4xdwBa6\nzz3inaQcctH+1+UjVI9cRXgvbosH8Avy3fCrDXu/Ez74a4RaYUvO40m53XpV\nkoBf\r\n=BThp\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"112606a63e2a3dc42bee3f428d719a019775e13e","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint --typescript lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --typescript --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --typescript --fix"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.5.116","@balena/jellyfish-logger":"^2.1.68"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^26.6.3","sinon":"^10.0.0","deplint":"^1.1.3","ts-jest":"^26.5.6","typedoc":"^0.20.36","depcheck":"^1.4.1","typescript":"^4.2.4","@types/jest":"^26.0.23","lint-staged":"^11.0.0","@balena/lint":"^5.4.2","@types/sinon":"^10.0.0","@types/semver":"^7.3.6","simple-git-hooks":"^2.4.1","catch-uncommitted":"^2.0.0","@balena/jellycheck":"^0.1.1"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.93_1621648713628_0.24692640298156543","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.94-renovate-balena-lint-6-x-00cadae80b037f5f8d316cc267cdfdeedbf062f5":{"name":"@balena/jellyfish-plugin-base","version":"2.1.94-renovate-balena-lint-6-x-00cadae80b037f5f8d316cc267cdfdeedbf062f5","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.1.94-renovate-balena-lint-6-x-00cadae80b037f5f8d316cc267cdfdeedbf062f5","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"7f30ec59872f0b7f77db8ba94b6d747d328289d0","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.94-renovate-balena-lint-6-x-00cadae80b037f5f8d316cc267cdfdeedbf062f5.tgz","fileCount":18,"integrity":"sha512-W8gwOL5JFjOjx2NVq1aOARO6Vd4ByYsOv6IOLPuqzL6W0gN6wTA0U44POnD7hT3UEgQb99E4xmnKOv7sZEFm9g==","signatures":[{"sig":"MEYCIQDHBXfBxJTBjxEKoJi8m6NdwFoHs10++CN0U5wFKLARNQIhAKrNwZ0ZDzGx/79sDuH3ujpKn3YTho1zRcv/uVWqmHx4","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":49040,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgqGZnCRA9TVsSAnZWagAAj1cP/24iz26EF2umYE/P6XOB\nLZa2g6LhmtxQq/GwOOmxtYDnkl4OpOkQN7Fgg6AQ7qXTysuEqGRlf8A62Lpp\nQdqDRLGeO9QfmQzewT7DnZeyk5dHox8x2ySDvlk/2Vrr0yzOecH4SdB3r19j\np4tXKptJL9LhZPxRqH6hCUZ4LkLsF/Zv1KYfVa0MaoEj8TuJSwnxvY5dswWn\npD1QqSFnk7FSao1shH5bOqcy+aNi3/c5boPwYEyIOUV/bSqWXNRcTDbjfy1V\n5Ybh8s70h7DJ4KGMAq/pWUk3RQ+rZodGE4t9u9enbrDP5bH3S6FyHYRI3O9s\nu/NlwrmEtocIR19P+hHYBw5AyL8wgEqrbm/ZYoUe0aFDAfc87PcIZnHchjP/\nSic1TWBkHlwtZTvp/ut+J8aAFwNwolK3qCtDPxqXJPiSWnXpbkjQOKZXocNC\nA8clfX2usBGytdnZCkwKKYfbz6xdmkTbrznUAM5QaRnBw5UzRLOdvWI6OAiz\n7dvEPSIKiMeIaEp1eglkI5OuMl513KmldQrltqqDvvwHsIhUA0yeesCau4x5\nsGbh2D2culQZc/DP+YpXLfQ0TQXIMd/HnXlUrNOb/F+mkUkuk6ubrGyz+JWg\njqpV7zne1EbhJvOQ6jrvjq0Ji/lXWmLWguFwnFD89yMSOQcs367TVDxCK/PV\nLENV\r\n=w7on\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\n[![Publish Documentation](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml/badge.svg)](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml)\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"00cadae80b037f5f8d316cc267cdfdeedbf062f5","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint --typescript lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --typescript --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --typescript --fix"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.5.116","@balena/jellyfish-logger":"^2.1.68"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^26.6.3","sinon":"^10.0.0","deplint":"^1.1.3","ts-jest":"^26.5.6","typedoc":"^0.20.36","depcheck":"^1.4.1","typescript":"^4.2.4","@types/jest":"^26.0.23","lint-staged":"^11.0.0","@balena/lint":"^6.0.0","@types/sinon":"^10.0.0","@types/semver":"^7.3.6","simple-git-hooks":"^2.4.1","catch-uncommitted":"^2.0.0","@balena/jellycheck":"^0.1.1"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.94-renovate-balena-lint-6-x-00cadae80b037f5f8d316cc267cdfdeedbf062f5_1621648999075_0.4932076074864771","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.94-renovate-internal-non-major-1c54ea53ff94135d3a94206bbeb7fd5057b1fb35":{"name":"@balena/jellyfish-plugin-base","version":"2.1.94-renovate-internal-non-major-1c54ea53ff94135d3a94206bbeb7fd5057b1fb35","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.1.94-renovate-internal-non-major-1c54ea53ff94135d3a94206bbeb7fd5057b1fb35","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"4bcf29bb668baaca291b464f0aca9e5289e7e0a0","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.94-renovate-internal-non-major-1c54ea53ff94135d3a94206bbeb7fd5057b1fb35.tgz","fileCount":18,"integrity":"sha512-hO9qAZq0babDQfR8OwPkruBG2oPKfWUTl0zPy418EDZsI4MlbEUp4x60uH8gt6D3oOnaX8rqSvnSR0j3kKb+ow==","signatures":[{"sig":"MEUCIQC+NWf6GZUwEudSmpfAkD3q75wEkG4QC+aaxjwKKVfBWAIgIf38W5vA1thIn2L+ikUpgsBRW/QgbsHxkMz2c7EjhTU=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":49060,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgqblrCRA9TVsSAnZWagAAMHMP+QE7d6NLjcpDd9Na98K6\n0gIPf8YjvYRYLlxeAUxxWCNrLKP7xXLfvnvENOjeFfhjwO5xGXrlyuNp9a9r\n0/xLnuM0mAxIl5fMrw3vnNd9sdI7vpcbsPyuOO1iZUxX8l2yt3VRo8/zWvcC\nxVg2g+KFNYsw9XQwu9Q1kbwfuPn8sMrPRSm1TXW2eyPpqcsom2xP0mDJWf09\nYuJFIL+qq8ORdyIw8r3wADKNn3tkxCw2CwEVTuyzuzhUQj5dI35FyZrcie0B\n809M9V6xbh87lC6CUcvzHnywWGfYkfrPmCwyv0petBgVYY6r/b31oEVnj7Tq\nHMIAi26Mvu0hK0nUZOnuo9sPLFxBjBeD5V1Zr6yuwUMLaMLXrc8bS7O/x7QY\neOEIAwYc+lCyqnmCLx9Jxgbq+bqrthpJWv0a9/wA46DJ8Z38SraH45EqmL4h\nd4lhWt5Bc6w/hDUGYbI2cEznUdyBVxbkKqFyel64DLTYd5DMtiKGTBs44Uzf\nijET5JqNEH/goS4u/SPlVxubHVNkhZmm5i0RDJazhJ7Pd6Iy+jGOvdhdoXDS\nIaAvJEc8jc/iJ45VWPvZKeICfs62j9HoDWtHzF9C1ig0gfYYeb3ZvbcsmDtL\noMvSONSuLAop5Y7UobRCI/rBl+Rn0txBx5JMD/zNFdmF9GRVEeKRBQfjQyUD\nmZdW\r\n=WWYz\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\n[![Publish Documentation](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml/badge.svg)](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml)\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"1c54ea53ff94135d3a94206bbeb7fd5057b1fb35","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint --typescript lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --typescript --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --typescript --fix"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.5.116","@balena/jellyfish-logger":"^2.1.69"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^26.6.3","sinon":"^10.0.0","deplint":"^1.1.3","ts-jest":"^26.5.6","typedoc":"^0.20.36","depcheck":"^1.4.1","typescript":"^4.2.4","@types/jest":"^26.0.23","lint-staged":"^11.0.0","@balena/lint":"^5.4.2","@types/sinon":"^10.0.0","@types/semver":"^7.3.6","simple-git-hooks":"^2.4.1","catch-uncommitted":"^2.0.0","@balena/jellycheck":"^0.1.1"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.94-renovate-internal-non-major-1c54ea53ff94135d3a94206bbeb7fd5057b1fb35_1621735787173_0.9244162779666141","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.94":{"name":"@balena/jellyfish-plugin-base","version":"2.1.94","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.1.94","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"92dc1e77e09cdc0a08c1a3f58c07ec8814502c9a","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.94.tgz","fileCount":18,"integrity":"sha512-1tClN4pk8IbK6UpzSD/w51VfFPutsQnm6OsBAi2Pgh4b4stMZPh8MWbahGSihR2GXmqlw4YewU3dN3X6z0fviw==","signatures":[{"sig":"MEQCIAx5Rs/w5czBQMdA8RsTbAzX2S8+37qp9FYQAQ6LzFVOAiA7OaAL+mrcQxgTcNBELmZuhAJMIecXe8s4eJomEYS0EA==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":48991,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgqbptCRA9TVsSAnZWagAAkUMP+gK7eCLzzcMhXr2QABww\nWV7sJdBpzERhSGXZSYU4CT3jl13uFPXHfCfuiUeQDJDdrOrf/1x6D0Yf4M5L\nVV8km5uV8Ct2VAolbfD8aSYk/M217HpoWhHWWiM5iy8Izs00ECNBGMdshnS/\nfjW9QRqvyZjy/9LDI/Cq1Xe/8uXlJjMyG+QgJoc+rXR4XRpqz3w5e3C9b//O\nVFiVJ8dYxXfIKX0us3IXnNP5UbTrjZSOyYzZihdpjewW78/zWpX+qcGWcN+r\nybRxhsDQSiNyzb+bMQ/gVQu5idUuAGddTYlUhVZd4ZDzsf8Sml+xL0uda2aP\nxTR0YN/QWsZJcHjHLopKrO9UsuuzMvxh1rXqnP4BtayZCQxCz0nTabG3BazX\n9J2J+yU0J+nt/hOt5TspVzvQaKO+cfJt+ZSkAVPWTQ/lrlnQ50FyffDdMe6f\nOReBLPSDFdGd4EhSXXQ27nxUBVRScd3tinEhj5Ys66DNlHJBJxbvNL88VJ5Y\nHhBS3W3T/9kPL+sl33Xg/sNuJgCsYOce3AlHhn+zJRTLcOBPVcLjbLp83KPy\ncVJ2xTClizfSt2LrVUf+6Cv5x4unbOpkuN0yo0TNbO21iOOMB4xIS9FnrtZN\nfIPHs5maLquh9HDscOPyx8EfaoHFhn5cfzs0xwbV2i323KjbhZmyvSoYBM/Z\ncrlb\r\n=Dlkt\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"ac86dabf0e25707caffa90af259f3f9790b2d566","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint --typescript lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --typescript --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --typescript --fix"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.5.116","@balena/jellyfish-logger":"^2.1.69"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^26.6.3","sinon":"^10.0.0","deplint":"^1.1.3","ts-jest":"^26.5.6","typedoc":"^0.20.36","depcheck":"^1.4.1","typescript":"^4.2.4","@types/jest":"^26.0.23","lint-staged":"^11.0.0","@balena/lint":"^5.4.2","@types/sinon":"^10.0.0","@types/semver":"^7.3.6","simple-git-hooks":"^2.4.1","catch-uncommitted":"^2.0.0","@balena/jellycheck":"^0.1.1"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.94_1621736044546_0.3151217244980187","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.95-renovate-balena-lint-6-x-7d03dd494350e5165b89ef4fc8da9e67dffb714a":{"name":"@balena/jellyfish-plugin-base","version":"2.1.95-renovate-balena-lint-6-x-7d03dd494350e5165b89ef4fc8da9e67dffb714a","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.1.95-renovate-balena-lint-6-x-7d03dd494350e5165b89ef4fc8da9e67dffb714a","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"d1be612ef0f080b7c988835aeb4f80380ec8df45","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.95-renovate-balena-lint-6-x-7d03dd494350e5165b89ef4fc8da9e67dffb714a.tgz","fileCount":18,"integrity":"sha512-c9koH0PdGAYcryoN8hcVun7PM8By5a0jEaDw5HmzjEIs6exLhwss08xRz/3oz74FKS0weY96wOqIJmh1/Ea2kw==","signatures":[{"sig":"MEUCIQCKhRfHwCA2uBIkPlGCnPl6jDbi01uiIKc2mnTNNT0WWAIgBjvMCZ6Utmz406rhTaXjdE4Smfa6OH2ssYc2ehVvWf8=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":49143,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgqbthCRA9TVsSAnZWagAAv2QQAJrtrbF5rGCSgSBKSSDX\nl7ONLk6erizSUarnzMg8lC36zuYGlPVGOxRLdQQVNoP07E808tOYNA6Ji8i1\nKlEFt4559BFpVlvI9Abi06/KR5QzQWU1tdUucZCHFWVBHWmO/d/AWjH+U3NV\nqTY8cawA0fSTURfy5peTncTMzqpEEgUKfdj7O/vwpNMbHjHa9Ik7BPSTh8EH\nvQI9s1A49qgt1C+wsCebIxrKHLA3hZwHsdbsSJwLsPI6oRfJdjB2KyMmjhYw\ncMia652zge418Lj3GMj/pmpJ4F+R7hWw0v5IvNRwdJgER5Kt2tMwJwbaVbBU\nxToTh00CeloZg7+J5s1MyO8I+UgnGT7BJ4il0ZCGbZa4GRDbvmJxIt4+qTJL\nOGd68Qre3ANQvmXVxWiXLtMtJu7GGZcVecnbzrlkwkyYRKkLlP3GaEFhjz+4\n0e6sKkmNcRMzDMYajFsxcbPDgJFkguMpf8zeQNcEsBlMyRm1dfbRzj/cgGxW\nNenqYrxCYEzcs8GcjHsirK8JtRuPjzFxViLzdPEdm+zooc4U12hfCQXrruFI\nEkVgfgzp9scoo+7oPH4PH3Ks/JVHySCwGFOPXMpCu+rAVNQX0HBNhdCg7ROH\nb/O2sekx+MgXTC+3FtsPUGD6bELWW3G3tVY2wL8Z71TNY7VBJiZUFlDSSV0v\n3AH9\r\n=hlIQ\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\n[![Publish Documentation](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml/badge.svg)](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml)\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"7d03dd494350e5165b89ef4fc8da9e67dffb714a","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint --typescript lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --typescript --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --typescript --fix"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.5.116","@balena/jellyfish-logger":"^2.1.69"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^26.6.3","sinon":"^10.0.0","deplint":"^1.1.3","ts-jest":"^26.5.6","typedoc":"^0.20.36","depcheck":"^1.4.1","typescript":"^4.2.4","@types/jest":"^26.0.23","lint-staged":"^11.0.0","@balena/lint":"^6.0.0","@types/sinon":"^10.0.0","@types/semver":"^7.3.6","simple-git-hooks":"^2.4.1","catch-uncommitted":"^2.0.0","@balena/jellycheck":"^0.1.1"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.95-renovate-balena-lint-6-x-7d03dd494350e5165b89ef4fc8da9e67dffb714a_1621736289062_0.13923004979432574","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.95":{"name":"@balena/jellyfish-plugin-base","version":"2.1.95","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.1.95","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"ab78131eee3b1dcf6e6e8537b7bce9d028156f6c","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.95.tgz","fileCount":18,"integrity":"sha512-JbGD/oM9zlEofpfabQAyV8q0uPPCd53AQb9loJe+WUk0KgPEDIvqT39fUMyhTJBvdArtROP4amTD8JKqeycZpg==","signatures":[{"sig":"MEQCIArEcu5v9luSIPZ6HYg39Su6nC1BVdVC3g16bLCT676pAiAe3TNTOZe7CCCXwVu7UorM0djSbyPi8zoFtQhElpCPag==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":49077,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgqcUVCRA9TVsSAnZWagAAfSYP/j8makjH6Kz2npYwPV8H\n8TUWAQEbJWnVkbTIaSSCOSVNBGTAfarm7bt4XesieI8fy3IjNCjG55LQvnIm\n3Tm8eXz5j+6VrTI6pvuG5ktPuhEQeSsy3hRYPBciQdJreE8+GaoyZedvm158\nTY4/ZjRAvC15bjRT9QBME/qn36KU4fGpVdKGzEpAV9yp4pZ7I8YUpyj5Va6u\nzluhmXNVQjLM4xgXbg1N9LIJAaCc+y5HtMqOq4ZrOYZCb+YvWO+mJaVQ1mG/\n9L4EEvx2OgmOphcfLUrC1SCfDjd1Vjm1UHxZhwJ1Cpd7eFResrP6s7bgVMdy\nXs4MVVJkrFLOjSAAbWja+PLqxDsxAv0CL/HHX30/8ntzESYfYEb1cuY8YAQS\nj7dF25EFIiBTbmQtJMVBSysL4y4BnIkYSfDsKB7Y+Mk7L+j3hzOqSyTUkrTV\n2IOKRl2UuRhijqiujdw7G2fBgoKgDm+tjxbe29AJjeoNkqhhYp3o6kUEDNym\niP5fTZWoZOrDweGBuKOYafyHFN/oDmNtGHc7wD65QBqcEjyQTTyKbdmbSyn9\n+w+J4yLpeeautgSgXJwFvnyA0waDdAuPcsrWsnpVNatwTh7mz+JkMdlC/SOa\nCq4gBU+Ym6wrq0XdEjiOwGtNjIb0gRPVhKn+h1sulBk/p3AuanlvMUcJUolk\nx6Xt\r\n=48UR\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"863ac4b6ed70125625c0d47e887bb0115e8296a4","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint --typescript lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --typescript --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --typescript --fix"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.5.116","@balena/jellyfish-logger":"^2.1.69"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^26.6.3","sinon":"^10.0.0","deplint":"^1.1.3","ts-jest":"^26.5.6","typedoc":"^0.20.36","depcheck":"^1.4.1","typescript":"^4.2.4","@types/jest":"^26.0.23","lint-staged":"^11.0.0","@balena/lint":"^6.0.0","@types/sinon":"^10.0.0","@types/semver":"^7.3.6","simple-git-hooks":"^2.4.1","catch-uncommitted":"^2.0.0","@balena/jellycheck":"^0.1.1"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.95_1621738773325_0.7872330424954233","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.96-renovate-internal-patch-3477336cf3ef48efd27e8672bba0ecbdf7c77917":{"name":"@balena/jellyfish-plugin-base","version":"2.1.96-renovate-internal-patch-3477336cf3ef48efd27e8672bba0ecbdf7c77917","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.1.96-renovate-internal-patch-3477336cf3ef48efd27e8672bba0ecbdf7c77917","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"ce4c6f68910b9f5071014fc38ca305ea36ebe77e","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.96-renovate-internal-patch-3477336cf3ef48efd27e8672bba0ecbdf7c77917.tgz","fileCount":18,"integrity":"sha512-7jC6JRHZqiCyaXzrfXYUYl3AhoBzaul2fV+tgrJlaGC4qNOey3Rykjztmb+Y0XzDcc8wIKcbwxTXtaO3fq8TNA==","signatures":[{"sig":"MEUCIQCOB9CSNaGhhFMFDUEnIlzh6HwoZMaWO6ZTUaMQoO4HTgIgfIgJfQ+QQePh7cqnL+dBqZrg+OJCcLoWRMRFbTkNiSc=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":49245,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgqiJaCRA9TVsSAnZWagAA3DkP/iHGLz9gZu+jssG/5iA6\nkFeeIVkDdgFE/W559I6RQTGkNXzJ/vDW+8ny1mAZWdH/7h3eH4E90mtqOAUo\nH12Z5/0M15DIv1UtrAIm6BSM+jhLGyaLbO7+APz/LPdgkWNJ9rGKWrNPRx77\nW8K32sdgwNhXNb501D+Er6F9PVIt6bE2FUPAlRxLs3ksX43dmOtgpk+e8EOU\nQ2835zkKxFo/tn/1B/HdCq+Xfx4d6Sr9U+eFnrDoXiJ5twJyhbTEfvSIusdg\n8ZBOcut22j+FsbXoW0JInQkl1JbPhHtZciy7IRmlhS+306ETjc6voQoGYbKX\nC6M3rO8Q/c53icsDMgMiiDw+OZ0tsRYgUHEHaEU37CNKn+uIgVgnbQyxKzG/\nSkBghBGCwLL2efsAHwC9bR4pgoVpMIT6STf6Y85usGGU2wrrXJql6Ad37Sx8\nn3UAmf4LRY2LgdyIiRve8ul4rgxtxfOMGcDzsWEKmwIR3z7qLGzsXkWTJ2G1\nVkFjr+EefMh7sc56LgUbkeuXg3ocTuZ+XfhnMhLnbqgA2cP3z5rQj5hmiQCi\nDiSsqd1T32PCMr7NTvD1xvvgSOrM/dD72Gd55fCc94VsRoUYxI9N3b5Bs7Qq\nDtR70DZ5VK0kso+mI2B7hxgT4sUplIImGfMz2oD5StmHb/VDWpeu5a+2L9CK\nAwd9\r\n=X0QJ\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\n[![Publish Documentation](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml/badge.svg)](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml)\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"3477336cf3ef48efd27e8672bba0ecbdf7c77917","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint --typescript lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --typescript --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --typescript --fix"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.5.116","@balena/jellyfish-logger":"^2.1.70"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^26.6.3","sinon":"^10.0.0","deplint":"^1.1.3","ts-jest":"^26.5.6","typedoc":"^0.20.36","depcheck":"^1.4.1","typescript":"^4.2.4","@types/jest":"^26.0.23","lint-staged":"^11.0.0","@balena/lint":"^6.0.0","@types/sinon":"^10.0.0","@types/semver":"^7.3.6","simple-git-hooks":"^2.4.1","catch-uncommitted":"^2.0.0","@balena/jellycheck":"^0.1.1"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.96-renovate-internal-patch-3477336cf3ef48efd27e8672bba0ecbdf7c77917_1621762650190_0.4363224070066063","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.96":{"name":"@balena/jellyfish-plugin-base","version":"2.1.96","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.1.96","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"1198d51d20dc5bdd8172ad5dfde82df2e6f9926f","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.96.tgz","fileCount":18,"integrity":"sha512-X3nGtfqM8iL6+Z0+27LJzMamcs3JYhJfrkQzaLwtIF1c/NeSj8opOfyujPnhGOsDg/GMuTLhKe3Ce8A7F5CdJQ==","signatures":[{"sig":"MEUCIA5xyhegReuPORYDWd2qcqZYgxghlN/15SrWBVy3AGYAAiEA0A3XKvEFsT/1wYscFvDjFk0q47O3lhoI1GiOf0+nin0=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":49180,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgqiMlCRA9TVsSAnZWagAAz8kP/3n2NpaaySeK+gOPEjK0\n5KeL+qXf/UDegAQVtqOiOIe7ie74kXIiirmYqVFtIJGBxw8qU5A4aC0PsOJl\nPiTbT+H3UnVoHdPkAXsYoeEtj0JFBTicb296SvjDuZCGDuBLA+Il/jZO9Nnn\nzvmxUgNdHmZ1u61xCYpjUbD9B4YIoQSoiIaCxwET1Ib9aMErzCnOwdrtlRGf\nV1eUwajlgBHxPxNa6mlYT1WDtwfTAW3dlNhtvQrtxbstqUWfmu92vWZ39AYI\nRHKpvU/UVZ7AW8kGUD+4A4+8fMybdUgfqAvih0o/jA4V7ca23VZsazc0iu3Y\nm/jVUh+KXrmkE9s5gJJFUlSupDS103MXmEgzzyD9XkyVygvVH9cLz7Ys2fFG\nxyF0U9C3mWiBACWiFIHWKt2hfB9D2tzfAO/9tRA4VRhJcxJQ2oyB+tbZogL6\ngHSBd4ScjLRfE8/uME04A+sdVc7MCMzae1fnHhaUIPls+VlSfxgxyMm5EBva\nMcCvvH6YXt9dU7YPeQnpwWOWxOml1EJpAKMH8Yqz/WcpjQKkglM9NpUQchYq\n71yxY/OqT4lMuvr0tG7N4rUXveSdAnFvb/K5svfudhF4xKZVupYLCu9xdldS\n9Eetli8pFLMB36+uiu1I+h1ksATEX3EyyTQOTV1bPlguTO6FTDbA7J+ZBLIa\n+LWj\r\n=p/kd\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"acdeddecec37e0c52cdc14fc2cb528b78e442e1f","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint --typescript lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --typescript --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --typescript --fix"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.5.116","@balena/jellyfish-logger":"^2.1.70"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^26.6.3","sinon":"^10.0.0","deplint":"^1.1.3","ts-jest":"^26.5.6","typedoc":"^0.20.36","depcheck":"^1.4.1","typescript":"^4.2.4","@types/jest":"^26.0.23","lint-staged":"^11.0.0","@balena/lint":"^6.0.0","@types/sinon":"^10.0.0","@types/semver":"^7.3.6","simple-git-hooks":"^2.4.1","catch-uncommitted":"^2.0.0","@balena/jellycheck":"^0.1.1"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.96_1621762853221_0.5090167091787337","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.97-renovate-internal-patch-f7447605e0bf7ec4265df51b8383c1d4e36f4e80":{"name":"@balena/jellyfish-plugin-base","version":"2.1.97-renovate-internal-patch-f7447605e0bf7ec4265df51b8383c1d4e36f4e80","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.1.97-renovate-internal-patch-f7447605e0bf7ec4265df51b8383c1d4e36f4e80","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"81f1ba1c6a358a56164f3507e3f4c1bfe8b1d197","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.97-renovate-internal-patch-f7447605e0bf7ec4265df51b8383c1d4e36f4e80.tgz","fileCount":18,"integrity":"sha512-mGrj2mclH34/AJUve65Myha2OfMEC7OE54b6lQL7yk3GTXlf298I0zAGfVw0zPGFPQLSbAUnmuEZzI9RjiRl8A==","signatures":[{"sig":"MEQCIASGvgYwh8OgIWnBpjw8uVcJrqZhAfG65Psjyy7h2+KFAiBREL3BXPbUTuvucvE/TBO7n06N+YB+fyQZHtd3jtVKJA==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":49316,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgqwbSCRA9TVsSAnZWagAAahwP+wQuZNVemlqp3GYK4sE2\nEesrjOLYKiRYhs/FeMgf8R1PjirXOjfYLqs4J2S5bd/C7dv73w4ZbvxdQgI9\n8UuSdJ0aMzLMWyrOSOBtjIn2eQ9M7NKZeOFMPrG+Y25OIxp96Poi4OBLOhwr\nklljsZncQR9bJJUbZFle9IF37AjDTa2o+BRacA7/Bfz0kOn8woRjU/5F3/WS\nOlBXC3/wXs2IXmPDSMDut1NsQQZQgwxPopCGiPkM2yFLT/JVPrHa8LC50Vz4\nC7gVZkeT9oYZLsalNF5qREP/Zz+4bdjdRCoEbNBW7v2RoxxK7pQllY3BGA97\nOfmk7VPV6xJ/8xFi6WHaodlVRkyrO+RytQIzmLiOJFyRaSPjiqOqtYchH5HT\n87nnVoQuXWttgfHpet4kOzySyyIbUiGa2qS1gxA143itbQk60mkurZxg7Ffs\nYpXLeYlYBLRay0C3CljOydaaC9gIkNKjKClZWIx783qqzgPjvysPaRB138Lo\nXlaEaxdl8MunrzQvAzX0kGnNFULQmW1GhyVEZJSKYq/Nd9carwmEf/N7frsO\n2TzneXSbN0/qD90lNeCBldKN91/d+/hUvP8YcF5Y8gUKBo3CwECpYN4d716J\nUhepvyzVelCXaSvPLbjxoW40Op6dJoCh9bkx9r4dz/0gZVFp1PgtwbiGtFuA\ngJqu\r\n=CG1m\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\n[![Publish Documentation](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml/badge.svg)](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml)\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"f7447605e0bf7ec4265df51b8383c1d4e36f4e80","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint --typescript lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --typescript --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --typescript --fix"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.5.118","@balena/jellyfish-logger":"^2.1.71"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^26.6.3","sinon":"^10.0.0","deplint":"^1.1.3","ts-jest":"^26.5.6","typedoc":"^0.20.36","depcheck":"^1.4.1","typescript":"^4.2.4","@types/jest":"^26.0.23","lint-staged":"^11.0.0","@balena/lint":"^6.0.0","@types/sinon":"^10.0.0","@types/semver":"^7.3.6","simple-git-hooks":"^2.4.1","catch-uncommitted":"^2.0.0","@balena/jellycheck":"^0.1.1"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.97-renovate-internal-patch-f7447605e0bf7ec4265df51b8383c1d4e36f4e80_1621821138086_0.9789192417473049","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.97":{"name":"@balena/jellyfish-plugin-base","version":"2.1.97","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.1.97","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"8f2ee020de9ea35c871abe80e024a82424a337e2","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.97.tgz","fileCount":18,"integrity":"sha512-fuZNVIobfI6ajQbzVvepI3XQEEi4uG4sTuWY9gMNv9MSCOpsJqHs7FO67h8fKXE99r5gyjcfofgk5CfqGOJsBQ==","signatures":[{"sig":"MEUCIQDFT6BqMPZjpj6WQy6XoSYeAmN8VQd3DFw9tkE0qd1tawIgWuTLP9yRzYP9XBhsLMlXXIgJDGIu4JY0IUyXUO4rcwg=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":49251,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgqwf1CRA9TVsSAnZWagAAhioP/1LR/slzDuU7+YdHCd0q\n/cqWEAHuDc4p339CLTlv/srz0F30F+LJiengqeIb6obojPgW56LV+EqZ+MkS\nZ65+o+3CBSP06G5Wx2q/yyHU896yS35C+J/Z8lozYaV8DxNCk0SnhutxLz9U\nHjyoRdYkqy9BLQqCEwNsCIU9epn5kE3C9ftdUy5HlJYQtlu14okPBYCcCT88\n9WqbHml9uuwGsAS8lfZTy/4Kri0CmeFt9DRY7PRAEAsWHwoCnMKW+hIDQzAa\n+QxEDcb5OvzDj2qb1TRLDbvUtQzHSc0aXOCkQd2k8k8aKwCdsUSj60HPIGV+\nn6a/54WbB4kSnmgfh0JSflPbiHnhSOcnUim6N8nwCdZ3SdufDetSipBPSK2E\nru0Yg1DlbJL+iplMViFcB/k0wf09ikXdA70zf0T7zwyyG7RXegNwDvWFN2zd\nuh/7LIs/Nx75RVCDy+BVZLTtBXp7z8aGUt+mnGWa8BVMdRx/znNSIJbF5MeO\nng3wd8S/KfYqnG//Gs8dswDV11Rbf10Ws62uVN9L5Wq2lEJ1QB/HqlzGVAEP\nsJXRaLvXx5HAAknaUgoFEPYEduue7/Jad0wFy/b8Dz+1Ej3mbRk5y797OQsm\nFcaWQz5ravpgjlU4ijckq88lg70ATqMRvUEwlMGAwbaUU9CYvBhRTpbpB23V\nL0QQ\r\n=e98c\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"141ff42d328dc6a39a142929c9fd6132f4730a0c","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint --typescript lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --typescript --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --typescript --fix"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.5.118","@balena/jellyfish-logger":"^2.1.71"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^26.6.3","sinon":"^10.0.0","deplint":"^1.1.3","ts-jest":"^26.5.6","typedoc":"^0.20.36","depcheck":"^1.4.1","typescript":"^4.2.4","@types/jest":"^26.0.23","lint-staged":"^11.0.0","@balena/lint":"^6.0.0","@types/sinon":"^10.0.0","@types/semver":"^7.3.6","simple-git-hooks":"^2.4.1","catch-uncommitted":"^2.0.0","@balena/jellycheck":"^0.1.1"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.97_1621821429348_0.9112212277871232","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.98-renovate-internal-patch-29c8730d93f652b29d5baf30df3491b024b83660":{"name":"@balena/jellyfish-plugin-base","version":"2.1.98-renovate-internal-patch-29c8730d93f652b29d5baf30df3491b024b83660","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.1.98-renovate-internal-patch-29c8730d93f652b29d5baf30df3491b024b83660","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"1e7f568f9e4b5a140888295ba41861b7e8563128","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.98-renovate-internal-patch-29c8730d93f652b29d5baf30df3491b024b83660.tgz","fileCount":18,"integrity":"sha512-a7kGqdrCfxHhePIaD5Q+ajqcEp6sIV4Nc7n9O9oght3SfjGeXvVhsL7cb9gNRYlh+aOGo5qYouHIlynOTBBMEg==","signatures":[{"sig":"MEUCIQC7hxRzFU5QQbOqI53mwCEcHk99rNHwtBW2B87n5x2mgAIgdK5LrJMGOJ1inmRNaRBPfvfxoazd60sJkpP47wsnjFQ=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":49419,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgqyMTCRA9TVsSAnZWagAAMQ8P+wXqHAj9OD3ZjLm+wyig\nf7nFT9cuywulzzIymD4ZsfpnDOyn3BvEhwPfVRnBhHEM0BYsyU9VzYzk0qak\nS5knXgkSA+A4DvByFt1n9f+Ps0nnSESXXhTfyzNPQV76ofZNBQ8xGWLY79xC\nv3fftjBBV30s4sCmuEUD2PorpDQoK3W3Zq56SnALQsUlSi6p6n3vuPIAi9G1\nUv8wn9iupTa3R7LNyXHlaPS9NknJkyX6BVIAj8PtDRSTKlKko6pW3bGWr7Hg\nwCsNGICwrbPnjd2Cg/v9MB8cYz/gV68dhyTkLT7bmABAdkAlwxIJJ57MA0fP\nK47FemwAUjIG0lKwhWMdXjsXLJP49pPapul9Ir4i15AbC7OoMLWc0xtktNGf\n+xGQsJue5Fwqlt/wgbsASHvESlwQs9715ftUuR0tEMfvkuIOvk7s73nMJ7y1\noGPshiB9eK3VMifnAfgypfuMQKi5JzWnBe/ZAGUSqkWLu3g1k48VGUq37a5G\nYtlR5k8zOWV3wIxCfsqhW4NxnLragWr7R0co1tj/5d4TuAiCz5Pyk09OUtBO\n8RHKjqpCKH6Qh46wuRWSM1x/jasfK+6GoH32sqME5djImInG2nuXyI7tmROa\nSd6Um/Osa88iiaynQ/eYB+qBn0le/tuL+SiweV4Bvu8hIvvE5TSyZ4qKrNih\n3s46\r\n=zzYy\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\n[![Publish Documentation](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml/badge.svg)](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml)\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"29c8730d93f652b29d5baf30df3491b024b83660","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint --typescript lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --typescript --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --typescript --fix"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.5.119","@balena/jellyfish-logger":"^2.1.71"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^26.6.3","sinon":"^10.0.0","deplint":"^1.1.3","ts-jest":"^26.5.6","typedoc":"^0.20.36","depcheck":"^1.4.1","typescript":"^4.2.4","@types/jest":"^26.0.23","lint-staged":"^11.0.0","@balena/lint":"^6.0.0","@types/sinon":"^10.0.0","@types/semver":"^7.3.6","simple-git-hooks":"^2.4.1","catch-uncommitted":"^2.0.0","@balena/jellycheck":"^0.1.1"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.98-renovate-internal-patch-29c8730d93f652b29d5baf30df3491b024b83660_1621828371328_0.5853396649758156","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.98":{"name":"@balena/jellyfish-plugin-base","version":"2.1.98","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.1.98","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"f70b36a02b1c9af5ecacbf5004209beee61414c6","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.98.tgz","fileCount":18,"integrity":"sha512-W6bSt8yI+Jb0N0SJgLgfTthyNh2i9FN4cn14r4Zoxk63NmpM2cj8B17yS/vtBwYgENtlVtDIC3CPxlYwpYgcDQ==","signatures":[{"sig":"MEUCIQCmI3vU5AkVzXNRXqPGR7BLtZzdvnkfw1EsGFPAem1xTwIgYBt1M3dVXnKIB+9iXlGgrCZ7MSMkPo4Mt4CzOhcZd3I=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":49354,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgqyPwCRA9TVsSAnZWagAAwbMQAJdaQ4nJS8GLKu5YnsI8\nxz2GPPOe0kwg3xm6EWEoRo1fpcP0vvRq6JZMxnMNKbNsK88RjxoEamVpjFjT\n2lyvUmZYI6HbPfSHBdZC8eQ1ug755jo2HXpvpGuNFjvonWD7mp6VHl8s0Fd+\nZh8ZChZZycsm5yFb3tUBahyDMmYKynHBT6RbZtd95Vl2V+H0hKIepEtdeSMM\njfFE7Z/wybloKMVXaS6SE50psrYPRJQg1A/WJjIzBpyzTwcRFhgc0wPuh12+\nI1efFa3I+Nc/4pvL0HgtCbsqdoCIEfK32SnGA0j/2z+vitVkbQiQCtXb10Oa\naAvAdIS+QBdwDipWPL36EAcs6IrdTeRKZ6wEtq+uo9gxBQCGKZrfMy6Bqm1K\ndoifQFS7BaOPzl8I8n56OCwQSOFVzVmO6QTjtF/hgKD5v4APnERYevtoXPYv\no401S5ttzGgV/UwMLYGRy0RyLH/lnluLjm1/94DKbuL6lyIxt0UUlbHZ4i+T\na/FRRr5yEQaFBuvDSY/+GGgBHu4IP7ifdv8rs9fvYDIgIUl9AP9Lk3g1BX9r\nYZWOjgh1BCYfyjMhSk6G3IgiApIyEXloTAcKn88DXuqM8pFtJpTfxW3AlVe/\ngHiIhkF3rK6DJTscMnROoZFkmsf9jFu9QEMV3UpCHPN0n+109rnNc/bRibQf\nADuh\r\n=zcAF\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"094dc09e02d33588444528e1d183dd91fab35103","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint --typescript lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --typescript --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --typescript --fix"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.5.119","@balena/jellyfish-logger":"^2.1.71"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^26.6.3","sinon":"^10.0.0","deplint":"^1.1.3","ts-jest":"^26.5.6","typedoc":"^0.20.36","depcheck":"^1.4.1","typescript":"^4.2.4","@types/jest":"^26.0.23","lint-staged":"^11.0.0","@balena/lint":"^6.0.0","@types/sinon":"^10.0.0","@types/semver":"^7.3.6","simple-git-hooks":"^2.4.1","catch-uncommitted":"^2.0.0","@balena/jellycheck":"^0.1.1"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.98_1621828591735_0.29589329774831996","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.99-use-jellyfish-config-2b86b8dfb6b54a81f445447b968677059023e96e":{"name":"@balena/jellyfish-plugin-base","version":"2.1.99-use-jellyfish-config-2b86b8dfb6b54a81f445447b968677059023e96e","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.1.99-use-jellyfish-config-2b86b8dfb6b54a81f445447b968677059023e96e","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"0998576d35fbffa5fbc4b99e41d7fb9dae720a17","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.99-use-jellyfish-config-2b86b8dfb6b54a81f445447b968677059023e96e.tgz","fileCount":18,"integrity":"sha512-T5Jr07Ls3mF/XCrpYqCEma0qS50e9tyEqADpyGlaHInz6wgnbi5dMRZmQCGAucTMUDj8Abd9XjbKvi7Ev2VAOg==","signatures":[{"sig":"MEUCIC9L3pVMjVG2dtsqdruCq5kizcE8BHIttnNOmq6vM9pUAiEApxd0NMFjlAIkcyUP2mgpuFpaVP2rFsyQ2946ex/QdjA=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":50455,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgq0cVCRA9TVsSAnZWagAArnsP/1QqS9ufsLM7dD/TyARA\nNH3H9L20PxpNmqcWmKvKnf+SlmMVgAzHd57v5CGXPxgYw1CCfteSTjKQ3YKO\nV/3o45Wtq5rEki06Awt+7IGryWCaSiZV/qI84DKKtTAQUU7IDIsrSG4tfS1K\newhpb7IguEimYZGB1T94wvo9WZulUhVYE8rg4AWyRus3t9SZ8Esmpfjd6jJh\nFtV6cdUHIJYAKabZKgAY9ogUkG5NyX8r7uvCEoi5p0pjPQrGtaVCpiG22aea\nJFfOssu6xnULd9Ul81fXqw2hTfqC3xyVukU2AMHp64qhxSAb87U0vmc8kWhe\n9clZL8Le0d07X6vCXZKxOw9vcq1DdBfGqRPdSqDaeViIVLUcO3ik8jU04ubP\nm0J7Tg6rJeysWInnI3OwKAVSjEel9lkk8JKY6rkP8NqOPu6dzn/fZlWgLu8V\npnP3XAqBVbBrJxMaCp0A38W4zFbEot4zg2Lct9BoDDz5XLsCfX0g0dyO+fes\nLz9wrKMCK/HisuoYOz1/cqsW8l3z8/qfhDXBDgyr1yVgZ4PqgEOAVW1UFbUs\nDqQ209mXEz8Zf6aP9VEXKNxVLZYcKhorHh+Xg1nzf4Ca8i61rSzD/sDIAOWN\nZzepfsmbSHgES7YnFQqtrKaj20R6iWKxTJK6ejOY8e+fTQwi1H2pJTGH60Zt\ngY1G\r\n=Xpc4\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\n[![Publish Documentation](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml/badge.svg)](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml)\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"2b86b8dfb6b54a81f445447b968677059023e96e","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc -p tsconfig.build.json","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["npm run lint-fix","git add ."]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.5.119","@balena/jellyfish-logger":"^2.1.71"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^26.6.3","sinon":"^10.0.0","deplint":"^1.1.3","ts-jest":"^26.5.6","typedoc":"^0.20.36","depcheck":"^1.4.1","typescript":"^4.2.4","@types/jest":"^26.0.23","lint-staged":"^11.0.0","@balena/lint":"^6.0.0","@types/sinon":"^10.0.0","@types/semver":"^7.3.6","simple-git-hooks":"^2.4.1","catch-uncommitted":"^2.0.0","@balena/jellycheck":"^0.1.1","@balena/jellyfish-config":"^1.0.6"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.99-use-jellyfish-config-2b86b8dfb6b54a81f445447b968677059023e96e_1621837589401_0.7052081457326518","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.99":{"name":"@balena/jellyfish-plugin-base","version":"2.1.99","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.1.99","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"193c1c77783e90f44e31690091e9793c3ab80f78","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.99.tgz","fileCount":18,"integrity":"sha512-RA/Djlox5A1k2vAe9/ILkixanq6e6nKmvajokqjiWyYuD6/SHzLRzTs+yPGs+E6cntIBn6Mep7dui8gk3xyNzQ==","signatures":[{"sig":"MEQCIAhMSyUFec2eXkjVRNs0DHuGSNKd1T+8LEprkvLJ5pTNAiBONiG7PmpkAkBP4hb4WwkFJg8SE0P32xifSl+Mtplxbg==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":50393,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgq0gzCRA9TVsSAnZWagAAIQYQAKExUFeVlRudoRGJHPXj\nyfW6Ol9J/bjNM/LF+Kp17PJmioPLA0FYrPIKzJO5HiSCY63FLRnpfci4BpL8\n9uQ156EDnh1yu7XMbRBXkLIq/LxjHsVwDIVSjB43aCXvvuVFA0us090d6KQg\nYd0DLloIeYOneKAipy0Ft4z6lgXlM+/CCiN2DbFir+AmR689OuEE+HYZheyx\nMI7bTt9a8xIHVIZgYi48QfVmtrdrbC1/ypCS+ABUec59vZz1BcE0TMIjFI8P\n5P13XHCtRsk1E+AC4FWWtNMfw5BrWXkQOCEy9ZBnIWZti3eH9sPUNiNBZAmt\n11C+/8++lfAH+NddNewoWS18fw2P6l+eO03yVt3V2jqHjN2GF+xxzgQVs16b\nHCUU1NuFKDBQb7c7QJMoZhQULWsyM7JVXKF/goX01AKz8YrgvVtunI5BwqW+\nCFKG9NbHxdlHOXVe6cVNLQzEIO1ew50Ane/2+ZGsEWLWoo43p+1fsoycgikG\niwkEJUrFRh9lbNEdi/0NyhaM9FJ5Sc9LLzxBZHfBb6wZuLHTRkWLopsASgJ+\n9btzwgPvXRYCj1XeTzTk/XtkBcLg55UbNWC0fftraOwqCtgW2A3T5xbFFNpF\nZBKwykqg1scFgA6iZ/gChnCwWQmtwBPbGtDlEaI+jzpUmzBISIfqM3ur3elw\njS9U\r\n=rIz9\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"1db4dc3e7752f3f61027ef39067e16fff9817331","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc -p tsconfig.build.json","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["npm run lint-fix","git add ."]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.5.119","@balena/jellyfish-logger":"^2.1.71"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^26.6.3","sinon":"^10.0.0","deplint":"^1.1.3","ts-jest":"^26.5.6","typedoc":"^0.20.36","depcheck":"^1.4.1","typescript":"^4.2.4","@types/jest":"^26.0.23","lint-staged":"^11.0.0","@balena/lint":"^6.0.0","@types/sinon":"^10.0.0","@types/semver":"^7.3.6","simple-git-hooks":"^2.4.1","catch-uncommitted":"^2.0.0","@balena/jellycheck":"^0.1.1","@balena/jellyfish-config":"^1.0.6"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.99_1621837874647_0.32908249779224974","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.100-renovate-internal-patch-7f689f2cfa0d0122f8100a6b8633bf7d96fb2a2b":{"name":"@balena/jellyfish-plugin-base","version":"2.1.100-renovate-internal-patch-7f689f2cfa0d0122f8100a6b8633bf7d96fb2a2b","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.1.100-renovate-internal-patch-7f689f2cfa0d0122f8100a6b8633bf7d96fb2a2b","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"2a911ee8af11c36c0f0efd64998ee42cbcf93c1c","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.100-renovate-internal-patch-7f689f2cfa0d0122f8100a6b8633bf7d96fb2a2b.tgz","fileCount":18,"integrity":"sha512-OMuUFKem/o34yhbrlS0LyjCKnRhSsyYfkZ9F48+98gxNyTX8ACPputBkwQaqU5usywSwES6bypUCNXLIHM0vgw==","signatures":[{"sig":"MEUCIQCfo7r9NxA7/IyZQW1tcllI5rqVx5JKCqd2pmvrw3B9lgIgVbuisxBPJZBH1OxRUxV1wXJayb6ncSAczKin0E95UPE=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":50531,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgq0naCRA9TVsSAnZWagAAqJMP/1O9kYJ9TWjaqI9/M7xK\n8yODdOXHMjGiD10UvbK8FW9Xp3VcwU5bQIs1zSMyG6GTSgcUmL1poxA/wfqE\nZuF7n+2cmWXi//1/3ciJqoUHH5r7Q6Np5dsFcEipgVllUcHfbzqUDlcYI6Zn\nWpcAcfEbALRbQpQcGmxcgGAtCM3TjVqRpq6TR2mKMTsgXYF4++5UFMS9KqFH\n/NYKShyM0VUx9jpF5tiJRUf8XnTTuFReSBIiwnAFxMw5IEi5x2upTdDVznbW\nIsxjqhF10V4rTvHmuK0p5h7ou8JVkocW4Bz1qjhFN86LXRtqbWItZp2SDoFB\nxgnjm5Kb8q+Z36l2LVdbLq1OsB4MrpKxzGFxca19smXsjtR492fZ4c4rx8L8\nUaU819kMYTSYvChTgcbn931dBpIZ6MW9w0COKdy36AnrwvmxT+jaUNLfB95K\nxg/8Cy7Fday3Noj2ngRcuM1OY84HThjoJGM3bJux2wC2lhv5SBJveF8Ene5F\nIJIsVuWPb2d5VgyeEWeKYRaMEOhPs5r8Yas/5pPYwZMe/aDensIBFpBXGFZp\nJmSCjs2LpYmQwEsufZYYSBRY1E2/f1Js6mckKzrHe7F1PdCsEtbGJra3y58X\nwIK6Q9Ta11/TaqUy3dnIAhPj5ZbxVw9kKTUxpkevRNXDEWhBWnmQz/tmkz+j\nrKbN\r\n=3WJv\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\n[![Publish Documentation](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml/badge.svg)](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml)\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"7f689f2cfa0d0122f8100a6b8633bf7d96fb2a2b","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc -p tsconfig.build.json","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["npm run lint-fix","git add ."]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.5.120","@balena/jellyfish-logger":"^2.1.72"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^26.6.3","sinon":"^10.0.0","deplint":"^1.1.3","ts-jest":"^26.5.6","typedoc":"^0.20.36","depcheck":"^1.4.1","typescript":"^4.2.4","@types/jest":"^26.0.23","lint-staged":"^11.0.0","@balena/lint":"^6.0.0","@types/sinon":"^10.0.0","@types/semver":"^7.3.6","simple-git-hooks":"^2.4.1","catch-uncommitted":"^2.0.0","@balena/jellycheck":"^0.1.1","@balena/jellyfish-config":"^1.0.6"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.100-renovate-internal-patch-7f689f2cfa0d0122f8100a6b8633bf7d96fb2a2b_1621838298271_0.6424171694464718","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.100":{"name":"@balena/jellyfish-plugin-base","version":"2.1.100","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.1.100","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"7747c5037e01fd49025550c0090dfd83fdc0c027","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.100.tgz","fileCount":18,"integrity":"sha512-arzh9Txkw/M15XoyXHAiSgrlck+bDcrBonk+BOP4MSoeov1XIbfnEbTI8EdMaYv1SmdNkIpb8wbljuq6Po/Ehg==","signatures":[{"sig":"MEYCIQCw7NpleK2VQ2HsEWVR0uPRkokCJch6MhopDEqKpbUvWwIhAP9MCQqQh+18Fesui++Im4nBkTK6JhP199LMcURAwQ4u","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":50466,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgq0rXCRA9TVsSAnZWagAAo2kQAKHBcoULQzE1SZIKe9OP\n9huVciAfONJWXc9dEpmWJmO5skSCqVJqTYsq88H3tqlkyTvm5vM9y8fatsdD\nZzr/g533ntnEUlx+8tq/ZQWwCT0IFt/UtMeEAtUOjmubuSvG7Q3YLcwX1jAt\nbaJ2cAQXz2CocYAKMUlCFXg/oWo2gwxYDgSWSHEKHdyuZ+O86O+nK062i5OP\n75CgQcfUsAhejxUYB+gzNNy7GuRR5xUvkb0NZf9YwJEvEfmqe2nwhTIzRLbH\n/Jbq04zQsgib3kQ0Cn3EekNTH8/t8DgSG8T0xBpbKnGeZTulMbRO5MhxmupQ\nUx5EuUsRzsBIhXtlqRy91etYwNASCMTHK9LEtJeJvT9JfXiRKJ421ccLahPG\nQSR3ipV3p5Uv/cmborOhWWkh/BtzEMyibU5DHZNYlhCdEwHx8dE5sbW5uDG3\nUEjhKs8Fuiv5VmHISXhvnB36M5ud9m4cA2fEc9c4ntRKVQvaJWn+wsqs3t3N\njyLMDfS6CjhtrGxEssMPGLFTgpyz7oAlsUqYLBjCH6rTw+xI3KaQLI9Xcxh/\nirkawnSwsPCCdur81ndh4WTuOpTUS0cPOBwJMmU+Lq0o7I7mEIkVQ94pomOS\nFffuO2ydRIp4TRPlMQnuvcQV/2PJ8VdqDe33M7GsJH9XMZYzwmz6uVGdApTi\nruHS\r\n=ZjuR\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"d093a09a44c636e3d4f58a16b8ff1dfde4fdc8f7","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc -p tsconfig.build.json","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["npm run lint-fix","git add ."]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.5.120","@balena/jellyfish-logger":"^2.1.72"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^26.6.3","sinon":"^10.0.0","deplint":"^1.1.3","ts-jest":"^26.5.6","typedoc":"^0.20.36","depcheck":"^1.4.1","typescript":"^4.2.4","@types/jest":"^26.0.23","lint-staged":"^11.0.0","@balena/lint":"^6.0.0","@types/sinon":"^10.0.0","@types/semver":"^7.3.6","simple-git-hooks":"^2.4.1","catch-uncommitted":"^2.0.0","@balena/jellycheck":"^0.1.1","@balena/jellyfish-config":"^1.0.6"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.100_1621838551393_0.20336381633208567","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.101-renovate-internal-patch-f64fb848c6a355c6cd4bf8e718e4eed775b74c5d":{"name":"@balena/jellyfish-plugin-base","version":"2.1.101-renovate-internal-patch-f64fb848c6a355c6cd4bf8e718e4eed775b74c5d","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.1.101-renovate-internal-patch-f64fb848c6a355c6cd4bf8e718e4eed775b74c5d","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"bd4025d93e1a911d01f078913fd0ec548ef33b7a","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.101-renovate-internal-patch-f64fb848c6a355c6cd4bf8e718e4eed775b74c5d.tgz","fileCount":18,"integrity":"sha512-VtF6CLIqsABxIUCLmosemqRIy662IJAaUSWCCjfTsBdxGeV6RA98mAZ1ZZpHJfGZRTGnz4PSU6g0N/zFeRLuCg==","signatures":[{"sig":"MEQCIG0H713zUN3gjmGrqnTzPw3ejBGl8walNM0V/LhAFg3lAiBRmJjTkGqi+MWJTMuj2ej7eNmKN0rxwCMr8u8lgbv8VQ==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":50603,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgq2eHCRA9TVsSAnZWagAASdQQAKQtGMWQCSBObsmghFaK\nGi9ZkMEjvz0jUwky9RQU4ZA3LqlABMMEsZOfDeDnRYRkHM7vPI5+uYkw/LgY\nNWClnJWv5t3SQ37YV3yHioOCuTmq3yJbEW8P7P/O2lvAXTeGuoezflKNiJVc\nb8jI8gP+XX1ceIFpkNQkXNc6sikxxfbY3QJCLgpvxbVuv06tRWcH4oUvyJey\nL0WdweGH+rNiDdFKJqI3ZW15LMyvT/gyNiZryeO5yxVjHq1xlneLUCVVAtfh\nAI/szewpP52A5UkyjsStKo5Z/X8CIJ2p1NmbKrMn468Kab69Tfr25MLPaNGi\nD7dBbd2rQnWLwyLrHIu3EOp41bhVHhCgdCHkXG76w8zwZtAAe4NT4Mj2J0Id\nhEJBZtDnuUOnhg8nTX9cmg5s8hvioR99FW4JccxMqbKrLDUKGXoXPG1ya0oL\n9neAufamnaqTp3NjneJ5g4Q5vMm22me7Z4/mZ9GXyEK1MqpFWMdCF2dc/Ckq\nHZpY0zReMQB3l6Ae8s0LlveYUwWsrfylgMXyISGVL16lwQu+LwDjc/V/pBN1\nFwM5Ls7elQV5+n4n4v3YkBxiu24acj6fKeOAPr8ywCL5EezxTzaFQ6zWYQCx\nQTDVtrvgowUr7IoASIXXDCsUqZbzR080HY2UhaZu7/CcRp4+6MSup61vc/AN\nh+bt\r\n=n1Qs\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\n[![Publish Documentation](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml/badge.svg)](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml)\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"f64fb848c6a355c6cd4bf8e718e4eed775b74c5d","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc -p tsconfig.build.json","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["npm run lint-fix","git add ."]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.5.121","@balena/jellyfish-logger":"^2.1.73"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^26.6.3","sinon":"^10.0.0","deplint":"^1.1.3","ts-jest":"^26.5.6","typedoc":"^0.20.36","depcheck":"^1.4.1","typescript":"^4.2.4","@types/jest":"^26.0.23","lint-staged":"^11.0.0","@balena/lint":"^6.0.0","@types/sinon":"^10.0.0","@types/semver":"^7.3.6","simple-git-hooks":"^2.4.1","catch-uncommitted":"^2.0.0","@balena/jellycheck":"^0.1.1","@balena/jellyfish-config":"^1.0.6"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.101-renovate-internal-patch-f64fb848c6a355c6cd4bf8e718e4eed775b74c5d_1621845894568_0.4243663509724567","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.101":{"name":"@balena/jellyfish-plugin-base","version":"2.1.101","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.1.101","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"6605fbf93acdba55c0454feb6d40f5fc734dfec1","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.101.tgz","fileCount":18,"integrity":"sha512-a9CYAHRikBa6gtSFhIrszr+rN3c2x32qnen1NnrN52fQBIZy8pyyqJX6chvZ9Mk6AIK7FalGpFTatB7x5Q5hgw==","signatures":[{"sig":"MEUCIGhP903n3ULFumy3oGCQ7bIvgDqJJLU7GxeIeaY10bJmAiEAla3Dl+7oK3flkwx2T4Ya+fc63Tv3NOdTs0ftbLF8M3Y=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":50538,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgq2hgCRA9TVsSAnZWagAAFpIQAIlnHaCZ5PBDyHGB68SB\nGSnyH8VYhyF4Jq1cl7aQUGwlTUG8aZSTfAeNsPUrMmJFk7kFqgQu8pYUyQvk\nUw8v7yiFVAxUkoAm305tjTjYkDCfoBB0ENPAVDJQP21R9mBQnwir96nEkf3N\nlbF2zr85ChpZJNJLXtmPVQFtD/MTFHcLJpXFkzLaUYCuQ6ipafmbCiHXOA4P\na1RvcvPge8L3dUx9UN/WBzjd0roa9LtjYBO3flboevMPLHN9Tbl5SEA8q1qM\nMWJxB6IChO9pFPyScSqTi2QVRB/yhqaB7toBeLOM6gYuVQxaNFSA7xiD+HH2\nkr5x8KrFNsqpX86j9RrNvl8b7rwx6H6XLcAOUAM5eUlqTfBh4JgHsW27BiTs\nJwHU8CHiLMzUEEqg8vc7mRMqwMwMb/Hkh3YoZjMkvaxJK7NjlBn2txmK/weW\njQ73TXwvPMUk7RcJY70mpXlVwDG6Kv8eqiaVAbT8ga2czrgjRT08BxN80n08\nFTNKttBxopX54hGeMAe2G8eRo6W98HR4uBjmyAbvdH6gAxQtUu69fS+Dt5Zb\nN0Qukb9Q2OM2IGYKm+tty65McBw8/YqR3o9CNWHT5Fdf4IVMcyVv/ONSVemb\nnws9DZKkQZ3hyssuCy50ILiW5677dIg5fp4mnyQYnx7N536O7w1gg0qV5jqS\nvFuE\r\n=N6Zc\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"608fd0237b67429323573aba640f4701cf7d09c5","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc -p tsconfig.build.json","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["npm run lint-fix","git add ."]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.5.121","@balena/jellyfish-logger":"^2.1.73"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^26.6.3","sinon":"^10.0.0","deplint":"^1.1.3","ts-jest":"^26.5.6","typedoc":"^0.20.36","depcheck":"^1.4.1","typescript":"^4.2.4","@types/jest":"^26.0.23","lint-staged":"^11.0.0","@balena/lint":"^6.0.0","@types/sinon":"^10.0.0","@types/semver":"^7.3.6","simple-git-hooks":"^2.4.1","catch-uncommitted":"^2.0.0","@balena/jellycheck":"^0.1.1","@balena/jellyfish-config":"^1.0.6"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.101_1621846111881_0.3617203789765788","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.102-renovate-balena-lint-6-x-8e428bc26e00d70b348d8fb59fe44e71e3a0719b":{"name":"@balena/jellyfish-plugin-base","version":"2.1.102-renovate-balena-lint-6-x-8e428bc26e00d70b348d8fb59fe44e71e3a0719b","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.1.102-renovate-balena-lint-6-x-8e428bc26e00d70b348d8fb59fe44e71e3a0719b","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"fc635c4860c1dc24e3f94e8e9bd1d8a8f9f00b25","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.102-renovate-balena-lint-6-x-8e428bc26e00d70b348d8fb59fe44e71e3a0719b.tgz","fileCount":18,"integrity":"sha512-AaqJTumFEzDl2SECPYUDysyLMWes7wGyTLhjx6bI6syIo3b5TTLykqnV9Aq10FPil3Ay7uCetEctwN37ItfQzQ==","signatures":[{"sig":"MEUCIFQ33ea1pfNylADGz9owxw27zNWNPHAqCzz8fka2qUgAAiEAhhHU6PK0sAvkToC/22hFN7pMaSf15zgfvGTKYM8M7fw=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":50695,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgq2peCRA9TVsSAnZWagAAdL8P/Rh2avg3B7pQR8QXTelA\nanEiUUtgknTqxgYOcsR/Oh7ByiMOeIUPmzGe55Nfx2JgUUPLydz7UjAxKu8i\nR3Jc9ZGAPFBF7pwed1hzq+qB4UjbMIzxXeFaQZsSSg2MV0tDsb1GG4OX3yhU\nCeuzKPjkNIpyO/3SOTdPZlNjFOS40uUTXmKzvvuOa0o95KtWpxuvQgcRLAub\n9WGjUlt6Th2ajlTuHjE7mhAMpSIQ8qDnnpE6MQgZptRb2sLwtqNHJ+9DPD/J\naaKBQB+ulqMYfqpPGBrZFVJ93Qqi1zVfsja8YEq41Ggs3sK86mGhZFO5snJT\nyPc7yorOlTjsoQymzmwU3wbe5RHtjKQ2ZbCd63rUt55hDlFEUjumlSPSpRbl\nxlEsJFWFILh99btnByQlqADLLV/ZPibtqSPfKswlku4rzd5zH8WIcuyzDA+Y\nvfpVzyT6rCeAFPpFKyrLJxIjQq+UG7ucmiswVPtZaZ6eu+H7X3y+jkAPOSQa\nJK/lUwvkSZLcQS60hA2MqULyjK1zzaeV16Tr8zYQx4Y7+8oUWZHoGnvA1cFX\nJ3TTKXVUtiQTNB0Y/D8DzUUe+0F+6EHhQbwofhuc4z542QPBBzdTnuiVwlNo\nKuG03j2HGXKdMl8yn0xJoMvPA4G+twvbOrBqgKVgCDXOdVMX58xKocqjiW7G\nbzkD\r\n=B5Wh\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\n[![Publish Documentation](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml/badge.svg)](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml)\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"8e428bc26e00d70b348d8fb59fe44e71e3a0719b","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc -p tsconfig.build.json","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["npm run lint-fix","git add ."]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.5.121","@balena/jellyfish-logger":"^2.1.73"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^26.6.3","sinon":"^10.0.0","deplint":"^1.1.3","ts-jest":"^26.5.6","typedoc":"^0.20.36","depcheck":"^1.4.1","typescript":"^4.2.4","@types/jest":"^26.0.23","lint-staged":"^11.0.0","@balena/lint":"^6.1.0","@types/sinon":"^10.0.0","@types/semver":"^7.3.6","simple-git-hooks":"^2.4.1","catch-uncommitted":"^2.0.0","@balena/jellycheck":"^0.1.1","@balena/jellyfish-config":"^1.0.6"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.102-renovate-balena-lint-6-x-8e428bc26e00d70b348d8fb59fe44e71e3a0719b_1621846622102_0.4428417150619961","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.102-renovate-balena-lint-6-x-2b0d1745d554e99e2d699dc6c88a305403a9d5e3":{"name":"@balena/jellyfish-plugin-base","version":"2.1.102-renovate-balena-lint-6-x-2b0d1745d554e99e2d699dc6c88a305403a9d5e3","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.1.102-renovate-balena-lint-6-x-2b0d1745d554e99e2d699dc6c88a305403a9d5e3","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"ef422016b6fc08f0ae40100cf69ca646a69fec33","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.102-renovate-balena-lint-6-x-2b0d1745d554e99e2d699dc6c88a305403a9d5e3.tgz","fileCount":18,"integrity":"sha512-UXiDK+jHvFYg2q9qHHecPGPYj2pT1Jg1F/kDHcW7JxKWrTiPy/H7r/X7B4jXaG0KAoH8JxXc7EIbvtHNCTHiYw==","signatures":[{"sig":"MEQCIDcuKr0EpzbKj255bGrGtv0cnxqsDibgf4Y3L805DGihAiBD5kckLln6jFqn7FE/mvfuQZ4fAPlePcKCgSOqnADn/Q==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":50695,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgq6aFCRA9TVsSAnZWagAAYhoP/2GoiBuWoKKzJkn2m20u\nlWQ7e5HX/91CcNKTsry1oFB804PtkV69giJcISMwn1aWkrY/g5AgHaWeKqs2\nV8HysCeMX3kDICHOgwl00WZze2TVVZgIaGRjzWvasc78QhF4jgQ1H6nPZBWy\nTnFela0fEOLsA0uLO8QR2pYB9yfHql+dSEyOIWB8Sdh1rf6yoQwJPHm15iZQ\ntcGy2fHFfJqXh2YwLp+PaECLpgAdqMAA6q9s9qwWGMJKqqCHGFfyoFgn6N9e\nPzzDUAhRAzwMF0DRp2kgux0TpcYr1ElU9zoKelZSVgnnIA9WbUwGni+sQ2Wy\n3JepO274hNkKkVm2ngra5hlG+T1pGfl19gxA/RJmmOqrkw/J3F0C8GOMGdL6\ntli3aSB3xTXHCIkeoOeCeidFwtynOXJjjoBCx1dJ2P4Om/Pe38sRop46Xvi5\nWKR1/pF0fURs0dIscz0kl2qP+xtF1zl+SXQ4CUzIKqXZkPq9UXj4EgnweU1I\nYRvfBpzblXZQPujzIC09kxylmHLm+7fMQNPnnR6aZiqcmfuJx3FgmfgE1yeH\nAqpBb33VW3x70yn5PlX85V/4HhiyuQLfLzf+nQGLxc2B24mMfJ44DGQ/B/GK\n20oWN73Yr3hvnlCJs6QRdVnlVi8QR5AUp7UL0gBEM8bT+3SFP+8cDwsnUIpu\nb0zp\r\n=YTHa\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\n[![Publish Documentation](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml/badge.svg)](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml)\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"2b0d1745d554e99e2d699dc6c88a305403a9d5e3","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc -p tsconfig.build.json","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["npm run lint-fix","git add ."]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.5.121","@balena/jellyfish-logger":"^2.1.73"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^26.6.3","sinon":"^10.0.0","deplint":"^1.1.3","ts-jest":"^26.5.6","typedoc":"^0.20.36","depcheck":"^1.4.1","typescript":"^4.2.4","@types/jest":"^26.0.23","lint-staged":"^11.0.0","@balena/lint":"^6.1.1","@types/sinon":"^10.0.0","@types/semver":"^7.3.6","simple-git-hooks":"^2.4.1","catch-uncommitted":"^2.0.0","@balena/jellycheck":"^0.1.1","@balena/jellyfish-config":"^1.0.6"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.102-renovate-balena-lint-6-x-2b0d1745d554e99e2d699dc6c88a305403a9d5e3_1621862020430_0.6746201518322037","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.102-mixin-types-bd3bd5952d3bb75198ca5e438cb94c4b195e7ddc":{"name":"@balena/jellyfish-plugin-base","version":"2.1.102-mixin-types-bd3bd5952d3bb75198ca5e438cb94c4b195e7ddc","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.1.102-mixin-types-bd3bd5952d3bb75198ca5e438cb94c4b195e7ddc","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"3a60cb4273800f01c76828b19dd173d6e00e0656","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.102-mixin-types-bd3bd5952d3bb75198ca5e438cb94c4b195e7ddc.tgz","fileCount":18,"integrity":"sha512-aFQMFGqs52SIInIzpxgnw1vYSuy0bXx4/wZt1Z3Kq3/X82oyjfIbprx5g1FVtAPogLEfKO66vvl1T9CT79dmMQ==","signatures":[{"sig":"MEUCIQDYJoEQsfs2rye6zIxVzUfVMj3RNz3tFcpUvsTvJzdjMQIgaN95XU5RaZhHQ6dDKgLSQhgxZPP3tzPwUnjmGGj/+Lg=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":50628,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgq9gjCRA9TVsSAnZWagAAfusP/3VAanA5canwaxvcl5c0\nxWE8z6NcsTVydo+SCXeRRsDSxgVfhloiPu6Vpk2HV2U73Uo/1aJf6ojYFivw\n4Y5V/luwdoCDtRiSRdAcW79K4K9MRZVZnn18/yPsFS6fOLsVAKaXmt+YkUMz\nSMrmriD3GKkPdP389+HULftOoLNh5DdUoKwgum/xrei4Ad/VczjT2r5aaaNH\nwzcDQwYtYHwfBDic5r28LdNYhItPZ9EvbZxTJW4GYTIX/BVAwzQYd4citImP\n+swJHG6zK3z+5aIXTBcXZxwVpGc0aalnZTogiZelJebQlkSxhuz9Zj/ag17g\nHtrDPfyPJAXX2sKAV2vRoui/5RuSFNUJd3xJPNolclVJ325JVNKZhE612Gsf\nwNyXbM6Q2IEtVKdvzdgel7uPv5iOuAVMA8F+eYfaL+DQdWW1fqDiLaXVqOrs\n7BL2vDO3CAAV7J/TKYbETavA8Ttnee6ZSCfJ07/YJ7tubEOGsFHekzKy2sbx\ny8uVN2NeykVSG+bj7KThHFgGXwrnHvx3Tmliz130BY6HBfITNyszN7iaTXcu\nKfaMd0/kfXc6QRDRXIEefK7w0ute+ShQa+EuvAt59riNjdB+9Jztqc8nc5OE\nR154kHAjqCYWu/zs5L+Fa66ummsGM2c10uuwhtL0h21Wz/bGmVzibHs0+5ii\n9eIU\r\n=fPBx\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\n[![Publish Documentation](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml/badge.svg)](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml)\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"bd3bd5952d3bb75198ca5e438cb94c4b195e7ddc","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc -p tsconfig.build.json","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["npm run lint-fix","git add ."]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.5.121","@balena/jellyfish-logger":"^2.1.73"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^26.6.3","sinon":"^10.0.0","deplint":"^1.1.3","ts-jest":"^26.5.6","typedoc":"^0.20.36","depcheck":"^1.4.1","typescript":"^4.2.4","@types/jest":"^26.0.23","lint-staged":"^11.0.0","@balena/lint":"^6.0.0","@types/sinon":"^10.0.0","@types/semver":"^7.3.6","simple-git-hooks":"^2.4.1","catch-uncommitted":"^2.0.0","@balena/jellycheck":"^0.1.1","@balena/jellyfish-config":"^1.0.6"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.102-mixin-types-bd3bd5952d3bb75198ca5e438cb94c4b195e7ddc_1621874723150_0.28553959491465597","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.102":{"name":"@balena/jellyfish-plugin-base","version":"2.1.102","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.1.102","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"3aba15d706aeeca25856f4f55748fc492fa66f85","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.102.tgz","fileCount":18,"integrity":"sha512-E+zOREaBonQmW8dcFsMKMK0bpn1IngeqtaCeFBr3xSZE9kMNiBlU3oVexKgiaD1CqkvX7o47psf0YyU0HyI7Dw==","signatures":[{"sig":"MEUCIQDkB+QUp0+ulVZsuGsFqoFg1al0hQqr98sTEVJLQeY0OgIgVpzRaQyCEPZdeCZXESiRC/6TP3EKDxTtHhMF2+Yerik=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":50575,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgq9rFCRA9TVsSAnZWagAA2FUP/jVAaukr4Exb9z1qkHKI\nLS9JMQ3ZnuzSrgvt8pk5lY4+kbpG83clzIsbHXMMjUR+rT08JlnzTzWD+Neu\n9qKjnoEWpG3pp9aa4skcZbg1gsvcq/udjfgsSBUYLgq5KDG5dSHxjABzpwh+\nhnuJ7FpLQWTEVDFk+Q/Gff1fJAvGDv8kIQpT5CY0HrWrcVbDW9eC2bYLtQG/\nyyEmL6ZoERgOBWME2yhuyfA8i1S1cz+jHw2hUqVzX0SDrm5dkAL7XOsLOuLd\nSUoTWl3G0MnGRl818C0Wqqu4UWxU/huTzQwsysSDIewfWbI1trNvm8vtbLLv\nO0seeFlmGXbxpeyHpq3xpKI72cvyAjlMl3CcrWYqM0AROi9D5NUGXrn0LT2O\nBGy15AoaOoFrwtH6FyXV0ljn6SI3x8jVW5SGlK+msXRPGxTGMh0LrB8DzJGg\nKsQeE0UAfujdLhzwrQ7tZGmMqIykuThIVlQKkVNG+sgIGHf3PjhKtbQVRssK\nJz+SCovd0EOJ/dbUfBx8zenhqtvArrQET8g7x0Et/FjWVUySzU2YSTnFtBOE\nOEs3ZsQiIsZBH266nnoAfqtJ+mxFhzOcffZLyWIIj/o85r8X7QQL436chlF4\nRgecHHbg+u0gZcwKZUuS+2+FeawhlS5es+k5Zu7Uemuw3BLidk2yYZF1L0h3\nACcr\r\n=zNCr\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"89774acf329aa647452a542481b81cf7e03ee315","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc -p tsconfig.build.json","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["npm run lint-fix","git add ."]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.5.121","@balena/jellyfish-logger":"^2.1.73"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^26.6.3","sinon":"^10.0.0","deplint":"^1.1.3","ts-jest":"^26.5.6","typedoc":"^0.20.36","depcheck":"^1.4.1","typescript":"^4.2.4","@types/jest":"^26.0.23","lint-staged":"^11.0.0","@balena/lint":"^6.0.0","@types/sinon":"^10.0.0","@types/semver":"^7.3.6","simple-git-hooks":"^2.4.1","catch-uncommitted":"^2.0.0","@balena/jellycheck":"^0.1.1","@balena/jellyfish-config":"^1.0.6"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.102_1621875396969_0.3707252873407194","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.103-renovate-balena-lint-6-x-34987971cc259e9e8f172de0435c743195123219":{"name":"@balena/jellyfish-plugin-base","version":"2.1.103-renovate-balena-lint-6-x-34987971cc259e9e8f172de0435c743195123219","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.1.103-renovate-balena-lint-6-x-34987971cc259e9e8f172de0435c743195123219","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"5957debcb512b62b63f056c94102b7b3c61effda","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.103-renovate-balena-lint-6-x-34987971cc259e9e8f172de0435c743195123219.tgz","fileCount":18,"integrity":"sha512-OADdhw38GNioYkLt6520HzIxNasgBDivhInkeMhZOiRUrGZIcp2eDWaFrnwlx4TZslaBQNV3eWFxGvtsvyzj1g==","signatures":[{"sig":"MEUCIQDS8AXD7C0KHY//xRcyDpoYuh1fAmeKBxT559BRADuPeAIgYMhJeQwjJ7n4mr2wNO6ToVkX4T57dPYykHwXkMPGSNc=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":50732,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgq9whCRA9TVsSAnZWagAAgrgP+QBuYxvTqE7PGZBxkeso\nDmVII3DYstt5yY8v4O7lg9OKC1lu1JOGWD68DeKoGaOgYCaTcqI467nYqr4k\nEabt5a/bry2gvr5RPVCLfNKKSbTH28OkGhTlifXgv11xWfpszFgsPlAUZqMn\ni5XivVCYMeB/hc7BLnhxi2TV3BtHyJ7c1/qw6U99c5oyKwtjGv6XI9zY5XjY\nawwjdmIE5FNjKmtSI1CHRn3HBemEklSApktf38KVqbTGZjvOITWXEp/AxVKI\ntNbDFlrbcsI/0LI1IuqlSlqUBb738pAOt0y5ApR/0hO8GfM8uQLZcva+ntlF\nq3wMiYUMpUHxvjDtGia4f7NMgedgIdrUDfrOPQxqq2sYIYg0EYit2YTHGko/\n9vRs9LgObTDuGQmQnERkLDgerHwYttumYlq0jyTvigX2GuIm2g7ZNLfSOoSI\nkYVbXCc4j5Lh6+mzKIYLz4+xyNcL2PsGJJzgMnQDl/ly35D18jBmTMYSNLF3\nGizNHn/jRhzQCG0pt2Xx8TJYLdwdBgKaqFIVjgmmQyquSVrLR+c9KQr5niz8\neu8bkuyUtaGyZdVtlpS6eTG8Pobztp1SZXwo21frCWs2sXETyvRJKhYTnDoL\nUxnXgvVq1UjtKkSH1l5ZrTuQ15NN1AaanpKYNgwarzcBUWZE9Pwm+cXCEQE7\nxiqu\r\n=S4mg\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\n[![Publish Documentation](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml/badge.svg)](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml)\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"34987971cc259e9e8f172de0435c743195123219","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc -p tsconfig.build.json","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["npm run lint-fix","git add ."]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.5.121","@balena/jellyfish-logger":"^2.1.73"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^26.6.3","sinon":"^10.0.0","deplint":"^1.1.3","ts-jest":"^26.5.6","typedoc":"^0.20.36","depcheck":"^1.4.1","typescript":"^4.2.4","@types/jest":"^26.0.23","lint-staged":"^11.0.0","@balena/lint":"^6.1.1","@types/sinon":"^10.0.0","@types/semver":"^7.3.6","simple-git-hooks":"^2.4.1","catch-uncommitted":"^2.0.0","@balena/jellycheck":"^0.1.1","@balena/jellyfish-config":"^1.0.6"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.103-renovate-balena-lint-6-x-34987971cc259e9e8f172de0435c743195123219_1621875745191_0.6184808610765653","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.103":{"name":"@balena/jellyfish-plugin-base","version":"2.1.103","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.1.103","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"5707e984ec79f82f48fc653468b6069f41d95f20","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.103.tgz","fileCount":18,"integrity":"sha512-pNRO/Gv1Jp1zkZHVdVyZqeGRU1TYDyylggvRQzj9oyBHsIaj033/p2I/gUoxfjXdBt+XXhd2dMLuh913GnT2qA==","signatures":[{"sig":"MEUCIAqcFWMPYzjYnhTTLocUn1dLr1T2xvhBw5LsouA2RrsrAiEAl9KZW7WK///Pxlhn6C57MV+GXda1KvGHuFc9WkguW9Y=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":50666,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgrD+dCRA9TVsSAnZWagAAlkYP/0nB4N3nKU+gA5wXmmIp\nGIgTMZRWejfN1aZ3YIG+Mqfoo9ESUK003sDyCkbVgDpP6D6SckD+FAkpX+Ab\nOG+QEFcqBwMgXG1EO5qH9ks1bldQ2eS2Qa61p0H17DCseC9iNAyUXwlZ3BoB\ns7oBzN27IjhLBJ79pPCR2NotkpL0AVtFIWtkgxCKOPAL0T9h+pHMzH8+oati\nN0VR9pBiu+raMdXr1CiHKd1OJD+O0Yb9BmwAo85ANG/oY1f3hrRd2Md6YxxW\n+auDGt43UvwAcrV+WH7WPdxlHjJumSHeE7YKFOaJ4Mom2Q8Ea5RqZGuCfxaI\nyOvYMeOgXNc9FVSdeeUwbDSp/XF/VRlLgWq3X6qF23gZfgp9pqAHYsTrHwju\nG2VsxqADmquEbSrcjujgcpgXkVn/Jcyj2Fo/tDAQh2FGhhmk73aBmZKoVZqC\nhKWQQnWPPtdj9mxwZlEhnJ6+DSgSvmIyfe5eZoBp5WPbpna/2mYDq7qvkiOK\n8UTPbmiJwpyXxpDzzepmx43X9U3W1RcO08u+WM5u/Ron0mg8thmJFVKl3/eY\n0+PLw8QD5faJXdOO04R/1k9Cs0DJ6pW4EaKBHHgB8s1BocUbG7PM8EawER9B\ntltuCDnFXvEMLfd6NO0V8vmsUlM/wEkCpd9crDVN9Ku1qG6bSogx42aS95gC\nfVAp\r\n=ivAa\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"69a3bfe480e809ce2b1b33f93bd4f4513ed26e93","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc -p tsconfig.build.json","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["npm run lint-fix","git add ."]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.5.121","@balena/jellyfish-logger":"^2.1.73"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^26.6.3","sinon":"^10.0.0","deplint":"^1.1.3","ts-jest":"^26.5.6","typedoc":"^0.20.36","depcheck":"^1.4.1","typescript":"^4.2.4","@types/jest":"^26.0.23","lint-staged":"^11.0.0","@balena/lint":"^6.1.1","@types/sinon":"^10.0.0","@types/semver":"^7.3.6","simple-git-hooks":"^2.4.1","catch-uncommitted":"^2.0.0","@balena/jellycheck":"^0.1.1","@balena/jellyfish-config":"^1.0.6"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.103_1621901210619_0.23543105963058752","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.104-renovate-internal-patch-e832a9aa5377d6838300cafac4ee9463a836f9f8":{"name":"@balena/jellyfish-plugin-base","version":"2.1.104-renovate-internal-patch-e832a9aa5377d6838300cafac4ee9463a836f9f8","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.1.104-renovate-internal-patch-e832a9aa5377d6838300cafac4ee9463a836f9f8","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"ad3aa24d51cf3e4c9062474be868da946891e2de","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.104-renovate-internal-patch-e832a9aa5377d6838300cafac4ee9463a836f9f8.tgz","fileCount":18,"integrity":"sha512-m4lUD2UXyUwKKJ/ma039gWxrM74mWEhw1qJvrK3DPMbbPQYyZUrr8LqFKp2p7YP3F4BZuEP6eHYb7p+as9c8jA==","signatures":[{"sig":"MEQCIHnQXq2v0T0Vbqdb2u6zjyAa3HpYbmKbHotwOSZbZJnRAiAeVoL2UzDt224qDD+VLu8k390HaOmuxfJ8WTsCbKoYYQ==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":50827,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgrEJZCRA9TVsSAnZWagAA5eYP/3viyeEfSWhI5VazGQjT\ny/d88KeVH2An8FiI3rqGqcX7dgnmd2xpXbDJbQC2+T/7Jvie5b5Kt6mJq11I\nJV162Q4/WCaRbr7VgsTgjgTB09iIsIbXOt+C3jJb8sETZa8ytgwFUq9selOA\nBTQ5b/EROCfJroGuaXDyMiZTkHhlFllPVF2tOhoMuETJORRzmjQL8+ztlbBE\ni6T99kE/Zfcu7jffl6lqDSdLl+z1idiKKiFQc0q+VdC5CiPDblujEUl8K1Ey\n8DD2L+5/EP8SWyim9ab9keR5wopBuxckk9uH2X9TWAC7sOb8fgR+SVkJEF5Y\n24Vj9U5S7cTuVBYE1qHZLFQtmIS8rsmG6ksleuFIJwapc7A9iJ9aWiFqcEf8\nY4KzgK7sSUdSAFviaMXYBqbmpwFu0DQo9Y4br/C8vRspzuFZTT1pm7TVg8/E\nghpX9FGE73qIudmw6k+vzR/NPFIqZcprgwEnfh9w09BM7ccJWRQJamWrgCQj\nv8PR8bCfbhFK+fQJxDXVbaveyvxBTNKLonfWwhBthPQEYzHWX8IeyRdY52Up\nUpxxN68RUfB5fL3ZVdmsWS/G3C5cAk7p1E/7bbUN2YcE7YAagRZGEvVQ0e0Q\nXQJNJobOmiiEcoM7giQVlOO9XwmbQgkhm4T0bcWcYY425harN2opNhEA+voc\nAuIr\r\n=suS2\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\n[![Publish Documentation](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml/badge.svg)](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml)\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"e832a9aa5377d6838300cafac4ee9463a836f9f8","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc -p tsconfig.build.json","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["npm run lint-fix","git add ."]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.5.121","@balena/jellyfish-logger":"^2.1.74"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^26.6.3","sinon":"^10.0.0","deplint":"^1.1.3","ts-jest":"^26.5.6","typedoc":"^0.20.36","depcheck":"^1.4.1","typescript":"^4.2.4","@types/jest":"^26.0.23","lint-staged":"^11.0.0","@balena/lint":"^6.1.1","@types/sinon":"^10.0.0","@types/semver":"^7.3.6","simple-git-hooks":"^2.4.1","catch-uncommitted":"^2.0.0","@balena/jellycheck":"^0.1.1","@balena/jellyfish-config":"^1.0.7"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.104-renovate-internal-patch-e832a9aa5377d6838300cafac4ee9463a836f9f8_1621901913260_0.3706557190404436","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.104-renovate-internal-patch-e09eee2140b233025f9efe9e1f2de9080477a35b":{"name":"@balena/jellyfish-plugin-base","version":"2.1.104-renovate-internal-patch-e09eee2140b233025f9efe9e1f2de9080477a35b","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.1.104-renovate-internal-patch-e09eee2140b233025f9efe9e1f2de9080477a35b","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"383a7836a4fa4bbb298d2e7e1c00cfdf4a873f2c","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.104-renovate-internal-patch-e09eee2140b233025f9efe9e1f2de9080477a35b.tgz","fileCount":18,"integrity":"sha512-aCL3ojnNCNt4R3IvMb2vRXHyGvlT+4oz5rPjzbDk5xb27heXwINfAgqPrCymaFbnmixpEFGFZyAuKL2wkZEEZg==","signatures":[{"sig":"MEQCICei2J+0KgqNdEe+GSiqwKKKOkUqmJtf8Uw0vVe0yJeNAiBHEwWhhbZnG4Sdx80DPtVkKndReIKJt1Z1gBcNB3MxCA==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":50827,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgrEVDCRA9TVsSAnZWagAANy4P/37T+WWRtX2JE9cBGUO4\nLUg2h0pzvvHOoVcDhMFtPkQzPsDIah5NOZdVoIyWcIKipMMwHdY3cxcARgKU\n9zr0XMuubFZeW6rWvu0fXel1kRCUK6at6rjomR5c/lSxXFBVqewEJxmzjVFF\n5nxYso4JIUFBi/gsmMASOgq/5A8BiU7CfgKw3M5tnkMNxVDLECd+2dTyITes\n7sP9JzInI8JSMDlPNe2ha/bemfp/HMLWyVvWx5I3GaXnuCxRFBKaMN58JMMl\nC7o80tjdLk+CRMxBoX7Lh7dAu5Hx791OU8q9+X1xOUCp01r0peZSRIjYhWpw\neZxLcOzCYP9TGq9lPjNgsNsLpYRauQB9i+qejuzfAsd1Gv06yj8qilsmwerw\nLxt/ZYgKP9YEskpU52e9s6sjtxH44xHq8LzrCKq6saiFAwqbfPWmwFkrZ4dZ\nEwqD2SS+wqoJ9po8i5x2zjmL73vJ0qkSr4fL8Kcs1mQUksASJmABqTdNvym8\nQwHlw/rsxjM5N1D09pVaTRpFUtnV7hZlR0ouyJDvBLPtbHG/ZeAnnkBp73yQ\nXOOZk6ZmJMK1sLC1sJN01tFSEHM1yFSeAS9fk4GDRHBgxAHqyNzv6oXJc3wU\nFEl444kr5mOvgVc/QtRW+4nv2LAnCya1/Am8q/8ggT+wMY+0b1w7e6dI2Ncy\nvql5\r\n=UA3j\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\n[![Publish Documentation](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml/badge.svg)](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml)\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"e09eee2140b233025f9efe9e1f2de9080477a35b","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc -p tsconfig.build.json","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["npm run lint-fix","git add ."]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.5.122","@balena/jellyfish-logger":"^2.1.74"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^26.6.3","sinon":"^10.0.0","deplint":"^1.1.3","ts-jest":"^26.5.6","typedoc":"^0.20.36","depcheck":"^1.4.1","typescript":"^4.2.4","@types/jest":"^26.0.23","lint-staged":"^11.0.0","@balena/lint":"^6.1.1","@types/sinon":"^10.0.0","@types/semver":"^7.3.6","simple-git-hooks":"^2.4.1","catch-uncommitted":"^2.0.0","@balena/jellycheck":"^0.1.1","@balena/jellyfish-config":"^1.0.7"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.104-renovate-internal-patch-e09eee2140b233025f9efe9e1f2de9080477a35b_1621902658666_0.09988803094082588","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.104-renovate-internal-patch-d7a00fc4825732c7a17235bc6fbf27f9d2dc31b9":{"name":"@balena/jellyfish-plugin-base","version":"2.1.104-renovate-internal-patch-d7a00fc4825732c7a17235bc6fbf27f9d2dc31b9","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.1.104-renovate-internal-patch-d7a00fc4825732c7a17235bc6fbf27f9d2dc31b9","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"7ccef830a4761b0acb3e193b9a34403332490846","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.104-renovate-internal-patch-d7a00fc4825732c7a17235bc6fbf27f9d2dc31b9.tgz","fileCount":18,"integrity":"sha512-HKtvwXzWB5rqp8x098bp+TszyjLaNqCPBfZ6cbjsuHTy52UaAoQAgW2KfthdwXwwMgRfmF/5cXhNPgDtZLcQ2Q==","signatures":[{"sig":"MEYCIQDPIFllPBGuKRXPQpej9YwgveqI0cLKh0FEmwchKZq09wIhAJeJE6BKdY0HFkvcHdheDOqFekVjqto4UmdIFtGeDrxh","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":50827,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgrFi/CRA9TVsSAnZWagAAdhQP/2Lem4To/yuARuzhwvWB\nCXF7GAOYvgsOok4lTldjgR6WcCQGbmlZG+StO8eFgFtKsVBGOqM87y5sllSD\n/g/YlSEIToxN4FUvbd4KZ9mPayNqgPjN6/kRpg277VViqPaUE6oRBT2aAnlV\n0Sk5jAH/4J38K1YOFQKtz3sKcmJq3fEAUdGsyQEESozGzSQ4/4Mw9gt6cg4m\nYdTGOC/rl75+RPGZ6DpMIAUEvwW7Ldu0EkK0/Npt0P2UkgY7jxwJds0oWZTf\nHjJlooKSG5EcMr/x9namJC+5/CnKLEI4zbRI11XS3V+UYAHu4oEg9xYpOG3K\nh3uYS1RNCVhVWyZswf/Q+w8iNp67+32g3g6Z3EBiOBC4UsBxcOJkI0duQ9Hj\ne0h8DsaT0eIPjfO9Ry6pw299SQCUZUyDPelWs+WFMg1ctDArOAU+F5Z14PpB\nlOhKOFJk7JbLx3Pjo5w6KeA59W9qyuLYaCg6ThcfLGhjxZis70DPbOg1SZL+\nBS3aYE4EUCUTiu3vLnioFCnjvxiiz32jgTxgnbpyNuKbAlzDXPkv0Uo62pIT\naVWFEcwv0WSXdfOSHP3Ktj6yEioQZDPN3ehiVnJR8gdeaGUlxg1ZBKNKsISr\nEZbtL+x0tccRLn7ExifPWMX8Hkq3fKlC89ZJ0VUUH+6iyYJooz/rT9xBwfAH\n9PYe\r\n=6LJK\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\n[![Publish Documentation](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml/badge.svg)](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml)\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"d7a00fc4825732c7a17235bc6fbf27f9d2dc31b9","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc -p tsconfig.build.json","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["npm run lint-fix","git add ."]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.5.124","@balena/jellyfish-logger":"^2.1.76"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^26.6.3","sinon":"^10.0.0","deplint":"^1.1.3","ts-jest":"^26.5.6","typedoc":"^0.20.36","depcheck":"^1.4.1","typescript":"^4.2.4","@types/jest":"^26.0.23","lint-staged":"^11.0.0","@balena/lint":"^6.1.1","@types/sinon":"^10.0.0","@types/semver":"^7.3.6","simple-git-hooks":"^2.4.1","catch-uncommitted":"^2.0.0","@balena/jellycheck":"^0.1.1","@balena/jellyfish-config":"^1.0.7"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.104-renovate-internal-patch-d7a00fc4825732c7a17235bc6fbf27f9d2dc31b9_1621907646335_0.11425198736159636","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.104":{"name":"@balena/jellyfish-plugin-base","version":"2.1.104","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.1.104","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"c5082797feb1caae356d00531f959495cba601fa","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.104.tgz","fileCount":18,"integrity":"sha512-/KRONvyU/lP+tg4KAQkJnT7/I+HVuXlfT0nYGKu3Qnj03GarGzJhAygmO6qb86+MJoKRUvKO1LFjR9txuWJH7A==","signatures":[{"sig":"MEQCIFcrx8kHvy4I4Df9mAfYKIAkGvGCPvzulcpxpwY989vAAiBswRf5+KIQl++j3KdJ585FT1EGQn2bwjtLfvfxvz91Kg==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":50762,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgrFmCCRA9TVsSAnZWagAAHGEP+wZiBn23dK1/R/nqmjPe\njUgGY9NqmSwXT9Yt1UQEtZpNxMsPH334HAq6N4X2tiABoI+QehoIzpYb0nVR\nyglw33QIJsv96vSEQ6W5lVk+BccDyV1Js9n1/YV3rsg8R5GP34pmxJaTeWKO\n6zeku/ON+qlnF681T2GpECE+B0lWmvX8U32pMKX5rayrNoLNXPp1EoomN4g+\nG47/qN/zDi3cK9UkpCGcFHYk7eu4tb+qAMCsj1raGJUGTcqFud6y8pTmfOa4\nerGAuTFS0vV9FmyO80eGKqGV0BnQxHiuOdZXDY97Fn8Dv2tPEH4RwHpfwJoR\nGaOl8tDdIH6hnY+2RY2ubPMcR2/0fjOKGQwzuFgyRFcR6CCBUAQWMAlmJIG/\nheCo55qZpyAiqVg6Yf4vfcz6xrCd58fMQQ2jJGk3H2P+/ihMiqaFS9qyX7pr\ndVex72sV/bBCjg9UNT4uSmgQhfmaogU9hNquQi2VPTFk4llXww3nAdMlHggg\n5PcaDk0rNep+gCmbWM89kKKwHM/zmZiJOO5E109vboDNdhpnf3VKNpC5ePik\n9zFVIpvXwvRj0Z+mE+jaBZ98+M2GPYCF4Qh+8Dvd1WRm4l2+W/VSp5m5UzKz\nbiWkn8fRKyqYfjKLOplQl1LDhS095d6fabi+I6f8GhEk05JiOP1T2DmVi5af\nPPyU\r\n=YJtI\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"caf343fa36bdf58790314a30c57f8c81c1244843","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc -p tsconfig.build.json","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["npm run lint-fix","git add ."]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.5.124","@balena/jellyfish-logger":"^2.1.76"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^26.6.3","sinon":"^10.0.0","deplint":"^1.1.3","ts-jest":"^26.5.6","typedoc":"^0.20.36","depcheck":"^1.4.1","typescript":"^4.2.4","@types/jest":"^26.0.23","lint-staged":"^11.0.0","@balena/lint":"^6.1.1","@types/sinon":"^10.0.0","@types/semver":"^7.3.6","simple-git-hooks":"^2.4.1","catch-uncommitted":"^2.0.0","@balena/jellycheck":"^0.1.1","@balena/jellyfish-config":"^1.0.7"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.104_1621907842420_0.43409760655307883","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.105-renovate-internal-patch-fec08b2bbab9f24c3b508f4fd295540e2b5eab8b":{"name":"@balena/jellyfish-plugin-base","version":"2.1.105-renovate-internal-patch-fec08b2bbab9f24c3b508f4fd295540e2b5eab8b","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.1.105-renovate-internal-patch-fec08b2bbab9f24c3b508f4fd295540e2b5eab8b","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"19abe1b8704f9d66f2ab4864d6677765cc5e91ac","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.105-renovate-internal-patch-fec08b2bbab9f24c3b508f4fd295540e2b5eab8b.tgz","fileCount":18,"integrity":"sha512-YBsAO7e87xwzYIPam3wmOq0yuZ5ubxpKGPMflZY5zMSTT5TJxlI8cSzHujrciTefp6MD+S4Me86rrylZwdRE1Q==","signatures":[{"sig":"MEYCIQCZJHSmucZJx2h8NVm84d5k3KP0XdmifsVEKUe7n2ZvGQIhANzq2QHNgze64VkdR8mnhgUkHWB+wUAWktpgsgZqmFWB","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":50931,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgrHQuCRA9TVsSAnZWagAAHfkP/1LoPGwMY+kG3l6BuMuE\nQKo26IQSBeT2W2oFdNGCxDk/kvnzWFHMRG/f1sfcCnQZeYhzEgejn/j2rHb5\nyvBd1YaiRweWQCM4AUm5tQlqkyVaWfMxaWhWd0kA+Sw2ttXnF+gLCBvFHARu\nWArz8RcfHWlV5E54wFTzXFTt1NVVkir66N9xB/tFWopUm5jE3SKWsaJ0yIlp\nfmSaUetci/V3AyeK9N/qyIMgus+Wj9A6+mHAp9m3qMWU+W581WYBe9wRjKXc\nc3VEpP8sVDmNbWk9R1DnMZ9lUr2qs+Ulzc6vBdCobnfRN95+fuoXUbBOLkqM\nqJxyvjQu+iwTPQOZiFvUyU2SkluVrg105FntkqH7MWCimT8aA4UE3LiK+Pcs\n9KJez6PV3uxCAo+evKY61T6pnvcSzEdjgt4vwyLOuDM/rwHjts8ibDuNp49A\nzpppXvCKpGmr95PGUyDg6Ltjo6DpmBUhBn3aI2T0n//frx9y0okJnV+44fpR\naQirFZXM7MqW2+yMdGy0CnkBCzRioM6aBZq6bo9arhbxLCAEeK9WyTy70qx2\nYbeQOArhjkL8kdblChilQnQ3eSc7zOPhoCCcX31fZ5ZgG1uwnf0jjePCmsFv\n/PdEHUu3ByLtv5cVclBxY3AoiCFSJnBvRvT+UWOklbZO+T38/1bKF8XZhOQA\n6q41\r\n=7CUK\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\n[![Publish Documentation](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml/badge.svg)](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml)\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"fec08b2bbab9f24c3b508f4fd295540e2b5eab8b","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc -p tsconfig.build.json","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["npm run lint-fix","git add ."]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.5.124","@balena/jellyfish-logger":"^2.1.77"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^26.6.3","sinon":"^10.0.0","deplint":"^1.1.3","ts-jest":"^26.5.6","typedoc":"^0.20.36","depcheck":"^1.4.1","typescript":"^4.2.4","@types/jest":"^26.0.23","lint-staged":"^11.0.0","@balena/lint":"^6.1.1","@types/sinon":"^10.0.0","@types/semver":"^7.3.6","simple-git-hooks":"^2.4.1","catch-uncommitted":"^2.0.0","@balena/jellycheck":"^0.1.1","@balena/jellyfish-config":"^1.0.7"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.105-renovate-internal-patch-fec08b2bbab9f24c3b508f4fd295540e2b5eab8b_1621914669971_0.7070300197457893","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.105":{"name":"@balena/jellyfish-plugin-base","version":"2.1.105","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.1.105","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"65bf6512dda5e67f771a087628168cb9c2bf4a5a","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.105.tgz","fileCount":18,"integrity":"sha512-wT3G7UEPNCIroxCDryZ0tWFyyUOva+S/yMM3EJ4Cqw4ikRyOAMMY/9h+JrxqZauNCdMgwttcXK7t5DejUnWDXA==","signatures":[{"sig":"MEYCIQD6Czi3WAdu6sr58PpiZ0MH5bfAzDAKi7cbKbps8ZWMhAIhAPfgFYWsEY6l639JOYN445DAF0WE8c/PxJ8omBk9HVMM","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":50866,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgrHUwCRA9TVsSAnZWagAA5mQP/3iCCKpZE4WGp5trG3qQ\nHbMQasHZcMrn6wn3qVXW4VEOkONH9jsiUyIThBNBeeGspnQSkfCNtaLGKIHm\n05Gz4HK/6GNAXF7FjE68xnVMuprQhonJLOGZ+PkfUALNsmr8W6AH8YrOEUDb\nUf/WDltv3UASHJn8WrqQKccUYkeSfnSdh9RpS1O9gffhMm0dowR+ONp8qHDG\nrgkp6Ulnu0MFJRQSX7OZLIh+A0CDgNOmED2+ldRkV+dPwtP6OkmvhEf+I6hH\nIki7cWsL8vXKy0bkmkTU4ZDPWawwjrwKaweZrisT2Ql3XlFwjgwNQlED3uAE\nyVBvpWPuq1Zq7b0Y7IZmA4GmoKQfx3Ni6drNbVVu5jFXNrxL+WE64hsQKAuv\nljsXgJlr/VaBedDOiWjkQr8kP4Q2+5I7BJR7drIXirV7HTAFbPvfnvIi9/7k\nFG2u1vH4ZKEPBAgxMqoDujLKi1QXT7t3/+76IcpAA8ZBklXWtzciZP9qHpUa\n6aBmbbAIkcY4M5lkCFL/g1A5tcJgLgqScDG7lzNMi/LPpYN+SftUl8vuvbQL\n566q3LY867437NRo4sNsoVrLJoJ4cmLaVCOlG6NokBTTZQpMhbQ4GsifnhxT\nocsQ4Ttde+Gkod7qh4PlCXNeZ6ueeNvx4Bp1BWmWpAqUzt8ybb6aAD9DtG0f\nUsQx\r\n=kzt2\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"7d99f4f2b45965d0524365cf93d6a790587137ed","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc -p tsconfig.build.json","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["npm run lint-fix","git add ."]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.5.124","@balena/jellyfish-logger":"^2.1.77"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^26.6.3","sinon":"^10.0.0","deplint":"^1.1.3","ts-jest":"^26.5.6","typedoc":"^0.20.36","depcheck":"^1.4.1","typescript":"^4.2.4","@types/jest":"^26.0.23","lint-staged":"^11.0.0","@balena/lint":"^6.1.1","@types/sinon":"^10.0.0","@types/semver":"^7.3.6","simple-git-hooks":"^2.4.1","catch-uncommitted":"^2.0.0","@balena/jellycheck":"^0.1.1","@balena/jellyfish-config":"^1.0.7"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.105_1621914927542_0.0011048075681185932","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.106-renovate-internal-patch-4d93f8abf85ade2b38c97da8a6bef6db1d8907a5":{"name":"@balena/jellyfish-plugin-base","version":"2.1.106-renovate-internal-patch-4d93f8abf85ade2b38c97da8a6bef6db1d8907a5","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.1.106-renovate-internal-patch-4d93f8abf85ade2b38c97da8a6bef6db1d8907a5","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"3cb5a51f4a55611d457ddae24f5d11396bb64f63","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.106-renovate-internal-patch-4d93f8abf85ade2b38c97da8a6bef6db1d8907a5.tgz","fileCount":18,"integrity":"sha512-+dwznofGUvUaKpY5Egu1+joLbMrRdFwUOQ+q6i+mW9ITIVdCr+e98luMJvzivixoEvNx8c7CLr+g67jKQR70Nw==","signatures":[{"sig":"MEUCIF/We3WfCFUwYv/lkFR3CGsymPpwhyHqg/5t+GT3C3gvAiEA5/Z4c2DE616heyy1NKdsTIYnjH2Bx3iyIH7GOtVAgTc=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":51035,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgrHZECRA9TVsSAnZWagAAjhAP/1Qil011yjvAbGj8nOEC\naAWjL6pXVA2+EjkVxdGREMVtS/GYhHeTUxRWl0YcOl+lCm3I8fT8OG5L/TCu\nELn+V/fNuzCXbNXkYAJkYCwxnnBhTB6BFYj+DiR0aMe+MWjnZGPmOI2utkmQ\nXIeT2npmkQDdVT1N3dWFepuPj0i9B8WzGAnb+MECDH6tH8C+iiPuQsHXU1LY\nyktXPCRlSE2JUN9Gp/vqPeedJeVnURkwmUYr/9IwS8/s+7VEThi9SpQbQ0W+\nmVspBbiqDFN3YPGwKMQGt1gEWnDHSCPjE17yNC6dv13ihqFudCLIt4Cnqae8\nH3kkH2zBQmh9PfEg3SeyrLVAt5yYtOtorCYE+gcNfJprL7rMV8cvQls6BKiD\n7+O6eEFqhn3VtAa5ukSFx9vbLQzxGEbCwBaCRqxYg7UABZDhTrsDcEEyJ5cI\nqwS8V8Lwr425xXbEshBCMe44itwUmsh1ivG9cmvzmLQasiezKZWvjyLfwpMV\njjpwsXCmt/AdyCQj8YtcTWqJbD1Cp1trup/XsL+XepfVZzVP0KXAPpb16kSK\naYTH5Z5+Kln+uLl3KHgTcqaXBFX+imhLDkTqie972ooCtRpg+3H6OjqGfAHs\nBgnyCbC41m036ggRgRutCLq6ryuP30rMHOdqzWtNxr6bmiZVVVnZsTCAZx2O\npufZ\r\n=tbs5\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\n[![Publish Documentation](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml/badge.svg)](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml)\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"4d93f8abf85ade2b38c97da8a6bef6db1d8907a5","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc -p tsconfig.build.json","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["npm run lint-fix","git add ."]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.5.124","@balena/jellyfish-logger":"^2.1.78"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^26.6.3","sinon":"^10.0.0","deplint":"^1.1.3","ts-jest":"^26.5.6","typedoc":"^0.20.36","depcheck":"^1.4.1","typescript":"^4.2.4","@types/jest":"^26.0.23","lint-staged":"^11.0.0","@balena/lint":"^6.1.1","@types/sinon":"^10.0.0","@types/semver":"^7.3.6","simple-git-hooks":"^2.4.1","catch-uncommitted":"^2.0.0","@balena/jellycheck":"^0.1.1","@balena/jellyfish-config":"^1.0.7"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.106-renovate-internal-patch-4d93f8abf85ade2b38c97da8a6bef6db1d8907a5_1621915203698_0.14864508617388816","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.106":{"name":"@balena/jellyfish-plugin-base","version":"2.1.106","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.1.106","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"9a3528b85bb4675d455a3cf7b50e3fc6aea8acda","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.106.tgz","fileCount":18,"integrity":"sha512-AxYGl4HOdirDf0e9VX2VrsnnYbe0hh4nt+27HVrZPTi1i7JjEfbCfiwULPma9f6bgJVoqKAbprXB4G5BNUu5fQ==","signatures":[{"sig":"MEUCICD4Zw8YVsAT167e1Jl2Q7NA1jTpufg3AMMm3rYakw1bAiEAh02PhFTo617dTX00MPU2f6V5Y/vzLSHycj9v/d0s8jQ=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":50970,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgrHegCRA9TVsSAnZWagAA+kgQAJQQBVN/vWHyMwfi1KGk\naYz3YIMD+ngYjTt9asCYeCe/8MS4jz7ip+yfeWcnxG+Q+DBp8UZyDF5L/JVb\npKuWGveQaeagcfOYvwyXDHhu7APl4Hs4qYgIlyIfcOqHRRy1Z4F44DUspniF\nzojm/iLZhkakIwHBJ7R5X9+0m43Wi+V5FzO9Qx7ctZAEaw0U34V7p4YKQ55b\nSsCg6TFeH5w9WpoCnn9sx2vEiA0r+okBurbvDI4VyBNgZVRwDZl5fU6+0USq\nmIFe7WmBBiwh7jq860YsBMKqmL4FdU08aZGZm6RIU26ja5kT9RxT5u8U56+0\n9043cXzmQi9OHgeb4NmL4qiSPQER2NPP+WtjA172YCX8V49ov55CZzXUdmBk\nrtnu2IlokNDBcvBcyWs07BgqCX9xaKJ+qjpZlvYt8clTJFdxAQxGi4MGZamf\n7JdwqiQq09k/IRYMtD0/12dBMcaVL0Gh+mDHg02AYCx84/d7sxecfvsyBePr\nStMMrkFoh121AjZdtGTnPVehiTfpwLZ2hYbato7ZadxUaFErYDdqdOAp8dJz\n6FvfyBBDPo2BYi+cHjU6uM0r7oM0crws2+2jdPrx6E/D1zOdRvFN4tKOUriL\nVMqsrrYo8jKiGftjbQmpRqgK6gfyk0Jakx5wrETrjXttOWt5d/OSA6wfM9th\nnbQT\r\n=a1JC\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"a3e95d7f906bcafdf02b4422d7455eff40fdb28f","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc -p tsconfig.build.json","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["npm run lint-fix","git add ."]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.5.124","@balena/jellyfish-logger":"^2.1.78"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^26.6.3","sinon":"^10.0.0","deplint":"^1.1.3","ts-jest":"^26.5.6","typedoc":"^0.20.36","depcheck":"^1.4.1","typescript":"^4.2.4","@types/jest":"^26.0.23","lint-staged":"^11.0.0","@balena/lint":"^6.1.1","@types/sinon":"^10.0.0","@types/semver":"^7.3.6","simple-git-hooks":"^2.4.1","catch-uncommitted":"^2.0.0","@balena/jellycheck":"^0.1.1","@balena/jellyfish-config":"^1.0.7"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.106_1621915551719_0.08049172824597628","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.107-mixin-arity-d7682e18c0ea86a7ccc7b53d5fcc47a30c7788c7":{"name":"@balena/jellyfish-plugin-base","version":"2.1.107-mixin-arity-d7682e18c0ea86a7ccc7b53d5fcc47a30c7788c7","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.1.107-mixin-arity-d7682e18c0ea86a7ccc7b53d5fcc47a30c7788c7","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"aac71e8ae5e5a1827887cde938da163c6c510bdf","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.107-mixin-arity-d7682e18c0ea86a7ccc7b53d5fcc47a30c7788c7.tgz","fileCount":18,"integrity":"sha512-CSepP3HB76vRYIEGRxuW8t92TGzWrwOq8uayf+eUG3rcEBstsadQGt2NOUiGgARg2i2QtSVmZq5uB3UCJwJDrQ==","signatures":[{"sig":"MEUCIEyAYb4ywnzAldRp9i8ZbBi+OIJlL+sKoY0YeW00h8NFAiEAi5P/w0bbcbJtx/6YJnGBnOhQiWlDquC7yjqrqvqrXAM=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":51102,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgrSVnCRA9TVsSAnZWagAA+zYP/jBQqzTodoXKYzEpMdTL\n5MtGdo3R2blPTgB+C4LGKIoXPE3Z0YwRG3OkoLYvKZ+8gH7c2mebgxc31Zvq\nWgIIT/bh4zoL9xUoAzbZ3GYAhaVjPw1bE3Y9e2d1mNj1rD0C6KeZooJkeBRH\nR2s+hGP8EB6GjCSlRBeAj5ewkJqCRSo0huRRmC53PvQX5fafuBkrO1ZZa5eP\nZBVcR0VN3JjS3vn+rMuW45HhE5E8Y4JRJxtITXDxHSnaZWNBMRrddy6cwTlH\nqqtqAvw6JwT+QiVsmSXsVD47mgIt3cOrH1wNByv2Q6UTklC88Dnp4rWt3l/d\nboLkCdjX2IQehAvO9BOE4m1uUoNXiJvPaD8F5TwpmClNQv8bUzR+1k/zT/fE\nhN4hSR4aiJS+QTbStCWy68YFU1avHxkQ1XAgxeIXwXDTry5CKs+Ah4WGx/NF\ntR+MvsQFfKsOnwAam6b+QDdMqDqgFDtPXGnIcEcAFFniHjwP1RQqIbaeJp7h\nJpKbzrL+oGrBLeMPOtlRkzyO5siij1Z9W90FTNDN9C/wq3m/WLONRN/QoBmz\nmrT1zTFmiIuwg0cRqqT+0eufCGmClWauwuIie8PngUYHmNZ3S+26Q13btVDx\nAuEsYtbwrHtN8DAOMOw12S95z6uPNrHTTIujzTIHB0kmDBzi2vIoejgkp//D\nuzm9\r\n=2aj4\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\n[![Publish Documentation](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml/badge.svg)](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml)\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"d7682e18c0ea86a7ccc7b53d5fcc47a30c7788c7","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc -p tsconfig.build.json","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["npm run lint-fix","git add ."]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.5.124","@balena/jellyfish-logger":"^2.1.78"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^26.6.3","sinon":"^10.0.0","deplint":"^1.1.3","ts-jest":"^26.5.6","typedoc":"^0.20.36","depcheck":"^1.4.1","typescript":"^4.2.4","@types/jest":"^26.0.23","lint-staged":"^11.0.0","@balena/lint":"^6.1.1","@types/sinon":"^10.0.0","@types/semver":"^7.3.6","simple-git-hooks":"^2.4.1","catch-uncommitted":"^2.0.0","@balena/jellycheck":"^0.1.1","@balena/jellyfish-config":"^1.0.7"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.107-mixin-arity-d7682e18c0ea86a7ccc7b53d5fcc47a30c7788c7_1621960039010_0.7341841212028415","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.107":{"name":"@balena/jellyfish-plugin-base","version":"2.1.107","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.1.107","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"01b30154f04e546983f2dff3822006178601b4c7","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.107.tgz","fileCount":18,"integrity":"sha512-6ASP2TjySAzK46y9akCX5hdKJNzb5hyR9ltkXmQ20ypEZXtzdN9GQVPtP3jD83ZxeQAxmPsUS3OmDzIT0SsisQ==","signatures":[{"sig":"MEQCIFtz4/jEsDRqUWtLaSyt22WQJJu11+0NXGdBCYz2lr5bAiBFDU3cPwq0KXe8UnL9tRCuwXMwlIeTO/NtHL4/ejxL6Q==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":51049,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgrSZFCRA9TVsSAnZWagAA9KUP/RrVHIwvOHMQxm3tZqkL\nmIoJxDyfZ33D/y7KYW/K5oa77jgeVtaHQ+CzGEZk1deYk9e+UY8ExvR5htQC\n21oxP/HKquWlFVd+3oP1W9RcmtyiWWMjHkxQfyHbOpHR44HIXzMXee7EVKDM\nyMXhYo4tBJWKaYUI9zIWVj+0pfS4Lz3doFuCFG7rE6lqMGI7U4uKUeAq7Zyf\nB3aHmAXRL7VbQR7yTdpguaF9OqElWLwErvrpGny6BjWz8CypurhLk/xuHltu\ndXc5M2tD/kIySu7pcbCRtrGV5gXuqlkhUQqqnadxhTCGE2SHKJ2D/+rTVqGs\nb9aGPn84+J+mgF7A5w92B80asJO2+tLrh1OxFK3umiO3czYAguGjRfk8zifL\nUwyoTX4F4DFChD5ksHnpVlU5VVTiTwNfGQG/eXTIEV1XHugZn/N0SSjc3UeN\nOFFSYbb8qgrW3juk09uRpyjtdhh1IjaCFO0JDB1yr1xNNHzR7QNE5BRqEBMn\nx+LAgSsOvhY+DfhxKN9WGUG3FKKFMozEJ+3jdPobMyNiJ3cwXxM51wLirXXB\nPBrIZo94aW2EOtpGJUUG7bEu1M6LkZpu+P/C/ig+971Yvl3nij12gaOsLCC0\nusklJQJy0KgOrmh8u2d2sJUf74heIqC6hgib1E+GkeanTxrYRHh85j32IQre\niBjP\r\n=EZps\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"b2ce07ecea4eccbe737f5558e049f7d3623cb82c","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc -p tsconfig.build.json","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["npm run lint-fix","git add ."]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.5.124","@balena/jellyfish-logger":"^2.1.78"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^26.6.3","sinon":"^10.0.0","deplint":"^1.1.3","ts-jest":"^26.5.6","typedoc":"^0.20.36","depcheck":"^1.4.1","typescript":"^4.2.4","@types/jest":"^26.0.23","lint-staged":"^11.0.0","@balena/lint":"^6.1.1","@types/sinon":"^10.0.0","@types/semver":"^7.3.6","simple-git-hooks":"^2.4.1","catch-uncommitted":"^2.0.0","@balena/jellycheck":"^0.1.1","@balena/jellyfish-config":"^1.0.7"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.107_1621960260600_0.5174070349623279","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.108-renovate-internal-patch-13f1106f7e59abb658ac35add804495a0ceec300":{"name":"@balena/jellyfish-plugin-base","version":"2.1.108-renovate-internal-patch-13f1106f7e59abb658ac35add804495a0ceec300","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.1.108-renovate-internal-patch-13f1106f7e59abb658ac35add804495a0ceec300","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"b4a3217bba60f7d62f4bd87bfef5f80929249ac5","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.108-renovate-internal-patch-13f1106f7e59abb658ac35add804495a0ceec300.tgz","fileCount":18,"integrity":"sha512-r+NXZK6uqkaLxXxVToxfvauSqCuVhHbcgLXAa+c9t3aq709hbdpbVdygyttvHpstr7NU38oOjD0TSUs4iZWkhA==","signatures":[{"sig":"MEUCIQCg1ebghnEz7ZyUeav6IIPg7J4ur/LTozxImRUA29u/eAIgUtmzVs8GQVkBLrQ6a5kOIkenCihB9xcfZaTXZgq6JKw=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":51218,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgrbBFCRA9TVsSAnZWagAAX5MQAKKXPJZHOzaz0o+lWy3w\nIEztxkIanka9DCdDXdzx7QiXrTIc9R2vGlIwYCoJAT3Is9gkwnf5r1ZsPamf\nuIsirChrajYRRnaQ2jQyrasjoBJoYaHZmyfYj2UvwSyzG35DKn2MRvCGrVkj\njZOn6CT+svHovqhEndEgS2OlAqViwAmtNy30JmsDUv/hy91bJpIxgi09DaMQ\nCsLyyvAxCxGQe8tY7cCgVydMhy+GpiKR4GTiIogRvomRlBXPgX8SIdOwCLb1\neYLN0r6TtsyXucMBKsX6pLHb/mprSaLOAjeh8o1Br3mOwcA5l07Eb7kHi6BE\nyyf43xwK0PVvICubra+VC2eSf+CkIMPdMEv7Cq2+dCDxShQO559OVbJFY9VG\nV+XAwbuurWpHIamVwK9FMm+oshXQqzSyd73GS2Nwee6eqIi3LUaRqegCQlTk\n/tD043iOpTpO7KsLR1/Sec5eqDDIXbQq+Ro2PTSo8oYpdwDvuKCYKn5b3fdZ\njszxeh+iHVen3CQ02c1aIafwx3SCsnWyrfXc9Th6Oxgk6oIJOxonY3y+eLDW\nwp8J+lKetVrZ7ZgtLH0r8T/seYCagpUrPI7HdNohEQHsP0/LDgd3gAAoVatp\nP1hSUJbvcymexdyIuUBSLUJN/hHJtNvV/HX+JUp6HWx+qbZO6APit6SGTHPN\n+3zm\r\n=3PzI\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\n[![Publish Documentation](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml/badge.svg)](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml)\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"13f1106f7e59abb658ac35add804495a0ceec300","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc -p tsconfig.build.json","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["npm run lint-fix","git add ."]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.5.124","@balena/jellyfish-logger":"^2.1.79"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^26.6.3","sinon":"^10.0.0","deplint":"^1.1.3","ts-jest":"^26.5.6","typedoc":"^0.20.36","depcheck":"^1.4.1","typescript":"^4.2.4","@types/jest":"^26.0.23","lint-staged":"^11.0.0","@balena/lint":"^6.1.1","@types/sinon":"^10.0.0","@types/semver":"^7.3.6","simple-git-hooks":"^2.4.1","catch-uncommitted":"^2.0.0","@balena/jellycheck":"^0.1.1","@balena/jellyfish-config":"^1.0.7"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.108-renovate-internal-patch-13f1106f7e59abb658ac35add804495a0ceec300_1621995588648_0.1408819711466196","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.108":{"name":"@balena/jellyfish-plugin-base","version":"2.1.108","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.1.108","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"0db34c23ea5a7c17fc4c43010adc287083bbf0c7","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.108.tgz","fileCount":18,"integrity":"sha512-nfsK0NJS4H2ziKaY48ijyneI7qIPwQCb5yjHYKSKw3Wr86tVGIZg3ctKwUHe8xYD7bp5eD1SXVDejLgEsFkA7g==","signatures":[{"sig":"MEUCIHbmZxkcRHVqEy8BQnGcwSNzlX2LNXy5iJhgKeHfpgLVAiEA2ou6W8nf9NbJiCwIDhvodyMUozn476CEUB1461PFbZw=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":51153,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgrbEFCRA9TVsSAnZWagAAE+QQAISjx/OAQEu2Av34m9RV\ny7Bs3ijKBc53vIgPjBo2gxghxuwV4pUEUAOd5lUpKhleI0H7Ziz3ecde/wtS\nIMsuvQEIYRj7JP9XUBBcSz3aef13d9VHH8zzvhmwDr55yk3A3aM/3fW6Scmw\n2HNlLHZCylO2uGab4PVLMTiUETeCmSHWJqUF7in55YxdleS96mqsJIMnxnMd\nLQzOPQB86ljStcIZBZ3HDcP+VKPQVTTNBj7iMV5bmZdprzwDi2kUcA1Aac6j\nbewhqYsdOkuZvIvyLoJv63RhM9e76CZHivMmK7cNxMgK6PlKBBBljmjWfr2M\nVNvDucT78mTote78KvUKzP/sjjkflAbgV51QtEZ3p0lLPwifUl9b9k1hPTdo\nn+I0WdpGYKN9p9QTdQ3cPM2q9mrMmQJRbP0Qhe5Fb66oc02YWna357YP51Gs\n0lVn1TQutnX0krsmT5C5UrvR+8c4v7EL2sKYj+KvD7rrjzNWBv6L0QHNGC3k\n5q+ROMoH2FtgaCoPWFTgnNyUsiPFE+raSD0WC1hinpUHkPGrTBbk59kE+uuS\n2A0qgPK1NL/d2ESan5skSfieVFK37QONUWfh8/WNLfVukAEeqdQlTRA6uaJV\nEk1abgL4tHui59mERtdFAl82vvq+UslmHvqeaOTVuDDCB3iXtJOcVwPlqkyG\nGqav\r\n=MjqI\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"ee05ea6237c32cd03fb4fb8ca181f7286af569e7","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc -p tsconfig.build.json","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["npm run lint-fix","git add ."]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.5.124","@balena/jellyfish-logger":"^2.1.79"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^26.6.3","sinon":"^10.0.0","deplint":"^1.1.3","ts-jest":"^26.5.6","typedoc":"^0.20.36","depcheck":"^1.4.1","typescript":"^4.2.4","@types/jest":"^26.0.23","lint-staged":"^11.0.0","@balena/lint":"^6.1.1","@types/sinon":"^10.0.0","@types/semver":"^7.3.6","simple-git-hooks":"^2.4.1","catch-uncommitted":"^2.0.0","@balena/jellycheck":"^0.1.1","@balena/jellyfish-config":"^1.0.7"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.108_1621995780980_0.8706975499594254","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.109-repo-sync-jellyfish-config-default-3030fe98afe374e3bb9b6ca14f5524fa43ff9545":{"name":"@balena/jellyfish-plugin-base","version":"2.1.109-repo-sync-jellyfish-config-default-3030fe98afe374e3bb9b6ca14f5524fa43ff9545","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.1.109-repo-sync-jellyfish-config-default-3030fe98afe374e3bb9b6ca14f5524fa43ff9545","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"ab8897b262ad14a02a80982eb5586a1ecdb904c1","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.109-repo-sync-jellyfish-config-default-3030fe98afe374e3bb9b6ca14f5524fa43ff9545.tgz","fileCount":18,"integrity":"sha512-VUh9qFjTK+bzkeZFPe/4/D7VkXYwn7TwsLF426kqxucUg6m10F3+do8G+5Fr/ljc0TmwmSEkKiKLrm7cIXLAEw==","signatures":[{"sig":"MEQCIALsHfQvYGenuOiPvr5MfmCpcQ0nmooD6Ylb93InxX5AAiAu9S22GIbHQpHYw39caAv/BFF6jYi14wyFEVJ0nH0MLw==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":51326,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgrhH7CRA9TVsSAnZWagAA6XkQAKEOK/ky1W6S3f2WpaAN\noDU7a+QHG8wgGkyvFnPqj60KRzNZHjDQwMIW4bcyqlZJA+JZzDldSfltdQWu\nHQC4snkeVL8HfBM6aLnUoJEcrfAurU398A7pYVoZTtz1lFuAhKoPA/uLWxkN\n0yhVLdF7xOwAQ6mhwDCoiJivf+1EyUivCSTWlyQXqbIpKoqdC+qdf2aBBB12\nVzdKDGb36c9s95Z93q7I/KKIWWOgfjczuNY6TyU2BJ0Uw0SGW8KrrcegC1xE\nItuBKmJRKvMUvQqZpLMNGxdbAcCuY3BKWHceK2v4DDghgHa43pd2y5yCLp20\nmei9LvTewJzv2fV8qDs5fodIeJEWUqFzfLOqb2vGk8bhZZ2fOwj9lbZZvH2P\nvEcpj0WLflcpqL+cIo+W8XgvUTXnN/YpYC/w2KfENFFqmT6P8RSb5lPZ+22z\nCQg5UmNd98XbmDpALwVmk+06YbhoCaPkOZEW79tQWtl0HaX9PkVuXzhc0b5Y\nVPtHSZE/2NM3gvLZsqBIwUvN7VktTDHgan+JM9F2FcYe1erfLKCK728k3Fwh\nn6ZXt5QkYUQYnRCiOYOB8vMzehukSWxfpBGN4DBg5AOYFl1hwuojHj14LIZG\ntk0vkRHhXoJDd/4j9AQvAhs7ptA4dq6yG44S4cUniy4Mft+SoCv+0rov5Zlv\nUSFF\r\n=wIAV\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\n[![Publish Documentation](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml/badge.svg)](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml)\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"3030fe98afe374e3bb9b6ca14f5524fa43ff9545","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc -p tsconfig.build.json","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["npm run lint-fix","git add ."]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.5.124","@balena/jellyfish-logger":"^2.1.79"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^26.6.3","sinon":"^10.0.0","deplint":"^1.1.3","ts-jest":"^26.5.6","typedoc":"^0.20.36","depcheck":"^1.4.1","typescript":"^4.2.4","@types/jest":"^26.0.23","lint-staged":"^11.0.0","@balena/lint":"^6.1.1","@types/sinon":"^10.0.0","@types/semver":"^7.3.6","simple-git-hooks":"^2.4.1","catch-uncommitted":"^2.0.0","@balena/jellycheck":"^0.1.1","@balena/jellyfish-config":"^1.0.7"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.109-repo-sync-jellyfish-config-default-3030fe98afe374e3bb9b6ca14f5524fa43ff9545_1622020602011_0.2239494775341515","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.109-renovate-balena-jellyfish-config-1-x-e82105054d76e6ca27ef11da65b6024c50f1bca6":{"name":"@balena/jellyfish-plugin-base","version":"2.1.109-renovate-balena-jellyfish-config-1-x-e82105054d76e6ca27ef11da65b6024c50f1bca6","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.1.109-renovate-balena-jellyfish-config-1-x-e82105054d76e6ca27ef11da65b6024c50f1bca6","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"05f5f1876f5419593982cda45aab6e7c029f5916","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.109-renovate-balena-jellyfish-config-1-x-e82105054d76e6ca27ef11da65b6024c50f1bca6.tgz","fileCount":18,"integrity":"sha512-RTMFF2ndWx10FXvV664WilYwLDZJvR0RlLPDDZLBGmDNL9mA/aK8OULjFWyeqfpk3I7jzRc0ZTRNaQ8I4r0NGA==","signatures":[{"sig":"MEUCIFFELIEXbOEx+2rtrmd/vO3FFwvia4O/JSLV9+LJxSdNAiEAqHk0m7kQIJZ/ZaFVdDSBSGVE2jqdjXaF8jncTCsBk6s=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":51334,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgrhmQCRA9TVsSAnZWagAAhkQP/2uAVnuim5dgri9id8us\nrBnnBfKLDvH+j7D5H3r2iiWWHGFhYf6R5PZBbfTXCL2jnz/V5lpTBtjgeuEq\nHwv0JuFYXNKx2ynNg+N/dalhCtFtrMcKN6B98pNXLZNI2/3WEXbUhsMKjVna\nhL1KHgnt6KjDIu9wEYgIhpToF/oX85v7JaW/J/z/vJ1/4nm9hqSTVRgTK+4a\nlkOOKauq6Qn9Iyyr9lSwCfr9xlmOHKypwVu1aK0t3tOwfm2lixcWWcfNAQOm\n/sm4ZN4naNtJXQ6TQ+j99KOGcUJEXeUIL52Pha/XUcJtCep1utA+fNd7alTw\nFOdr1RrmFOSJh6owO1OJ79OUs4TcjqagAVScSPfO3CFV37JeWubPaZHXtfgR\nFWv3N+vUA9WcSZ1KXxUqJOy8jmHqkEhD9Ij+5dn+eZrb2kju9U2S8mSQpbe1\n9UA8nR3Z1WGWhkdXusxvBJp/m1xHyOlKDi74sPjLobnkGIN8jyePDJOX4SDh\nnFZsZPkcNZPFw/B3xoXr4H5M5PSFtAL459hN0iTn4L3nYZiY/YAxUK3DcdyI\nJFOGCfn+fQN5E8k8WBjmfKRP7NQPJsZ2DCkZXe3+TAKE+dT2wk2HdPyCJEsS\nohxsYHWKzMLREaFOArvhMZJPeiYjpv066A2x5oKtlEYwm3Id6SE2m1NdL4iA\n6x4N\r\n=XSRp\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\n[![Publish Documentation](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml/badge.svg)](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml)\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"e82105054d76e6ca27ef11da65b6024c50f1bca6","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc -p tsconfig.build.json","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["npm run lint-fix","git add ."]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.5.124","@balena/jellyfish-logger":"^2.1.79"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^26.6.3","sinon":"^10.0.0","deplint":"^1.1.3","ts-jest":"^26.5.6","typedoc":"^0.20.36","depcheck":"^1.4.1","typescript":"^4.2.4","@types/jest":"^26.0.23","lint-staged":"^11.0.0","@balena/lint":"^6.1.1","@types/sinon":"^10.0.0","@types/semver":"^7.3.6","simple-git-hooks":"^2.4.1","catch-uncommitted":"^2.0.0","@balena/jellycheck":"^0.1.1","@balena/jellyfish-config":"^1.2.0"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.109-renovate-balena-jellyfish-config-1-x-e82105054d76e6ca27ef11da65b6024c50f1bca6_1622022544414_0.566719440561873","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.109-repo-sync-jellyfish-config-default-07d320b120402b1172996c77655830b3235d2320":{"name":"@balena/jellyfish-plugin-base","version":"2.1.109-repo-sync-jellyfish-config-default-07d320b120402b1172996c77655830b3235d2320","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.1.109-repo-sync-jellyfish-config-default-07d320b120402b1172996c77655830b3235d2320","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"694fc58d809187ebab7f6ed862c452d37ffbf1fa","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.109-repo-sync-jellyfish-config-default-07d320b120402b1172996c77655830b3235d2320.tgz","fileCount":18,"integrity":"sha512-fgbJcn3rLe6akRlL2YjWrEZaIjJ8+YFNnIIWdNqZOBXMcrm0ch4PbrjSAqM4PfcQapC3yqs0+GTOqfZkeS6s3w==","signatures":[{"sig":"MEUCIQCefKrdlsSLwUBN63D95lkLNwvsNqLzl4DJAUC9BDUmIgIgSkjwIES/POoP2uPBn+z6NO32vpwqxfQpBvJm0QzxPU8=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":51326,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgrvUACRA9TVsSAnZWagAAEqgP/jPpwszIhW1cynNHe18H\nfzy4GttWq/khU6MHCIJRXjFGyoNlI+HOZw8NGenJU1Si9h4V4YHzy5J66LVe\nGnST4PqkAbAVU7b00Ge6ne+P5WIPi2FwqniAMqDEH0+FaNVYj6jwIoOFnnDV\njqL87nOIU8yPr1ZCg1NGNjKQRc888JjWwuCvPIeXhEBIQAOgyjYq1FstQJGr\nIzka9HKEq2ATZqjIDWgU2cEMA1dUNzPTAh/OwIJ+AkKDBkLUyCWIN4/zJViG\nr5hn5RumJJM2zqw+wLKO2/2Tt4G1I6LTLS0efGT06tQt44pUJWysTiRFlQgz\nb+JFdwVP0h+Jpnxlc+Fs6xoXX/oJ+GLOqOb37tBFF7J9DByE+ym+MTcIB0Q0\nVszlGsuykSxHVo6rJEFVBVaD8MKKAMWqBR5BhmlpzZISe9V0yzADGPwOsP3i\nJZtSLB/0gjFAREYR8xXKzEHbZJP4skqe6i2Ckml70fi49fktS18f0x9V1PeA\nVxN4znUa2nLUUeHFe51tplFZ4s5f24XtUFUqAxto6S/v/o0dR7MB4xL3wDoC\nVeqUqmi6q5smPb3c6JsvZgoK8mDrEyt5vhChPQva6w3+9k4wrb1EQQhtFfa3\nUycGFcva+LN1uslxIRzxoA7Xt7Hd7Y9wBif7G13sRRq+CevIGOFFeNIBpy6z\nSO7C\r\n=lQ/r\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\n[![Publish Documentation](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml/badge.svg)](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml)\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"07d320b120402b1172996c77655830b3235d2320","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc -p tsconfig.build.json","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["npm run lint-fix","git add ."]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.5.124","@balena/jellyfish-logger":"^2.1.79"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^26.6.3","sinon":"^10.0.0","deplint":"^1.1.3","ts-jest":"^26.5.6","typedoc":"^0.20.36","depcheck":"^1.4.1","typescript":"^4.2.4","@types/jest":"^26.0.23","lint-staged":"^11.0.0","@balena/lint":"^6.1.1","@types/sinon":"^10.0.0","@types/semver":"^7.3.6","simple-git-hooks":"^2.4.1","catch-uncommitted":"^2.0.0","@balena/jellycheck":"^0.1.1","@balena/jellyfish-config":"^1.0.7"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.109-repo-sync-jellyfish-config-default-07d320b120402b1172996c77655830b3235d2320_1622078720154_0.24504745644943005","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.109":{"name":"@balena/jellyfish-plugin-base","version":"2.1.109","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.1.109","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"11bed0e6d7dcf2bd796428fe5fa18293db69bc3c","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.109.tgz","fileCount":18,"integrity":"sha512-zWnoj8Q4F3OOStUp8oSy726OfuQCrNeLSZFMhjtiYoFWYTy7NG5uw8hMRdMEuB3xVIaD4UlyinM3uR1ycv1nrQ==","signatures":[{"sig":"MEUCIEN6LTCIMmuGRgVfFR/AwxhoPc41x9auGEwjRkTUSz4vAiEA5A7q7dhcoamfsgWU1ZTc8imVeK8qPlwpVk3k28ZoU6Q=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":51256,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgrv76CRA9TVsSAnZWagAA9QYP/3TZzvvjeu98qF7/VH1B\npypUxSD+Yi9ALXt9I2r020aP/hbhZAn/jKEv4+fXhwA2Kr4fgYOxMQO3grpn\nm4fYw8UABEg2+5aBRViC+IpBmnh6AkIvG0W0vvKh4pcVU3Ti8Ex+J2VALD7B\nhgy49yEnC0f74lQBdhrbxZG7vXONy4mqLH9ezim6yDOlI4gBnlTSCLKswdXP\n45FlKvluTkTmKANIMwctN0SvBtYkIzIzhrwga4734b8u/tDKiwpo3YXRhIF+\nusmkPZPkx3mV2I1jUzuq7nsVGYvO37C8Qj0tfoS/sebxXElhxDxpmLKvQFbE\n6WFkjjgHLtBuCB9/Ty7dg3ugUaD2VWrB8hXLWxpxsTNeF9zYRIqduu9f/Cxy\n3ReDdxTXcEQr04G2ExqC8iggz0erOETMlAMjKni2SwnJ6Ir0I9qPiLQHzqJ5\nvhV6YkNYLuAL/UNV2xXPERtpM4vDxROWDel/H1+nnak8VamBOUCvyv8+c8mc\nTtrplCYtsKj3uyQ2BmQYQ/LtHyTGhLfbb2zXd293rItJysLIj73HDs9umQ/O\nalZ/W4IN4NyCgYeZEvuNBtMzHfjxBbHcdD9ffnzS0YcH0AHJ+rNjw6HxEZ1T\n7mYIfcONHFSfjh19i5c93y2sbfT3lStgZ5dxzJl6Gtyl9pzx28+SZuuZornc\n5nsw\r\n=r3y8\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"171fded0ba708ede9dba284a7bc09f4377592097","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc -p tsconfig.build.json","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["npm run lint-fix","git add ."]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.5.124","@balena/jellyfish-logger":"^2.1.79"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^26.6.3","sinon":"^10.0.0","deplint":"^1.1.3","ts-jest":"^26.5.6","typedoc":"^0.20.36","depcheck":"^1.4.1","typescript":"^4.2.4","@types/jest":"^26.0.23","lint-staged":"^11.0.0","@balena/lint":"^6.1.1","@types/sinon":"^10.0.0","@types/semver":"^7.3.6","simple-git-hooks":"^2.4.1","catch-uncommitted":"^2.0.0","@balena/jellycheck":"^0.1.1","@balena/jellyfish-config":"^1.2.0"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.109_1622081273538_0.9448274160621906","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.110-renovate-internal-patch-ef740d54f7431ef44ab39a92f7fef7bde3e9e333":{"name":"@balena/jellyfish-plugin-base","version":"2.1.110-renovate-internal-patch-ef740d54f7431ef44ab39a92f7fef7bde3e9e333","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.1.110-renovate-internal-patch-ef740d54f7431ef44ab39a92f7fef7bde3e9e333","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"ad5536ccdc565ea1e710ddbfcb5dcda49bd9fb38","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.110-renovate-internal-patch-ef740d54f7431ef44ab39a92f7fef7bde3e9e333.tgz","fileCount":18,"integrity":"sha512-ToyO4yccAsh2zV1IooQhuE4tZWS9HtFqw31fuRsqF18PiQE6/yUlpX/RdVGcRWAJaheXfcKLpEdonuqjfVUrFQ==","signatures":[{"sig":"MEUCIQD81bCq3teRgIIloxK07rJRvs9v4neXxgKU+HxAxsvj4wIgSkRODnnWlA8Cy2cATDYVxDIreWmRFBnYzyZjQXbjm0I=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":51424,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgrv/WCRA9TVsSAnZWagAApssP/1sHKYipsv+RryENiWsr\nbIw32e0uIfBNCHCK8IE7gEGEQhz/aVsOOtrXKbhna+hF/uDKoQc7DBu/5u9Q\no+vHENdzay4GigZtF3oIgzW6t3Gl2P/Y/OwU6S/tZ2oyheuY6y0P8CEYkfFW\niZMR5dyV4x6rq8QHliztzAHnzMefrw5LYjeA3NAP3y1zUIW8BWWEo/dXDBuM\ndSl96pwHCNMu8NI4gEXiMy6RUPiTFyr20ZMiW00y0dwOzkvj5Q4s2ZR3rWaY\nB5lWKm5v90uDMX55IUJmHgsyV900bVw4ohbbriytKOoh3ed8G9egQd562PPy\nP68l0qc+a2AVwiHcJv4zF/SWA1gP9o2THzO0ldtaoeZ2tvnVXrHZ+Bhee1Sw\nLqS5JYy95G9y9mULhPdsQpe3RhMmUs9ffR+6zeCFdvNbU8Xxf+FdMvmG3WyZ\nCxEtwYKNFQBU0DzMyv4ZAKuQezlqiqYE0eV7qXg4WfuqFemVPsAYD/MJwg+T\n7CNd7rgoriskxxfRy1sUQJOHoQUO70vYrHN9k78TdQZoXA5QxXeHajS8K/EN\nvd1gDRyLGO4VmTetTbGmCfgBXY+vloYHh2+8PxKUSRizWfKIycETc+ZIHsjk\nzs6c69K33VmZH/SNkaNwXZ8lM7odoahr1apl+a1WIkx6vx87SbMvWpQZpv71\nm3as\r\n=KXso\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\n[![Publish Documentation](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml/badge.svg)](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml)\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"ef740d54f7431ef44ab39a92f7fef7bde3e9e333","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc -p tsconfig.build.json","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["npm run lint-fix","git add ."]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.5.124","@balena/jellyfish-logger":"^2.1.79"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^26.6.3","sinon":"^10.0.0","deplint":"^1.1.3","ts-jest":"^26.5.6","typedoc":"^0.20.36","depcheck":"^1.4.1","typescript":"^4.2.4","@types/jest":"^26.0.23","lint-staged":"^11.0.0","@balena/lint":"^6.1.1","@types/sinon":"^10.0.0","@types/semver":"^7.3.6","simple-git-hooks":"^2.4.1","catch-uncommitted":"^2.0.0","@balena/jellycheck":"^0.1.1","@balena/jellyfish-config":"^1.2.1"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.110-renovate-internal-patch-ef740d54f7431ef44ab39a92f7fef7bde3e9e333_1622081493835_0.6666785183761494","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.110":{"name":"@balena/jellyfish-plugin-base","version":"2.1.110","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.1.110","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"c9af9afcd03dc72c4a2e4a99e22342c50357a5e7","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.110.tgz","fileCount":18,"integrity":"sha512-dyRj+/ud9/rlyyucxE/R8Eq6zB9xZsmzKyeo7qA1Gr13JWgusCRVPtzupPxGjjeVl9FmzRIKt8dDxfslfv4gfw==","signatures":[{"sig":"MEYCIQD9LSSbhj5tvYKImSbO61UjHHc1bddaGB6q/L08vEudJgIhAJjewQ5BPXV0AI0vOvEDCYOdbKXv6kFVQbN8VVTgRNIq","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":51359,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgrwEWCRA9TVsSAnZWagAAMikP/3CB4vOlx7vvp51m7EHy\n/QZRzNR5Cgs04cYg/PikYFbQoQbAfOdzn6FNVeiCEVJaw6iW0rY16v5QHG32\n6XSHKJJ0DYyVBAcDxWg0N7PBJWjE05erK5/otMlpGe/aVQtl5xlOLJ/7BPLh\n5N9ozKzf4U6oEdb+8rJnF4xwOoYoG+X2Ywvcjb3BYl2S0fgTUz/LMAT0wO6e\njf3p6scBfZG24Wz3MXxDj/dXbkk9n7AQnNuutovqhgZAGimORFCxeKP7wB8d\nx1er64GsWskFdjrCaMoB5oc5FFXel4cxnZUsFXLRSVyz1NcDApgn6r4wcuaV\nCyPM0HcZQGdF1fjl/xBhsE9AJsvTh2vavR1LWrUYQQSF94KJ6SWaT7uTSFqm\npmW8+PZIWp0eZRYwxsWFJsDXS2X8kCvZazjj9ftFHxAZME9s1M3CMA+B8MiU\ni+wZEKLBOgh/IjP0IDBmVXuSRwNDuXy+p+Z5+w6IDjnRgIuha8/LPw6M4jxW\noicTMCKJYRb6J6l0HDpUhjnOE2YMlewxxaCPYSWj6oO2xi7TaACcOMmxX3ID\nuKu65V10FJRuMbdVCxUBEL2z3D8hCMzqdWne4rMfJPa7xC9QFzTrEaaTmLAE\nnbqdy8sKz7yNu+MDCudxHf05MjqmTpuY/+AbtpiWvBJ/DDfLyDrsxvSYVMEg\nFZAY\r\n=s5V3\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"1c0a5c60d5c43fbad4b005b43c07cadd907c30c2","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc -p tsconfig.build.json","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["npm run lint-fix","git add ."]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.5.124","@balena/jellyfish-logger":"^2.1.79"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^26.6.3","sinon":"^10.0.0","deplint":"^1.1.3","ts-jest":"^26.5.6","typedoc":"^0.20.36","depcheck":"^1.4.1","typescript":"^4.2.4","@types/jest":"^26.0.23","lint-staged":"^11.0.0","@balena/lint":"^6.1.1","@types/sinon":"^10.0.0","@types/semver":"^7.3.6","simple-git-hooks":"^2.4.1","catch-uncommitted":"^2.0.0","@balena/jellycheck":"^0.1.1","@balena/jellyfish-config":"^1.2.1"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.110_1622081814352_0.7361037229628229","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.111-repo-sync-jellyfish-config-default-8daa2e681a7c8beb99d30188e9fc699357bd8454":{"name":"@balena/jellyfish-plugin-base","version":"2.1.111-repo-sync-jellyfish-config-default-8daa2e681a7c8beb99d30188e9fc699357bd8454","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.1.111-repo-sync-jellyfish-config-default-8daa2e681a7c8beb99d30188e9fc699357bd8454","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"5eb30af33d2b2fcf640bb02029a4f4fec19bcd97","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.111-repo-sync-jellyfish-config-default-8daa2e681a7c8beb99d30188e9fc699357bd8454.tgz","fileCount":18,"integrity":"sha512-9RHMc0gjMfT6LwXIKr0c/uUP+GxjsauJfZWKY0AQPhUNu10Tu7iuHh98rb2L9TrmRjr7nELUMsZUbm4VEsiJsw==","signatures":[{"sig":"MEUCIDw1juL3nIGm69FtqXKtbMNbpa1OlkKpPsI/seSLq8vSAiEA48hn3q+s5UcTGI3m2j+7Te7Dgcg3b8dk/aTpt4gAPA0=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":51532,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgrxHFCRA9TVsSAnZWagAAXiIP/2dlCMC1DRZLV4f1GdeI\niadRwi25+BKH48iTQL3Kg3P2NUWECRkF2JCRpfJGTudcpFmb52uu85WAwwzs\nU1mWJJHA1w3mtHk9rXRD53GDJSmPVr0P0eN60Whhq1Hxes2gzM4cJ0hYjz2p\nONGmPUa4vp1zOpqqsH0Ov9VX+9Liq+2cjqOU8XAnqSi+ofd1nzkgl8Bb/Cd0\nSIPWwWDUyeA+xNRtXKXyT7RryvKeoZJGjH37g0Mhs8fXhrl45Pdg3LVhRCRy\nhf4jxZCC+IdLd0J+vmxUu3V0RTrIUQ8D5wfcUCeR+CadF3mHH+A5A4jl6DSb\nqAbISDaAPc0b6dNZgvYLl/PlvFgz5lWjyS6/N6NYWUWuKcM34zF8lNDMx8dY\nAyjIWDo+UCXwEVtBTguxfQlXUvAqAZGBCuP0L3ohxynqxSAH23EnjpOotSpY\nYft9gJFqjFYkUjxKsmiWLJM1jrJ48VkpmMxC1uqpA3SM1+tG0KICquoqvxmo\nhFZ2NYrAzGuxF1VYiBOSLTavCguF+0NtREip7KX88JCZ5QHr1EO5FAtybjSJ\nW6MR8l3IACCqkw58KoatOhCBWcAYUgVwwPe22LzfZ00INSi3HVx59S8pPrfz\n0lvknTZZVf6HtQ9jG9eJ+4di61YnFmHdJDs6y8sbe0R/xdIRjw/E4ZcjmvbF\nzNwl\r\n=4wIQ\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\n[![Publish Documentation](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml/badge.svg)](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml)\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"8daa2e681a7c8beb99d30188e9fc699357bd8454","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc -p tsconfig.build.json","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["npm run lint-fix","git add ."]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.5.124","@balena/jellyfish-logger":"^2.1.79"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^26.6.3","sinon":"^10.0.0","deplint":"^1.1.3","ts-jest":"^26.5.6","typedoc":"^0.20.36","depcheck":"^1.4.1","typescript":"^4.2.4","@types/jest":"^26.0.23","lint-staged":"^11.0.0","@balena/lint":"^6.1.1","@types/sinon":"^10.0.0","@types/semver":"^7.3.6","simple-git-hooks":"^2.4.1","catch-uncommitted":"^2.0.0","@balena/jellycheck":"^0.1.1","@balena/jellyfish-config":"^1.2.1"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.111-repo-sync-jellyfish-config-default-8daa2e681a7c8beb99d30188e9fc699357bd8454_1622086084787_0.11433873054126065","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.111-renovate-internal-patch-c1cc1a330566c1aa5a2d21074c5f7f96893097d9":{"name":"@balena/jellyfish-plugin-base","version":"2.1.111-renovate-internal-patch-c1cc1a330566c1aa5a2d21074c5f7f96893097d9","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.1.111-renovate-internal-patch-c1cc1a330566c1aa5a2d21074c5f7f96893097d9","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"de6068415c70727ff0a527ff9278da06f0b5cbed","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.111-renovate-internal-patch-c1cc1a330566c1aa5a2d21074c5f7f96893097d9.tgz","fileCount":18,"integrity":"sha512-fPtdXPAqz+ahaFGPlg3b3IWs/8Akq4bZl0uhQnAef8lod1yadiY/kKlpbrTBaVsr3i6kus/u5NVBAEY5tsus8A==","signatures":[{"sig":"MEYCIQDQmu+YU3xLuDeMonzCwDttfQbktJbP6dDMiU21MMPZdgIhAIWJFUJ/jRYcvWRtKp3vEqGHnWZZd8VZyR76JThRTwXU","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":51496,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgrx5VCRA9TVsSAnZWagAAQg0QAIZq6+sRG9hcWrQaDuTg\nJ2H0l8MZ8C8UY7mCqFVVLGx0Qr8+2L8y1hjhSMQiBKuc/KkG/melgVZ7PkVP\ntcw0ctdUlTu3qpqDwm2tpZsdGNDxixLSHmEj6QQV5FbQY0vBxLiRj295TkMn\nX+FkObt4CVGB73bgVZCdL+TJYHCrZZHcRjPsA71rpWUHuef9JhY5+JLqcs/A\nB7z/zYp7ovJSBdwDyWWv2XxJFrYDrOGP4HgfcbCaYTJpSpbDG+pWQddpRRXE\ngnxl62OuSyPgke1yD9tl720cPdQORZ5zmdaGavU4wngw0iTZClwcYRo4D1dR\nUmfxtxlAtoon+y/kccG7xpo+fJYAsyneRv2xwkC27kEETbga6TEMQT0444bL\nS8xaaPqnKZWNKanS4XCao+LWNLJGPUVAATfevQkNZY11VxPmNJMWNNoMxvb1\nOSWU37NdeRFfQBqOpJTxersQ4zFTWvJb/dYeHqvSttf++xYynGCyZf/TtkV1\nnJX8ljHcxff3QteHJd9hfpfm7iFk0IPHWUT88LnXQF5IZ1mSXDkgc3Uvl5TJ\nACCj98R+XQk7GWogu+k5I9rKUNSm1XAjha4kYSOFOWSN5fY0O1Fjp5aceCSt\nY9NKyCg6faB5Tck6kK+yH5BOGFGneLdL6tyuiIIzHVpEhtun3RfEu3en102L\nw2M/\r\n=Wj+2\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\n[![Publish Documentation](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml/badge.svg)](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml)\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"c1cc1a330566c1aa5a2d21074c5f7f96893097d9","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc -p tsconfig.build.json","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["npm run lint-fix","git add ."]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.5.126","@balena/jellyfish-logger":"^2.1.81"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^26.6.3","sinon":"^10.0.0","deplint":"^1.1.3","ts-jest":"^26.5.6","typedoc":"^0.20.36","depcheck":"^1.4.1","typescript":"^4.2.4","@types/jest":"^26.0.23","lint-staged":"^11.0.0","@balena/lint":"^6.1.1","@types/sinon":"^10.0.0","@types/semver":"^7.3.6","simple-git-hooks":"^2.4.1","catch-uncommitted":"^2.0.0","@balena/jellycheck":"^0.1.1","@balena/jellyfish-config":"^1.2.3"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.111-renovate-internal-patch-c1cc1a330566c1aa5a2d21074c5f7f96893097d9_1622089301450_0.5986397310244898","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.111":{"name":"@balena/jellyfish-plugin-base","version":"2.1.111","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.1.111","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"d8a81cf958f3a69e2bc5ff2e159c857b5f964ecb","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.111.tgz","fileCount":18,"integrity":"sha512-YdmXDPug7lqt3kJf3DlZceFqoAx7PuTtENJXpNpD/cIc9ykowkiIeJ8+iWLHLBq3ROcokHYDdKPaRI9yAj3BTw==","signatures":[{"sig":"MEYCIQCYm0o6zEg0ItYujlD5qXbtOW8V9nh93VSSsPvBV7lEjAIhAMPOaJaV5fsYQnQw4o2GrNX3gOLwFN92s4vJ9TWkOB6Q","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":51431,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgrx8rCRA9TVsSAnZWagAARloP/AlN0FIUQXJPFyR2tc7O\nd7MUJ5X/p2q4MNYxoiVB7JwMrgTNfRU8uXbN79N2qq4kLt8+O9CPk5S5xRNM\nynTi3LhgHuxSV4NWlfND2t/3loSsULcYs6U3/FboXTZyKRMmZ9Cym8jzD82F\nNk4zD9piWnJzrtdbwZb+Q/D8+NX1ABxhxQOSfEatHZy5qnLM0Xj+QJYiY8fL\n4pvxKlybjxoNOz4AEj8FuZBMf+/zrDDMFEu0TyV8WW11lP0Cg2JC05fg0WKk\n5UIk+L8pOIylW2N/Yp4iCTqxDzy49u3bypYgLAjgjFn86HrU0rGUhVITUd0z\neuXZuD3zo2UgWtmoW+RjrnCTW8+EgXZ1zOo/1HWZteA8fyusssyKctukDlN5\nqYC6JILFjbdkGO2GL5kM48x17UMjkHY4mhYNZAucNzFDTtOmENsQuiovJyH6\nLUCu4MPfBzhjJUq4x+OYJ5c0jgWkpnzK9vCE/X1xZw1FECImY1cwlBpDMOJy\ns3DY+4ddOBl8OkAwzMVYjqaiokGizGITQM98l7H8RXl66BDvVeVOCFhw0RlI\nm6DqOycC6Mjv5EaXxOukQIJkSnphIBBMlEWyXu6nKv+T6dOn2ZHjQ4JLH3M6\nqjds7A2rAEM9PaRTd3I0+Qb9tXcIXEQGHmWpBdYr+sG6RP7iEtg77acvokMW\nkD7z\r\n=Pohq\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"d27173842638f6eb2b282fa1b355c4d57ad2e418","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc -p tsconfig.build.json","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["npm run lint-fix","git add ."]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.5.126","@balena/jellyfish-logger":"^2.1.81"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^26.6.3","sinon":"^10.0.0","deplint":"^1.1.3","ts-jest":"^26.5.6","typedoc":"^0.20.36","depcheck":"^1.4.1","typescript":"^4.2.4","@types/jest":"^26.0.23","lint-staged":"^11.0.0","@balena/lint":"^6.1.1","@types/sinon":"^10.0.0","@types/semver":"^7.3.6","simple-git-hooks":"^2.4.1","catch-uncommitted":"^2.0.0","@balena/jellycheck":"^0.1.1","@balena/jellyfish-config":"^1.2.3"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.111_1622089515455_0.15117314138230142","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.112-repo-sync-jellyfish-config-default-becdc3b4aa2ee40d1182e7e0220ad03d64bcd806":{"name":"@balena/jellyfish-plugin-base","version":"2.1.112-repo-sync-jellyfish-config-default-becdc3b4aa2ee40d1182e7e0220ad03d64bcd806","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.1.112-repo-sync-jellyfish-config-default-becdc3b4aa2ee40d1182e7e0220ad03d64bcd806","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"bfd30551fa8e421aeb70e9a4541f6381a91c5dc2","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.112-repo-sync-jellyfish-config-default-becdc3b4aa2ee40d1182e7e0220ad03d64bcd806.tgz","fileCount":18,"integrity":"sha512-GCKDL8891438LN6o3N+RY33a6rUMtpIpJ9Nk3Rr0+/JtnoSyn3aNZjE3jNaUi3ljkDfh+fy1TdkL/qJZAn3log==","signatures":[{"sig":"MEUCIQC0E/oOW/SJk4/2UpiLRvMezofIGA7rRkKRKD2UuuZQPwIgXFXKYss8H2Ye8lz1H9DsO2veKQ2RAw647kMEQ8l2HiY=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":51604,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgr0JXCRA9TVsSAnZWagAAfKwQAJgVLId2chBuHPHTsfvf\n2CZmsp6gPmAHS6Hca+EoP6rgFQ2LcOiYp1CCYlPptvOOZxMysNJea3o0Jcab\nvwARV9ckAPueDJWZ4s+d2GbD8CMGTu+tcGtsXNrXObTuC20mY/zwP0JHvoiC\ngS+k2EUSubcl8fUplaIfa+5UNs7OPw9Fg9KZksV+USAImF4vFlyYpPpLv3Q+\n4Qof7/PqTXd69JAoXqLQtyChVCJFW5BXPGnoFXO2Jz1XRi6SqSxVCr7SGThQ\nV4Zy6FTnxN2dVpxW2exfi6C47UMuakDjwQcZU/+yq7BqY6H5pRULY4crgmcp\nYypEbnrCpVjiequItBSq/FI+8NxgIR2592/acOg5VCalh5oXU9j/8QVgMJgW\n49Mvfl977uwy95SaanmftHJBj/GFQua+XMuWR5qG/MfyGzuGrMoK0QkTROu5\nSQowc+RhFegnbxSe8Xg0GzjQ9loYA+BazgGqF9fBwBeT0jBaBT8qf4qe0ruQ\nHnqXxwaFO8DY2Px9kqvkJH+m8hNhPspU38SH0Fr6ejfFxgKwfF28llbgpJRV\ncCHKKWb4YAwDhUa1O7kaUXsjTLWBA1r6mFDvJU2o8bna8pbBfhYUbpPE9atm\n16m5pBKdim7a4EyfGvRGOM6WUlDohPxmqnQxrWk6oQ15inPYhNagI8KuY1zI\nIElF\r\n=TxzT\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\n[![Publish Documentation](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml/badge.svg)](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml)\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"becdc3b4aa2ee40d1182e7e0220ad03d64bcd806","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc -p tsconfig.build.json","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["npm run lint-fix","git add ."]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.5.126","@balena/jellyfish-logger":"^2.1.81"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^26.6.3","sinon":"^10.0.0","deplint":"^1.1.3","ts-jest":"^26.5.6","typedoc":"^0.20.36","depcheck":"^1.4.1","typescript":"^4.2.4","@types/jest":"^26.0.23","lint-staged":"^11.0.0","@balena/lint":"^6.1.1","@types/sinon":"^10.0.0","@types/semver":"^7.3.6","simple-git-hooks":"^2.4.1","catch-uncommitted":"^2.0.0","@balena/jellycheck":"^0.1.1","@balena/jellyfish-config":"^1.2.3"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.112-repo-sync-jellyfish-config-default-becdc3b4aa2ee40d1182e7e0220ad03d64bcd806_1622098518585_0.09077925393013864","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.112-renovate-internal-patch-92f0e1c68a87defc484b7b5ae34daf734971d84e":{"name":"@balena/jellyfish-plugin-base","version":"2.1.112-renovate-internal-patch-92f0e1c68a87defc484b7b5ae34daf734971d84e","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.1.112-renovate-internal-patch-92f0e1c68a87defc484b7b5ae34daf734971d84e","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"eef0ff3bb367df20209f824f8bdf3eac257c1fd5","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.112-renovate-internal-patch-92f0e1c68a87defc484b7b5ae34daf734971d84e.tgz","fileCount":18,"integrity":"sha512-SuYXgvyQ+iG8mMOFJEEzXwQlBD6ulp3D6r7qWr2OpOC2vIS15JDgjGW2/p39U/GMusKWZALZaybNjOaWoA95Fg==","signatures":[{"sig":"MEUCIQDLOUEFMUy29W0Q+6+8fAfMdCUtQ3IrXHgU9VDIRAja9AIgc+obZHpiCYWGUwMUgDaTXkiz3iyzPCUORjoqJpzo69w=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":51568,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgr1a8CRA9TVsSAnZWagAANpUQAIYcAAHmh9nMBeu5gHjm\nAClooisXO0KOCN72CrC49jz/ajZYr3XPz0YBJ1wEO0kxQWByyUJ5+svJCN4u\nd+G84plTUbaW9VOm6lO2jtzk3+wWQkgqiCSWYp68NAp6vsBUk0JPzGVnllHQ\nizZ02gpjRJiIB+EHgMvrXOy/1q5i1fZ3SfLq4q/77ngzxgXscVEgDgN3PHrR\neBf2lVUCRBR5IYpYvPpxUmiX9Ilh1bLQybLmhoF9UDBRe0g8qrV36+AoO5fM\nV+2svteMvgJsloWvrPZ3kEIfgnjAt2gpFP3zHsHDy0PPPk3DvS9cIMQy+nFn\nfYXi/JAyM5ws2se5n3sjSx3ZIBw1Q+rvj6T2EhUkYjMv+eIpBGCN2o6Jg1Sq\nEZNa+0sjQE35fVXnxzdPhvWsCTeycWHlsZyCcwX0ViEbd8lY/PSV5TyEi7TK\n24lwArT6dFBaRAZqmGOIWJXAe1cJDaREdNPH0Hzn79JoDUxSwbss6DNHrefU\nmphDB43SLwOr5pGLwuG8DKOHuZFHIoc1Tu95RiaI3LCOM25McRkpzrjIoCX/\nIW2pdNkh2RGVP+IAnaTTfQZv92pYHuSYA9N6JX2HmDhDHCUGAUZvsJr1ATYl\nCq9CZUvHF8nYi0JWP+RlnNhZeoZaIy4AcbdEACBENPHAq4kNuwqEByB5pndv\nxe7u\r\n=5kiS\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\n[![Publish Documentation](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml/badge.svg)](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml)\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"92f0e1c68a87defc484b7b5ae34daf734971d84e","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc -p tsconfig.build.json","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["npm run lint-fix","git add ."]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.5.127","@balena/jellyfish-logger":"^2.1.82"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^26.6.3","sinon":"^10.0.0","deplint":"^1.1.3","ts-jest":"^26.5.6","typedoc":"^0.20.36","depcheck":"^1.4.1","typescript":"^4.2.4","@types/jest":"^26.0.23","lint-staged":"^11.0.0","@balena/lint":"^6.1.1","@types/sinon":"^10.0.0","@types/semver":"^7.3.6","simple-git-hooks":"^2.4.1","catch-uncommitted":"^2.0.0","@balena/jellycheck":"^0.1.1","@balena/jellyfish-config":"^1.2.4"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.112-renovate-internal-patch-92f0e1c68a87defc484b7b5ae34daf734971d84e_1622103740240_0.38229023059237766","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.112":{"name":"@balena/jellyfish-plugin-base","version":"2.1.112","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.1.112","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"b25ef987be71a12a1c67b92ace92d252e07dc56d","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.112.tgz","fileCount":18,"integrity":"sha512-FjkrgQJLDI+OlxRxwVcv5Rol85TWU0xGAmos+dlM7Ywtz2G1yOECgJYSWMGif5EfoIyPwQTSK7HIMJN8GpqI9Q==","signatures":[{"sig":"MEUCIHzw3noHeeqsnZadQEfyVnSeTU/CBBqAx71SBsWHesQSAiEA8OMJ5FLq66409tFDQRJ/JI0PfnLXzfY/4aEHX6XuPOE=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":51503,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgr1e2CRA9TVsSAnZWagAARR8P/RG3VfbzWZYsKKGCoGJy\nIYjfmyxuffXuhu4DuHTfExNa7QXq0zIp7fWRXNSeJrFYS+7onyWR4QwGtGS9\nDvbz32VJFAhJkJJ/QMjdN+S/fybaElnKG4rFwBLhz8QFMOw5eyH+a15j0pix\nm6ehjyzwZ33gf6XdqQs3XjOC2hCIcnAKRQPLXIn54iLmawghmtjZ+tMUoyB7\n1ip4BZCnufkHi0epycdSDYNJHqs8Hqf9SuvezdHQ48hUhGwSXUmdt/HJimtQ\ntDnQOZC33LNeNyXmDIZJ0Og0a8n3dECLoR5BUnUt+laEeERwcMVVygA4ievn\nCb1XUUDuqUJy6Mm4UsepJ0sYon5pfcJwEcW/FVKFH0d2T8mABPSi1T0zDmI0\ncoQZdWa61nZY74qjeHq7QAEt74pHLQRQmdjZ+6ZwLfgxTCg92iMYQraH3P5K\nLr/Ho0e954vkoup29uBHr/sRlPeW0YKTxzjy2NeIvO2+r2qH5SXrPn12pAP8\nSJNLhvuPIsSzWT1yp/obmVJoOoo1Au9sdipiqXRulq0Z4nrP82fdBFxhsYI/\naTQxkVeFPlR23d5zfWil0Nhlge+l/2+yStl/M/NpNWrXI1N6S05PE2+WXpNP\nk0IWZA6xHcgs6OYssj31oxeE+1qxvwO4aZdFPgcakIc4ZG6tKjoosuNlwAGT\nPNgP\r\n=vjI3\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"3d8aad2dd1584b06ec5a02e4af00c51944f6afc1","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc -p tsconfig.build.json","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["npm run lint-fix","git add ."]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.5.127","@balena/jellyfish-logger":"^2.1.82"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^26.6.3","sinon":"^10.0.0","deplint":"^1.1.3","ts-jest":"^26.5.6","typedoc":"^0.20.36","depcheck":"^1.4.1","typescript":"^4.2.4","@types/jest":"^26.0.23","lint-staged":"^11.0.0","@balena/lint":"^6.1.1","@types/sinon":"^10.0.0","@types/semver":"^7.3.6","simple-git-hooks":"^2.4.1","catch-uncommitted":"^2.0.0","@balena/jellycheck":"^0.1.1","@balena/jellyfish-config":"^1.2.4"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.112_1622103989830_0.4944584355605328","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.113-renovate-internal-patch-6213a593c62e7ad9409757b9bc114806df76cd5b":{"name":"@balena/jellyfish-plugin-base","version":"2.1.113-renovate-internal-patch-6213a593c62e7ad9409757b9bc114806df76cd5b","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.1.113-renovate-internal-patch-6213a593c62e7ad9409757b9bc114806df76cd5b","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"b47b398845fd25482c483a397c892825a755ea4e","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.113-renovate-internal-patch-6213a593c62e7ad9409757b9bc114806df76cd5b.tgz","fileCount":18,"integrity":"sha512-WpPD/kPJx8wau9RXSf9vBrz5qOMvTsBT+HZcl8CqVmh6+cXi7VHfnrm57d7gl4QNfSNUnqS3YGO4bzoQAdCHtw==","signatures":[{"sig":"MEQCIFADvhhfhpMXYTpihns20ic7Eu07EHpfkLGfFhrWdIwCAiBH+BIhLZxWOHOdL4QvJfe+kgOMTZ7poHqIdl+CwEb7nQ==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":51640,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgr3SGCRA9TVsSAnZWagAAMbAP/39BKPHaFBZ6/e4g4tIX\nMkrhMM3UsWM/AD+BWToH7uk2XtlCP8/x++mGihwaIt5ET+bkUVrJ0jYB0ufv\nzQzRfXS4qUg/Jw7TWqdUPaeQfWOE9ywrrsHXyJsNPOm/AC06vkzxQnAAyRSg\nXB6033YSG66lq9mkVphNeLmfriQEU7SPTo6paTe7JBfVzuj3GzKvj/3uZhBh\nyqOopLi1FnGaNTR5NAzK/BAfPp25qNjxds5Cp5NecSwcKQ/5fxVzC2rDF+3y\niDgALlNA9fUfaJpfNZmSBi5Z24rdB3gEuPRs/sXk3wnlw2BLQPon9h7o7X7A\nrPVBXpSoJjRf5ZBp/iDnLoFfmX6xmxwI0twywIDifaVscF3x15cZGDsueo1R\nb33cgmd9Axar9UA2/B9XMi8QAVTA4SN/M9+6Vs4w8x3IjqnOpAR/Z5vkqEHI\nejW87GZyh09dcFcPUyBoXX6XMKEKXFs27FvW9rzCjj61l7Y2Wuj1r6fNUyA7\nbF8ywtQCFmVMOItYW44lCfyuEJWn/o2KDEs+/q0XbuXShLNM1d2qsgBMhiXo\nFI1wOBf7QMdgmQumfly2HJ2yCEYFJgq4ttDkNGw2ZMNw58FZv9ua1HOYWUPO\nAbkoKr7+q8XO/IC7o+/29nobfz0ZndyFSaXLlxB3scZ7QmAyhi9/T7iclat/\nkJrg\r\n=omFw\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\n[![Publish Documentation](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml/badge.svg)](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml)\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"6213a593c62e7ad9409757b9bc114806df76cd5b","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc -p tsconfig.build.json","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["npm run lint-fix","git add ."]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.5.128","@balena/jellyfish-logger":"^2.1.84"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^26.6.3","sinon":"^10.0.0","deplint":"^1.1.3","ts-jest":"^26.5.6","typedoc":"^0.20.36","depcheck":"^1.4.1","typescript":"^4.2.4","@types/jest":"^26.0.23","lint-staged":"^11.0.0","@balena/lint":"^6.1.1","@types/sinon":"^10.0.0","@types/semver":"^7.3.6","simple-git-hooks":"^2.4.1","catch-uncommitted":"^2.0.0","@balena/jellycheck":"^0.1.1","@balena/jellyfish-config":"^1.2.5"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.113-renovate-internal-patch-6213a593c62e7ad9409757b9bc114806df76cd5b_1622111366194_0.16259976706743884","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.113":{"name":"@balena/jellyfish-plugin-base","version":"2.1.113","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.1.113","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"f253f35800a58eed9b5337ea545197d61de22141","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.113.tgz","fileCount":18,"integrity":"sha512-2XUc4G/yOMtxZ2ELwee1AYPxYEnvGLPczA2VH1vGdCms77YKPUuGn3YAhksesfyESDi6RlrVGnqgnO0GH2eT0A==","signatures":[{"sig":"MEYCIQCTozI1GTP0j6vPmHDM+MSof1nm8hoNQ4mhVHpjQMWf1wIhAPOVjq27QIEwzdltXhESiuDqWnjRzmlLEZotyx3je1Me","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":51575,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgr3VZCRA9TVsSAnZWagAAcBwP/0UYkWifnbPvThjq9Wsc\nBWwLw3+ykq8jeTAlZFblIdXLM2hwTzLjgER3BVSQQdune6H2kotNa1+unwRk\nkbRbTUsW3kBItK6WP71FDqe/MRJ/JiSM/GiAAohSA6xj6jZNttsosv/goJCU\nToKM3BYa9QRwggrF86hyWfrwIxXT9wD3Eh8YWbln5u9XlyRRT7gYwQ789Dzw\nPCb2vYsAeokdITnr0Y/cBu9XwkHMGja17q1iKBgwvBTRB7hsmWLCgO1jr1yO\nIbKymcHfyLashCLppeFjBNCzKenmZ3ep3E4ZWGEpYtMvBUeaDBmZ/OfeA3LX\nATyRfz1VaXNznegrCcQx15VddYQL2GN5Ar6wznQiuqFHBH7b9Tr32U98X+G/\noP7L6o06vluhfRou/LTGWEeCyAJcE6Sx9auacCVj8BcI6d0MioBMtIptN0Bg\nFZ9C7f6QLjny4RY0MIGF8MONa6kEc1GnUSsd4XI7O1Xx9IyRaFEinjDVGQun\n0YcaP+nxOqb8OEBsRj1y8iRXJQZ09dfsvSNhWIXDhTff2w7rWMizb3Vab6oP\nX19afbJ0ehgWfk3ordiZh8rKt0JTrvZl3F4yfbf7ae+r7K//8VK7OQ/aSbD5\nvj9If8zdrPhP1E6J9XpJ8VZLzBUgXqFf3w72hJNHcNJ0AyHriCPN2TJ82sNo\nxNIE\r\n=yUpX\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"946a468722b4f6f0aaf1754c3817c996240c0c30","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc -p tsconfig.build.json","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["npm run lint-fix","git add ."]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.5.128","@balena/jellyfish-logger":"^2.1.84"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^26.6.3","sinon":"^10.0.0","deplint":"^1.1.3","ts-jest":"^26.5.6","typedoc":"^0.20.36","depcheck":"^1.4.1","typescript":"^4.2.4","@types/jest":"^26.0.23","lint-staged":"^11.0.0","@balena/lint":"^6.1.1","@types/sinon":"^10.0.0","@types/semver":"^7.3.6","simple-git-hooks":"^2.4.1","catch-uncommitted":"^2.0.0","@balena/jellycheck":"^0.1.1","@balena/jellyfish-config":"^1.2.5"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.113_1622111576858_0.07971015991343178","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.114-renovate-internal-patch-09d346a5b3c5947f1dc0944f44a16d81f8687bdd":{"name":"@balena/jellyfish-plugin-base","version":"2.1.114-renovate-internal-patch-09d346a5b3c5947f1dc0944f44a16d81f8687bdd","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.1.114-renovate-internal-patch-09d346a5b3c5947f1dc0944f44a16d81f8687bdd","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"ee709cda395e2b5e6da9f70ed4394b2951b4cea0","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.114-renovate-internal-patch-09d346a5b3c5947f1dc0944f44a16d81f8687bdd.tgz","fileCount":18,"integrity":"sha512-1jbTXOq1YFzKjvVirUuilThPxNP/kv1jlYczsbcnofkxYR1yvJ7Pz4gBLoyuvuK4GfNfNcweKCRxIOHsoilZIQ==","signatures":[{"sig":"MEYCIQD5KylHymTc7GOBFzE7qiJC0JigCHGH40EnGhAoBx2YKwIhANqf6oPalkrBhvlEA9c+u9zZ2fad7+wRt7eJS9WBfwk5","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":51712,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgr5HvCRA9TVsSAnZWagAATvMP/jc1878N4c4sn2/QySRr\n0GB6Ct91totP8nD0TOdBo9z6oc8eJxthygqOcvTRHT0qr9prgTkhzkve+wud\n1sq+HssmiyUUg2uTeysOZ8tIM3ZS9vZW7Q8qeoOt5a9p+FdXi5di1jeSRx5H\nr1jkK1kVEB87mKv+B5liJADFc6CH2gjbYjiD2t0Ltu3hXcIs2G9/WXMUZ1ml\n8ebAmR5c7DK8uvQW8gyvbXFkwRHk+1AXrJq5CniK55NtqyloE6xI8IPOb58V\n0jfJQ+I28knv3pTOHfKP+uSiki0rD6BTZEwZ6KvmFf+GDKyAgqIm04YiJSup\numwkUV0weveDA1/p02qIDSsFj+iX02blVDRACbXqSnzimV7YhCE+xSUCMJk0\nAH2V2tQAnLV24ofjU9sRqMGrucCVW2O3L8LyEnKZEluMDJeWQEDwretHem6X\n2TMr93BzeqdrjFHtna86k/2ZdeZHo/g/sJ6mipLneY3njS4COG7q0Ruo8EgV\nrk0b7i9sleKNaTgNVxrCNj4v9npG1dflypHf3B4d6htDVRlkIDykLmdqL3Xb\nDoWc2sGka7N2HkFRe7krYsjZBvO/v9bS842BhqCvxyN+ErlKD7QKAs2jgTyn\nItoJgzhVxm5sqmazYlg66328UCvJCsZil75uUiMzy4EqYcaFT65O2RWEKeVv\nOmax\r\n=kB84\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\n[![Publish Documentation](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml/badge.svg)](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml)\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"09d346a5b3c5947f1dc0944f44a16d81f8687bdd","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc -p tsconfig.build.json","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["npm run lint-fix","git add ."]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.5.129","@balena/jellyfish-logger":"^2.1.85"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^26.6.3","sinon":"^10.0.0","deplint":"^1.1.3","ts-jest":"^26.5.6","typedoc":"^0.20.36","depcheck":"^1.4.1","typescript":"^4.2.4","@types/jest":"^26.0.23","lint-staged":"^11.0.0","@balena/lint":"^6.1.1","@types/sinon":"^10.0.0","@types/semver":"^7.3.6","simple-git-hooks":"^2.4.1","catch-uncommitted":"^2.0.0","@balena/jellycheck":"^0.1.1","@balena/jellyfish-config":"^1.2.5"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.114-renovate-internal-patch-09d346a5b3c5947f1dc0944f44a16d81f8687bdd_1622118894956_0.6220868505536077","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.114":{"name":"@balena/jellyfish-plugin-base","version":"2.1.114","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.1.114","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"2d6a299853a8a056ed3d136a9a40644a231ff78a","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.114.tgz","fileCount":18,"integrity":"sha512-71SBgt+ZDllS0tJSwvsS/jy2tqnf/6Pgp6OIB8AGTlvtkbosmy8AF87yGwFo61g6FjCD2XFtPc+f6h/rZ8UuAw==","signatures":[{"sig":"MEYCIQCd1kL+hLHw3HdA8ow5C2/K9HNdh5thKNBw0E1B62cUrAIhANzvGQ2r83Y720bt92obB4ggjWV3GbtQuCwFMGUI6EfB","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":51647,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgr5LtCRA9TVsSAnZWagAApKQP/0jlPuOtEkuvpTWKMWrz\n6I9DQlthVYaPTmrsMioCCPiHmam7Ku2ooic3ehoNcyuYZ6wVYwxOjjSI33mw\nXr6P6PQFXMGG+13TNXR7OObSm6fLWDm/MwoUaFNAUCOcfi7YIaIRP7tEOqgF\nq68Uk+L5WvaYw2RVqBsqiEUPfGRwhVMGSYWo0ywFeyEdhvXAKgTLhs52Uvuc\n1k+Hb8leACLxcyLWdLjKXBespiwyJZqs52HRAeGbAfBAt4G+vs4tPx9M8PmJ\nXmZ4rKlXLCl10DOlDtRCXg5+K4jGRgJaIQnaqsjDGk10sCTVbh/tJfUKskdI\nTMz2ija5sBgsYfkqgsJt0bRpRMnmyOmO1tlXoOQCIc4oX+bKPA7959PTbB5Q\nWkL/Z9py7WE4zxTO0beR5PyNS4c41vcVzH9YVa8Y3Ve4ABJikbWgESOyI/nI\nDuymVlwExZ4HSF5Z1XVtG/MOuH8zB6u/gtcilq0fNOXH3krSUH8GEo04JqwW\n9QA+pN1NxEbTVuyw91ACmq+f7PiVi8QUKg+lI/LZRUTIoIv+zmA7k9ZVazmT\nA75ypNAtL0NwIfaPoxBJ+yt34NGy6hVEKegNdoRQC3UgbfHfGdiBdJqFM++5\n6HRMj6sNjQAfAScAXlUpHr5YyTIKx7dnehrFiGL54b+2o1JPiUG8hPHCDZ4l\nrVD8\r\n=TJVi\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"237785055c43d03043ff66d29a39141147fb8e03","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc -p tsconfig.build.json","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["npm run lint-fix","git add ."]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.5.129","@balena/jellyfish-logger":"^2.1.85"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^26.6.3","sinon":"^10.0.0","deplint":"^1.1.3","ts-jest":"^26.5.6","typedoc":"^0.20.36","depcheck":"^1.4.1","typescript":"^4.2.4","@types/jest":"^26.0.23","lint-staged":"^11.0.0","@balena/lint":"^6.1.1","@types/sinon":"^10.0.0","@types/semver":"^7.3.6","simple-git-hooks":"^2.4.1","catch-uncommitted":"^2.0.0","@balena/jellycheck":"^0.1.1","@balena/jellyfish-config":"^1.2.5"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.114_1622119148984_0.2853676641865186","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.115-renovate-external-non-major-ddf4997d6e8f6f31cc4a8367737da803ea4a8ed8":{"name":"@balena/jellyfish-plugin-base","version":"2.1.115-renovate-external-non-major-ddf4997d6e8f6f31cc4a8367737da803ea4a8ed8","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.1.115-renovate-external-non-major-ddf4997d6e8f6f31cc4a8367737da803ea4a8ed8","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"468a8cf7518d6839b93aa17442c4a1be5db52fa0","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.115-renovate-external-non-major-ddf4997d6e8f6f31cc4a8367737da803ea4a8ed8.tgz","fileCount":18,"integrity":"sha512-bR+ufm5+l7ioxZszfJOxgiXvvX3HITvFuaPmXCLu9yScFPyo6AxbiiXShMJHJQZH6W/EvFVTqg5f9tAFEX9kbQ==","signatures":[{"sig":"MEUCIQCWRK7NpvLddR6e0stYaG8f/E4xHc5XpFTo4donszdqrgIgDYplvOBbzDLlniq4aJnRSaZ75Vt0Y1zArADC5AE/mvI=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":51792,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgsYi9CRA9TVsSAnZWagAAwsEP/jJOaer1oTvdU6VziG4G\nM8tkAS9K7kkYWbotx+iIsMXNCThH9EUXnTQ7JdtDSe7z/8zl0FSt1qsAMvJw\nzBICY2eRKRwif8hAkhaa18kKppgXs4lp8OEY0H1kdIgtJOmCYrkzONL7Wb48\nYIcETHf1Xdq8E/by/PifUOi7Y9JRYo6h+Iv9UF/gQvrzc5Kemmy+Z2JnuJzE\nKahGEY8IoDMGuE1AfDN/gDiVheUX1Ij1em5Cf0rdEWmH7vB5+w90hojqZW0d\nV0brRGRS+cHNJY/mkn/PNevCuAsvDLpSszheTzR3gdDRKqFQ8Hx5WHNGRQHV\nxdUCy8RraXMqSHz4mM4i51dXM57KAS2/ihR2qg4goH7yxFnC+sEgt7pNxRc+\nBD+5PPc2CTgTkdVuKtKexAwOKhk9XO68QMJpK/Rxqx9YLGQ4XlIcOr2aS/vJ\nefIpb6nVL67ub5HXC9517PFC84yfdHH+zVeoOLMUQV1S60z21h0DwTbLuzf8\nIXJNnRLLSftS2kaUcacISy1xaV5PR+2eWPiML8zxHAd1UV1WQqcEEAWCSzqc\nf9fsRdag3QzpZ+uZn9QAAblpJtw9LS9eFBSjcvubIyYA8CyTRP6EDH4gPomn\nQcqqJjO4ApBNeafisbHi/eFELfnZ/OUe5gxRtkvem7lYsWYm43l3sJnkK/AN\n4xJw\r\n=Dlgr\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\n[![Publish Documentation](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml/badge.svg)](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml)\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"ddf4997d6e8f6f31cc4a8367737da803ea4a8ed8","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc -p tsconfig.build.json","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["npm run lint-fix","git add ."]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.5.129","@balena/jellyfish-logger":"^2.1.85"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^26.6.3","sinon":"^10.0.0","deplint":"^1.1.3","ts-jest":"^26.5.6","typedoc":"^0.20.36","depcheck":"^1.4.1","typescript":"^4.3.2","@types/jest":"^26.0.23","lint-staged":"^11.0.0","@balena/lint":"^6.1.1","@types/sinon":"^10.0.1","@types/semver":"^7.3.6","simple-git-hooks":"^2.4.1","catch-uncommitted":"^2.0.0","@balena/jellycheck":"^0.1.1","@balena/jellyfish-config":"^1.2.5"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.115-renovate-external-non-major-ddf4997d6e8f6f31cc4a8367737da803ea4a8ed8_1622247613167_0.9020185640235858","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.115-renovate-major-external-major-c174505933aaece48cf6def90ee02cac482e4d69":{"name":"@balena/jellyfish-plugin-base","version":"2.1.115-renovate-major-external-major-c174505933aaece48cf6def90ee02cac482e4d69","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.1.115-renovate-major-external-major-c174505933aaece48cf6def90ee02cac482e4d69","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"f6885e00d81f3a122274fe7de3204aedfb995398","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.115-renovate-major-external-major-c174505933aaece48cf6def90ee02cac482e4d69.tgz","fileCount":18,"integrity":"sha512-29Zg+vtsORNBdrO79yQzfWZ6aIeCSa49RdQX0CBUly4tQZ7DsgBRlTL5JScHz3hRpGjMBC8izYk6fjEX7T2JIg==","signatures":[{"sig":"MEQCIDis6HYqylV4a/YLVEfCFzryCx8WIYNFMLlDKj16E1PwAiA9KCKHIQ7rE1m22iuoBDTmUxE3RCYprpBPaJNIhMZTZg==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":51790,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgsYkcCRA9TVsSAnZWagAAL+YP/iSvOVaHd71CgZ2gpYsj\nkdmlF1Lzb+BvnqkyzFiu01UZhR0hWeG8PE7g7yiSkMtEwlE0XHvpzKWcGW/A\nC89vpXr1nCVL3RE/Os4bBdvOZUvNhgnxUtntbuldCw1jhHCdNfVVETX0pMaB\nU8gqzY6tEzMEdcSgtsqjV66GXtfsiOPFRFSVl42ZaCSeSwG1ol9+AOoMfj4O\nuDbknDKwKNekuY2ucqjMrQucQO6Br2eH0RazLsAtqQxeQ9et/kqb/bCsnIe9\n3JSBiR8CbUv6xwl7lMS5FVijH8lSrFgcxXOk8BFF2QmULdsD1rCQ1TfxSoAw\n0DviaUKbWZxYop/lJqi3e+f8zr409pjF08UJU73oSa49aOk6Xg8fRCbJGrHk\nw2QiKyNWrCHAv38IRAOa2TafwK1Yk/yNcTs1wfdw8IPr3apnhVKleMh4eNOv\ncLHDECZzEmbsvvUJIPjiwJMbnOBNKtn3fMjQ+C3bClwubwlLyuh2P9Ir+cEM\nG3EaURcaeqxWo7hq09qE2vpsH8+QOdGE6AAOuZOLUJyoyWUt2MyxxPRecWc4\ngNHL2GFtkUa1BU+1JGk0NTaL7ORQcjCFaQpfKXe2hV9Fb+jkn8MI0VwsX5tR\nPj/830N9MnGxCkZ6OILpwoOXkGj9/YDQ4ndzSYMumKDxoPSKCF/F9/Nz4J0g\nbakB\r\n=ypot\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\n[![Publish Documentation](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml/badge.svg)](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml)\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"c174505933aaece48cf6def90ee02cac482e4d69","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc -p tsconfig.build.json","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["npm run lint-fix","git add ."]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.5.129","@balena/jellyfish-logger":"^2.1.85"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^27.0.1","sinon":"^11.1.1","deplint":"^1.1.3","ts-jest":"^27.0.1","typedoc":"^0.20.36","depcheck":"^1.4.1","typescript":"^4.2.4","@types/jest":"^26.0.23","lint-staged":"^11.0.0","@balena/lint":"^6.1.1","@types/sinon":"^10.0.0","@types/semver":"^7.3.6","simple-git-hooks":"^2.4.1","catch-uncommitted":"^2.0.0","@balena/jellycheck":"^0.1.1","@balena/jellyfish-config":"^1.2.5"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.115-renovate-major-external-major-c174505933aaece48cf6def90ee02cac482e4d69_1622247707847_0.6166455836797149","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.115":{"name":"@balena/jellyfish-plugin-base","version":"2.1.115","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.1.115","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"7c9e8a6c500cf82542095578c3f46f5e5259c777","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.115.tgz","fileCount":18,"integrity":"sha512-kSG6ZTrRQH65YEeHuDth9C4VT8+fahZV/eJOM6Qj15p+gU4yZTECbs/enK7qRmPjr1uOio2A4ogWel2HuG3oFA==","signatures":[{"sig":"MEUCIQCkqsjnwLirqH9tKJqw4WqpWo7TUYy1iLTg4JeeP5GZKgIgTNOH09wF8BdiQ27IMF5UYQWz9JoiGxFD5Ag7nc8QsCo=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":51723,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgsYmHCRA9TVsSAnZWagAAPscP/2NXFETDPRzsUT9TjDEE\nef1FWZWTKBggGjxqQZF8XvXh2swVnJ++CWcaF3cb/2pEDvFHQDqSkV2Rc6sU\nwbuL7l6eQFOq9AT3mO1Hd5wYEVFQO3S8zAsRI149K25j/Yo5dCrMAWGnDLlW\n5wx0cdgHQL/DhgmTGbXaUNATuorwGXxAcxaq0YwD9nopara9afDKDKt5/My3\neqKON/5B+wCnqBoQRVT+oDckrJnphxtNHXvPmkzGpuosRQWh70Fm+Ao3rfMU\nIym/l9etuutaa2/KUgEmylyfXgypkJE+zt1EVwTOcaq54n/TfUeWlFvGtay3\natqfn1QHUSukjwExlLfm0vvLsmXaQM01+GVQ6uWcmaV8IS7weA/qoHJZmRUg\nCRiPhhYDluFi3sSysYq1FOGhtXh7+nsvcMtOYv4G1H7/mRtkezma4ssciqA5\nxOZFoNs45O3Nx7gwDnQSTE/9vZ89BOvtbB7hSeIRIu21ykBYUjXR9Tm97Yio\nKFzPjd76qCEuwR0fUwrLeNnQrNd7QgL917Ej+Vut8LE18RVdpQAwpB6ggAQk\nI+9zF9amOC6OWyt0YzMFkR5xV06qGWDRXds12JAUc3CggCCl2V8y6CYoGj1/\nrMUfboQodB5pvwm8RRh1m9XX0hkAtSH0k4afxn2C3MUURgj32f9DcYGxRDWU\neFkf\r\n=H3eV\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"ac9cf69168531fe631838ad594dbca480afa7e4e","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc -p tsconfig.build.json","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["npm run lint-fix","git add ."]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.5.129","@balena/jellyfish-logger":"^2.1.85"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^26.6.3","sinon":"^10.0.0","deplint":"^1.1.3","ts-jest":"^26.5.6","typedoc":"^0.20.36","depcheck":"^1.4.1","typescript":"^4.3.2","@types/jest":"^26.0.23","lint-staged":"^11.0.0","@balena/lint":"^6.1.1","@types/sinon":"^10.0.1","@types/semver":"^7.3.6","simple-git-hooks":"^2.4.1","catch-uncommitted":"^2.0.0","@balena/jellycheck":"^0.1.1","@balena/jellyfish-config":"^1.2.5"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.115_1622247814748_0.7566636614406781","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.116-renovate-major-external-major-155aa62e14eca4438312620f2d9c8e481bfd74d6":{"name":"@balena/jellyfish-plugin-base","version":"2.1.116-renovate-major-external-major-155aa62e14eca4438312620f2d9c8e481bfd74d6","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.1.116-renovate-major-external-major-155aa62e14eca4438312620f2d9c8e481bfd74d6","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"e00b54a5696664fa4711fe5cc9c3198d922110ff","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.116-renovate-major-external-major-155aa62e14eca4438312620f2d9c8e481bfd74d6.tgz","fileCount":18,"integrity":"sha512-+BMxhvwpc+72RrJFTejyKiHA2yX3zRi3RH8nX7Tu9qREj3xHd1/GzLlofU3erkm46TsbjkyzXaitack3lpK9kQ==","signatures":[{"sig":"MEUCIDxYgHuhqVYb2bA1/nd2ivOiQR7hvBDpDDFfxf8JZOBxAiEAqS7yVdV1mYJ2q9ViPwYaAKLhWl+uAKoK5O2Kwpa4Bw4=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":51866,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgsYqUCRA9TVsSAnZWagAAbOkP/i/4TTAxqVSOoHezyqCb\nPYrVY9oPvJaFZWyezbEHbSYyxk6QB5cMzXdwH+gDPttV9ZKRlhddxlQT2v0m\nAUm5hTIL+NrAV1QcK3i74hRCS6+X0C9tcljWBXIH1ccfsCGii9Qd616/gcdb\nUdsYBRmO8rJd7/8lqy1iiKM/sk0S2sgJYosMXrZQ1H1j33cXg6EjiII3SQdO\ny3K1Ger23IGl2DfzE+HMr1dzHtX0XCIjglD548362JLN5/DUHm5bDyUI+pVc\ngfsTSqtV4DVzZQ+3iLyclbBBBsKQCNpoHxkTWmUgMVpbrcBs63mW2hiQrA3j\nyg/mAWbg6JG8cEfxquOHf1HCwGU9Xz+YwXkB1Ag/zeO/wF0Wfbe0zjgEeINo\nbURuX/4AnHpVZ7CnBMrcZEot8o57DAXafIskHtMm+QA4zpj5fO3VVmAVisV/\nlQgio3UMxN3EoMjuTC9LvbyMiRRMRm768WiEDZ9A2byWhIk8ojQqm+FTKZyx\nJCTb8VjvDgNhkFWy1hLaBAludTb/a15y3ufbPizrEJHshLgdyPfvaXQ9kQ7A\n7BKxdxWfzErkGsRJ/EGXV2pev+ed2Glsh7AvjGNHuRofhw6jOq/ZOHcXPoWn\nc8UPD5ymQWpNQe+rnsw72RyH0pasZq5IO1yQmNjIRp8Z+gLhOW/hyT5Inupp\no8I5\r\n=ZJf7\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\n[![Publish Documentation](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml/badge.svg)](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml)\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"155aa62e14eca4438312620f2d9c8e481bfd74d6","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc -p tsconfig.build.json","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["npm run lint-fix","git add ."]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.5.129","@balena/jellyfish-logger":"^2.1.85"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^27.0.1","sinon":"^11.1.1","deplint":"^1.1.3","ts-jest":"^27.0.1","typedoc":"^0.20.36","depcheck":"^1.4.1","typescript":"^4.3.2","@types/jest":"^26.0.23","lint-staged":"^11.0.0","@balena/lint":"^6.1.1","@types/sinon":"^10.0.1","@types/semver":"^7.3.6","simple-git-hooks":"^2.4.1","catch-uncommitted":"^2.0.0","@balena/jellycheck":"^0.1.1","@balena/jellyfish-config":"^1.2.5"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.116-renovate-major-external-major-155aa62e14eca4438312620f2d9c8e481bfd74d6_1622248084099_0.0635995131227236","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.116-renovate-internal-patch-c5268831fa51189952d85bc049fc14b6e155025a":{"name":"@balena/jellyfish-plugin-base","version":"2.1.116-renovate-internal-patch-c5268831fa51189952d85bc049fc14b6e155025a","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.1.116-renovate-internal-patch-c5268831fa51189952d85bc049fc14b6e155025a","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"0752a853a990932704dcc1bd7031b27179ea6191","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.116-renovate-internal-patch-c5268831fa51189952d85bc049fc14b6e155025a.tgz","fileCount":18,"integrity":"sha512-e7tQh6Uj4LWkZc+cMAvmKjnBRFGkcDgpibuVslRm2wKpp7w+pYoH0fiaVXsKqM4jQJ02OTefxRKszYJt+dS/DA==","signatures":[{"sig":"MEYCIQDxJNc7rtQfSeSdTYLZK69U2HUNepnVyNwfAhg00kYYUQIhAOkW2v5m0itDWvkmSmpqDZ7JhuIA4T/NXIUYMzHW4S0V","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":51860,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgsc7VCRA9TVsSAnZWagAAhZ8P/AtaDsYJH/25ZDmoH6x6\npq+Tg8C1sUg3bhRfg6QzS+v7zznrfSOcllep6Rp8RCSbuUb3rBOLQIN70kbG\nUN5K2B+/mXmi7rSoj0GgsSf6//es+WwbGFBD9HvxBtj//LpKUu/WPzmgMVcO\npfPNnWr32os568shKZxh0NtzGAKjz64nuIhETlM7oHLxIdaK6BVuAy7Jgc2q\nF8BlFsLvNE/wxmfLN/UsJr1qsJ9IMr18bLNt/a7JkZoFAFoC1k508hn3k+jL\nouYQPa/DqT8Xj1afyBUuItYxC+AcOk86cgrebO/7lvCLzhBUo6RYt2jszKc5\nue7dR51zAs2xLCJB4iIdoACAJDd2wOaIyP2hyUGOryoFrYG9cJZ5Rptj0AI3\n18c2bO6CqOIH8nmP2Rgqgcq6hMosXRtCWQxH+uhY8trAwe3BO8xVV/RAP62E\nyPWW65Wxd/atQnjA5cEYs6p9lcbkSxaZXlR8RIjD1lr/5Jg1mVva2DA2cn+u\npEFER7j2ToaYWnyrPCWP28RZinzTfsjiiWeQKd3t/rcxPHsntC+PogM4VOUm\nQBhcITpZFDyO091eKSJHJoHSjqn76o88gbxsinOmamzpkopuZIOil9MvSH5L\nC73+CxommR/6mju7oMjsdmzyM7ZS3FhWg5imLOOb0r6HH5Sg/K2JkzUAqcGh\n13tI\r\n=QdV5\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\n[![Publish Documentation](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml/badge.svg)](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml)\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"c5268831fa51189952d85bc049fc14b6e155025a","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc -p tsconfig.build.json","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["npm run lint-fix","git add ."]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.5.130","@balena/jellyfish-logger":"^2.1.87"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^26.6.3","sinon":"^10.0.0","deplint":"^1.1.3","ts-jest":"^26.5.6","typedoc":"^0.20.36","depcheck":"^1.4.1","typescript":"^4.3.2","@types/jest":"^26.0.23","lint-staged":"^11.0.0","@balena/lint":"^6.1.1","@types/sinon":"^10.0.1","@types/semver":"^7.3.6","simple-git-hooks":"^2.4.1","catch-uncommitted":"^2.0.0","@balena/jellycheck":"^0.1.1","@balena/jellyfish-config":"^1.2.5"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.116-renovate-internal-patch-c5268831fa51189952d85bc049fc14b6e155025a_1622265556839_0.9959649435507303","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.116":{"name":"@balena/jellyfish-plugin-base","version":"2.1.116","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.1.116","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"32125e72cd74a0692b10ff18fdc75739bf187631","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.116.tgz","fileCount":18,"integrity":"sha512-/+CToONPjHmSkLRiyaNnPvBpi9uoUZRT34f5B0z6goc3KUXGX0/o8ZEat3SZnIMFqndtKCWAET1IYjFp9mAIRQ==","signatures":[{"sig":"MEQCICwcbfmrivc+EgDP1zOiDWOCR/cgHvKoIVI9OgcJHKULAiBxvHa7QvDLccRd3iBXmxNxVBbcgWqfuPn4NsI1Wv3JAw==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":51795,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgsc+SCRA9TVsSAnZWagAATL8P/0i4bjN1x3bJ0nFPmRmJ\np4ZBfxwpf2FUustSmdjzzBa5UdK0TgvSa4johPYpw5ARYt45hb5KQ+FuIBMR\nZTTZzNeSs63jqg/sjMYxP1EvtsDK8cZpn4tqNjBI3SiX93Q+vsHwNKJL16Mo\nGu5Ii+EAQkP9lq00WVUK1OO462v+P3ytABxlSnc6F1xu7BVlMR1lBpvhJxTV\n6Y06LJSxRVSWHDB9BlrewRqtJBPvEMpm3E0ZeeDfWgLBEXfvGKeKEBqN4ybH\n+IgbTjx70VW8LEL0E/o9li89ne13Jw0Kpquif3GspjRo5kPyXl7WJcvca3uQ\nlGCfGpnlC1l/ef02njlEjaItBaojj4N9swurvV0YecDbeKyADrLTH7tUTUi1\nody8EbF7FI/Pihe9uayFVHWc+NRcyo93lqNwxH8kLrNcXgBRc4W+nEkpFpB5\nVmqHGeD0CiZyuZ7WHpUSZKDA/xlqArjYIKBt0lWSGH6x5r4oRipMOioSASdl\np/W+k1EIGyq0BBTXM7QuCWrRmvHGKmCNx4x2PdnmodrfogdAPOQV1oh2sw5J\njRhPx1aZ/7ilVY2OuIvuP7kSoWCCMkTX+RC72ZFvUROQPWChxubharRJ8bhc\ndBx9Du4b8s/iX0qLzH6blz18UsCWaf0sZaEXMxz/rRXzXkgeaKsNfQv3YQ8s\nbZS7\r\n=l6RH\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"3dd23333fe4f7177b1e7e8061417c24ec627bd54","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc -p tsconfig.build.json","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["npm run lint-fix","git add ."]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.5.130","@balena/jellyfish-logger":"^2.1.87"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^26.6.3","sinon":"^10.0.0","deplint":"^1.1.3","ts-jest":"^26.5.6","typedoc":"^0.20.36","depcheck":"^1.4.1","typescript":"^4.3.2","@types/jest":"^26.0.23","lint-staged":"^11.0.0","@balena/lint":"^6.1.1","@types/sinon":"^10.0.1","@types/semver":"^7.3.6","simple-git-hooks":"^2.4.1","catch-uncommitted":"^2.0.0","@balena/jellycheck":"^0.1.1","@balena/jellyfish-config":"^1.2.5"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.116_1622265745779_0.1713037383901841","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.117-renovate-major-external-major-81dde9e4496f0dd439bc83b3d24263c1b473cb38":{"name":"@balena/jellyfish-plugin-base","version":"2.1.117-renovate-major-external-major-81dde9e4496f0dd439bc83b3d24263c1b473cb38","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.1.117-renovate-major-external-major-81dde9e4496f0dd439bc83b3d24263c1b473cb38","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"58589060512605260637a650e6a3315229731647","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.117-renovate-major-external-major-81dde9e4496f0dd439bc83b3d24263c1b473cb38.tgz","fileCount":18,"integrity":"sha512-csjF8rxHkaLiNVExOptq0fIevDMhm7jtmiWo8LYm8q5eUqTBnCMee9RX3PH/zXxOgGjjNmWZZuw302PLFmdajQ==","signatures":[{"sig":"MEQCIAkDGsQ1oNmovqFYmAQGefZZCi1KUFhO1L6SNAF+ZQvhAiAzozhao8m3TMeAeI7muHk08DTmXw7rV3nXHrcEXZz/+A==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":51938,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgsdBsCRA9TVsSAnZWagAA9AAP/RSjWFEbhkU9DBE8UaLI\nBbU45at1RBXvivB1yd2cMqpg4r6E5ftUlRlU+hHA6vmqYvzuqagck0u57I+3\ncftLN+l1vRGBdovDjdRVHZLMqfA2gaTQcvA+/0NQtLEg5IDSrYzmPiCoLf4n\nyXVr5FqoBfQE7xYPzkgTfqYeVXI9PAIt8X3brIIdH6AOKL67QOcvxqVMKufF\nkJ0JGutYxL6nzIlRAoGAiaNLbU+jPNauiW19XJ6a1yK5coqr/FIxvbTeA5Xv\nbKT5h7RB77zu9zVIfYTEW1/iZY7tT10qjOCMMgiZ5cmOmyG1NhafYf10RUqQ\nYRncuMW/ighikBGuA/yDFT+knc18FjNOoaVPIvSJdFCO6iksB/eY1SSMhYEi\nawwidUXTHkvoWPJ8Vghjivmyu0aS8MxxzLIB4kEGBdp1TJnJY5LpjL3eZbtX\nBHkUeuZyUrnVQGWbhZFKSKkKWAnrERDvW63duMiwoMn1SDWzgkDSeyqQX8fy\nGO1z+6qvYXqg9vJXZAs8/vIuJVTc3hSzysquGST8YuvOq5OaziUQwVmm816d\niSNAiHP86DRUj6BbQH0WXt7ZJMgI4KP9cZFl8kmv/2x8L4d2bWLdIbqveLXj\nOPEGwp9WAOOhB1nqFRzHCM0szx+T4vwDq8JljN08Jh4dql7jqrPqf8ynFtQ8\nFXO2\r\n=CU+7\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\n[![Publish Documentation](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml/badge.svg)](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml)\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"81dde9e4496f0dd439bc83b3d24263c1b473cb38","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc -p tsconfig.build.json","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["npm run lint-fix","git add ."]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.5.130","@balena/jellyfish-logger":"^2.1.87"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^27.0.1","sinon":"^11.1.1","deplint":"^1.1.3","ts-jest":"^27.0.1","typedoc":"^0.20.36","depcheck":"^1.4.1","typescript":"^4.3.2","@types/jest":"^26.0.23","lint-staged":"^11.0.0","@balena/lint":"^6.1.1","@types/sinon":"^10.0.1","@types/semver":"^7.3.6","simple-git-hooks":"^2.4.1","catch-uncommitted":"^2.0.0","@balena/jellycheck":"^0.1.1","@balena/jellyfish-config":"^1.2.5"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.117-renovate-major-external-major-81dde9e4496f0dd439bc83b3d24263c1b473cb38_1622265963709_0.9701405897733308","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.117":{"name":"@balena/jellyfish-plugin-base","version":"2.1.117","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.1.117","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"ee50ecd3a7a13c01714ede47ee72705e3457bd0f","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.117.tgz","fileCount":18,"integrity":"sha512-mErPRsccVAk1q/sMtfkhV818T30VdCFaEXd28YGw1HtTSczdvI/fDvatpHXdtU0gJwEMB9kpi07imUyFuqI6aA==","signatures":[{"sig":"MEUCIFqCFiUVjpJS6bJhBMYCHpWDPBRbUyn0WCh6TSiEh4xJAiEAq543F1Gbdyyy9/FBUyWC10iYCQzlSbzfsnK0yY2zMy0=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":51867,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgsd1ECRA9TVsSAnZWagAAPIQQAIdzCXyEm76DSAvNTqUE\nZc9PMkYiKI6SE4nylRk1W2v0XTp/h2ynLISk4lEaPj5Hs6XmEOWvBZpBkmgq\nEEhmCEnhJ4xA7GhoVqeVuwuKPChiSwZgf9TcrrsMy1xVefFoVytAjU2fcJF6\n319IE6SVI0Nd52fJ1Z8mgHFmNKieAXViWEG+QeRLYNSt1p+Xqc0cx2UOckUQ\n6QXycnef+so8SP2hQQGrGNLbjDwwGk/iV/9+v0e6yfosFqWzNHkGSEAMTzNI\nf8T6vhtj5ggm3KXgB5x5cgC5AkPj5wWxnNwCXrFgKRwrJwU2hTwoGyhHbDXY\nKcIsZC/GAYZ4fnoiRuOqItu05AFzwRQGndDKVeR7EXS5LGBN7A4g3hkH/4KJ\nnhxe8wQ7k4p1bbiIAYYmWL7bNIDJjBSIyAY6+SyoxIj0Tz3YKAy5QWUbAdrr\nAe1FIB2S2p4dAwM16kRJE88Xu1MGk3DIRZHI3xt6fKTkOZY2pN84+tsn4c1F\nSxQhDq4/xw5qB8ggeqFfHawIK4+fDyxHMtdWDnLtHv1ciqmO8SE3oeor38PX\nCjdE8CFnr7M5tJybkuJst9NsZL3EjzuAwUl93CGDavL5L++37+TCW+Dru9la\nP6UR5Xjc8feOuN51+M7x6+3qiLgSW8ujV/yOF88KZ4+ZrC538lNw3njaDPUU\nVBgC\r\n=E9m9\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"1020090b1f233c9a9bb93b080980527e03b260f0","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc -p tsconfig.build.json","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["npm run lint-fix","git add ."]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.5.130","@balena/jellyfish-logger":"^2.1.87"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^27.0.1","sinon":"^11.1.1","deplint":"^1.1.3","ts-jest":"^27.0.1","typedoc":"^0.20.36","depcheck":"^1.4.1","typescript":"^4.3.2","@types/jest":"^26.0.23","lint-staged":"^11.0.0","@balena/lint":"^6.1.1","@types/sinon":"^10.0.1","@types/semver":"^7.3.6","simple-git-hooks":"^2.4.1","catch-uncommitted":"^2.0.0","@balena/jellycheck":"^0.1.1","@balena/jellyfish-config":"^1.2.5"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.117_1622269251611_0.9049053422989692","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.118-renovate-internal-patch-0260cfc2c362cdb567eeee69af76f689a6c38937":{"name":"@balena/jellyfish-plugin-base","version":"2.1.118-renovate-internal-patch-0260cfc2c362cdb567eeee69af76f689a6c38937","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.1.118-renovate-internal-patch-0260cfc2c362cdb567eeee69af76f689a6c38937","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"9fd18cb241a6800bb6962ec9f3ee0b710e572045","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.118-renovate-internal-patch-0260cfc2c362cdb567eeee69af76f689a6c38937.tgz","fileCount":18,"integrity":"sha512-QxrcB3u9IvNVEB261979R/1JXEmSiq971d0nKIXzZGYcXwWq5A8CEQjdLzIuMlgp09hULSQo5eoQVYvwNNnB2Q==","signatures":[{"sig":"MEQCIFLInXzPGkeIQmWjwMkgnwm++sVSzikrH4bee5dURfKxAiAFnIneS0kw90gI2fH4DFZVJ9jToT3xQUT3Q5saOXMz/g==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":52004,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgsfQkCRA9TVsSAnZWagAArB0P/1sEUvY7Kn6PKpchM8ZH\nEubfemgZqSZXl3VA5VQ0xgdyF5x6XciMhuxdhWYwFKL1L8dJ1wFjwTqos7Aw\nZE6nHlq7Xc7mOyCSV6f3YvMKan37WR8r+oEsZyRDBtFWxRd1kp9kO/8uTCbL\nCd1Etr1JLhnqhHhOD/WCfeC9GSPPZcgb3wZKJpnnlybIGZKDeCI0dNhnsI96\nBbgk7lkplKJwaWpSqQgSJK9816KcOS868VNfkpk3H2tGne13u17Hd87o78G+\n/uafhMyHClsyayYpPo6OksZ/V3xt8cTQkfYxIT1onn+Q9PFhnCgQYwqf+fb2\n+6P+YP37p7r2YcKuCWv52NDRCGxtOLnGl2bQnFho1o5pCJGuIRh8nV0ofItI\nD0LhNAAxiq5yxVFMkE0+cB5FsVwEeIOeca1h30rPrRzna7LsvUZzlErQQFhC\nAaenzgPwvf9Ql0kUwfcSVXjlhsyZDlF4y2j2zKLzcWOEWttJImZTBGucvoU+\n2HcCI8qHE7F8m9a7tInuyxRW8dJgUi3Afnfa0vEcYJQRktWQ4yayW7QVA44X\noD7klAeSII2DnbhHdjyAIsv3/IK8AEav0omrULplZ8nb/Nvbm7tTLDTE0H1Y\nYbUPtPz6iLMa/IT4qC6APvRw0OFxpGEGW7nnfw/pz8GQ3iRd4kjxKJa3lyoe\ntq4s\r\n=ZmJK\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\n[![Publish Documentation](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml/badge.svg)](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml)\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"0260cfc2c362cdb567eeee69af76f689a6c38937","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc -p tsconfig.build.json","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["npm run lint-fix","git add ."]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.5.132","@balena/jellyfish-logger":"^2.1.88"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^27.0.1","sinon":"^11.1.1","deplint":"^1.1.3","ts-jest":"^27.0.1","typedoc":"^0.20.36","depcheck":"^1.4.1","typescript":"^4.3.2","@types/jest":"^26.0.23","lint-staged":"^11.0.0","@balena/lint":"^6.1.1","@types/sinon":"^10.0.1","@types/semver":"^7.3.6","simple-git-hooks":"^2.4.1","catch-uncommitted":"^2.0.0","@balena/jellycheck":"^0.1.1","@balena/jellyfish-config":"^1.2.5"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.118-renovate-internal-patch-0260cfc2c362cdb567eeee69af76f689a6c38937_1622275108077_0.427849936237614","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.118":{"name":"@balena/jellyfish-plugin-base","version":"2.1.118","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.1.118","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"af686ef958123c61a1e4594e51e3a5a9fd18207c","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.118.tgz","fileCount":18,"integrity":"sha512-6WZ2FfZOgexfjQIimbCGr3qhXf2aFkCkH+yyM0J8o9yZ5h9cCHre0UtXKUs++UcMz+zq/1zmpR9Pxu2ryR/pmw==","signatures":[{"sig":"MEUCIHrktZnvvx9ISjer0mFCqzH0WarhuNRHe/EyhEvFsHahAiEA5SoGe46eXw3T8EW7I21KRabAwkRZQQgkcSE0KS72YUs=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":51939,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgsfTnCRA9TVsSAnZWagAAfAMP/1T0jnuX2tS+Ud8ZCTew\npRwWBr9ru5m/s81gWTqpPX6p4SOUIok492Fb7xuz6++DbyJlyQeO60HciLgV\nnLbNQLSOzKAihhVPcvNs6pnuLhD/laTCwEFI0KDr/LOODUjXBJN7WN3J5UDO\nXSuJaql8YCfh7WPmwQQDPV6cFJNfORl7WXV5oYrGeHi1jZobyfi40yvXvmIy\nImrZAZP1+jRjuFk45AV0D0FOznKcTwy6yz9N1ZrihqTZY2xyuq9X10THzJP3\njPEHNCbgyh6F9lzqSCVq/ERjxGAw2G9Nd8FKvYjZ1Z8HuwwKZVcwzHeSM41d\nsEZfj0qbW5e9O6YPzhVuPjF5Z0Z25J2bCmpfIb9sSxPBDoQh27jzwDjYlI8q\n4tcZfiTx5HiJERVSDQQoCDSLcmum3MGZaoWMNTzkh9VLFzROnRDFoavPp407\nrS7Xw/Wz2S3cp5/682IdggzYNtPVRn9A5vea1rL24FMOWKZ1Zr0Vu39RQe5o\nErcJ1wrty5X49pQRsKvLKZ9Jy9GYHExQVWH1TL6gQIOTJXAJxV8SRJsG3eDo\nPVfSFVx3t8u5nwp3E/BBT+QwttGigrqAp9NNKgNvF264aKHzsNedsYx6O3Ri\nrOJQhaaDG/tLN7lQxbcrt0BEqjsHUxz094fwqjeaJ/fsLyMxA6udh19Mq5/S\nwdqv\r\n=SwJO\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"aca57ceffc84c571bada0a771d8d189f110f54e8","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc -p tsconfig.build.json","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["npm run lint-fix","git add ."]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.5.132","@balena/jellyfish-logger":"^2.1.88"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^27.0.1","sinon":"^11.1.1","deplint":"^1.1.3","ts-jest":"^27.0.1","typedoc":"^0.20.36","depcheck":"^1.4.1","typescript":"^4.3.2","@types/jest":"^26.0.23","lint-staged":"^11.0.0","@balena/lint":"^6.1.1","@types/sinon":"^10.0.1","@types/semver":"^7.3.6","simple-git-hooks":"^2.4.1","catch-uncommitted":"^2.0.0","@balena/jellycheck":"^0.1.1","@balena/jellyfish-config":"^1.2.5"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.118_1622275303151_0.5446752520686253","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.119-renovate-internal-patch-2d09a6b4b80e40c32ff5d7d0427483d8d75a1913":{"name":"@balena/jellyfish-plugin-base","version":"2.1.119-renovate-internal-patch-2d09a6b4b80e40c32ff5d7d0427483d8d75a1913","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.1.119-renovate-internal-patch-2d09a6b4b80e40c32ff5d7d0427483d8d75a1913","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"bf05f042566a8a6dd898bd893adcc7ffd626b050","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.119-renovate-internal-patch-2d09a6b4b80e40c32ff5d7d0427483d8d75a1913.tgz","fileCount":18,"integrity":"sha512-TLmIxA/1tRAcFpXwBDlnckVbiItVy9DhREwyVU4wC5cYvnpmqb6rRDNyhKmztk6c8oWWvqjxMatydDOEFpRdQA==","signatures":[{"sig":"MEYCIQCSkYrhtvDLL1UuYXA61/4hN5aQ6ClKcOE9J0CwWp2ykwIhAM4qFrWt5YBhbZXyxbRrbtNlywqX8Qa36tpUQY5vSSoF","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":52108,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgsgNaCRA9TVsSAnZWagAAC3wP/RVViBV9bHxvMydt7dNw\nhBOCkjxIuaqgJF1zaYmNce0fy3o9o48tgFLa5oCkQvpQM/kf/3wcdMwSe7Vu\nX1iD8cjZb/eLBhjxJH/yNajc4Qt5WjGr40yUlEVVxrr7Xw8UQH7TcuV5Fq8h\nqCr9PHYHQM+ViVJx5PyheEyjB4wzXPYjmAT2E2zh1b5wLQbDo91/zhq/JC0g\nqi1RvJ45tbYdPKhsEaJXaaqs4BiUUf+R1dOJC+MJRrrxRhUodvnEr2YmCRDd\n/5qaSrgUF4JI7YVfBQErhy+1WpMDc/xrGagvSHiBhURJT5mjTOueStLBhKk9\nt3Qez9acJn+yiy4F8vwMR+bPZdJwTRp3yJ7ImxH1NsFX8tlu6LdsIo5RmB+j\nmig6qofHUsNlTAz3JuLvH+iK4ut5vUKkNmUcrqIQY4A/CEulVwzoSxvz1pzR\noAM+Zsf9tohjKU5a68raTkBnfEGuSIg+T/nVzRV8vMtgeVP69jKWK0SK5bZp\nf0FvtJJ8MMSJZJv0bGJ+O5ijG89dadYJ4+Tlnajk1qIw4Vt+mcQ7VfII5YLO\nN/oBDswZOjq3WdN3V0QfAyoa0Cy4N8oDF2QqpQNf+nTEHPyUZYI+bTupo2qM\nPjnTH0tqJijWOVB1PGxoCIibdmHcwKUg1Uv8C/n0WKkHonugNdIFR2G6zwiJ\n9twh\r\n=y2gV\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\n[![Publish Documentation](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml/badge.svg)](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml)\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"2d09a6b4b80e40c32ff5d7d0427483d8d75a1913","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc -p tsconfig.build.json","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["npm run lint-fix","git add ."]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.5.132","@balena/jellyfish-logger":"^2.1.89"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^27.0.1","sinon":"^11.1.1","deplint":"^1.1.3","ts-jest":"^27.0.1","typedoc":"^0.20.36","depcheck":"^1.4.1","typescript":"^4.3.2","@types/jest":"^26.0.23","lint-staged":"^11.0.0","@balena/lint":"^6.1.1","@types/sinon":"^10.0.1","@types/semver":"^7.3.6","simple-git-hooks":"^2.4.1","catch-uncommitted":"^2.0.0","@balena/jellycheck":"^0.1.1","@balena/jellyfish-config":"^1.2.5"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.119-renovate-internal-patch-2d09a6b4b80e40c32ff5d7d0427483d8d75a1913_1622279001543_0.32370204344128717","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.119":{"name":"@balena/jellyfish-plugin-base","version":"2.1.119","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.1.119","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"82e35c8e820f46ace04fcc8871ab1cd627786b72","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.119.tgz","fileCount":18,"integrity":"sha512-pzrFi/Eeaw+Qe1vxOFv+yGyn8xF4dnzq9VimrJ9YFj9zuX+TM3UD78gyT0gpMJqeXaHSHEWD8ymdTMH/AjaHSw==","signatures":[{"sig":"MEUCIAtd1gIn9u3xyZGQmv0gimZ/gy0I6EGscYbqBX5yFK66AiEA+rmWmw+GMEhgAgg8yRVSJI8kJ43rw3MlYvvleFrzY1I=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":52043,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgsgRnCRA9TVsSAnZWagAAqAsQAJYxW/Bhl3VJPgIosQMM\nEV9yJUTQvEELy0nprqIJqCYBxBMh5VyYsvsMRhRE8xvo7YG63/wbxgyCXJIm\nb3QbXclxSuR1mfZFFruF6n7SBWdhVjj/A833qaRflzLHrBHkU949z+cBa+2D\nVXDOXHrMbuxBC+XGxpp6WNscrlA9jyBtxRF+ZVbyuhWU/OLF6UO8KGD42D/N\nxV08ux3qXwOTURmWyJ9cWTaBJmV3ujRvZIskiVxtnANbFZNji4B+irZXqhOr\nhXm5YY5yZjlp9/TTZJicLptDoJMlIESzF3gsMfFb6rUdhg4fHbV3SrjoSi5Z\nprbB5u6lYxGBCGudNeci82fULgGtMWqnrkfv/Bj519AdQdm5Eb5ns8QZK8/f\ntMOdxdbnxufnBWuaBOuZON9t7rG+yMLncIuaYDV1xjA5/VRC0RLJKF1CRoCM\neIH+RvaAVo+NO3ed7vu6EE8zaQB/1mNYuvP98tCVsIpeupcm6Ii86VL5fr6u\nuD/CrJ2TVWlLPDcpb5wVmyi0/dmkHyteti7vVS7J+/cF02LIjU4XoztedVL6\ngiCFl0l/Vv3jLj6DqntUF+I2SSJiBHyNpdzSPQH9zTdyMC8rALpjSpTeXUPg\nOHi7XhsAwYrYn3FAA5Vb6cUqXnI4Xm9OkCNXuRrtnquJ90nZ6m9YOqO5mRrI\nmDAr\r\n=MMh5\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"f2eeacf70ca808b91f908b09aeab336fcba25d75","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc -p tsconfig.build.json","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["npm run lint-fix","git add ."]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.5.132","@balena/jellyfish-logger":"^2.1.89"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^27.0.1","sinon":"^11.1.1","deplint":"^1.1.3","ts-jest":"^27.0.1","typedoc":"^0.20.36","depcheck":"^1.4.1","typescript":"^4.3.2","@types/jest":"^26.0.23","lint-staged":"^11.0.0","@balena/lint":"^6.1.1","@types/sinon":"^10.0.1","@types/semver":"^7.3.6","simple-git-hooks":"^2.4.1","catch-uncommitted":"^2.0.0","@balena/jellycheck":"^0.1.1","@balena/jellyfish-config":"^1.2.5"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.119_1622279270958_0.15126983732604038","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.120-renovate-internal-patch-738d2cc880d34e9fb26fc16be515bf017bf37808":{"name":"@balena/jellyfish-plugin-base","version":"2.1.120-renovate-internal-patch-738d2cc880d34e9fb26fc16be515bf017bf37808","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.1.120-renovate-internal-patch-738d2cc880d34e9fb26fc16be515bf017bf37808","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"7b83a37e4ae4568474e0cf73cd8ca35f1ed0147c","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.120-renovate-internal-patch-738d2cc880d34e9fb26fc16be515bf017bf37808.tgz","fileCount":18,"integrity":"sha512-8vIBuL2ioIP/d+WI4g1ukN5jBiNDS8ruwwoUV6zcyn/U/RiPpjM2+bWkCY4kX73yrsIZYTHqUvhO8gltvQ+QqA==","signatures":[{"sig":"MEYCIQDALk4ePrUOtRgzIFXWyRA4KEMyY0wRLCJSCMLANmkIzAIhALyfYhjQQdByGMxd5mS5jcWOqAC1GjlkFjNkP215znlA","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":52212,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgshUBCRA9TVsSAnZWagAA5+cP/jji9AjMIugAm4XRYYnn\njHY0AVyFPBbMn9VxZGxj9uKmX7hOJC9UP1O5a1D1NeDJoThqVDWVkqWKwVFA\nKrmsW0zscHg5TOrE2jdrWhVQCE7v5zbxBdQaUfTINgi70aP61x3p/SyRqB2y\n0RKQjvUtASPJA/eEM0pBPL0IV+LrxqZnFmnnYCPQc7W7qg74XATV2O2dtfV9\nqGrPBKqj0xAEn757KRvtntpnc9aVzm8RhFyLy5BAJO0ncf3ESFFrnV9k2Zq7\n0aTHNlwPOWS87LcVzpaBHPTsUQuf56jyJDwy+aytRtiaHdJVfmT3l94hNHpT\nbkn+i8br8l9YaukX9Uofs2GzdcCU5DitNrwYrURWS6gZf0LaCBslLeaMWWAy\nWM9OTX+Xt98ypoepmA50zVbQhNOzb6Xo4Q0wE2Fpz39JPadlyn5NzxEN+RKP\n0UaatQkF6pTUJ3RUuDOQFX6UNZDOQjasY14GW3lpxkMdKDDfvwVpRj/lq48u\nbV0XGZ1LLsAB6ReoRRKYWWD79I9pVCAfW1BmcNGuhAOwoDNtajUCRav9UAwA\nGDOUocz1vFYFudqWZIivAtVqxVd2FhQQvBqGLqC3yEy4C5JingGnGewyagIV\nhLyFCTfYO+1BegIBcU97NkQqpU6khlQdmbcKRIckPt2q4i/zHApAI9LfmrTn\nurZ+\r\n=6cp9\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\n[![Publish Documentation](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml/badge.svg)](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml)\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"738d2cc880d34e9fb26fc16be515bf017bf37808","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc -p tsconfig.build.json","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["npm run lint-fix","git add ."]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.5.132","@balena/jellyfish-logger":"^2.1.90"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^27.0.1","sinon":"^11.1.1","deplint":"^1.1.3","ts-jest":"^27.0.1","typedoc":"^0.20.36","depcheck":"^1.4.1","typescript":"^4.3.2","@types/jest":"^26.0.23","lint-staged":"^11.0.0","@balena/lint":"^6.1.1","@types/sinon":"^10.0.1","@types/semver":"^7.3.6","simple-git-hooks":"^2.4.1","catch-uncommitted":"^2.0.0","@balena/jellycheck":"^0.1.1","@balena/jellyfish-config":"^1.2.5"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.120-renovate-internal-patch-738d2cc880d34e9fb26fc16be515bf017bf37808_1622283521436_0.9671960571084031","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.120":{"name":"@balena/jellyfish-plugin-base","version":"2.1.120","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.1.120","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"70e3d28c3677136b625a08e413cd16792724b7fb","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.120.tgz","fileCount":18,"integrity":"sha512-GZdD82CE28H7rzPFy/pTu+RXCwjsSaivO+M8+6a2kxawRXb8BCAuMaOTUYRA7yRjXvdBg8kzQNP6Jx1uxXEPzw==","signatures":[{"sig":"MEQCICaNTKpuscFcJej1iWTDDoTvUKbqYkaaG41cKSzGtnPBAiA/2Wn5ICN5w0lEoy1hvvmsoGzflwkwO1ntO1vDpMQzxA==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":52147,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgshXTCRA9TVsSAnZWagAAMC0QAIXnw+goU0idroA/fFXz\nb0mGUihdES7WBwvFn8CX55C2R0i3umv1BXdWmKuF1ewGGfal+WKdV3wHoq1S\n3aZTlSBdXkkii3XLlQXfga7dmokjiPAwFLM8ioTRLCaf40E7Q6NNrgFe3TdF\nmgiXxSpGCMALskIVMSwzG4zH1L9/rAA6vcTN+T9vxJDxFQdF6GEgvt6OkdEq\narpNPtQdzQHfHJeWBGtD6VtLQQTpPi1VQo2Ry71Ig8N89jpkyYm6zIn4XfY2\n3i2MBpjIhPuWe98mc9B9KrhuYI8e4mLOwJgnZq7JrPaleY9KbelT883V+IYt\nxO4PNJxca6PbPIrhj7YlrwRGYHxIGxJAz8l4NDmXoNwc0ILPtBRyBXW2joap\njvo85mYo8WAWSS13Gr/YtkMriItNQTXFRFcR2AJ8MKyYNYo5akYGtWS95I+O\nJumiUpzzpzJQRM9hHwqe+r1bdsJXY6B/hxijxTusQUCsZpCwvGKSW7DaJCjc\nbt4JRwuKfZCqxbZgePTtKlRPF3as1hmSXk7BAn82PQeRUciyBos9RQdWoZmL\nBwzflSF/WG1LNqTB6L0ep+v1vQsZgDZqkwGHuQ8Um/JeuMUa2wiVKghJ2Vhz\nXAmpyTXMIPI7nBVQGFrUsoC5eRLk8z5PRH7wwG/h2UWO0o290ctouESaXQfb\nBy2s\r\n=tnRz\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"46d45e0b687dd240ce5597cd2d23c9052bc2935c","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc -p tsconfig.build.json","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["npm run lint-fix","git add ."]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.5.132","@balena/jellyfish-logger":"^2.1.90"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^27.0.1","sinon":"^11.1.1","deplint":"^1.1.3","ts-jest":"^27.0.1","typedoc":"^0.20.36","depcheck":"^1.4.1","typescript":"^4.3.2","@types/jest":"^26.0.23","lint-staged":"^11.0.0","@balena/lint":"^6.1.1","@types/sinon":"^10.0.1","@types/semver":"^7.3.6","simple-git-hooks":"^2.4.1","catch-uncommitted":"^2.0.0","@balena/jellycheck":"^0.1.1","@balena/jellyfish-config":"^1.2.5"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.120_1622283730950_0.74462123032796","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.121-renovate-external-non-major-104e4ed7a2077e7456b71c937bc359344f0dd5ba":{"name":"@balena/jellyfish-plugin-base","version":"2.1.121-renovate-external-non-major-104e4ed7a2077e7456b71c937bc359344f0dd5ba","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.1.121-renovate-external-non-major-104e4ed7a2077e7456b71c937bc359344f0dd5ba","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"ebe7d8ea08538af8ffe13886469f32f7e84aa7e9","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.121-renovate-external-non-major-104e4ed7a2077e7456b71c937bc359344f0dd5ba.tgz","fileCount":18,"integrity":"sha512-D2UvfMKjR1daURPkec6oePPXX+60eCFW7SK0by/vyamVc6UGSSKjEQQyYR7yi5nVMiX3Xi05LXUlgpo7cKMSIA==","signatures":[{"sig":"MEQCIAFNj4/iVBV0rLbrj87JmdAuzFNq/Wr6ndhwMFmnx+8fAiBLMiME+3B2B5uBO/cXrGVwnecWcTtLN1FOqa9uAHeNAA==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":52300,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgsj7GCRA9TVsSAnZWagAAynQP/3nWrynUOSBBSjYbPZ+0\n366hXiUc+d2SsEEtBXTCIpYolC5+u0b3gnEPyrMJhbdYpaDac39u0laMJgVs\n3MNwSQ4JiST6f736cY1bJKKyPdjye/lTmDFnXUkPc4LYESVfPTbSg+2MuSVH\ng0EEWVyFV65s/tm32i53yyvD1ISZnm8L3YrOhlyb6fQqs84scZlWWD0ikleP\nATHN58IlRkUeswE0x2lWhMflMBCd4SJtTkzj2ZdbYfTknsP3kmo12hZnZCF7\n7CCx1xjaqVxxSRkc5b8EIdcNohCHerQWII3Dm6E2TKqMJHt75wAvTy5OKhK5\n+vOFYVQKvW5BvX06PID1mDm71qj660afEq0/lK967u13KJ4WOfCqsrsLoVaY\nmj/yOgHxgEvDSsP9k70NbFFAkfOu84B0SJPOJ6lq/f2TGSSE0J9bC4UZHS6w\nsu7R0OiB7YdIsjsWPZiEEy3YoVoSUibeyq6Tk03mCZ6VY0cDUmjarh8rf4Ar\nK2oGyoDWlmEyAjvynnn/KsiH8GT2qE1m3+8ZmvayVAg9UNsJVjhqfmMqkjc9\njJKK6v1ukLj3TX572MEpE5IdFborrBAYSwRad3KdStsj+qo6ylpvRYQQfWjp\nGMxY3Flr0rl8kHYECWcGoP5/j73sz2ysqkwBnvYKSa+71YlkvbG6kEYPBvqp\nb4qb\r\n=NKi1\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\n[![Publish Documentation](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml/badge.svg)](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml)\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"104e4ed7a2077e7456b71c937bc359344f0dd5ba","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc -p tsconfig.build.json","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["npm run lint-fix","git add ."]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.5.132","@balena/jellyfish-logger":"^2.1.90"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^27.0.2","sinon":"^11.1.1","deplint":"^1.1.3","ts-jest":"^27.0.1","typedoc":"^0.20.36","depcheck":"^1.4.1","typescript":"^4.3.2","@types/jest":"^26.0.23","lint-staged":"^11.0.0","@balena/lint":"^6.1.1","@types/sinon":"^10.0.1","@types/semver":"^7.3.6","simple-git-hooks":"^2.4.1","catch-uncommitted":"^2.0.0","@balena/jellycheck":"^0.1.1","@balena/jellyfish-config":"^1.2.5"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.121-renovate-external-non-major-104e4ed7a2077e7456b71c937bc359344f0dd5ba_1622294214436_0.5414934346796769","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.121":{"name":"@balena/jellyfish-plugin-base","version":"2.1.121","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.1.121","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"98f91868457e8b8ff22dc951f3dffd986916f49c","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.121.tgz","fileCount":18,"integrity":"sha512-RKvD7GIcIH8mEe/NQmDeuOJxmUuYja9EALtszS/4m/l8+XOdACSxp+EHv5ISCT8MmTLWCr/wpFwzUR5TRalhEQ==","signatures":[{"sig":"MEUCIHVwY8jdwXIAJoEsaCVk5OG7tpJIOD6pJkXP/FJG6WQHAiEAmRLxvecWkSG6Cu6rTSxNGt8yqkNYn5OZsNZuhLcTEqc=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":52231,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgsj+nCRA9TVsSAnZWagAAGLwP/j2QJCMBzqNZqduRpDyF\nZnPSSdJUJaEjDSP6qj0ZuUJFHGAs5MUJvXkCbg5LOvYaSl2qVrzCBrV228Vk\n8WYrDILDX44oDmJVUTqpYSI6VN2FU651aAEmJEqTWg4BHCD5yWXJUuzzxBt+\nmvIXPJzrTCLD1xUpqn6tsUe9Z7M5OVucM2cuL8qfX+EtxCZfxI+cjYkpNCsq\ntbtpaKTRHhhRre33oJ+lDK/WX74dPPyRsygQDEVfxATV+MFGGupwGCd/oRFK\njYc40dJpukK9zj9vUJ+fAR399xpeS7CqFbzF8q1vYTcekD4Ubqypqge2iehz\nZe8tLI53gzhqtc/m1BsGJSRoZEvLk19b+uwq/Uy8VH6TydiTvl99xbpUxhLJ\napUJSmWmuem5Hakkt/bUsJh/Wm5w154qi4QE8I6zqW44q0CTAqgJreDantev\nsEMdKYfAOihzs3EBqpq13sbI8dtkLWN6XZ0IqJJ9zoRfzDcY6LbZ/u++2F7p\njSuxVH/woztCJxpOlx0yg6PGJ1MU9qlAD2qE5Au1JlCtP8uZoTr4PunMLHcp\nc+RIgZaekPzZfTHoMd2ZUMRQovxf6dg5hyGYaMPkNZJ7+6PHJbr3P5CzcHkr\nqFazvx+Jza57cVcO633FWxMhuPXZ9joOBO37nayH44n+bcX8ljKFhlUGXUrd\n8YQU\r\n=6T+m\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"bcd22ae7b8af0060710d116532f8a89c781bd71d","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc -p tsconfig.build.json","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["npm run lint-fix","git add ."]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.5.132","@balena/jellyfish-logger":"^2.1.90"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^27.0.2","sinon":"^11.1.1","deplint":"^1.1.3","ts-jest":"^27.0.1","typedoc":"^0.20.36","depcheck":"^1.4.1","typescript":"^4.3.2","@types/jest":"^26.0.23","lint-staged":"^11.0.0","@balena/lint":"^6.1.1","@types/sinon":"^10.0.1","@types/semver":"^7.3.6","simple-git-hooks":"^2.4.1","catch-uncommitted":"^2.0.0","@balena/jellycheck":"^0.1.1","@balena/jellyfish-config":"^1.2.5"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.121_1622294438941_0.17936795122030103","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.122-renovate-internal-patch-b6a37b7d9351f70732bbb442190ea5483e1994a7":{"name":"@balena/jellyfish-plugin-base","version":"2.1.122-renovate-internal-patch-b6a37b7d9351f70732bbb442190ea5483e1994a7","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.1.122-renovate-internal-patch-b6a37b7d9351f70732bbb442190ea5483e1994a7","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"9a91b47dd4f46b1855737f87fd7cc5189f537c5a","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.122-renovate-internal-patch-b6a37b7d9351f70732bbb442190ea5483e1994a7.tgz","fileCount":18,"integrity":"sha512-hNUkjQfEH+QeotLBVmq5QGhXUbNd9YzCgiEXZALvd3iDVyasltEfM23Tu3xLX6pQSuMOOcEH4Jz7q2x98wYfdg==","signatures":[{"sig":"MEQCIGGcm/XlokQc4j/LE5aTGljLN7xjY9RrTYpzH719F45CAiBiYeSD+IrxpBldsd4uqwL/nBkfyavRaSefaI8iRkxWUA==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":52400,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgslSACRA9TVsSAnZWagAAIzwQAIgmX9Dvu4xX1lfGgkJo\nsx0IUSZT1FIcrHeejcZU453OAVOk3U0a5OZxLKwK454h9EW5aJMJv3J40G6W\nTNjp5YDFjiTJGlhWguqFENEGeLKtEACS/WUgUTc6qz8+BAJGd7+Idi5h5YV3\nLFJSxHV12lWBP+iSj6vLO0rSoOTLaaz6X5TxkWIQvnukCfoMNhTdQ9Ig9aV2\naKcymh18kSbMuGi1iwszMc8Qa8pYt2lOj0mPdblMoXdzWdu1NevaAF1BPH5g\nIhybvlB+LkYO4OLHZcy0le9biLKTEWW+P33y7HH4LJTCsnST2a1a4Esw/pFO\n6BWNSo2KtbM4/63TelutnIuhASU630rbOOQa/PDZ18JEx0bP67LVFMbkzoSc\nuCmMSHemtB6JYkfHidJm0nkivp3DTk4uXgwNvaezlQv45+0Xdv/k2zsSjQp0\nLBAvjAamBi52zGDdsSgKq1f9UbZYZE7Era6eMtWVXZHLqo1jxyG2kgXJQ8bs\nM6A6qS86MvkKtbAdWH9TfYb5n/pMD7FuEkMsKZARuNg12UHJCgBsFPZo4BUQ\n4NojoIzzNmh2sdDL6haWAlbwtL18bNxRGHqzIVwSYvVP+j3pbkRd3zcul24M\nEvLOTZR5Bj/buP5+BTxE7v4hhLZ1SpKE9oIYpabHN7Vz8OdRUrRITsK4DKye\n8szb\r\n=DxiL\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\n[![Publish Documentation](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml/badge.svg)](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml)\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"b6a37b7d9351f70732bbb442190ea5483e1994a7","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc -p tsconfig.build.json","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["npm run lint-fix","git add ."]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.5.132","@balena/jellyfish-logger":"^2.1.92"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^27.0.2","sinon":"^11.1.1","deplint":"^1.1.3","ts-jest":"^27.0.1","typedoc":"^0.20.36","depcheck":"^1.4.1","typescript":"^4.3.2","@types/jest":"^26.0.23","lint-staged":"^11.0.0","@balena/lint":"^6.1.1","@types/sinon":"^10.0.1","@types/semver":"^7.3.6","simple-git-hooks":"^2.4.1","catch-uncommitted":"^2.0.0","@balena/jellycheck":"^0.1.1","@balena/jellyfish-config":"^1.2.5"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.122-renovate-internal-patch-b6a37b7d9351f70732bbb442190ea5483e1994a7_1622299775859_0.37191452311694784","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.122":{"name":"@balena/jellyfish-plugin-base","version":"2.1.122","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.1.122","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"d9dc5de14bc7d99b1fb19eb32f238e0e8217a14d","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.122.tgz","fileCount":18,"integrity":"sha512-V5C/Tduprc8llIzyt8WvwPT/OJskgOkDEg2lBc/WMBssZ8MUVKrvnK8qt9nHwutMQw8yy3LpvSaqoIHJJUtobA==","signatures":[{"sig":"MEUCIFxiDoAXxIWL3pRlZm6g2l6v/j3zShVlm1NaAhkFzkNSAiEA/U0vHI0Z9177EhK1MPYlmmXdZk3v+WWUFuHdnUZTvYo=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":52335,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgslVVCRA9TVsSAnZWagAAMZwP/Asg5RoYpInTQssXSgbq\nVDeDAGm1nszBnI5ac+1qvdjIW4oxpMIRrprGp9nxC4sWXfQtE58ws9V4Bim9\n2jFVKNJxjywogYUL6P0MbAghLtI40D75b0aDmVSjcbPNKGB7DtE0OCetzNIK\nhxLk5GlsKH3No+a4+ZRNoxCSmZKgKqeiaImv2Vl4PKiNMtWEf60W0jClHsWb\nmQt4Ue2B+JVKlK2Lsz76ORpHvmoqKAwOxaQVydl2/ypd9RoSuozWoEJgWRAb\nVl5n+lIWrbBNu+xXG+6fmEEw6Mdp6D/Druzj1iMhS8nkhhjZD5L+JzWjODHy\n6cHHV30CXEGQfg6ZGUbypFpRS0DWY9fsbc8R0KsRT7ZGighGL2YcUMmtIfLD\nl4WVdsjkJ5qY6wCs0wLf8NCqT2CX9dUBpEtuUoIcapXBiYuKs7G0cwaQ1vSH\n1JB9KlBEcCe06jqFCiOHxWOpjqTyY4b+9LwJFbDUZz+YeDp0ak4EstMXjpUT\n5fH1gkZVnG3t8m9SCyVOA45+8btSKLcNtpHuo2Dbsft5xfxgSl/pzboGOHV9\nO897O41/oebnXD3xSqCKWoUkSLd5SeI8dvVDfa5CyqHZrqWWcx/7XNWNl4Sy\nhddu63a0p556c16rBDaYKxNuVO9uG3t4r2hWa5GyvytUPPSnY7mYVRxAAjbA\na7gp\r\n=rnTG\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"66aa5b8f9f8d5f4fd83e1250e6d5802b9bac9456","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc -p tsconfig.build.json","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["npm run lint-fix","git add ."]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.5.132","@balena/jellyfish-logger":"^2.1.92"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^27.0.2","sinon":"^11.1.1","deplint":"^1.1.3","ts-jest":"^27.0.1","typedoc":"^0.20.36","depcheck":"^1.4.1","typescript":"^4.3.2","@types/jest":"^26.0.23","lint-staged":"^11.0.0","@balena/lint":"^6.1.1","@types/sinon":"^10.0.1","@types/semver":"^7.3.6","simple-git-hooks":"^2.4.1","catch-uncommitted":"^2.0.0","@balena/jellycheck":"^0.1.1","@balena/jellyfish-config":"^1.2.5"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.122_1622299988516_0.18464189671655484","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.123-renovate-external-non-major-7cb0aff8944345344a0b03b94b778b67fffb67c3":{"name":"@balena/jellyfish-plugin-base","version":"2.1.123-renovate-external-non-major-7cb0aff8944345344a0b03b94b778b67fffb67c3","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.1.123-renovate-external-non-major-7cb0aff8944345344a0b03b94b778b67fffb67c3","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"6e8f339187ef5a05acad3deec0ac9517b2dd75c8","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.123-renovate-external-non-major-7cb0aff8944345344a0b03b94b778b67fffb67c3.tgz","fileCount":18,"integrity":"sha512-4zViojZDS4XcgY0RkzvR1R+j9SxaVEpI0gt2tfeHowtbC1ffJF/62LM0WvSyfDOdPayeTJWGXY0alqCzFG6b3Q==","signatures":[{"sig":"MEUCIDLa7m1iTKOg0tuesdXA72pvoxD1as6Hu10KzSYS91cOAiEA12TDhZzkV8UnV68bz0vg42eFf1xp6nwdkE28jWDlW+M=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":52488,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgso2ZCRA9TVsSAnZWagAALgkQAIixQeRGAgwL0bHnoYqG\n0rb2CZrOehjlQhHXJtXCUSvVeTiTHaDdl76qirVzd4KYBF1dtSVifahcm/++\ng2ZXC+5XpoC049+nonlNEM/fzDo6bTKNdmcKs6JDhJVao7Msnl9VmhgB38ob\npj07cTru6nccwAfWCYj8oyVag0WwXcAS8HhgyJ0fziWCNyXIzlTvUU33EvlK\n/iDCdEb/gtDQs4+ovYxiO7514GkJWqquTtESm5hVNpK9qn/10xK3kYOozI2u\nSFsly36lbDKzj+LBl/Fc/0pJk1HEPyZk7b2F4BAhIgxBzrAUGurHhSBoPWyO\nqYI30/F2Gs+zqBTDE2FZcQXT9veQeAOzXMXaqzEv/HT9ICZNR1sxTyhUz+P7\nsJrOT4EnrfuGgBkG67awDcBJjrVgY+S4bYpe67v6Vwj8XkixEUFhmX1pCgRP\nj0/Ley1s2F0vNpDlAaNpF4kPYD76AhEOpIhyJAgV2z2AzOeCU+t4QtyZK6OQ\njGzm0tXpbxlRmxuL2OUS0vmpEUcInQfw2FehCWFqClcPlVqCpdpVMDeCequd\nlvdR1lNI5y3XAuN86OKkX8owg0quHE+4GCUtWEDtRWGlKdDaF4DZ9ZaRM/EV\nF1SBnm+0R/ZWH6MjDoBGt863/+NKWTBLuse6ULAnTjwbe9RvEI+OrHhUNq5c\npCvX\r\n=x/HR\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\n[![Publish Documentation](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml/badge.svg)](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml)\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"7cb0aff8944345344a0b03b94b778b67fffb67c3","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc -p tsconfig.build.json","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["npm run lint-fix","git add ."]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.5.132","@balena/jellyfish-logger":"^2.1.92"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^27.0.3","sinon":"^11.1.1","deplint":"^1.1.3","ts-jest":"^27.0.1","typedoc":"^0.20.36","depcheck":"^1.4.1","typescript":"^4.3.2","@types/jest":"^26.0.23","lint-staged":"^11.0.0","@balena/lint":"^6.1.1","@types/sinon":"^10.0.1","@types/semver":"^7.3.6","simple-git-hooks":"^2.4.1","catch-uncommitted":"^2.0.0","@balena/jellycheck":"^0.1.1","@balena/jellyfish-config":"^1.2.5"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.123-renovate-external-non-major-7cb0aff8944345344a0b03b94b778b67fffb67c3_1622314392516_0.22858850013286025","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.123-renovate-internal-patch-22b5c120cd41e146734216c7eb205fcaf5d616a4":{"name":"@balena/jellyfish-plugin-base","version":"2.1.123-renovate-internal-patch-22b5c120cd41e146734216c7eb205fcaf5d616a4","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.1.123-renovate-internal-patch-22b5c120cd41e146734216c7eb205fcaf5d616a4","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"4aef53a2339eb4745175943fed9eda401edb1de6","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.123-renovate-internal-patch-22b5c120cd41e146734216c7eb205fcaf5d616a4.tgz","fileCount":18,"integrity":"sha512-7d+18hPbxtIT1qXkHiQaJGcLtq18Z8KZOkxVd2KsgB7Gh/aknYxa5EklmYRmj0b/vnabBtoZX2fkHtxc++ZqMQ==","signatures":[{"sig":"MEUCIAtzDY+VSHxEOfH9kzl4zoHfqBaPHUgzV6a8eg3Xi4w2AiEAhIddg+IpE7jJOa55UgHj+pD3vGfBXzOl0IECt/+H4YQ=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":52472,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgsqF1CRA9TVsSAnZWagAAGVYP/1e6tCkX4nmWHJKtGYPQ\nlNwL9izvcz0UKq3QnDwHmngpzjvfBGSxCJ723FlpseoC2Hkd98+TJYl8Ppim\nlG6Jt3eDQDgcj4u75U1jRYSLUIb12l8Wd4yusWskbP+q29DeNHxS8fMgwLUm\nMr+p6iNZyB43VMKpGbpANX8Fod7ITE2Imp1jvjIx1ahYafKanm9PQis5NTaX\n6j3qtrNt9R2Ar6KCxjIlVIO/9WGd/D0ws0XWcayS/spqcKPFaeXpIwozT1c/\nvFiIwCNPCBu9lIh6hpMbNA6FAfxsyfta77jlQz00PNAbL9v8QDbBBM77QWmJ\nCCi9OlPd5ezmR3qumvQhnoJwgthVL1OnPt6+ZK4ZwsHCvokzXBv553DPOzUJ\nvN6BKDQO5ExtCy63+9D2Iu9/fAXTiBx7hl4jfCf0El7/ZtFo+elsXIItTTxC\nHGDx1FnbZb3A+sXKGjq1OBipPD6aOn0NWATySo3CT6Ch35jBeiXEO8mJU02O\nRjShMMlrXvlDPKxpr7P3ETt3A8jAqBU8mYqZ2M4ja2PMiEKj/TIlkAw45YEs\ns/UGKmy5DfM4za7nqrZ+kG45x+7tw/uc/4Jdp63Ta6+yED+48SuqON4N1Yb2\nXUnPX8HNzgMhOJw2dLHU7zWJVgDMHa91ze28Dng9UZ4cQA2uLncLXP/BEqvb\n5oR+\r\n=wcOK\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\n[![Publish Documentation](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml/badge.svg)](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml)\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"22b5c120cd41e146734216c7eb205fcaf5d616a4","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc -p tsconfig.build.json","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["npm run lint-fix","git add ."]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.5.134","@balena/jellyfish-logger":"^2.1.93"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^27.0.2","sinon":"^11.1.1","deplint":"^1.1.3","ts-jest":"^27.0.1","typedoc":"^0.20.36","depcheck":"^1.4.1","typescript":"^4.3.2","@types/jest":"^26.0.23","lint-staged":"^11.0.0","@balena/lint":"^6.1.1","@types/sinon":"^10.0.1","@types/semver":"^7.3.6","simple-git-hooks":"^2.4.1","catch-uncommitted":"^2.0.0","@balena/jellycheck":"^0.1.1","@balena/jellyfish-config":"^1.2.5"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.123-renovate-internal-patch-22b5c120cd41e146734216c7eb205fcaf5d616a4_1622319476530_0.9624920550280593","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.123":{"name":"@balena/jellyfish-plugin-base","version":"2.1.123","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.1.123","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"9007bb1dbe84abee8c09c8e06d26bcfbb1d9ed82","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.123.tgz","fileCount":18,"integrity":"sha512-/VqoiInMjcM9v2AZ/KuuJaDlSe7+4+qQk45AHPLR7tQMh/wxKETVzWu9zAsK0Xf6x7C1QB7FUaCp/vTcmd9qvQ==","signatures":[{"sig":"MEQCIEJerFC9hyKtDubqWZcC2ky4JnNHIoeDwjU4gUhnEAkrAiBNa7QHwwOSlsBkULwUv1U8DeLJo5Q708UGV+PqdTKoBA==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":52407,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgsqJECRA9TVsSAnZWagAADUAQAJC+nE/h12wDfayOiroN\nTynHJNGdxtKGA031VW3oywQjABEuW8UzCNuJMJBfizvmM3IaRe2UTGCscyPw\nPbOEgeR54iA3usePQHCKSU9T11XMWpv8mdGfxpefqiNLl0LFRaA+199Qncmq\n9d8hHDV35jpRzmjGLlQBQrfGaX27xwHPHKafW2cqcPCGMu4vxKHDsRGAUb91\nG/J96/xXTlDlG1umfMklWUpa7fAHMQaAZVC4kxMT5QxOzhUIMYFKXc78rEEG\nptOdvKmKddW5zrxB40XgHU0LaL92UOygxU051zCzdybRKPFYwuz0+7+ILsmp\ngzsBUN7WIrcEDtTrX1zWi2cTQkYypmdkRVdQu6wnJOUneAFqmES5fn7hsuID\n4LbYhdIuVYa2Nn4nhRhxUSTfF9eskC7dKtkrW/eICcLNSioid1HXjM3IKK/Q\nsPsAskabHZI6J+VesIQO5RBc9SWwtr8nXnZAcD9py4414CWl13fwzYMJd80a\nP5/nP0qg4jDFgQAhNsgZx6VooC04qok6rXhf+OKGvNTF86Uq3DKC+HMKWkpM\nhb4Kk36g+6V1ld40gPagrrPIbYGlzppIJ5yoSBL4dvnXf9Axxd4RzsXTi7QY\no7L6HiUAlSisMi26mS5UjT7u5jkEGUsuEcfWpKvZgAb54pUaRweaxNC2fOau\n7hy5\r\n=rqpb\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"dd58e764cd6743766dfe5e31268bee8350c23c5d","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc -p tsconfig.build.json","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["npm run lint-fix","git add ."]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.5.134","@balena/jellyfish-logger":"^2.1.93"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^27.0.2","sinon":"^11.1.1","deplint":"^1.1.3","ts-jest":"^27.0.1","typedoc":"^0.20.36","depcheck":"^1.4.1","typescript":"^4.3.2","@types/jest":"^26.0.23","lint-staged":"^11.0.0","@balena/lint":"^6.1.1","@types/sinon":"^10.0.1","@types/semver":"^7.3.6","simple-git-hooks":"^2.4.1","catch-uncommitted":"^2.0.0","@balena/jellycheck":"^0.1.1","@balena/jellyfish-config":"^1.2.5"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.123_1622319683676_0.8471702175948279","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.124-renovate-internal-patch-7b4b708caf1d8f6a02af0a18b1c1ac90245971c7":{"name":"@balena/jellyfish-plugin-base","version":"2.1.124-renovate-internal-patch-7b4b708caf1d8f6a02af0a18b1c1ac90245971c7","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.1.124-renovate-internal-patch-7b4b708caf1d8f6a02af0a18b1c1ac90245971c7","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"c5764e59b95179040bf1397677406b8066568c1d","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.124-renovate-internal-patch-7b4b708caf1d8f6a02af0a18b1c1ac90245971c7.tgz","fileCount":18,"integrity":"sha512-BUxYzel4Vu/MWLK42qizQTB0j8uhBD1lU+pOuV7KU3sGOGQB1e4kRcyb1vouG75JfPYhsLncJSESw8v/B8comg==","signatures":[{"sig":"MEUCIQDvF+2HCcHhpM1n6VwOsSJQeu+bVzTiOlsXzvJGLgd8IAIgDrUI2KSVnhRDVJOWr7ZIpvkTNymT5nEf4MYjIMvEY1Q=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":52576,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgsqNhCRA9TVsSAnZWagAAAtkP/iLa/9apmqxRfJA31jRX\nBwuCw7Yd7pjsbt/KsBOGDJxmTbpoKzFGb4jL/+E9u2jyFT4dpvTPIojHPbT9\nGigxHwLFRNIOw2fw75h3HliRfa/C1lAekSzRwVBNuhppop8VJF+IG1rz9Af+\nAxXQ01sbNERfCZhWetKZHtjsqaqtop+57mEweEKrSPBAt0vPKGAyesUobBxb\npofx3lkdl2r3hcJQFMW/qxAPydxYKgWigDF7UBVO7N4P/LfFXYFFT6KAABmD\nGK/l6tHp8denw7vY/COxFoOLsmxMy3RE9NfuGcaWLpDkUwoZufu3RhJRNah5\nawheCmeJh5rBJGYjyjD/McMOWvdp7utQE6qpjYnkQSgRwXxbqfQd5arvtV6W\nEnoH0T3ySyIvELa84CoYPcfnD2hdQqZN76NGc7iaxscT+I3+nFU9hKRbpCpK\nsPzGhbofQRMb7B1W1XgwXd/XayzS8eNNFik3ZjXfP4/a8l89pd4jn8J625Fi\ne+GPUVQ6K/udw8EiS20Sc5a/ukHeNVMR0YoJ0K6QqJVxigIkMXZLz77SrNiT\nonf0O1aaBxZwyb1ffomfduUyiVewIBghMQH0rexIhOS0cM5kWljRDC811qpX\nRuvkvBJ8WZiS0BrfFIh8dyGt6bs75taQMPo003ddyy9xTrG+yF5tClbfhsoF\ngdsQ\r\n=hVSS\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\n[![Publish Documentation](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml/badge.svg)](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml)\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"7b4b708caf1d8f6a02af0a18b1c1ac90245971c7","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc -p tsconfig.build.json","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["npm run lint-fix","git add ."]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.5.134","@balena/jellyfish-logger":"^2.1.94"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^27.0.2","sinon":"^11.1.1","deplint":"^1.1.3","ts-jest":"^27.0.1","typedoc":"^0.20.36","depcheck":"^1.4.1","typescript":"^4.3.2","@types/jest":"^26.0.23","lint-staged":"^11.0.0","@balena/lint":"^6.1.1","@types/sinon":"^10.0.1","@types/semver":"^7.3.6","simple-git-hooks":"^2.4.1","catch-uncommitted":"^2.0.0","@balena/jellycheck":"^0.1.1","@balena/jellyfish-config":"^1.2.5"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.124-renovate-internal-patch-7b4b708caf1d8f6a02af0a18b1c1ac90245971c7_1622319969119_0.3613224681375866","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.124-renovate-external-non-major-1030fa43762d6cb8313ea1a5958bd172f8f51fd3":{"name":"@balena/jellyfish-plugin-base","version":"2.1.124-renovate-external-non-major-1030fa43762d6cb8313ea1a5958bd172f8f51fd3","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.1.124-renovate-external-non-major-1030fa43762d6cb8313ea1a5958bd172f8f51fd3","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"7f45b82452d79e54b1d6cd952ce9b3d1505cd64f","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.124-renovate-external-non-major-1030fa43762d6cb8313ea1a5958bd172f8f51fd3.tgz","fileCount":18,"integrity":"sha512-Ws5uHGJZn8CiNjr4mCe3bGdceD7nZ+sp7HngL2glnirz0EyjYyBfGAjAeMEr7o5Ielm4wU3qgmnuPU3DfPhYWg==","signatures":[{"sig":"MEYCIQC/bpFWpP/jApjUo5zRydI8psXlHETU21F7HbRAvL7xYgIhAMejBcT4UL4H6G70tgscRG6v0lxFac709nDdQvJnwYMD","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":52560,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgsqPGCRA9TVsSAnZWagAAe40QAIWOWAZwEHhQCKx+mNVn\noFgtakRcaPF2Ei23f0d74ilBjn9ciOPYv9wQUWOxk26X+0smrfmjb1oOfMcY\nUSA6BinpChxTesZnExhrT/ICllUIESWpAtT/XSA5zNHrjicFzoy1Ksy9+hpZ\nNkbekk6YRPunYqPCfARStLIJT5VeU69h3TC6d8R2t3pw3g8mmFWh6smUMWl/\nGoQh/BmOMH11tiuxl4GGp6GLuh2r8sHaAmxJ17rTifgGmaiCoqNx5OWAdeI8\nMSIb31DXUd9C1TMFRqOjtdHnG0lGurbFDY1/nFZjObcu31xYlvRZ2dTh6TbM\nZ9n+V0iSgRH+u7EgIYNOXkT2aeOIRwQedwFOTSJpD/7E9Scy0gL8cvJ4vCq/\nM2n3nioHVmt+ryVMoAb6U28/MW72pGdFii0D1+L1r+674EaRMpVpJaiHYgG8\n8sBf9hlQd1EEOn7M3b8D+Oq9Dl7tmgW7tX3pVWdtvKpfKJ36eqZCRWHzMLnc\novET53IGjLYlEDkpEx8hEalQ8XYoDxPFCDHJYb1KX7an+GFGayobQV5AT/K+\nbU51DSKlFKCuYR33X/f7MYawlkHI3punC/I0qZadiqbiNFDJAFMPMJzjZ8Ek\nP3telJDdgViWG9RdXZWWYemF6/cfaZjLUh7Dp5VbWJ4mBWsvvRiFzbZ6rBwx\nqcpg\r\n=Sxuv\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\n[![Publish Documentation](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml/badge.svg)](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml)\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"1030fa43762d6cb8313ea1a5958bd172f8f51fd3","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc -p tsconfig.build.json","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["npm run lint-fix","git add ."]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.5.134","@balena/jellyfish-logger":"^2.1.93"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^27.0.3","sinon":"^11.1.1","deplint":"^1.1.3","ts-jest":"^27.0.1","typedoc":"^0.20.36","depcheck":"^1.4.1","typescript":"^4.3.2","@types/jest":"^26.0.23","lint-staged":"^11.0.0","@balena/lint":"^6.1.1","@types/sinon":"^10.0.1","@types/semver":"^7.3.6","simple-git-hooks":"^2.4.1","catch-uncommitted":"^2.0.0","@balena/jellycheck":"^0.1.1","@balena/jellyfish-config":"^1.2.5"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.124-renovate-external-non-major-1030fa43762d6cb8313ea1a5958bd172f8f51fd3_1622320070597_0.2200759392889211","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.124":{"name":"@balena/jellyfish-plugin-base","version":"2.1.124","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.1.124","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"c402834c5c8c7e9b945429bbfc9f1cc2bb0f0141","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.124.tgz","fileCount":18,"integrity":"sha512-lTgX2B2D2B7MwKLSMIFRCqiIsJbzY2CJKMtbLWZFRG1wtoqIIhSFjKC8TYB2N9+ZNMi4xDusXaVrIC901eux0g==","signatures":[{"sig":"MEUCIQCF8paLM9oQW9VzElAKfskba7aDFgznYTMKIrIkFMcfZwIgWXJE/HMWtIDrKc7Zp5ajXzW6AsKKmCN92cxOcnROGN8=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":52511,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgsqTuCRA9TVsSAnZWagAASJoP/0VZNU0ved6mB2/t7oJ/\nEGwAMX38edtf1R3tlmFSfUMzFIHpg7cShGFUEtfMKeNNZ+HIc0yiM0VEZw5o\nFBB5QvloRc7QH6IzGp0d7Zx2OwY+e1oXiMqCnaeyGoRY4krDIjAHRSMDOTHr\nbersqkakYkbW+ZtysD7zYVrrZHzw8TJ+60B+TjmC1pH0Z+j5Ix9mcnvFcOkA\npAwtPKl0e0V5nAbdHx46szNrhJc1UaIpanlyzf14AloIx/w7DvaHremb/ymD\nsGk0RE4lxL26gnIBYSdKc2JsEvwO0WkzAM2kReK2BwBb/YvlRt57wwVxt9fV\nBWsQQI7XLqcIWHrwUntYFhz7tZTZmCku8nV4pXgjFeZqM80hQegewMxoFPsP\nvJBP8swvcXUmbpqWSeE+yWtawEvgZZi8qWUw9pThJZyCHtxEi6Kz+V6CeJG7\nsyq3Cnf6DYgCh2/nBjPFF6bJhi/OXuIyUBPQ4SGV5LvMV8xCL+bkM91ADHfe\nFV7Kf0Y/8BgyH2EAG7ID3PufjyqEBfc3FiXJg4q129apjYLL5c5aAlYWXWGJ\nRYaRdFDUQjlO+dcBdwZrecjAhpqxLHy62mm3G5kXlHob/X9qxMWfUhsrtU51\nHGZj93odsaJjHmHopLscOgBo7jmxgo+nfvTQTVFLyndIzDBMypFjUOBN7Eyq\nWUsU\r\n=Yd9n\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"269c04dc909992c15dbde703b5be78740a08b796","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc -p tsconfig.build.json","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["npm run lint-fix","git add ."]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.5.134","@balena/jellyfish-logger":"^2.1.94"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^27.0.2","sinon":"^11.1.1","deplint":"^1.1.3","ts-jest":"^27.0.1","typedoc":"^0.20.36","depcheck":"^1.4.1","typescript":"^4.3.2","@types/jest":"^26.0.23","lint-staged":"^11.0.0","@balena/lint":"^6.1.1","@types/sinon":"^10.0.1","@types/semver":"^7.3.6","simple-git-hooks":"^2.4.1","catch-uncommitted":"^2.0.0","@balena/jellycheck":"^0.1.1","@balena/jellyfish-config":"^1.2.5"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.124_1622320365548_0.41593465299636034","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.125-renovate-external-non-major-89bc1fa7c6d640eb716ebe282c7bab23f363fa7f":{"name":"@balena/jellyfish-plugin-base","version":"2.1.125-renovate-external-non-major-89bc1fa7c6d640eb716ebe282c7bab23f363fa7f","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.1.125-renovate-external-non-major-89bc1fa7c6d640eb716ebe282c7bab23f363fa7f","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"00a7371c5f7bc8fb908feec6142ab7364b28a54d","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.125-renovate-external-non-major-89bc1fa7c6d640eb716ebe282c7bab23f363fa7f.tgz","fileCount":18,"integrity":"sha512-Fg1DhmkaZiG9wzwzM+KwOeI1XLR8B8vJqxkr6AMvOkV00kRX24YnsFaaskZ97EFvaUFwZFH1zv+G4ty13Fyu/A==","signatures":[{"sig":"MEYCIQCk1h8gi0o34s4Z2ZMYgURhaK9UM/PDKiBPWk0XcHFzmQIhALPEQrCKV2eAXq9T9f9SO+B2b9n7cb9TdjAV2LQmz37m","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":52664,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgsqZTCRA9TVsSAnZWagAAUrIQAKNZ44zefTi4zbAo0EXQ\nixYTirTKyaIZmlnktYFZagaKJe7w4QvUon1P2Jo9IkgNPMUJyjSA4qtPg0ri\nTLXiJNDwH8RHp1HGh8aHPALhxFMe/biFJmTBiiI2xoC5hQC5BfHsUMECCkcI\n6InAi7aYhQ9rExK5Y3ZJpjIvYztmvC6pnhqz0thOtvE2h9eC1rzm05RFVWFl\n+BjMOe/Otf4ck5jTNiuqE+Rms+Fu+SCM3MCuH5e1E1XwEjiY1W8Pkg4LkLre\n9jidMEVl3H+trtyKOsha7Mw3KrbXrR2RU7kMX3dTL5zdb8FBwAHmPPEaFyre\nD3DnL/Jq0PtZ74Vhlvh9bwU8KIyGh+siJVdfkUg2nTSdZQh/AUZEX9mJb6Sq\noiUCGXs14/1wRr3U5Yo4skgc5PrtP/JV9csR4K4oIWCEAHTjX3XT5tcnDWYE\nx9DT+rEcOOVqOUausinDGMz6sMpVNhmXFfzYO+02Fyu44BmjzzzOkx0L1kUg\nHaTh3hs7DLGUg/Kb0QWfZ8lN4GnR05mbgG1yDFnGMkRQiYOAtm1uC5xHAexS\nN8aMMiGURVkvIxIyCR7KspC/Tmf/f41CjjC2ocCFpPSnNh1r/UcM86u71St3\nC9m6c4pgEO1dWLl0MJ0IXFSlwV5RN4G7Z8JzRkeUDd/9vhf22uzmBIIQLsZf\nnul3\r\n=Z0Qk\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\n[![Publish Documentation](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml/badge.svg)](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml)\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"89bc1fa7c6d640eb716ebe282c7bab23f363fa7f","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc -p tsconfig.build.json","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["npm run lint-fix","git add ."]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.5.134","@balena/jellyfish-logger":"^2.1.94"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^27.0.3","sinon":"^11.1.1","deplint":"^1.1.3","ts-jest":"^27.0.1","typedoc":"^0.20.36","depcheck":"^1.4.1","typescript":"^4.3.2","@types/jest":"^26.0.23","lint-staged":"^11.0.0","@balena/lint":"^6.1.1","@types/sinon":"^10.0.1","@types/semver":"^7.3.6","simple-git-hooks":"^2.4.1","catch-uncommitted":"^2.0.0","@balena/jellycheck":"^0.1.1","@balena/jellyfish-config":"^1.2.5"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.125-renovate-external-non-major-89bc1fa7c6d640eb716ebe282c7bab23f363fa7f_1622320723458_0.13360026311187845","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.125":{"name":"@balena/jellyfish-plugin-base","version":"2.1.125","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.1.125","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"fc7232fb4e59d25592859607526f9f5f00322727","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.125.tgz","fileCount":18,"integrity":"sha512-ZaBz+lNJ4iWuyPuF4YcETntivQX9l8IULqiiMHwG1i8bVlAfX3+/0sZDgBjT4OO7sW0RURISb6zF+jvZDgXIhg==","signatures":[{"sig":"MEUCIQDb+Dk3g+ZIzBKFg6QBugqa9Rse51AY+c+MzZJp5AHfNAIgBKoWCADbpUJoiZ3uXo3eCmSWTv5+4i3kvRHqqqTtxVQ=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":52595,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgssuuCRA9TVsSAnZWagAAoW4P/jLTg3SgVzy39LRiRhiG\nJLQqx3K8le2j8TjetCYMp1OVJ9D/x/l+rCiOvF5cZM2aB0+xV2oCbVkjGKUW\n1fOs4XiJbh1YKifpCoTDMvcoO4Iui73q2+3S35cCkepF/zKe+5OKOpk8kDUK\nJEwmd2lIrlKtGPL6B8o1PAwIlPJH4hl8UFKE5v4IO7vocCTtNzQGMEBoEkX9\nPr1gyhG4SCPyI4Ra+FS0rnSMtQVqOMkVdzjdmV1kQZ18GAKACKbqBwoGvj0j\nUFimEdKXbM+5WJ9utKdKu1lgAB/Fk6s0Oss7q61KOA5vYR1MC0XyR07HinkH\n6uJMAhC1MWyKb8aNxst8UqBgWh2KF83Qe5XKDecaEEa5uZgWsaat2Yt4cyl0\n/t1iL3EIuFo9kChe/Wa7FxkrhIVnnoPn2yBjohZBY2b2OdJ1OX7jUg07+gmK\nky/WBXGhq0Z7GFbZLPbJye+cvM8GsEMH6L6sijUWbofMrzmZnPwtdQESjWEI\nwj6ghAgVL7/rdfQ1jPNuY1cp+k7xQGR/II1FLcDG9DAqH2y3IAOtb9ZSjU7U\nNegSKVfG9c+3SDoIvXBIuSyCf6zrqIG+hSHB/XlrSoBxG2icKA1NfxowXAcd\nqkeoqrcrjfSONe5uxYIoqmngeCEDYLMlMA2dPd0Fgz6YDmlLq/RlbOqzsR6h\nBPwg\r\n=Khy/\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"02ffb3092bb4abe9742675a34101d0740dbd408c","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc -p tsconfig.build.json","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["npm run lint-fix","git add ."]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.5.134","@balena/jellyfish-logger":"^2.1.94"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^27.0.3","sinon":"^11.1.1","deplint":"^1.1.3","ts-jest":"^27.0.1","typedoc":"^0.20.36","depcheck":"^1.4.1","typescript":"^4.3.2","@types/jest":"^26.0.23","lint-staged":"^11.0.0","@balena/lint":"^6.1.1","@types/sinon":"^10.0.1","@types/semver":"^7.3.6","simple-git-hooks":"^2.4.1","catch-uncommitted":"^2.0.0","@balena/jellycheck":"^0.1.1","@balena/jellyfish-config":"^1.2.5"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.125_1622330285824_0.9434005751850008","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.126-repo-sync-jellyfish-config-default-c1c0b53bd80e010e80e90ba0030d8d4b9e6a6a2b":{"name":"@balena/jellyfish-plugin-base","version":"2.1.126-repo-sync-jellyfish-config-default-c1c0b53bd80e010e80e90ba0030d8d4b9e6a6a2b","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.1.126-repo-sync-jellyfish-config-default-c1c0b53bd80e010e80e90ba0030d8d4b9e6a6a2b","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"1bfb7b13d72591058d4c414b3529482afab05e2d","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.126-repo-sync-jellyfish-config-default-c1c0b53bd80e010e80e90ba0030d8d4b9e6a6a2b.tgz","fileCount":18,"integrity":"sha512-zkFvPWFT0dg8rLr5TjTGkC4pccezhUatcDN5ymkwMF5wWgBxRdqJgGXrCFzev+uEkBt6phO2crtKpDovAUyRJg==","signatures":[{"sig":"MEUCIQCh4qabVad8S83lU6Ej0z4JSDXCSK6hOMzRl8FQ/KMBzQIgGtZJcvz7u8kUP11CM5W89xATxztXvFt9LH5UaanBoqc=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":52768,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgtFXPCRA9TVsSAnZWagAAZGEP/163CF+tXQmUpUmXNlo8\nQl9oWNl5n6R8/St2FH9lrw6q0jiYnXXGmgDc4CQeWZ8ExR95M/bRAzDnxOQQ\nOZc5FC7suR0+SEz4grJcukWu+wdBqsIx9GrgcI8iNNX3j0UstQe2CxtO3dDA\nOVbPn2pq0lZvJ8r6gm1Rgu5TrDl7tNAT3/dsSrNyNu9d5PDNgEEhKqglz5rN\nWBR1rX5es3/I4BP39/kI/f7Mou4koF4pajzh8T2npinZCWvO/5akD1ZyCet/\nLAb1F3Bxv7qcqxyTgxlVQeC4U5DbaVTu+a57Pqr048cVXkthJpJ23BaSQaoT\n4Ib4sqJJsB4ZkYKfmDFqnWla2gl6V8RTGGy0aPtFxJEOB7L9IKPEy/smfE9E\nNlG0yRll2+v09Izlk4ERz7tC4TaiAiN5d9T//KyEviCT4+Za4nL2ZDaUdPx8\nDMQCWOeykVzQQTtHwLWqzFfLg6Z+3bI5EDebwH/YL5rDnr2nGWsCInAht+HQ\n5S+S2gf8mVGOosXlNQ1GKzq5CfeflhlrxIKs0mbtBY+1HQQOa+AUxMoIL+F8\nNcKR7ki9tsHEa60LD9w5Eawq7dFe0IViz2gmQABsHwEREP0TCQYL1XnxX+mf\nqUfXbABbhbfB+kAR5e06aRMNtq3vgEKksmNAck9xHasUJTTPDIF9J/FGoYHX\n1HWa\r\n=Ukj/\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\n[![Publish Documentation](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml/badge.svg)](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml)\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"c1c0b53bd80e010e80e90ba0030d8d4b9e6a6a2b","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc -p tsconfig.build.json","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["npm run lint-fix","git add ."]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.5.134","@balena/jellyfish-logger":"^2.1.94"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^27.0.3","sinon":"^11.1.1","deplint":"^1.1.3","ts-jest":"^27.0.1","typedoc":"^0.20.36","depcheck":"^1.4.1","typescript":"^4.3.2","@types/jest":"^26.0.23","lint-staged":"^11.0.0","@balena/lint":"^6.1.1","@types/sinon":"^10.0.1","@types/semver":"^7.3.6","simple-git-hooks":"^2.4.1","catch-uncommitted":"^2.0.0","@balena/jellycheck":"^0.1.1","@balena/jellyfish-config":"^1.2.5"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.126-repo-sync-jellyfish-config-default-c1c0b53bd80e010e80e90ba0030d8d4b9e6a6a2b_1622431182629_0.4025133979162052","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.126":{"name":"@balena/jellyfish-plugin-base","version":"2.1.126","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.1.126","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"cc0e0e8262198a226c1673a9ebc71bf514d0acbd","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.126.tgz","fileCount":18,"integrity":"sha512-VqGsiQR0lCVzuMQ+IS3kltRePvuzO5VUTXwNObqM+bV6tQ5ZUpebKrzpL7KDKKg7EmEhaj90+dWtns1SCp1zLw==","signatures":[{"sig":"MEYCIQDK6dwqnolcQrS+lovT7HVKWviqVNF5mYpmfiIEG4ldIwIhALmR0+NQ5cvZ0DjZhd13Nl1dPU8chOObkHJ0uDOeW8X3","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":52692,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgtFdwCRA9TVsSAnZWagAAg94P/1LPSTa/ufCA3EDCanYe\nC5/WGaTXK4kL5+Mz5fkDd1W0icLRmuxHN5Os38DQaJRT2v6Pa/AJgCv8J6RY\nHIlcZcgwcgE22DNzprLUpWC9kq3eJ9Rq3XRCFWwvVgmjAZnd2BLisU3c878l\ndrXxzbNGt0xMKRJzfb/ENcFvveSNhaYvUOMsIkzIfWPv/OmpjjwuHcytKsCy\nGR5xSr0cx/ywVYetwBbWxS69eucZMBWckrL3ftNIHQW2Q1E9/S1D4XZ5kuLW\nRrcv+mED/2xIjj5+j3J5ztAcNs2VSUqMu5deO+UaeQtG+1EovMySVhpgj2+X\nvY53S8kw8OxGw+7VYjzJiLFvcZwE3xAb3O4U8kDyzAe+k6Y0MNN6/az8cDDY\nk7WxPvtFcX9s+nipXj0OJIIS0ZKnC7nPtl+l7gLeOr1kAbatGz88aOfQ5Z/M\n5ynWPpa90Whh5WJxtJ7eqX2Jrdi4X7HTrVJr+erXJjZxDgth/9Jc0SgZ3jEb\nH4smqzyyzrtsYnpy1Zd0uJxx3x2j2JcZtZW2PQ12tAOV2xZL2qn1A4Zgq1Fg\nu0Hra9zslf/g5vPsQb1mu8Xlbj9fOIB2jtO2R8fLIUZKbXQS1h2/9F2S9cYj\nI/AMOXLQWcOLHh7UYj5FpJuv914oPtFhus+ZIvoEMgUx3Qec85x8pgbVaM2V\nowSJ\r\n=NT0E\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"61181958231a73a0fb42f461e588e47d563dadd6","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc -p tsconfig.build.json","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["npm run lint-fix","git add ."]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.5.134","@balena/jellyfish-logger":"^2.1.94"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^27.0.3","sinon":"^11.1.1","deplint":"^1.1.3","ts-jest":"^27.0.1","typedoc":"^0.20.36","depcheck":"^1.4.1","typescript":"^4.3.2","@types/jest":"^26.0.23","lint-staged":"^11.0.0","@balena/lint":"^6.1.1","@types/sinon":"^10.0.1","@types/semver":"^7.3.6","simple-git-hooks":"^2.4.1","catch-uncommitted":"^2.0.0","@balena/jellycheck":"^0.1.1","@balena/jellyfish-config":"^1.2.5"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.126_1622431599603_0.5494287490907777","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.127-renovate-internal-patch-61dc1a9254bdefa53d6517c31c1491713961eb3f":{"name":"@balena/jellyfish-plugin-base","version":"2.1.127-renovate-internal-patch-61dc1a9254bdefa53d6517c31c1491713961eb3f","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.1.127-renovate-internal-patch-61dc1a9254bdefa53d6517c31c1491713961eb3f","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"573238d75160d523494397969debd0ae1d509b52","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.127-renovate-internal-patch-61dc1a9254bdefa53d6517c31c1491713961eb3f.tgz","fileCount":18,"integrity":"sha512-pKbiGDUCIPV+bADCx7a5+5KJs1HnReip1SKgsS1BJVq4s3sL6dnwWubZJO7LSGddGP3eYTYrDHv1OpaHo6W8Ww==","signatures":[{"sig":"MEUCIQDX/+EPHneQDr0Xn7jS0Qwp04BFVGESjiGVoU7DFKsdUAIgNQbnh0Ec5tyX+7yXo5cJpCxKPb9qRjlQ9joy08+qnBI=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":52860,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgtFkTCRA9TVsSAnZWagAAOU8P/10Ha0WygF0JoCvLQq02\nsQikKGnorb+a+fMXx6MpPULq3lJdrxf9dJNJgEJaTT9eu0Hm07dJ3hBRxdoz\nGzqAW8I4EZPOFQbChHGTcmnm6U0mvTbD3pCJke4VHBM1x1cy0ylSc4h0l+N3\nIvDrXlIMf6hVdh+59gw8w1jT330/tiftj3jkcjQjDoBNf4zCyd4ycuV+3lRg\nwh9UXxXUFwVM14z0Pmxc5Nhd3COm2OcFiN2mhII8mF9Pe4WYCOH0OyfsSg0y\ncdtH2rk1ommzQXeaBVZgW9XowDnhpBezb86elrOrTXkrT7aycl7FXm9oCQ47\nuvJgXc0sXZAkk+8q2/o/HUcW17nD0qB3VdfFqJRR6irszMTetV6Tx485bSCK\npM4vWuYXO1rcY/W4oH9iOOigK/kexGgOgyw5fibuGMucwUBh3CXSLXrzRgP5\n95j4HR4rOtakJ3rmcj4qg9YRQyUoSHsXuICkuoIaDULfy9WD1pwYzHlTw16H\nES79WHjsGm2A32chYGwQzPrO+zy3K7hdakVlvtphTfFReEsAc4FUG4lM1L+2\nsnnbYsSu5zVS3qJ/l00snYhyLL2gfkUtSyiDMQRQ323vz1gqNSiV0bOcY1pq\nF5xRJFaCUymwqjAJqcTfR9RqNpFvX1FK5ieW1T+hHi+YcxzHDBMKMqxkHcJ8\ncHEk\r\n=ipI3\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\n[![Publish Documentation](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml/badge.svg)](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml)\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"61dc1a9254bdefa53d6517c31c1491713961eb3f","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc -p tsconfig.build.json","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["npm run lint-fix","git add ."]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.5.134","@balena/jellyfish-logger":"^2.1.94"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^27.0.3","sinon":"^11.1.1","deplint":"^1.1.3","ts-jest":"^27.0.1","typedoc":"^0.20.36","depcheck":"^1.4.1","typescript":"^4.3.2","@types/jest":"^26.0.23","lint-staged":"^11.0.0","@balena/lint":"^6.1.1","@types/sinon":"^10.0.1","@types/semver":"^7.3.6","simple-git-hooks":"^2.4.1","catch-uncommitted":"^2.0.0","@balena/jellycheck":"^0.1.1","@balena/jellyfish-config":"^1.2.6"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.127-renovate-internal-patch-61dc1a9254bdefa53d6517c31c1491713961eb3f_1622432019072_0.19312239840162304","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.127-renovate-internal-patch-ac859110a88e2d8de818dad316e70af41d763153":{"name":"@balena/jellyfish-plugin-base","version":"2.1.127-renovate-internal-patch-ac859110a88e2d8de818dad316e70af41d763153","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.1.127-renovate-internal-patch-ac859110a88e2d8de818dad316e70af41d763153","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"13ff95ad9dc58cc78e88b80350fe0f0223f3f903","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.127-renovate-internal-patch-ac859110a88e2d8de818dad316e70af41d763153.tgz","fileCount":18,"integrity":"sha512-GWFCpyaxsa1pa8B7c/zRqncD5nFam/7i749RNYshOwLKpFkggza3CleA9tQDymRApzWgPfJj8TTp74Uc65U0QQ==","signatures":[{"sig":"MEYCIQC7ndcgitiqUJtv/f5oP+uTOXOSEO7n9yyRv7Cr/fiQ9AIhAPv/nWwnsztqp1plE8hoarUWdZiTYfBiPCGnX9eFC6ua","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":52829,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgtFq3CRA9TVsSAnZWagAAGisP/jJH/EBQCzdrdz4lEIF4\nzZ3IjE90vUrK/W8H+9BVMoRpVWkQke8E7UMgRKbGqRMavTuxfN3Nss1n6Z/g\nXF+VTO/O+1UCLEOKuoPRZz3oRP4mtUgsv/2fzylfFGPsvb4J7Xk9l/j/ok5v\nsOC8BdPLi+KJgnanONqMR7pUM7DdhwMx/sfJpaYQqGIEVhS/+OQcRgCLl3RD\nNaOHXEK66hjf6LL5MIYsT8aYi9UFiC+usqil+nIANZux1al/hZdCVydbtbl9\nwx9N7sw9/nE99BNtXDxU3rqRlzjLJ9m24ajZVU/esbTEOiIkJj8lYswdER7P\na1rm85u0ECdXOj29UAVYMU8wH9PMj9T4ut81ppKPodfW6mulPKwNM4J32nlH\nj60iVKM2kE9xXbukFNkN4UoDFLCop3Rshv75zBd9cpJSCTxBL6aXkRS6lPyO\nb/2/let1VefQo1oLlwm//bsphf/wdQ0WKzki0OcQgpGjBr8crz+lQes6BNvz\nqH90gVLYWb/J8/pb6vD0HUnYUzG0Ys6vpoHTVr6jYJyFMjD+4fm/rUkVnvvQ\nUSt6TI979rL+BGay0JmjHr4v11WInXehU+JDqZdXeZcOL8h2omEh5EcCEYKf\nit/CdhToqZHf5tF/ZIiQ2NQ6O36f1pi04i9RPKSS/DhGCNlNV5F7bNmc8JrD\nOyvW\r\n=IjqC\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\n[![Publish Documentation](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml/badge.svg)](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml)\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"ac859110a88e2d8de818dad316e70af41d763153","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc -p tsconfig.build.json","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["npm run lint-fix","git add ."]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.5.135","@balena/jellyfish-logger":"^2.1.94"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^27.0.3","sinon":"^11.1.1","deplint":"^1.1.3","ts-jest":"^27.0.1","typedoc":"^0.20.36","depcheck":"^1.4.1","typescript":"^4.3.2","@types/jest":"^26.0.23","lint-staged":"^11.0.0","@balena/lint":"^6.1.1","@types/sinon":"^10.0.1","@types/semver":"^7.3.6","simple-git-hooks":"^2.4.1","catch-uncommitted":"^2.0.0","@balena/jellycheck":"^0.1.1","@balena/jellyfish-config":"^1.2.6"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.127-renovate-internal-patch-ac859110a88e2d8de818dad316e70af41d763153_1622432438693_0.6697994690286562","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.127":{"name":"@balena/jellyfish-plugin-base","version":"2.1.127","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.1.127","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"249ecef5db5f1c54d84cb6fa8eca17f221acc98e","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.127.tgz","fileCount":18,"integrity":"sha512-2N3pRZKnZMK0qGNYRiglQD/cZM4L5ZL5qE55zuq2Wpt2vcvpjMxjizwPI2PAh/ehBJhAHZRaRgnYRRF98s/RkQ==","signatures":[{"sig":"MEUCIQClNhk/313u7HZkBZYw2ZOlq4krWpnAejQH8pZlpIwieQIgGB/0vZwzOfe4anKVaOqfJc/I5+Tl4tm8JjiG9oPApuM=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":52764,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgtFuNCRA9TVsSAnZWagAAktMP/0ZXKENpFiHpXZ2w42uE\nAAjjKyABO9NeAnYO6kQ3Xh6UGKG7B4CeLc1KICBjyo8IB24i2bmDr6Xw0lv+\nud56AZbKFvsIl5TnjAsXh0izN1t9mAKlswAy9LZUv5e4ORZ3PypZesGRuXhv\nlhFkfcXq3bkMgmDv9JQjY3aQNyM0x0oAQh7yaYNUP6gp+VJAq74DChPF8nwS\n4ecB7m/AeZ8BSKfgbaJ3CUp8sqS3plAjvkq8UOVBkxvuxfR6O4r9vgepNrwr\nSo3BD91tTuMDv0cPCIN8uLsYSKRNAmv3/Ly5yLRoQJpqZMRivZtrByZv4MlC\nrA7Nln/F052JHuF677jmxAYX+H5KuBFDC2KtLPVJ/zTHLVn4Zf9mFaGT9FBf\n4xg6C9JNhJpYxGkc9gK3KiuBVv3f42UGygljt+PqWG/NkFVbttFbR/FwTvSo\nbEvqXRDCHWBBSXwSEPIDUulXdgRcWgs3h8BgibI9OeCB5R3RIUK0ijI7vXH3\nQyOZbaNd3b0T3N7SgJaTijAa+aKvVqCIVGZcZsKyxB/dokUiWNSUMSZ4dhwC\nURsnUFpvUgyFjdmGg4CysW89E3s5Gslp6TayrGy26BKxmpLGvuwBne/k3oSx\nZbgpK1F7ZkFP1WsGHUs1cF01xLqLG/8O8MzS2/xKJdfsGPM+Y0/+urx0uhDY\n7Ue1\r\n=HCBE\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"47e98c49ab44572afd36b3d673b46a43187fe254","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc -p tsconfig.build.json","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["npm run lint-fix","git add ."]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.5.135","@balena/jellyfish-logger":"^2.1.94"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^27.0.3","sinon":"^11.1.1","deplint":"^1.1.3","ts-jest":"^27.0.1","typedoc":"^0.20.36","depcheck":"^1.4.1","typescript":"^4.3.2","@types/jest":"^26.0.23","lint-staged":"^11.0.0","@balena/lint":"^6.1.1","@types/sinon":"^10.0.1","@types/semver":"^7.3.6","simple-git-hooks":"^2.4.1","catch-uncommitted":"^2.0.0","@balena/jellycheck":"^0.1.1","@balena/jellyfish-config":"^1.2.6"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.127_1622432652966_0.44843957635838994","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.128-renovate-internal-patch-01552a8134f2aa5d67b23c17e65c089b7e3fa0b0":{"name":"@balena/jellyfish-plugin-base","version":"2.1.128-renovate-internal-patch-01552a8134f2aa5d67b23c17e65c089b7e3fa0b0","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.1.128-renovate-internal-patch-01552a8134f2aa5d67b23c17e65c089b7e3fa0b0","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"4ebef783a51f96203f4205945cf2778a59b35799","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.128-renovate-internal-patch-01552a8134f2aa5d67b23c17e65c089b7e3fa0b0.tgz","fileCount":18,"integrity":"sha512-aicVSQaToKctdv2c6Bf7/LZ8YOEzJX3Bq446I+AOOXIQWKVQ2CvWM8TIk88kOczB1ExL+Lgl2NwEhFycrmWmLQ==","signatures":[{"sig":"MEUCIDKxYheithD9Tx2V/hZcOIuHdv1WrdYScGX0FVnHlN1KAiEAtWSvYpPJ0vjI/8rrPy0P4ieJPgw2cgblLcwrUxGJryM=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":52933,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgtFx4CRA9TVsSAnZWagAAnKgP/1quHFyk1TYKPe34ucHn\nHpyaz7DRNp2yV2ZG0KvBpJsOtKZZehPRhP+ra+dlxj1Y1Of0N/K2neDDecei\nT/r6tVLIO9e76SGj6HwDUtyjc2SEH0xJbAauALV9XCgH6YsoLC8zI43FWpkW\ncM+JSGkG725/6ljtQeET7xf40o8VdvqHIs8pmvHpM2bUwK5o0Gf2+a7p88bY\nV0Jcg16xOIEQ964xjxaJlsP+VU2Cun2Wse6deJ0PPDEVQekALjQkswTKji8m\nqQy41ZOIflWSlJDKFFAxCAgFueag3qB/voT/RorLan4Ynw7CK01VtMbJ1Hnn\na6u1vfuun8LC6ZqdIYBb/5bUtF+UOKv4Jj5+/juQPuSU6rSRdSRL9T5kWwnJ\nYo70hMc1+DxySoK9odcOKVwbTJ8r+tERX1JVI74iUPR4l53KLjnj31jlTRxE\ni7B6+hHuMMBjXRMC/o4RH5njPRrf/vIeoavRHAWfuTjO0ZfMH7+Dt9pwtQME\nNSw1wuOilkgw6Q906O5UTeNt8rr6Yq82TKMchMFVlQ24YNNcsBQNkkuQg6a0\n48qGkqQu7Fr0bJXCY6l7LTxg3E/53ImDWwpBNLM0/0UKozzcWkWjuSdAcn7S\n9RQpLAC+yjnSz79C6bOyWnRmXsNg6Xb/XIC5AvwROqDwWITXZJgEbgrHHv0r\nNTd9\r\n=uSke\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\n[![Publish Documentation](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml/badge.svg)](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml)\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"01552a8134f2aa5d67b23c17e65c089b7e3fa0b0","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc -p tsconfig.build.json","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["npm run lint-fix","git add ."]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.5.136","@balena/jellyfish-logger":"^2.1.94"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^27.0.3","sinon":"^11.1.1","deplint":"^1.1.3","ts-jest":"^27.0.1","typedoc":"^0.20.36","depcheck":"^1.4.1","typescript":"^4.3.2","@types/jest":"^26.0.23","lint-staged":"^11.0.0","@balena/lint":"^6.1.1","@types/sinon":"^10.0.1","@types/semver":"^7.3.6","simple-git-hooks":"^2.4.1","catch-uncommitted":"^2.0.0","@balena/jellycheck":"^0.1.1","@balena/jellyfish-config":"^1.2.6"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.128-renovate-internal-patch-01552a8134f2aa5d67b23c17e65c089b7e3fa0b0_1622432887617_0.2740711341614912","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.128":{"name":"@balena/jellyfish-plugin-base","version":"2.1.128","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.1.128","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"fe1f54d7ff70eb0215771526cc593d425209ad16","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.128.tgz","fileCount":18,"integrity":"sha512-wYWkmnv1NbNcvPH5GpJ3nUrDJXTP+4xCz36K41qRGTHPZ1vZ+dhZjCU5BDGC8FKIlMTJNTUvt3iOJIJFyxOjsQ==","signatures":[{"sig":"MEQCIE0Ur1pL0nLI6fkxWQEB+wpWnAqQQIdk7SqZFwIuvInoAiAaJnlkeFGtm7SOnvmS4fnevxOoS6/hhMmW1p88OdQ4iA==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":52868,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgtF4BCRA9TVsSAnZWagAA+gQP/j4qmcFOAhzhK1R1qyOH\nUsHD2n2XRcDR9LfrMLr8FFbzfKJ8HG7rKc5JSV+J1nsdveJn9W1QvFc95nlX\n71bj6LMGLQjd/79Id2eyA8NLlNACYD+oMtPtruk89w1JKTdXWp+91kzBnp1s\n46pKL7yuevzRRhDGFqd1ImFLV7gKTiybuPoH8fyyGI801tFvirwqVsCEIVWX\ncARbQ6laWWHvHCreu93MOIDpbvivxcs/QIY8UslZZkwj11IfvL7zFK+E5WrC\nt1HkiAFaJqMrlzGkUSuKeSPXEhuvCDkX1SzShW6G0GfsEd00rCDNx0V1QJxo\nxOKMhTnQO5TtoChpjbQDrwmnfpvztc18UMs5DaXjCYAfhmQi8W6A4GnuQqsX\nTAk6DecbJb9utuLkKlWpg6OtvmMnc6XSLV9nRcIAzTaD2Ox/5wKjcAWMQGLx\nNKHcdTKw8PXQpj+A19MACJ81SnTuTojXzJk1NTfHznQChtvzD0mmvrc0L/Kz\n8ssQe10N1CnXrm9dv53fnR/7FIRVUZv4pB6eXthilXXQj9/qC8mVcx2WL+rT\nwgYyA4pJbMOErF3/WgBXRJlqss7/y3rvdjjZ6D45VCYGTGnda1ZIhxJb8Yl/\nDZG2QtJhrBs19lKsDZAUnoOsxEg4wXSaI2CWbCUMa+Q1xHIXCMp0g8RuqjQb\nX2Co\r\n=U7v+\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"2cbc76a162eed5704bac6c7737e9a607af08dbf3","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc -p tsconfig.build.json","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["npm run lint-fix","git add ."]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.5.136","@balena/jellyfish-logger":"^2.1.94"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^27.0.3","sinon":"^11.1.1","deplint":"^1.1.3","ts-jest":"^27.0.1","typedoc":"^0.20.36","depcheck":"^1.4.1","typescript":"^4.3.2","@types/jest":"^26.0.23","lint-staged":"^11.0.0","@balena/lint":"^6.1.1","@types/sinon":"^10.0.1","@types/semver":"^7.3.6","simple-git-hooks":"^2.4.1","catch-uncommitted":"^2.0.0","@balena/jellycheck":"^0.1.1","@balena/jellyfish-config":"^1.2.6"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.128_1622433280938_0.21424979070825723","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.129-renovate-internal-patch-c07bce5b1e878c504834d046d62dff4c5fe55ef4":{"name":"@balena/jellyfish-plugin-base","version":"2.1.129-renovate-internal-patch-c07bce5b1e878c504834d046d62dff4c5fe55ef4","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.1.129-renovate-internal-patch-c07bce5b1e878c504834d046d62dff4c5fe55ef4","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"8349c1cd11ab557160086741ee31e9c5e581bdca","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.129-renovate-internal-patch-c07bce5b1e878c504834d046d62dff4c5fe55ef4.tgz","fileCount":18,"integrity":"sha512-fcVE2Vqv+JwCx4cD87h1eui7ievd1EK6Wg6ZFW3SCP6uL0vN8y6Lv8OxnQwmsoheXMPgY7Dw5FNjCG87z/sLcw==","signatures":[{"sig":"MEUCIGUl+/TxDydh/1DK9vFNGXQL0c5mIuSkyghkH6RJRH3YAiEAn/oYbTHcUEyoEzTcEyCoXTt/RzDpUrJgGFpULF/LLWA=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":53036,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgtKY0CRA9TVsSAnZWagAA1KoP/A6bUrm+efmdlnzNPKJk\n1aG3Q4nUqxVkXGH/c4zklDZtmCb5wsaWwY637vcPAGbS4EUKDCeSNxEBCpt3\nei0hhyF/euoCHZxgFYEnDZf3WVmlkGuxpjMP4gE7AbEwuYIay6cVezdUxq4Q\nMZ6dP41iwdOtD8ofa5jOyDKoL+EsWf4slrvd12CSVYVFT6k/6RN1CY0x3MQ2\n6nhvA12QMK74gmgb5kN6JMI5l8XGqGv2SXHmxoBBfTKakXqrTEh7MxAws7jT\nR058OT+y6oDOutBcyl+Kzbwe8utyDzzHKwOzyVf55SB3/2jNlXKLyVSjIqV+\n2BScsceKyjsk3Ddb0eJO7OMmcioP0GPloY4zgUsf7OLVORicMs1o1y4stDB/\nVboZH6JcIq3VtivAbndP+pXHm9e1CFF+T6bY1cTW0oqDuuDHTRb+6w+TZQoY\nLcDyV3G66LfF+k8R9joKKHf5x3fkjUsGZseLFCgGDNBpwBifjn287Xqzi+4C\nnI+CLWl3lArOh3aWGGjvMSBL3WyPcTghXhFia7eQ8e01mZq45eiEKZkgB6n1\nzAtcqDCmOyiIk7B5W4GRAQe/GctPNvXUVbGMvzJKllp4IGYe0HpKZm1b4FjS\nLmu39E8sFdW/ftDnoPRl4MZ+2E7ZZeegvwb48HTA4mM9eOojHocfT2uzS0WB\nzMIc\r\n=tP6E\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\n[![Publish Documentation](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml/badge.svg)](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml)\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"c07bce5b1e878c504834d046d62dff4c5fe55ef4","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc -p tsconfig.build.json","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["npm run lint-fix","git add ."]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.5.136","@balena/jellyfish-logger":"^2.1.94"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^27.0.3","sinon":"^11.1.1","deplint":"^1.1.3","ts-jest":"^27.0.1","typedoc":"^0.20.36","depcheck":"^1.4.1","typescript":"^4.3.2","@types/jest":"^26.0.23","lint-staged":"^11.0.0","@balena/lint":"^6.1.1","@types/sinon":"^10.0.1","@types/semver":"^7.3.6","simple-git-hooks":"^2.4.1","catch-uncommitted":"^2.0.0","@balena/jellycheck":"^0.1.1","@balena/jellyfish-config":"^1.2.7"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.129-renovate-internal-patch-c07bce5b1e878c504834d046d62dff4c5fe55ef4_1622451763113_0.12198964068204288","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.129":{"name":"@balena/jellyfish-plugin-base","version":"2.1.129","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.1.129","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"9bfbbda004cb81752c5054cd31ec3c41ef8417b6","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.129.tgz","fileCount":18,"integrity":"sha512-YjFQ4IuO9kLbnSsI61ioxoGtZpW1jRGRogo6SPndgwfBcsxWwOKDGrKzcofqlswsbwaOlXgG4qQAhwVLslGayg==","signatures":[{"sig":"MEUCIQChnJyVyCLhbAiMlgV07EmUNPJg/K/6jQR43gcp2s+e+gIgKyH7R3RZO7ITj4Fq+LMspq7o5D4jcl4x2vNhKWEj6Kg=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":52971,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgtKcaCRA9TVsSAnZWagAA+5QP/i+/QKdPRierLMhkCj9k\ntM0rM8RLlMVTHRRkpD2eCwwRlJef7yFUCFDDY7CQnW75a98/9yEIpCPTyP5W\nZx2IBbscnLMjYLvtFQIo0rfc7jU87Mi2ti+ehN8AP6ku90orOsE55EuAatyi\nJ03NnvcW2GKtq5K1FQEHaaP4qoMa889BaeWMy4cuddZ/FRCAinqXgOEjVMB6\n+cK7uuZ/RvhZ+ne7f7MqCtRd6kwRfBZlo7VjxD9S+MBtMP4XWEllZ9b0L7dY\n2xi8cFW7pTbs37Phge0382UBBQdoUcnGqztxErOb3P/zjChFZrh6nRxKM/m0\niqcGwhTkQGKoPJQpKk6X44cG+ACgRWmlRmH4qrlbzQRCvqOsu2gvoqYaeKl9\nCRMwy6qRDdlaPtJ50Y0ByAjAzS2aUmaWsZ3A50/LgWuie+BUR2t30+OZTC4E\nap3Xu1f9V1o6TmWgBpYS0rOC26Wr4iHoiiT6AbfNM5E22Dvw/06JJBNtYWrC\nD9wCUmNsnX8L495v5aYoqC1N71sLH4biZLegtHgh5lHGXNe7ODFWPKD4M6Mz\na8vRu02x3hvy/OrAfZtq875ADJOXECjg3qWlT7p3T+Brcyw4vnjscXmW/YXM\nMyJ3sl4NDm4jqzyQ/NuuXXwK7U39/hzUXe+gjjMqCiDIGn5kZihpO5mfiCs1\nhCc7\r\n=GyJz\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"61ebf9b18e3e0a5b9b534748dd2796992c272f47","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc -p tsconfig.build.json","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["npm run lint-fix","git add ."]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.5.136","@balena/jellyfish-logger":"^2.1.94"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^27.0.3","sinon":"^11.1.1","deplint":"^1.1.3","ts-jest":"^27.0.1","typedoc":"^0.20.36","depcheck":"^1.4.1","typescript":"^4.3.2","@types/jest":"^26.0.23","lint-staged":"^11.0.0","@balena/lint":"^6.1.1","@types/sinon":"^10.0.1","@types/semver":"^7.3.6","simple-git-hooks":"^2.4.1","catch-uncommitted":"^2.0.0","@balena/jellycheck":"^0.1.1","@balena/jellyfish-config":"^1.2.7"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.129_1622451993601_0.18144295066941907","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.130-renovate-internal-patch-ed10b24f7ae2a7926c7842a2f9c899b693756032":{"name":"@balena/jellyfish-plugin-base","version":"2.1.130-renovate-internal-patch-ed10b24f7ae2a7926c7842a2f9c899b693756032","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.1.130-renovate-internal-patch-ed10b24f7ae2a7926c7842a2f9c899b693756032","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"1607d834b6cd63cb2b72f210044223f9c67d1237","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.130-renovate-internal-patch-ed10b24f7ae2a7926c7842a2f9c899b693756032.tgz","fileCount":18,"integrity":"sha512-SJgij0AMMuv+kcgXj0RoKSKBh02dZrFF+HZ5zI5L6Du9Gjpk0B+LXx0smbbBSYTj7KizNcu4oNGT12PBoCoX7A==","signatures":[{"sig":"MEYCIQCt1znx6vk2/Z85DGG5YKn0CBN0w1TBhqYgTWucjLlSXAIhAKkU+9MXLRboRnlLLcXumxhhim6h+pTydcRs6iuuO/tV","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":53108,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgtLpJCRA9TVsSAnZWagAASx0QAJ82kWFDAexl2yVA+/JP\nNbQN0MjVGz3ocA6G+eK2h2aJvAj+IfeFthxAVbw8t3dLscQaX/Tx1bVu/Q1g\nxmgzlD81O0fHuh6AVams45s7VxzA5gak7SiII7I2c0AQdi381yLmLiM7PjEO\nGEVM3vTN6ZOpZNDf6qePz3gVPybrcFcPeMl+I4RNVJX/OjIP6VcE9S10V1IH\nWWTg4A1ZqZORZrBZZWm27iuCgZNmNrBS9gzpVQT3qStPT30j8Tifu881Jrv/\nfz4HVAqprWjTgJxEtIhKZ0RlZgL0Ch760VwFykJce4vGUEAgRft+9mX9Ip4Y\n+46LBqVlDjL23sxDEYJYO9w9I9CkbYSuXFKP6iOmRnvET5bR+pPzV6KJupAS\nALQcL7vC6jBiaAhsQATrdHKpzb7pnbXEoD65U5PqWMHaWSRGCzc5o4+0xmy2\nnCwlsOtog9y9qVk2ERG+PD5+d+JONHIVauw4jCD5Ods1h92Hh+GGFc72KbZ6\nfVApoGkzJNTkTMR4fuufrkWxTYYn6rH4uLaF6HQijQr1uKqXqGDrikF77cBb\nZCxbpZoa+eeJM0CVTWqfi2zQC/Ll2P3I/qamcDIZMkSYkfWO1PL9MVxqta0f\nV6EdE2+cK8v+vZYWwuZTJ9V70h/9WMGl/Fblk4QkvzclWl5ok1Iw8+KEhlDg\nK3xm\r\n=3f0q\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\n[![Publish Documentation](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml/badge.svg)](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml)\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"ed10b24f7ae2a7926c7842a2f9c899b693756032","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc -p tsconfig.build.json","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["npm run lint-fix","git add ."]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.5.137","@balena/jellyfish-logger":"^2.1.95"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^27.0.3","sinon":"^11.1.1","deplint":"^1.1.3","ts-jest":"^27.0.1","typedoc":"^0.20.36","depcheck":"^1.4.1","typescript":"^4.3.2","@types/jest":"^26.0.23","lint-staged":"^11.0.0","@balena/lint":"^6.1.1","@types/sinon":"^10.0.1","@types/semver":"^7.3.6","simple-git-hooks":"^2.4.1","catch-uncommitted":"^2.0.0","@balena/jellycheck":"^0.1.1","@balena/jellyfish-config":"^1.2.7"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.130-renovate-internal-patch-ed10b24f7ae2a7926c7842a2f9c899b693756032_1622456904617_0.8205095368938102","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.130":{"name":"@balena/jellyfish-plugin-base","version":"2.1.130","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.1.130","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"ba48df6c34eea51d68de4c34bec2ac7ef45e1660","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.130.tgz","fileCount":18,"integrity":"sha512-fcNkjfkswQlzsqEMCIOZzaPMksbfLwgAC+UO6SaXJ8MbzJuQMN+wcXzi+1oQ7/yNItnwqWFvvW4xZcetrDzZWg==","signatures":[{"sig":"MEYCIQC7Jml4KyNgwuI6p3cvLkROMhqJrFNpptgMpA2/Uw++KQIhAO287BcSNallhNZzq9Y7o0B+/PKYbR8BXgG61Fos1i/i","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":53043,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgtLsPCRA9TVsSAnZWagAAaOAP/A4aWAFdRgS7VtxgPX23\nlWfYiKb01EK43JreyHQRtIuf8sLLj6B8OqW4ydJU8to4xnUk3SHNpE7NkLMf\nA7zjhz+gzJ4Yo2HxM5guUSPd2/bDwCGaZJWRZWqtpinsBVDX9KJUbWJUnL9P\n1ZBYwgTa9OgkS0BofgoUYsrJCOtbg6QcGbcZSUnW/kux/AjehczepqQYX0Dt\nUTRpyRlRoNmiMc/90wjuZQwMnN5ItBCt+3stJRxklHE6Dpb+nKCEeRkQw8ks\njMBY8HOMcihQmRHlcJCzzgJLYYbZQ+AQWglZdBTjReYsliJeG06/WKdUzf9K\nzr+gcPNszm3ky9miwkAkOa2Gpd4CmmANiqV6aGpr95+Bv70XkQW0vrDniq0F\nA0u5C2i8ptycj8lygvGefTdLSZNTw6MQLpnS/OL6W7K4irQKVkRsc3ElbHmZ\n6h58jh915DpoS8Y0NG3r3Ttsuwqt/eqyPqFPyC4hqv3LQiNQOSp1uaOvrQUC\nVNPDc51ZOB+xICaYh6FuGXOJoFYvuhg8gqRzUVxrPbcmG6sHXvs00WZDHPOA\n23F2bfxgpGSbg/dKwiz2T+ZoZ6z9pYUTWO/6llTcCS9Rl4acQsnOazX1eAEZ\nrxXEqb25+PHEPbRSLDf0z9SHDKE99p3KIK7SXdtK5PdKubu5LnLDt0N99qAa\nZJgI\r\n=c/9T\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"72752f37cf390d6ecc5b2e3d7b160950be868d08","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc -p tsconfig.build.json","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["npm run lint-fix","git add ."]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.5.137","@balena/jellyfish-logger":"^2.1.95"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^27.0.3","sinon":"^11.1.1","deplint":"^1.1.3","ts-jest":"^27.0.1","typedoc":"^0.20.36","depcheck":"^1.4.1","typescript":"^4.3.2","@types/jest":"^26.0.23","lint-staged":"^11.0.0","@balena/lint":"^6.1.1","@types/sinon":"^10.0.1","@types/semver":"^7.3.6","simple-git-hooks":"^2.4.1","catch-uncommitted":"^2.0.0","@balena/jellycheck":"^0.1.1","@balena/jellyfish-config":"^1.2.7"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.130_1622457102903_0.6154037467457123","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.131-renovate-balena-jellyfish-logger-3-x-04eb73516223b4bf0f936022546a995d059208bb":{"name":"@balena/jellyfish-plugin-base","version":"2.1.131-renovate-balena-jellyfish-logger-3-x-04eb73516223b4bf0f936022546a995d059208bb","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.1.131-renovate-balena-jellyfish-logger-3-x-04eb73516223b4bf0f936022546a995d059208bb","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"2445327c0417d26d5bdf7079a2ea59d594182840","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.131-renovate-balena-jellyfish-logger-3-x-04eb73516223b4bf0f936022546a995d059208bb.tgz","fileCount":18,"integrity":"sha512-6+jzMKLoTtEv26jizjrehho8SUeXO43ZQnZTgi5q+C93rGTGVYajjdNbbuR8sdmWViR5+egoP7LbM+r01IS+Yw==","signatures":[{"sig":"MEYCIQCzwE4gy020mV7BWt1ivQAEYkSY5i/jRvGOExG5nY6lXQIhALVYPPcKBt53i1Fvavno3PdcnRTXTjMLKFISQTn4DV5V","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":53219,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgtLvcCRA9TVsSAnZWagAAvdwP/3xAzS9y1t9BnzkpwUI/\nHHsofHM2vLLgNSYLAUn0PAk5A5CY8wNxAvtLxlbQa8iETo7+roXN+L1dFjJE\neQwII+dmAFw9kENKaOPu+c5VsDs/sYuuqMWdTM1VO43QsOY8MxJircRLru0V\nNFxlRcMxRri39/sqJk6BwIfOwjzBO7DQ0uxmI+bS4r1yuachjgYsa8W0BpZw\nXOGnUu2769wclgbJzS+l5c3qH4hYjOvU80Mgpnhtd26GvD2vQIeuASrKH+8P\nrcwstOh0OvMupV/egkhG3O591U0+ji0M5qTu8oaXyIeMUC82+Mayp8JeaOzm\nRlZ2ho9Jnm/X72+6Gop2jO06TJjGZW4JeBzGpuwDz3uG4YH7Rgql8nGqNe73\nE/dPUvyUJIHcGYK9GY/UcoBzY9vSFpLaj5R5XIdxb6de2/ADDOSDFjxVtzT5\nGIGoxsYoJPmUagHQ1htkwBt6G59q5ULD4ZTUblvlsP30mc5uc+r0ug5Bt5tC\nGRpQmYvSwqsUqHaLXITrnI9ztpL7H7ocIFni3sVyrw0hQl05ju3K8vDugdD0\n1u0lSIZRLlAol4689VXzHbkDQ4NklW6ijxq5YeE8oMlfq5fYizT4KGQTd5/V\nkInbZGStUhvGgj7+yxM+5MWX6DZc1zuKrlKeaJnTYs3zhVq2sSiPiZEVXwtR\n81mK\r\n=oxuS\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\n[![Publish Documentation](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml/badge.svg)](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml)\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"04eb73516223b4bf0f936022546a995d059208bb","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc -p tsconfig.build.json","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["npm run lint-fix","git add ."]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.5.137","@balena/jellyfish-logger":"^3.0.0"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^27.0.3","sinon":"^11.1.1","deplint":"^1.1.3","ts-jest":"^27.0.1","typedoc":"^0.20.36","depcheck":"^1.4.1","typescript":"^4.3.2","@types/jest":"^26.0.23","lint-staged":"^11.0.0","@balena/lint":"^6.1.1","@types/sinon":"^10.0.1","@types/semver":"^7.3.6","simple-git-hooks":"^2.4.1","catch-uncommitted":"^2.0.0","@balena/jellycheck":"^0.1.1","@balena/jellyfish-config":"^1.2.7"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.131-renovate-balena-jellyfish-logger-3-x-04eb73516223b4bf0f936022546a995d059208bb_1622457308102_0.3450980071987586","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.131":{"name":"@balena/jellyfish-plugin-base","version":"2.1.131","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.1.131","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"af9ecb980d76e2fb17a11c60ded1292dbc421de5","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.131.tgz","fileCount":18,"integrity":"sha512-dzPV8tbmGZkw7guqB0jU0Gh1RktgdIHx4Dx+PsBGhCc/P720KR0uQKoMXhubf/PjQOxoevCK9Pi+DQi0kD34Lw==","signatures":[{"sig":"MEYCIQDepqH3yYluQPu4SpxWwnoOAvFKAGn8yaJ4BgW1ZfslRwIhANrQ8SPnTMyg/VsyLRzYgBi+gQp9JBokWJm9f3VTc9Fy","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":53141,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgtVLXCRA9TVsSAnZWagAAoN4P+QDkRZswdyARnaXTd/BU\n9BFYQbDsUsMN3EOe/1qYW/JWZ+RD8TFX8LfsSB1uiq8/GY4EBOF4Dt1PblrT\n+Vss7mNDd8/tSBRd+3rsfmE9tBSL+451bN3Npd1GfvBsr8QuwEbih7Z6Hv0C\nsSHlClK+BK3kGXj8VNR/fxhDyoJVotqgc5K+QRTYMCO0H6/ZALQdu79NGiE4\nZalRdtzscOVtrjyEPuOUawGz2BHlVvi1ZdGQbxKSB4F1qI1BQzBIdxLcbKd0\nk0kgpjawn4Vyf+5lnJY30QYeg3he6TnxSc25fpLIFp7K5SrFQccuC8tCRnXj\nyK0+QZ+MMMgIQ3NoCATXaoPEg6rSNRPx3ZjFSdIHguJkYvyxh0ufbIkq9UFF\ng+6wA2n37G2XuICK7Ac67N2j4iVzdb4owotiIs8uN0yrda69jx2Ceu6ufgc9\nSECd7MiwJeBf8/F1+7DkDrQd+ycNSxZcyXyLkYEaxOFRhEgidWAg63RqiNxW\naTC6JQwJwBQmHv2LP6qtabopNMqAzHG8BYGey8n+qfu8LQu3WuiI9GMG3LoR\nR1W4v9iptAABal8oH7hW9fBkSTZF/sZwmCA1PTfJopFYEif7ytJlhtthC984\nkVmfJsibW4UrPjHKVsDO/Qe+nCLxonPSq3W7SYiuLzFEIIQ2W6W60uRG6+og\nu6sD\r\n=oZ3y\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"46b3be3c0470a7ead0a174520495cb88aad8ffcf","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"catch-uncommitted --skip-node-versionbot-changes && npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc -p tsconfig.build.json","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["npm run lint-fix","git add ."]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.5.137","@balena/jellyfish-logger":"^3.0.0"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^27.0.3","sinon":"^11.1.1","deplint":"^1.1.3","ts-jest":"^27.0.1","typedoc":"^0.20.36","depcheck":"^1.4.1","typescript":"^4.3.2","@types/jest":"^26.0.23","lint-staged":"^11.0.0","@balena/lint":"^6.1.1","@types/sinon":"^10.0.1","@types/semver":"^7.3.6","simple-git-hooks":"^2.4.1","catch-uncommitted":"^2.0.0","@balena/jellycheck":"^0.1.1","@balena/jellyfish-config":"^1.2.7"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.131_1622495958967_0.02392179393889382","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.132-remove-catch-uncommitted-21aca14f0cc3e8cf3c86fcbc552a48a7486a348b":{"name":"@balena/jellyfish-plugin-base","version":"2.1.132-remove-catch-uncommitted-21aca14f0cc3e8cf3c86fcbc552a48a7486a348b","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.1.132-remove-catch-uncommitted-21aca14f0cc3e8cf3c86fcbc552a48a7486a348b","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"b007abdf014c5e0f465890b1632c684103b47c9c","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.132-remove-catch-uncommitted-21aca14f0cc3e8cf3c86fcbc552a48a7486a348b.tgz","fileCount":18,"integrity":"sha512-kkp4DT9OkjEDogFkuZgbCXSAlhhH72AdbN8ME5ie9yDLYUGyDQnEVcFX5x7tqbqkZ1OXSH7igRWJerrXfaw/mg==","signatures":[{"sig":"MEUCIEnH/dRHc+ohhZgufNm1Bpy/cGddsnlQBOKFjsF8bdsKAiEAjMonpYuXLvB6V7ga6UYKncYLNS2XlJXuJUuIljQj2nA=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":53200,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJguBwBCRA9TVsSAnZWagAAV1wP/2vcjqlz3CQjYF9gVXy3\n71v75sthckgZrGI3f5bpZ+/5X0/L+AB/KSpTcI2/EdV7GOQpN689aWYO+UQY\n2YEUfLe6XgeSRXrZwo+yO3yQGn8/XV9iTBcDq6Sqw31VhZRNoVkO839db3ut\nLl2QC44iSw7dD4EY2+p7w3rt5uI+Nfu1G4Unmzk9MofByr/EGErGij9ULwzz\nQOb8icLXtibXaDtF7Yfbmun80dzQzDTssWPSR0Y3/VTVPkXiH97DwWJy0GwQ\np0h1EVttcGNVekotxoCNKifTehsvgNa1ZzVPbPAr/J0mzv2dho2Jeo1ORBQr\nrEnvKhBsWr+DcusX+eWCPlCT53YZK60sccPhJ2dMJEF6JHM/qB/WOeElbCk6\nWR7MVzogeQYMFgUmfSOC9toizog1OJYy9zrSAlguL/dkwg5FFsLTMFT7ynYx\naMiFpjVwpGkzi6hnF7KYe3X+7QqYOnskgZCiswsBCp981Ac51BbBm9W4ZwUA\nKeq3IiL0MfQe46eTwrZyKX1rTkmMOE80eOBOjhO0KMh/oQi0+kefMMxf8Se7\nYzXYiPWKUbzeYG4gOdDV4p0OJnlvbRY1DJD2TeoKy6er8B4wu8yIwtmIPhF9\nJpnzUQaKV+cxNl06c8MDhIJRvlNQnlbtIg4CY+OUdwlQcajea+Mr2e56zHxY\nkH9N\r\n=/rCb\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\n[![Publish Documentation](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml/badge.svg)](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml)\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"21aca14f0cc3e8cf3c86fcbc552a48a7486a348b","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc -p tsconfig.build.json","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["npm run lint-fix","git add ."]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.5.137","@balena/jellyfish-logger":"^3.0.0"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^27.0.3","sinon":"^11.1.1","deplint":"^1.1.3","ts-jest":"^27.0.1","typedoc":"^0.20.36","depcheck":"^1.4.1","typescript":"^4.3.2","@types/jest":"^26.0.23","lint-staged":"^11.0.0","@balena/lint":"^6.1.1","@types/sinon":"^10.0.1","@types/semver":"^7.3.6","simple-git-hooks":"^2.4.1","@balena/jellycheck":"^0.1.1","@balena/jellyfish-config":"^1.2.7"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.132-remove-catch-uncommitted-21aca14f0cc3e8cf3c86fcbc552a48a7486a348b_1622678529048_0.2103965269254131","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.132":{"name":"@balena/jellyfish-plugin-base","version":"2.1.132","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.1.132","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"6af782a2d6e8f23dbfd5c33c4a9961ffa04a88ec","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.132.tgz","fileCount":18,"integrity":"sha512-YWphWF3eScuijxRamWnYoEF2YJH5d27TjmQHgAajm2VHXtcsQHoTAxWN4ZgW/AvzTw6+ypLO+kOiZNf37Frweg==","signatures":[{"sig":"MEYCIQCxEw9BcgYi/JCrYMfkE0yQ5ZTYwxf/o0vOPMrHkxHksAIhAJ+pT60auZgOVT0IKPRbNA5OPdH0HKD1+BknBhwfc2Bn","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":53134,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJguBytCRA9TVsSAnZWagAAKXgP/3hdEGaVTxXa5kQyTmZ6\nLKdhLcC6ZP5WVS40ILHNrLytsub8C8muWNP6jQZTZLYH1lUXIWSYphky2DfS\nZBTNmdA86Sz/XBgO80oxRoRIi4UBG+Pz6YiEil6lqsbzYiKogOf/RdyanEHH\n3mvbj0NerR0vozag9mrn9j78LRqM970T1WmuJ3tcuY9zI4tdCeygCa3auzWK\nOdk22sFa3jqYYkWWguRYGwXQcDAAVocWDGYQg67BBfhrF0A+yOXXj1Ga+lmy\nAukVvyfmWBO+14aoFLnWgiCAFofJDq0YDzVGvZE5x0DpNwB4e4J5JDK+j5ux\n90WT4KjHVeRnG8/AAyjrlF6IRaEmlFdeUcb7Mib/SLG1gEG+wcUOlwrIUgEj\nksakxIAUJz0fCCp0Bp9a78pNWDDZQJ8as4OCcEskfO1kcxBFbzfGC2Pw1Aun\nd5Fq7wtk3MqZSmiV366lynG2spsSOkZR/LvLIJIZ9pFAiDFSGi4cOKQghtjF\nHqTc7OVn3XNlxpEJFRAX17h02GMjHe/t0RPqKTLPF/ze+lSeU36oQLzdB3gN\nNt1q8XviASPs8ekqcTvez3OjMW/BmH6CevSo53UCmGIZk9wtezajoSMIvHJ+\nzXPY3dLbLHfIU9L1n7utd7li2biEbR+jcg0RQvFGehD7SC22gP03h7RSZMcD\nvT6G\r\n=aoPw\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"610d2c1fbb56d20cbcdfdb255caf942a09f2331c","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc -p tsconfig.build.json","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["npm run lint-fix","git add ."]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.5.137","@balena/jellyfish-logger":"^3.0.0"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^27.0.3","sinon":"^11.1.1","deplint":"^1.1.3","ts-jest":"^27.0.1","typedoc":"^0.20.36","depcheck":"^1.4.1","typescript":"^4.3.2","@types/jest":"^26.0.23","lint-staged":"^11.0.0","@balena/lint":"^6.1.1","@types/sinon":"^10.0.1","@types/semver":"^7.3.6","simple-git-hooks":"^2.4.1","@balena/jellycheck":"^0.1.1","@balena/jellyfish-config":"^1.2.7"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.132_1622678700900_0.013255006363800836","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.133-add-translate-options-b608bc70e171274e460d206b7800a3648259e21c":{"name":"@balena/jellyfish-plugin-base","version":"2.1.133-add-translate-options-b608bc70e171274e460d206b7800a3648259e21c","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.1.133-add-translate-options-b608bc70e171274e460d206b7800a3648259e21c","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"39c2513d6a3b227901731f58bae617db36b2474d","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.133-add-translate-options-b608bc70e171274e460d206b7800a3648259e21c.tgz","fileCount":18,"integrity":"sha512-7+OljYVKiE2W5V8Y5DQ9PEEtpx8ii/eS+cEKGJU8ATkeyllGJkAsS51Z1HFWo9SIoCHTCkZKljcVqVQI1dCVeg==","signatures":[{"sig":"MEUCIH0XCfVxR6isH1pVZ4M22xWXqk4M9lU9lLGPdm7f8MbcAiEA6dXYfhm/nsm7w22D4Zz9yGE/ZEDwvacsT66lGuX6LKY=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":53390,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJguIclCRA9TVsSAnZWagAASeEP/1ONpDEjqiwP4haEBK5A\nXWTNDKmTCe4kgMRc0FV/eM/4ssVM6SvpLIIVUwhEhMjowh6/u3ODh0folVx3\nM2gV3WsKEcDWyCZhGaMe0LlgHtG0W4YJ5GXIupPzxvb1UXNT7aS+dTEmGMra\n8MYDbsXSzqPbOaaRUWwYoaA5bjuaz+fxlqW6oEwhxchPvqyA+7gt+MhdzjxS\np4vIRD0Z5yOcTLhnw1jYOb9Zu5tqoIB+yhuc/amHANwVCyF1aokU67GuobmD\nFkY9bPzPGhexLUjLmqhbhoYbLgTPc4Vnsza0J0teo9mFPTayD9Nl8K1Z1IG8\nUWO27Bs7vui2cCMZMq5Gsi/8WSzxsELKZ/WohfFUxZgkYEVeAevtDI319gq/\ndQJpXydvKYqp2876RNU8mlVhHRf260opcKN/VvamT814rx0nibflFWI3DIWP\nuMFYWM9vDahYAcGxKeOLTPeAPWqTY+CxsMqhiWewlxz9/Ozgt363T/f5c8df\nGirRqG/+5aCSRD0c7BJAlUpfflto3paBMW5fRmxcNcBsFUMMn9BFADs2ZSbB\nZi+ipYAFNva+bJ43wKU8gdBO9Kb/1C712nD+JKjT089XsX4g58cEGc6kh0Dp\nCcpdSaO94+O6FDAKUYwXTa1XWDtIr1HEFEoBaarfN54jHF3QH7FuzLqmO8NQ\np14F\r\n=f5wG\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\n[![Publish Documentation](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml/badge.svg)](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml)\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"b608bc70e171274e460d206b7800a3648259e21c","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc -p tsconfig.build.json","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["npm run lint-fix","git add ."]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.5.137","@balena/jellyfish-logger":"^3.0.0"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^27.0.3","sinon":"^11.1.1","deplint":"^1.1.3","ts-jest":"^27.0.1","typedoc":"^0.20.36","depcheck":"^1.4.1","typescript":"^4.3.2","@types/jest":"^26.0.23","lint-staged":"^11.0.0","@balena/lint":"^6.1.1","@types/sinon":"^10.0.1","@types/semver":"^7.3.6","simple-git-hooks":"^2.4.1","@balena/jellycheck":"^0.1.1","@balena/jellyfish-config":"^1.2.7"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.133-add-translate-options-b608bc70e171274e460d206b7800a3648259e21c_1622705957792_0.7168091706013673","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.133-improve-lint-staged-979b8ebaf95fbc7f8b3906a7bed7f85654269271":{"name":"@balena/jellyfish-plugin-base","version":"2.1.133-improve-lint-staged-979b8ebaf95fbc7f8b3906a7bed7f85654269271","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.1.133-improve-lint-staged-979b8ebaf95fbc7f8b3906a7bed7f85654269271","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"ec8600c95c6de8aabfe864af288392a3f538b7e2","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.133-improve-lint-staged-979b8ebaf95fbc7f8b3906a7bed7f85654269271.tgz","fileCount":18,"integrity":"sha512-6fwRdw8J/8pP0j4WxUEv0vD0PsIhNuSllJBbk+8Mzl1Ah2G0+gkskLkcpjTwaZMsu6CMIahVZdaIjZmxC/3l2g==","signatures":[{"sig":"MEQCIAXem1g32M2Sere/HjmcPtwjlG0DBn9KYNH9sWTekpOQAiAyhmoQM/XZJaRipzTCsAD2peLrRgPOcXoP2Kb4dpGkLA==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":53247,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJguWdJCRA9TVsSAnZWagAA0M8P/jpdYyrsc0EzmNrzxuUh\nb8zUnWYdFTvhnYOAYdVi/n58I3KKxmRfRg/nb4WT/Qe2/P5YtU9fLq1U/IvT\nK7PGbg2WVGbu5vAbGMUI9LY9X5yYro3QXaA6aiZEVC29+drj3tLhypDghsMM\nLuUswaVQj9dILzqcfZqIGdUfh8N61oYEsNW9oYbE0nWrC5flSM1Ka4JFfCH5\nz2CtFnQmaxBCGpB0kiGJKykhgkHQfQtdevlwJbFDfDuNiWPmbBvDbbnHGsT8\nJrNOITUILyQ+OOvmsaIVrwLhihQGE5uTbF0DxnbaJVryz4ZR8C6bS4V8p+Cd\nc7APHJsn9EFvxp/LOeXT9mRPWKWmF8Y9FuDV3nSVogu/mQLliuL5xkBymxeX\nJyworo+MV41Dr3cipNNO1Y05I3yifcqNbKa13wf5pbx9tK8kKqSQsxNaS+Uo\n+ybZqEm/b3dPPRXZpQvzwa4LHnZF15DruQS85oEmmtln8NwlNrj4fGF7dn8N\n5Jop7jXSY5wncO+LaCq+KU98nNyV2iPsBtaaLe4IrRoFtcXUgzdyVBjxHwrH\nnlMH1Wd1iWNnuHfuJFDjxdRK0OgVCbSNTZFV0rvz9kqFystEm9DglX2X3uC+\nwTI2/RA9lwDO2EYNjSAaFt5do9PlA8OtKGSoVJEuqyNt0ipiYYRJaDeIf8bV\nbIje\r\n=ZWVq\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\n[![Publish Documentation](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml/badge.svg)](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml)\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"979b8ebaf95fbc7f8b3906a7bed7f85654269271","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc -p tsconfig.build.json","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --fix"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.5.137","@balena/jellyfish-logger":"^3.0.0"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^27.0.3","sinon":"^11.1.1","deplint":"^1.1.3","ts-jest":"^27.0.1","typedoc":"^0.20.36","depcheck":"^1.4.1","typescript":"^4.3.2","@types/jest":"^26.0.23","lint-staged":"^11.0.0","@balena/lint":"^6.1.1","@types/sinon":"^10.0.1","@types/semver":"^7.3.6","simple-git-hooks":"^2.4.1","@balena/jellycheck":"^0.1.1","@balena/jellyfish-config":"^1.2.7"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.133-improve-lint-staged-979b8ebaf95fbc7f8b3906a7bed7f85654269271_1622763337611_0.2103400426190738","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.133":{"name":"@balena/jellyfish-plugin-base","version":"2.1.133","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.1.133","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"03620814e38774efd0de3363883237b4a62e7b0a","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.133.tgz","fileCount":18,"integrity":"sha512-l9X11XwfIJt+Jz3cB/3gnnQJ/nQ5g2t1qgaDkgz48wWFOy24EevjPqWC+avdG7Z8a38OmESkndIaIk7+r1JH0w==","signatures":[{"sig":"MEQCIF1cfm79FLy6cBa9LLp3bBQG3XTj5dLfSN8hIzPBryTPAiAoA671BFEKzqn+u8BzHNNJu0lFFc3uT8evZJ1BLqb5hQ==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":53186,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJguWgKCRA9TVsSAnZWagAASp4P/297exMGZxxVOLYHz4tQ\n8dq4hhkUT27yxArzCwCdQNQFgdPdySHVQe3qLyVxKqPJeGxhn69rlCoXcFzQ\nyaQS7phsXO03+R47hsDLxRtuJSwwfsWaS5UM7KFLyhrB40AouvUa9BVXd8bn\n5uwKKZkd2/IMgj9KTSvr2WrgAWgVJ7U9BWrXO4Y9DutS58ZBfm94uyPsU9v6\nJi1ScXShiyIRUwWVS5CNtyUtqJ+ulK/WtvjWIyYO/leOMSWPjs3W9S+DAJqP\n5v7v54vSD8mhbzvlRU0kFyNA9XMwd8TXXmgrwuFyZilV0++uYOIxHegv0bn2\nC1KBsRqPLrNnX07EhacTfr65+t/XGdGtGydp3rbHBGEljXi75jX/VbJcgdCW\neOnD5tDMoE8p7aglTXr7cAcSuOrbGZzbbQJgPHBUWswTzqiaIarArCWW0MeO\njZA3a7g17Dzyhx8tfOXW3na+hx+4tk1Qy+85SIiV7duRyN9ss3o3N7sgO41m\n0+ANdaMuUOvwojI0uaFFaHAMHu7FSZSpW8rhJXhRHba0iRrgWtypNDZMilqG\naJWFpMm8/Vb4DXZPGZFE/LCaB7XwtssaMmQwyIZOtsnMt2wzug5aq1RlMmPU\naB5MlrWMoNRQLLVkA/ugE2dCITfQ7E6OL2bQmmnhKFNlBOiXhhFFsWZHp+a5\n6MLw\r\n=oEix\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"f766e91166930aa578f390c15649ce9cffe0e7b2","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc -p tsconfig.build.json","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --fix"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.5.137","@balena/jellyfish-logger":"^3.0.0"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^27.0.3","sinon":"^11.1.1","deplint":"^1.1.3","ts-jest":"^27.0.1","typedoc":"^0.20.36","depcheck":"^1.4.1","typescript":"^4.3.2","@types/jest":"^26.0.23","lint-staged":"^11.0.0","@balena/lint":"^6.1.1","@types/sinon":"^10.0.1","@types/semver":"^7.3.6","simple-git-hooks":"^2.4.1","@balena/jellycheck":"^0.1.1","@balena/jellyfish-config":"^1.2.7"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.133_1622763529793_0.7100243046458508","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.134-add-translate-options-a801e7f9dedd6c68e511358f0335222e0c4dc606":{"name":"@balena/jellyfish-plugin-base","version":"2.1.134-add-translate-options-a801e7f9dedd6c68e511358f0335222e0c4dc606","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.1.134-add-translate-options-a801e7f9dedd6c68e511358f0335222e0c4dc606","maintainers":[{"name":"nucleardreamer","email":"nucleardreamer@gmail.com"},{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"2b88e7dab34725dc392bcccfc5290a2ddc676732","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.134-add-translate-options-a801e7f9dedd6c68e511358f0335222e0c4dc606.tgz","fileCount":18,"integrity":"sha512-7gFC2yhtC1j6YnIaN+aCQYU1tWpYnA6S1O4q2ql5ybFs5oy9xTv09obNEUskLb6rRK0WzpBPrwmwGHtCUfPn5w==","signatures":[{"sig":"MEYCIQCTVBa/LD5S8KOoBPFoL9he5b7W0k807RS3FfAvWqmsdQIhAObXBkigBn8VQ2hJif19+RGPuq5u4mp498CqalZeBAJj","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":53442,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJguvkRCRA9TVsSAnZWagAAtGQQAI5IXrfdrqAU/DDj66Tr\ni1qJFpsFZnfLo85VpyXFmYeC3JJakJCWWUTIYA0lG84OIXRPtJ/Q1Q/LviLS\nzvS68a5+7tpcUoIuA3njmd3b/vZBTAN54lfSIv0HyTTsIUVmw5Ta28XgHNrX\nwT7bawqEGSAzHH6ybam8SnOPKJWwZ1zH3uZZYrfwIxNP33QQQSCGyeJLcgAd\nSvRyi/OJ5FKbQuWAc3xAg5NcAjeDAftPs+WLC5pA5B41YL1XuTX5fTz7A+ZJ\nyDziScEj8cQ5fiYrxPG3iEy680yuH2OUn02APVjKFZyLwY5K4ghq/q04gwCa\nn1DPGp8/tBHP7Z4BJW47+n9XqmLntf14cn1uUf1TD2+7t/p6OTHCqTEq32L1\n5MFGW9FD8uhaAiokwu8oeCzB0FuAsZyqAqnIpH9V+Ub7bCUekb4jA3zwFLeD\n3aJ31NfHBTrPSQwTz2m184XTQ2yWtxfF8vqrRMcyxoGexhZ+h1dEprSroNN7\nKond9/9CO0ad78oEdI4npFSastdoU+7tmemKhQb4hsIauDOkPEPZ7G6JUSeg\nmtBsf8Q8NKD8Z45ZwKCM/gYAik9WS2rflIZLEkLGEPeLl/QR03V3tarwAsud\nJEdTWfg/W5Nj4C/Zt/Vndi6D2tVOIgOJZz1vI7nlc2DB1dXKMQXK5oz2MUPl\ndWbR\r\n=BEwa\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\n[![Publish Documentation](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml/badge.svg)](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml)\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"a801e7f9dedd6c68e511358f0335222e0c4dc606","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc -p tsconfig.build.json","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --fix"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.5.137","@balena/jellyfish-logger":"^3.0.0"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^27.0.3","sinon":"^11.1.1","deplint":"^1.1.3","ts-jest":"^27.0.1","typedoc":"^0.20.36","depcheck":"^1.4.1","typescript":"^4.3.2","@types/jest":"^26.0.23","lint-staged":"^11.0.0","@balena/lint":"^6.1.1","@types/sinon":"^10.0.1","@types/semver":"^7.3.6","simple-git-hooks":"^2.4.1","@balena/jellycheck":"^0.1.1","@balena/jellyfish-config":"^1.2.7"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.134-add-translate-options-a801e7f9dedd6c68e511358f0335222e0c4dc606_1622866193352_0.5722020761282427","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.134":{"name":"@balena/jellyfish-plugin-base","version":"2.1.134","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.1.134","maintainers":[{"name":"nucleardreamer","email":"nucleardreamer@gmail.com"},{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"c8567d666f567272e47deca2013b0a881489a545","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.134.tgz","fileCount":18,"integrity":"sha512-Rfo7F+9m1cieJDaTTsw5qRkgxoKn0lPrH5CIokFS0Q+fhKUpZovM9zlgWa4fnZKkGdo9U9rZgrPeUJ6OSUZJww==","signatures":[{"sig":"MEYCIQDjItzvoiGQCYFLNKbU2QUeJfbf6r8wqJ6DwljPYgQtNwIhAKWyrkcs0RCWbGGhGP/uWug1j7XkJiJ9R6g/YBWiP4LM","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":53379,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJguvnJCRA9TVsSAnZWagAAhBsP/0vPM3dKE58Y+NVU4Ugs\n/arhxjeYMqg5eS1jn6qpdlPCzL11voLrgzJfc5uwZ+kNAjbN9G7+huO3Bekg\nOKAwSpcpU04xQD8TfLdHeQEnUWM6aELMv9FDdCqJpHMyrY8Qa6VyTDoNdiD9\nDLWiu5Q21OcJzPrfs+yNLjY+Z4jhv99+sFGC03xVac/AuI15Xj3g72K20kSG\ny2tRQectGZL46w8ZnxB1/SeOFDMvEM5b2PmOkmiQ7lbVKuGikrffYjprXD2m\nMB/BD/QVUH41gLyfIOV2H0g3vandBP6NJaYjmaIRXJ1yeC5CIfaGpLw9CWp4\n9sySI0+SViVJfdKC3t37R2zoj+RTKcJcV0yIBQ6ADaPrz69fg66FukdOezNT\nWGCa7yB9fZgKAwVuWp9bz6ByfXj3LOvz4wz+778u6lBE4rg/p3WCwp3t3pPQ\npHYB55jTWcuZMM1gm6xCEGE615wUQqIOcByhAym3KeqKkVXEiMNdOxCj9Oo6\nRX58pIXIrIXlL01bfOTpJs2fx2fCclyNBH39tjOtdPq1TPQ0SugMWpJ3LLUZ\nwAHG5UxAJYy2uxlbFNZ1e5ndtitE8JAvdA/0WZlNv5CDu0SHvu3MOkGJ2wAT\nLtnTncx3ycgRB587SWJKv2xsAAUH3H41hRotuX2wC5zEOpowEfd9jgMyOFb+\nz5Tx\r\n=uRO5\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"33e2d38326c88bbb5d66a17d78d22d477867d0b6","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc -p tsconfig.build.json","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --fix"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.5.137","@balena/jellyfish-logger":"^3.0.0"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^27.0.3","sinon":"^11.1.1","deplint":"^1.1.3","ts-jest":"^27.0.1","typedoc":"^0.20.36","depcheck":"^1.4.1","typescript":"^4.3.2","@types/jest":"^26.0.23","lint-staged":"^11.0.0","@balena/lint":"^6.1.1","@types/sinon":"^10.0.1","@types/semver":"^7.3.6","simple-git-hooks":"^2.4.1","@balena/jellycheck":"^0.1.1","@balena/jellyfish-config":"^1.2.7"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.134_1622866377676_0.412486199566787","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.135-renovate-internal-patch-eb936b3d463282fd6450d943d651de702ef2f6cc":{"name":"@balena/jellyfish-plugin-base","version":"2.1.135-renovate-internal-patch-eb936b3d463282fd6450d943d651de702ef2f6cc","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.1.135-renovate-internal-patch-eb936b3d463282fd6450d943d651de702ef2f6cc","maintainers":[{"name":"nucleardreamer","email":"nucleardreamer@gmail.com"},{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"7cb7bfdcac5c55554d380d567695da427a325ca9","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.135-renovate-internal-patch-eb936b3d463282fd6450d943d651de702ef2f6cc.tgz","fileCount":18,"integrity":"sha512-wkea56uDxM5xjUblUvqJYO35kv6rHF6is+HApfLp+dSJqfsrUBOPobso2zuWpUVyQ81bBBFay07GHxLHv0VFoQ==","signatures":[{"sig":"MEYCIQD2dQMWAVbRdbOp549shtCcqKivFPLcYRWPrCZ5jf4qugIhAO00Mq10PSJqEJ5W88CETdz6kc0skHfDCpD38ykYG036","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":53547,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJguywnCRA9TVsSAnZWagAA6M0P+we6VUGUo6m0mxnwHeOf\nMSXaY+M40FCjv5/1GzXTkgA40pNe98Yf4B5JUl8vTj18cDeOecBdp73dxrap\n9y0fCs75vrHA//3Pu9CMR9UhKLuUk5lCiAT3UZHcFhIBRGEC2s/aJRo/XmhH\nGavlRoJ8rYN7CjsTn6RCSIHsb19+P8mnz70y/hCDTnSNhf0rGHQyfF9hAbUy\nlJ0jrTTfypkXXOCLP/aQjy8Yn+gMp6sC/bHPI+opcRGZ4ABzEAFLTaJNv29H\nLbvcczlLSBDbnnaZg8cfoVGw383yZhHnF89m88f1ACUeXmH50UWOQeibHFjV\nnJlmISw4DApE8Qsi2UuoIavg/I+Pz2uvMa3Q1t4h4AO3gaahKOp+f9WUlNUU\n/DhDxTW5BoinEAlBHDAdbYcTTJdBXUIHI8IJwv6XoQSsoxUvSn7y+HVVcyGA\nDS1jWAcu/J2eab/21XytiCee2asvQH7VK3xGDvN7H0SYaYIs1NwKmY79++6r\nkRKbUMfpkBC5bmFNyBUZKatRmuKK9bXob1LBY4x8/ec0ajIrRTNAUPIbHy5E\nzv9Ypx1VgkLJxX8uWYZVxRa8YTqqCHEEI85LYQxa45SD1IR24JjA9yPC/HpP\nmdH0iPvtbPZKptJoX4EF5BF16rdTUf790TyFlSuUcRpxG3qLxbV4Bdsw89eh\nCdcM\r\n=dEzg\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\n[![Publish Documentation](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml/badge.svg)](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml)\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"eb936b3d463282fd6450d943d651de702ef2f6cc","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc -p tsconfig.build.json","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --fix"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.5.137","@balena/jellyfish-logger":"^3.0.3"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^27.0.3","sinon":"^11.1.1","deplint":"^1.1.3","ts-jest":"^27.0.1","typedoc":"^0.20.36","depcheck":"^1.4.1","typescript":"^4.3.2","@types/jest":"^26.0.23","lint-staged":"^11.0.0","@balena/lint":"^6.1.1","@types/sinon":"^10.0.1","@types/semver":"^7.3.6","simple-git-hooks":"^2.4.1","@balena/jellycheck":"^0.1.1","@balena/jellyfish-config":"^1.2.7"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.135-renovate-internal-patch-eb936b3d463282fd6450d943d651de702ef2f6cc_1622879271519_0.684468450157784","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.135-renovate-external-non-major-ac3b03c7f89cc06d8c13f99eb41c063227fc3317":{"name":"@balena/jellyfish-plugin-base","version":"2.1.135-renovate-external-non-major-ac3b03c7f89cc06d8c13f99eb41c063227fc3317","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.1.135-renovate-external-non-major-ac3b03c7f89cc06d8c13f99eb41c063227fc3317","maintainers":[{"name":"nucleardreamer","email":"nucleardreamer@gmail.com"},{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"1215575343255d19376a5da303dba3290f7d0972","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.135-renovate-external-non-major-ac3b03c7f89cc06d8c13f99eb41c063227fc3317.tgz","fileCount":18,"integrity":"sha512-ttGbCdYpKgitLp70d0e8QBO9vSlr4oNKFNG/kwC/n9DWxYdWe57DhS7RhlHxYfrT+M5ynhXMo8SjufalN/mJhA==","signatures":[{"sig":"MEQCIGad7vR98OpbpCgm8Rw2rGHXXUiTJ4PWRptlmmq+w9sXAiAwoFA9lC3W6Fj/ZHr56b4sQVgDQXNEyKdGc7mFIO2oYA==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":53524,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJguyzJCRA9TVsSAnZWagAApCUP/1enXpOxFFN1RLoxfibG\nlWvG3bbhN6EPxwaxnzmipzqc9JlYKRhVHcJcg+v0U3Pbz76pM6zosJ3usUr9\ndD6dl8PKJk63MSE0Rj73TF23TYLboT6H8WddrO47rhu8kyYceqccDRbN2aQe\nDThLAZqnaegdBqg8gef8T3n8SLUK7ssPG4zxkFwD8mXgn60sz5nEr15+BlSb\nTSbsKyxknIm37cnoVuj+UvRbmnWlrttwd/V7oUyil4Gewm6/IIbeKuTPzwWf\noqMqca0yhNQFcEIZIf9oyF2PhgdbqEErtCO+ZWm15wAtuIj0cxxGtWviGThH\noF6UNPeZGvNtJTrMhSBB2peHyjay93OmBiOEeUZWkraDb88r7FCqj271B5/+\nzibo7ehz40zzH5zEesLtOcWbfxLsvWsFg2LI1xEcS3AuAgIkjWvizNaoBDwk\nNuBI6LM0ZdIJoib4F17r5qFTleG4j3RvgsQQVIyXIbxyRKL0pFzTbR9RAJ/I\nMZ2QDVYpB00sLDQpndf1fPaXHB2z0dTpEy9PyUnN18ClhXqRP4RJomICRsOt\nEN0tRMbIhpznxx3fQz42vWDlfUFpWAc66HzYVPc7I5x+53Zz8ofh42DMBFqu\nSR3ApSqG2llJ+1jQlPCtytmWjoADcDam+/OAcYmrZTG6KwIku8U4DL0ze7P+\nc/B3\r\n=XTPV\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\n[![Publish Documentation](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml/badge.svg)](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml)\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"ac3b03c7f89cc06d8c13f99eb41c063227fc3317","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc -p tsconfig.build.json","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --fix"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.5.137","@balena/jellyfish-logger":"^3.0.0"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^27.0.4","sinon":"^11.1.1","deplint":"^1.1.3","ts-jest":"^27.0.2","typedoc":"^0.20.36","depcheck":"^1.4.1","typescript":"^4.3.2","@types/jest":"^26.0.23","lint-staged":"^11.0.0","@balena/lint":"^6.1.1","@types/sinon":"^10.0.2","@types/semver":"^7.3.6","simple-git-hooks":"^2.4.1","@balena/jellycheck":"^0.1.1","@balena/jellyfish-config":"^1.2.7"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.135-renovate-external-non-major-ac3b03c7f89cc06d8c13f99eb41c063227fc3317_1622879433663_0.7357999951021852","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.135":{"name":"@balena/jellyfish-plugin-base","version":"2.1.135","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.1.135","maintainers":[{"name":"nucleardreamer","email":"nucleardreamer@gmail.com"},{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"5dad62bbfb5b2fb6f6e23f676d2c191141d5cce1","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.135.tgz","fileCount":18,"integrity":"sha512-v3T+GWDwuvM7XR87i1gs5PLzdaJZznYrHfBgAg0PhGAy4wpncvKnIbBWuzF688E8KdRNo484z/Dfz+4+RzlO5g==","signatures":[{"sig":"MEUCIARyp60mQ5YKOPMui8Ujyd2tRxcy4uKuuDZ3XGwsbDPJAiEA60sq2o0Dmyo+KOn3n8HqrO3SURVPNQC8pyxGyjc89/E=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":53482,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJguy0hCRA9TVsSAnZWagAA+V8P/26apt4v11BglKki1185\n1MZhRGUOVf+tMXSzosWExK/W6n4Slhvw4qXKQL+55VhL07r2AOpcN/sgqMTj\nKy6dTORUzU0It2Wt9ct2W7xVGH8ZvLy4U7Tz7RMsld6mb+6AYhVbOKlhwuUe\nImTK08ptbJOAMTYJ5YFGcqyXf9JIJs4RyxO4k0/pYFS+5iNL+7SbJoQ9M9UL\nf9eGSWaJgLiMVqRikXUqTBsI31W8HL9+YC6zxEbSEPNT/Wt4qwWewNSFb57X\nnP15FxLWY1Wc19CFAAQ/Xt3+L28Fw9sORt+WF+sJwe41kbN00Zf5RpN1nvSE\nO/kEEXSe1hHmii5xj/cRNKPRIhhWwEkzLEoFdajeRnvOA3KBl/sIeWaBpIuG\nu7i3RKChMBLESs9NExMYlCoU02kY3I88toZIVuUzZ64IMyxc8+5nZnjPu6gm\nW4znUvFOqkDpF5FpbuLm2afbZNgiVoh6AoAzfY8NL+KzyxenrlKdm1gVmX0m\nmNJl7A35zn1AS9FluDN6kOjM2omwbW0b60mCUtTHhsaZDWFcgvJd050+9KN3\nDyhFedkBiWVRNRimFyspMCtvIBVVPpZxCfy0CxYff0YzbcAXv+gy+Kc0gKGU\nWbut3SwBuMdPd9Jlgo8VdQj/9eqXj83+6D+M6/DLeE9cxqW40z2CgyIYRkxY\nF0Dd\r\n=c/XJ\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"7a1538d412b5edb717dd03d9812d13522d200692","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc -p tsconfig.build.json","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --fix"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.5.137","@balena/jellyfish-logger":"^3.0.3"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^27.0.3","sinon":"^11.1.1","deplint":"^1.1.3","ts-jest":"^27.0.1","typedoc":"^0.20.36","depcheck":"^1.4.1","typescript":"^4.3.2","@types/jest":"^26.0.23","lint-staged":"^11.0.0","@balena/lint":"^6.1.1","@types/sinon":"^10.0.1","@types/semver":"^7.3.6","simple-git-hooks":"^2.4.1","@balena/jellycheck":"^0.1.1","@balena/jellyfish-config":"^1.2.7"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.135_1622879521293_0.8290596232678782","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.135-renovate-balena-jellyfish-types-0-x-1bf87ecb18a1b2f2b6ec0f06dcc8b5425dda4743":{"name":"@balena/jellyfish-plugin-base","version":"2.1.135-renovate-balena-jellyfish-types-0-x-1bf87ecb18a1b2f2b6ec0f06dcc8b5425dda4743","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.1.135-renovate-balena-jellyfish-types-0-x-1bf87ecb18a1b2f2b6ec0f06dcc8b5425dda4743","maintainers":[{"name":"nucleardreamer","email":"nucleardreamer@gmail.com"},{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"c47c784032443c04a6079d571c3132cb0b460156","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.135-renovate-balena-jellyfish-types-0-x-1bf87ecb18a1b2f2b6ec0f06dcc8b5425dda4743.tgz","fileCount":18,"integrity":"sha512-CHHPkgduWBxuPhaA4JIzjavLT2aQzxHfWDA4ItbWa8C9TB3jE/rnnj37BRjXgQB9v6iCKiDkT0LZqLEXfVDrcA==","signatures":[{"sig":"MEUCIQDpph6K/EOo1HVPrmmYi3MVMqZtPGMZ//rNeQL6NjfRzwIgVK8VzeRZfE6zeHYgEd8Ct/CYqNa5i11INuPz9YRJwYg=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":53633,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJguy3NCRA9TVsSAnZWagAAHP8P/jdRS85eIJY3kqcIpZ8A\nQfUJ9Mu83uHINxMoEPtI0VYCmQZUd6L5Ho42pxrWTBbeoe5aWAEcujj3ll65\n5GGX0y+yNOAL/5qO7V2e2N+9jflntwfJvzmndE0O24YgkwaqBxRULyRf2a0S\n3JyVve2NRyK/Y0nvdzLzSem45JHq+UZGeMaSE0jP8a5AgKNrDVGC/SOicSZC\nfKgh5Yg/m8r19L8/TqoXTnzvXWQd5134UBY3rzFefqwdj3K132ExBFP6F7y7\nAWm0pSLAZvdn+9ksXdTpR/cpa1LdJcnIZiJpNgrMoaqB2UJ4f20Au8Sm4P16\ngZtSjZwJvS3A41f1tOu0SCEdSb8lz0D/VPdfeQ/T2+LBDn37P0t/qehewSy7\nb8Ro0XdY3dJW9edEvkmvmlDVtW8Lsai4B2meGeg/QhASpydYih9jAS6VmddD\n6xEkZemW7lQXfuzps1qr5oSKqtb+H0wbn4LjmM1Xs7d0sHteiFEEnGopXB9d\neKDKG2/srIj+JsLgu7sPb/Jaooh4fmbfYVumWJcLe3It2P66imZ8lgLcnfRQ\nun/GGcitIPFxinxIXaFOUaCI+d9jQCmpfb0QpFyRgc+q+PbvEeTHWbDxXF+/\nso6I8PywL8N/p8veEpmHibeRuiB7YD9P1nlmLbTCWm7lCtAwn+Muo8UTcfoA\nDTB7\r\n=ido/\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\n[![Publish Documentation](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml/badge.svg)](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml)\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"1bf87ecb18a1b2f2b6ec0f06dcc8b5425dda4743","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc -p tsconfig.build.json","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --fix"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.6.2","@balena/jellyfish-logger":"^3.0.3"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^27.0.3","sinon":"^11.1.1","deplint":"^1.1.3","ts-jest":"^27.0.1","typedoc":"^0.20.36","depcheck":"^1.4.1","typescript":"^4.3.2","@types/jest":"^26.0.23","lint-staged":"^11.0.0","@balena/lint":"^6.1.1","@types/sinon":"^10.0.1","@types/semver":"^7.3.6","simple-git-hooks":"^2.4.1","@balena/jellycheck":"^0.1.1","@balena/jellyfish-config":"^1.2.7"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.135-renovate-balena-jellyfish-types-0-x-1bf87ecb18a1b2f2b6ec0f06dcc8b5425dda4743_1622879693688_0.42951005203016734","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.136-renovate-external-non-major-d46c1e752283845b84547d99924044dae76d39b6":{"name":"@balena/jellyfish-plugin-base","version":"2.1.136-renovate-external-non-major-d46c1e752283845b84547d99924044dae76d39b6","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.1.136-renovate-external-non-major-d46c1e752283845b84547d99924044dae76d39b6","maintainers":[{"name":"nucleardreamer","email":"nucleardreamer@gmail.com"},{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"f647c227b665ecf777f86fe655810c518f26266d","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.136-renovate-external-non-major-d46c1e752283845b84547d99924044dae76d39b6.tgz","fileCount":18,"integrity":"sha512-uo9eZmsC3KArcuCRx05Dnf+b3QH8lTfrkon3QFY55INVAUpxHfp86YoanglzJajf7md9qHoJEEv9wuRlU2scUg==","signatures":[{"sig":"MEQCIA7enxPhsINdL6g3c43gRrPwEkJ3jKqacYf0rvLRcXisAiAc4k6AheHG+iIXudwHHSOqfV7Ex4N6knNp+Qh8pQtG/g==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":53627,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJguy8PCRA9TVsSAnZWagAAbPsP/RAP/6nWQgD/Rr9NfUfz\ng8/BpjMlMzflEgsnMe3ufLXPh8tZ3yOlkEOBY17mjL+h4GI3HMJp0aWHQzvJ\nbPeVRZmRn2rdDPCf8ZYMh7IFdaGl+TMWD+U9jn2FWzpkHd4t16/qASXs5+4W\nHldV/lISama+hB9rskfmS5cgMKSxfw1XtE9IUnR9ZpCFEjoJ5aNUgcIEtY4o\nu950XWcQq9q+/vx4l8BJja4/r40lRhn+zgIvrY97zvRKVFC2zCx3GHTzStaw\nCUSXzjZx0pLjdOfDnwKBjCyYU68pKpbANPeiS4qPzto0xRDpzIiEN+dFEm4+\n6d2ko7kOTjFRkv1JEzGXHBTYoJXhfb5HpwEYxf5F1nHnkSaCGPr3LnCq/nvk\nIqi9I5fmaDp3XTjWWEnIJ53im89CnwKlSlLrLTIGK7m32U1V0Gv5o4Lj4HVO\nLL0EF2cdizJc4PV7Z6+4YSUlw66N2kNZT3cPqh9yD08R6wec+dWuI6F7r8/3\nqviDT2oGIYKYffqzHA55X61min3qnhni/Qzy6RkZA62iyhQnSZoAY4oWJRl+\nPxdbr5Iw7W+Z0XR/tX7UE2vHvbZZvZLzSMYwUSXpxfouuFmcksFPhAtVpbo5\naVrt9YfGCFQCgVj3ofjikV5Hq07JRaHn4bEdqKvis3STt+WjY4or0TZJKw0c\nw0ba\r\n=IFD1\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\n[![Publish Documentation](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml/badge.svg)](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml)\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"d46c1e752283845b84547d99924044dae76d39b6","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc -p tsconfig.build.json","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --fix"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.5.137","@balena/jellyfish-logger":"^3.0.3"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^27.0.4","sinon":"^11.1.1","deplint":"^1.1.3","ts-jest":"^27.0.2","typedoc":"^0.20.36","depcheck":"^1.4.1","typescript":"^4.3.2","@types/jest":"^26.0.23","lint-staged":"^11.0.0","@balena/lint":"^6.1.1","@types/sinon":"^10.0.2","@types/semver":"^7.3.6","simple-git-hooks":"^2.4.1","@balena/jellycheck":"^0.1.1","@balena/jellyfish-config":"^1.2.7"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.136-renovate-external-non-major-d46c1e752283845b84547d99924044dae76d39b6_1622880015072_0.2244792308428376","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.136-renovate-balena-jellyfish-types-0-x-cdc577bc23746766704c44a89e53ffadd14bd4ef":{"name":"@balena/jellyfish-plugin-base","version":"2.1.136-renovate-balena-jellyfish-types-0-x-cdc577bc23746766704c44a89e53ffadd14bd4ef","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.1.136-renovate-balena-jellyfish-types-0-x-cdc577bc23746766704c44a89e53ffadd14bd4ef","maintainers":[{"name":"nucleardreamer","email":"nucleardreamer@gmail.com"},{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"5d27176209a29ec028284f95aef810946cd83638","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.136-renovate-balena-jellyfish-types-0-x-cdc577bc23746766704c44a89e53ffadd14bd4ef.tgz","fileCount":18,"integrity":"sha512-QWpFgth+IXNHNmT6h/gQ1JC2e/nCUwgSgP5sBRrG/fmvZkdGek6+scZnr84U++0TlUieUpmyxQpFS0kKTUdekg==","signatures":[{"sig":"MEQCIBL7yGAzjz7EbYRC6w96E45B6ewkhV53MBwrFk2dAARgAiAEeRc1m11j5k/+YDzZBpi4L3EPEckt7Cn7FfsDc4EAdw==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":53659,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJguy9BCRA9TVsSAnZWagAAeg8QAJcFRZFzeyICqdavHilQ\nseykvonmxeGxTh42LpEMGZylfYG5uL0WxaJ1XqmJD1f7rIJhl+G3G7H4/k6/\nR4qA/5AVhL4B1puir4nC6sy1D6HYG5/5HDkJtjfJ4o0mdaPQjrms/wYZkiXW\nKzJlwibLHw9FTh/0vf+dQ5j6iSTK6WkloiMRf7R5eI8Fd9MOVD58GBm2eGUy\nrYXtZDMSXNI/VEwiocYDvrrFPpsO9FP2KCc40BN/VRdWohlYrQfYWUnNiXCl\nH/UPBAe2StWocoAq7FZQlKn9TkIYiY+GLykk2TtCrAiTM4FR77nhOgdEiZn8\nnBZeCeopbtnW0aUm5VoUQP2nu7h9c4bMFqqpyDkBDMA+i1bYhvIhCgWlXYqp\n+QlGtLiJAHiyqwaudZA/5K7UNUa9Nro1k4w1LtOgt55CC0GXyWxkx8Re4isz\njUmldZgYGusYrYS1a+BCCwhnSPMH1/duQdB8oDjzjAjAUf0XShlydMuJjNG9\nRZTDORwIe4eUUBCSA/8evnSu9yY4DFi5SScLSDO5KoafXF2u2MBDjK1D4X8w\nOLqBXNnyevVYAuYyORdXkBvPpNpMXGw3kNLZGZCHME/Bo1z+pwg8xqEWZ+d9\nXQs9e5QIrhNox4+Epz6Ik0i4y4k4cYfUdT1oxzOR5KB7NPNGqgsa9+tWbWex\nTjpB\r\n=UVqh\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\n[![Publish Documentation](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml/badge.svg)](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml)\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"cdc577bc23746766704c44a89e53ffadd14bd4ef","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc -p tsconfig.build.json","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --fix"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.6.2","@balena/jellyfish-logger":"^3.0.3"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^27.0.3","sinon":"^11.1.1","deplint":"^1.1.3","ts-jest":"^27.0.1","typedoc":"^0.20.36","depcheck":"^1.4.1","typescript":"^4.3.2","@types/jest":"^26.0.23","lint-staged":"^11.0.0","@balena/lint":"^6.1.1","@types/sinon":"^10.0.1","@types/semver":"^7.3.6","simple-git-hooks":"^2.4.1","@balena/jellycheck":"^0.1.1","@balena/jellyfish-config":"^1.2.7"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.136-renovate-balena-jellyfish-types-0-x-cdc577bc23746766704c44a89e53ffadd14bd4ef_1622880065627_0.5832253124662083","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.136":{"name":"@balena/jellyfish-plugin-base","version":"2.1.136","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.1.136","maintainers":[{"name":"nucleardreamer","email":"nucleardreamer@gmail.com"},{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"1b4e077b1ba3435a85e5a9608fdf0dc680870a76","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.136.tgz","fileCount":18,"integrity":"sha512-wYzmOgp3wWyw2Xe4OlWoYKRzs/U+0q8czRREqR+89gZC8ggJqJ6QJli1jCaAw1Lc72OjsF+qVUpCqqUhPq7BiA==","signatures":[{"sig":"MEUCIHmJsGuw7FsD31GrQvgY+ZHlSNlyoHUzo+XQbHK9fnxQAiEA7jdj8TH3hj2HVxg8c0LSTXRD22ykadpb+ScRiUpZI5A=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":53558,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJguy/+CRA9TVsSAnZWagAADawQAJXpmvUeHX90Mso4Rlof\nK14iM7GriI6n3KSbUgTA+uiTd6PxBzKZCpZM3f+W8mv1SgPOcuvq08XG9Ri8\neyfF05NB1vxlt4V8VuB55qyWQLNlJY4m8D5842kG802Z5QQqQoEqRr+oyq0O\nxTWle3CJI08B78cAyLtUpRZzz98Hn7j7UuZxcz7npq3oQLepToTdpacqFfYW\nBo9JdESl7OAVCUHeYHq27z5YayPa4NNqA5SRkQSnwYm+N4zKjFNcNM6qlrDO\nuF6mWxgJ99/Us9EwB7hB4HCkR+/Hvt13Z/7EExPPqaL7gfJwPR79FGT6ZtHb\nEJHakPxKmlItFn4BAtspRO14vM85qrmLWahZSuZuxx/I5S5bgy4hGPc4QCVa\ntzr34o1oWPeMIvmT/dmvoRscg0EU4pCg7z2zvaiC+FWHqLUxMqvoWv+Pc9Ha\nH9uoZGsLvBaRFu6Cj8OYrHoScnBqJHRTcNk0odpLNVsTh3kgQRucgHIgMm2k\nWhWtfbuXJPE0slHEn7UbS7qigfMRl6qGW8Riy1hIATmB+hfzsWbsCMiHKtBJ\nZGV8hcPJrn7RccLMXnnZgjwWpvpLlmvn5ubN1evBiN/xPjwtLcnIfBOe70BY\n17hn1dJgO4P4/g+dCb97Nt3rvmb2g8nGcLtmhGN6ZVGBbHX4PxqE3T23+SRB\neEkg\r\n=A+5i\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"e35c784a1a2769359b826d601af442910a1d84d9","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc -p tsconfig.build.json","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --fix"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.5.137","@balena/jellyfish-logger":"^3.0.3"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^27.0.4","sinon":"^11.1.1","deplint":"^1.1.3","ts-jest":"^27.0.2","typedoc":"^0.20.36","depcheck":"^1.4.1","typescript":"^4.3.2","@types/jest":"^26.0.23","lint-staged":"^11.0.0","@balena/lint":"^6.1.1","@types/sinon":"^10.0.2","@types/semver":"^7.3.6","simple-git-hooks":"^2.4.1","@balena/jellycheck":"^0.1.1","@balena/jellyfish-config":"^1.2.7"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.136_1622880254828_0.3698222441533756","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.137-renovate-balena-jellyfish-types-0-x-c9398c030d03f0a554d34bd457f2755646ede1f6":{"name":"@balena/jellyfish-plugin-base","version":"2.1.137-renovate-balena-jellyfish-types-0-x-c9398c030d03f0a554d34bd457f2755646ede1f6","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.1.137-renovate-balena-jellyfish-types-0-x-c9398c030d03f0a554d34bd457f2755646ede1f6","maintainers":[{"name":"nucleardreamer","email":"nucleardreamer@gmail.com"},{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"592c1c2cd7ee161db1776b8d7408d39ca72c5d7c","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.137-renovate-balena-jellyfish-types-0-x-c9398c030d03f0a554d34bd457f2755646ede1f6.tgz","fileCount":18,"integrity":"sha512-IApAu2QP0kWGFopFRgvFvIohwb4WQrbLRZm+DAurOPnmeJZwkzQGURpxM13M+Ln6zn991jnSUlq2bcBymDXQ5Q==","signatures":[{"sig":"MEUCIBD4L//fN96tKoJb+BrLPHhr0/Nx41iO+u7rk3OBKCHcAiEAkkidNgMqXDPHldZ86psCysPj5wKfdjIVEocJBnPBfaA=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":53735,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJguzEhCRA9TVsSAnZWagAA2BYP/Awee+MpnzbG5WnbuILF\nC9//JwYMSGg2wmfniUee1fvH6cCcQwU9zlfEVqyAPQhSf2O8dKToNoFTpB2n\nPoIyC6kAFY/a4URn97q+iktVFKDAIv/3CYAsmVlx6YVqCbLxMK/j+jw9ccn2\nC6i5ShHwkof+GkcUhmyDlV16pNZtWQWr7a7/yX8VF+YBT8YpSUkqkkYt9Wrd\n8Y82VjhupHSga4V5l0KrgPBeWLUr4sWDmZWAVpBeH1mJtbA2iqE5doXvUgeV\nRWSGym4Si1GQ9zQ5E8sbpSK68FyeKLO792jh1ffkwulGnQEwWuoaiSDqP52I\n4d3WqeO9UxihHJDNVoET16X69vooftauv/JS5xn/+7UmwsekAuFlK7a+MJFP\nxyO4lNpr1j1iTO8Ux6mOER5fIO/hKTUjVdzkuPWlPKQTMs9VCrgFrOXmz/v4\num+bLKnjzwwFfPjFvr7F54KoDHSKTKOiWsWDDb6RDEOyiT/igllpkB8i3WSc\niRQNPQ9CaSWUXKmKXWZ9vstcMznCbV27vgmZjSiTJ8Aah9Bhd28s3zAdtJqy\nn2LSyMohReBewILTS81by0lBCvTCXCPcuDXij2Qs6YQd12zoMxqcaWDgpvtx\niYXESSwa3cpulohjsk4AnDstbTNTtVVsgWFkrwR2h8THjJvKrRjCQN+6IJpE\n7vYj\r\n=edFv\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\n[![Publish Documentation](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml/badge.svg)](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml)\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"c9398c030d03f0a554d34bd457f2755646ede1f6","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc -p tsconfig.build.json","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --fix"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.6.2","@balena/jellyfish-logger":"^3.0.3"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^27.0.4","sinon":"^11.1.1","deplint":"^1.1.3","ts-jest":"^27.0.2","typedoc":"^0.20.36","depcheck":"^1.4.1","typescript":"^4.3.2","@types/jest":"^26.0.23","lint-staged":"^11.0.0","@balena/lint":"^6.1.1","@types/sinon":"^10.0.2","@types/semver":"^7.3.6","simple-git-hooks":"^2.4.1","@balena/jellycheck":"^0.1.1","@balena/jellyfish-config":"^1.2.7"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.137-renovate-balena-jellyfish-types-0-x-c9398c030d03f0a554d34bd457f2755646ede1f6_1622880545302_0.19280110528088712","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.137":{"name":"@balena/jellyfish-plugin-base","version":"2.1.137","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.1.137","maintainers":[{"name":"nucleardreamer","email":"nucleardreamer@gmail.com"},{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"859807b0d5eb149b2178b68158683f530396e892","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.137.tgz","fileCount":18,"integrity":"sha512-imXUhO9GEOQJ90Zxs575Ly/zHv4uaG+omJo3kW/rvd/CFWpWbIUDnfDG82VCcrnvnQNzgb7JgxxbEkPdfV+EeQ==","signatures":[{"sig":"MEYCIQCbqTKaXwKvg8tMlo4kiCJisiyPegZbCI7b9yYC1SM81wIhAP8FI2siaJ1cfVPAfsbd5aPwL8vLQC0iMKz1dQ33/Vps","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":53658,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJguzJ2CRA9TVsSAnZWagAApgMP/i/a3rZQ4zXGIYpj9m/3\nhQwxQsrvglnxPytl+ck1xUHSxiZjjpFTaWvUnlIfdargIvtBAJVjiYUx6vBs\nAKRKOJaAtbCaIZvFE4GJTJar9SLysCNhNWuy+Wn8P2672NZRb7spx1qEBcMp\nW5Ow8EjVSstzcFJU2jR13J5X8bbiC9QyDKaWsOUSW5ondELTNLNrcoKO9efJ\nv4X0+JgeJWFx3rCZS/aWNb/1G8O2ZCt5mIaw+UVRlTo1at9EZ06sHdibYSHS\n6Mr68wbSpnP6dkBAuE3V1z5UA6SDEb6B2YlmNa51kUy7qPL9WjzjWW3UCwOZ\nvLNYjyKxL5j9lfaTDJ/zKK3MkGa0hear+iqbqMmbPdP+Q+2xT21cSg4S8Vio\nvB6mCYyuHov8oXCHgddDZ9j1vhU6MfIS3ZwfxNEJOo0DwO4QYQThtRcKNkgJ\nVpTyjPSW9lZtlt5uRKJo/a1AAEa7EJe/jEpRaDrvZqa1G1NB4PHzRvsBE/V4\nEe8huH9LA9QxBFJulkgGpRctIczmtvY/AoVFtg76CQE03b2dg1fVw88OAeh0\nkYKBsC8k198UzlMWWOT3+t5jXo4jfYXgbgkvH89TAkhyZJmuCT8L6in3ALe4\nywxojQJW9AIJib+mhTegQumZwKbEGvtuqMfb9W7JrUKQ30CjZlBSgIxlZHo5\n0u04\r\n=Gk9h\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"f90485a302eab4b2708776a4288629dff7fcbd46","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc -p tsconfig.build.json","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --fix"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.6.2","@balena/jellyfish-logger":"^3.0.3"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^27.0.4","sinon":"^11.1.1","deplint":"^1.1.3","ts-jest":"^27.0.2","typedoc":"^0.20.36","depcheck":"^1.4.1","typescript":"^4.3.2","@types/jest":"^26.0.23","lint-staged":"^11.0.0","@balena/lint":"^6.1.1","@types/sinon":"^10.0.2","@types/semver":"^7.3.6","simple-git-hooks":"^2.4.1","@balena/jellycheck":"^0.1.1","@balena/jellyfish-config":"^1.2.7"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.137_1622880885886_0.6353018141059614","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.138-renovate-internal-patch-8607e6b6330b4ace0589abc4dc0c06914b253469":{"name":"@balena/jellyfish-plugin-base","version":"2.1.138-renovate-internal-patch-8607e6b6330b4ace0589abc4dc0c06914b253469","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.1.138-renovate-internal-patch-8607e6b6330b4ace0589abc4dc0c06914b253469","maintainers":[{"name":"nucleardreamer","email":"nucleardreamer@gmail.com"},{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"31d8fa6eadc895d970f5e09138b2f5d641b73890","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.138-renovate-internal-patch-8607e6b6330b4ace0589abc4dc0c06914b253469.tgz","fileCount":18,"integrity":"sha512-Vz72diQkOG7eXNR46MNT2PyRimAPHI9zemsbKTYlxItS3EeBhnr6qCXdqnkC1Cfw0qC0xGaLcWrfuR6lDGAHqw==","signatures":[{"sig":"MEQCICb7bO7/aoahKNLoDIZ0mXkVTXqdtAqwarQ9SAiBXIkiAiAdUJpHKb75QGZwa/PZ5VWABdHlfiO1MCgh2K3R1OQAng==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":53826,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgu0paCRA9TVsSAnZWagAAdxoQAJZuJS3VH9TGo0Kla+jm\n0kzKvRamw2zJNo+PWz4xO+JaHtQbCg0rQQWS71YHtSE94gehYz3KSXO2Z3+T\nEaRlNAavAQwBkyG/sI4aIpPi7yLEDn6Tghfc7DMvI+JpSf/zCxbVhuQt7+bw\nXjmPRSJxsWBvMHTl8AByi6nbDAL0udl1ujHlizvW1tOmYZpbamIe0TVlz/ay\nHY/i4knlCM+CmY0MQRRE4McwGjXd/tigP96h9miuCfnIOma3HxSej0FzMyBz\n6e+K11O+JW71GVWDeYVnXQB33lx7HWpUbtttrLrrrOhrJCOXfHA2p7d+tSka\nTrvkcgMRaQ/NyBVK0zAFnpHhFicCiQrku4fPPQhF+tp0BwQ1pUsFbIa4SEDS\nw8Zv6KWTIcDgZI+LN+BQ5axO4d/vmaoZO3dnocw4Lwo6iSYvVHA8j8IlLD72\naEb/Yn65lVj5ZeS/MnadqQ0bME28249F4oRsoCUDVZmVUBFjLWV7+dDoeM/w\n9Awbnr46opOSWGARHmKxWJnyEpQC8QPYvVbrHUmKg/Sjmn6q2tehz9mIrEMB\nb9dIqvRV4hx+DkTZmVxWSmAdCQuuCyRGN5k9XAdspQFpvrTr9MvSibBMTFmY\nBKtQqVf+YChdTZyze/b8JK8/XkI2FgvIOioBoGp8RMkpOtNF705+gbiRFgri\nZvmy\r\n=8Xaq\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\n[![Publish Documentation](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml/badge.svg)](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml)\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"8607e6b6330b4ace0589abc4dc0c06914b253469","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc -p tsconfig.build.json","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --fix"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.6.2","@balena/jellyfish-logger":"^3.0.5"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^27.0.4","sinon":"^11.1.1","deplint":"^1.1.3","ts-jest":"^27.0.2","typedoc":"^0.20.36","depcheck":"^1.4.1","typescript":"^4.3.2","@types/jest":"^26.0.23","lint-staged":"^11.0.0","@balena/lint":"^6.1.1","@types/sinon":"^10.0.2","@types/semver":"^7.3.6","simple-git-hooks":"^2.4.1","@balena/jellycheck":"^0.1.1","@balena/jellyfish-config":"^1.2.7"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.138-renovate-internal-patch-8607e6b6330b4ace0589abc4dc0c06914b253469_1622887002160_0.17103449108447322","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.138":{"name":"@balena/jellyfish-plugin-base","version":"2.1.138","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.1.138","maintainers":[{"name":"nucleardreamer","email":"nucleardreamer@gmail.com"},{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"7eb420b45e8eda1d4245488d73bca3671094b0e9","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.138.tgz","fileCount":18,"integrity":"sha512-7aTQgXOWlVkHWRTKT3BGy/HLNCbsr5w3ZcgbOJuhuge28tvKKDfKeDoAbODjm/ppkgi2G8lMeSap0bquXsDbeg==","signatures":[{"sig":"MEUCIByCPL9cEpSXROoSOIH10JwYFY+/O2xqekp5maF3+HghAiEA9+x/+vWK1ww6oyHX+iuEAO6bIkGU8oWsFpKw/h1f7gY=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":53761,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgu0sUCRA9TVsSAnZWagAABK4QAIX5hQIEgxs1sI6pen8r\n/7VX1V0stVMUJaePI+FiLbkOJdOz4g4lU0dvdzy9sbignFosQUHjKBVfWCn7\nS3wQK72g4jptVDZjBRKymig9kGeTu3+MtWbZLfWXeXfkk3Di5tB/rAij7ExI\nQ6l8z34DDLIUV393DB1k3Z8dcBs7MfLbEV6d6V2ExrMQ6uab80T/LCrRp3LM\n7S3nIF9c1om1KcwEyED2xSCpj/f9EbEOyFCEYyckFexYOlSz2xMVQ3bNhSgO\na1f0sMneaflh7+LfPAqIMsXptl6Z4j3SPr8R/lYpj371JkMB8UuJdMYmgpiz\ntwrVvclNTTfq8tytMQfQDeWW7hgQPxIySaEf/eU942gFLQ5LdzBKqRo+p7tt\n4PHHyFcssHOs82/61R+lXDf3w0AXhTjzM3XiBHtQJqo26yqRWBWkOOPpn15Q\nfwUkY06QkTpoV9GnKoO7lnS03gVd7XC5rlg/CIRYj9nugh4ix9U4ni4+X3xC\nrf+9OHnJ1boWwzmF20MLJkmehoWH31FrZTVlcn3LmFBjwcDwA08A6mcxHZVs\nYHrHdlfxXf4WalrtD8RjEzPjhnKnl9mklv8mk7oUcjgK3OGrgvQ+YUjVg0tc\nsKMNTadqN9gc/bvUQ8CyFwCPmTp7ddUV5vvkjI8o6VRmKYwJNWzJZUJmuv+W\nfuZf\r\n=sPAC\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"bf3ff0aa11c986deae322923bded0e2f1c1e5d82","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc -p tsconfig.build.json","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --fix"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.6.2","@balena/jellyfish-logger":"^3.0.5"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^27.0.4","sinon":"^11.1.1","deplint":"^1.1.3","ts-jest":"^27.0.2","typedoc":"^0.20.36","depcheck":"^1.4.1","typescript":"^4.3.2","@types/jest":"^26.0.23","lint-staged":"^11.0.0","@balena/lint":"^6.1.1","@types/sinon":"^10.0.2","@types/semver":"^7.3.6","simple-git-hooks":"^2.4.1","@balena/jellycheck":"^0.1.1","@balena/jellyfish-config":"^1.2.7"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.138_1622887188519_0.24225365400235743","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.139-renovate-internal-patch-76215a672093e70523cf0b8082bcb1795974b63b":{"name":"@balena/jellyfish-plugin-base","version":"2.1.139-renovate-internal-patch-76215a672093e70523cf0b8082bcb1795974b63b","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.1.139-renovate-internal-patch-76215a672093e70523cf0b8082bcb1795974b63b","maintainers":[{"name":"nucleardreamer","email":"nucleardreamer@gmail.com"},{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"f46f117f3e83e9af4eb547aec5bcbb59f67667b7","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.139-renovate-internal-patch-76215a672093e70523cf0b8082bcb1795974b63b.tgz","fileCount":18,"integrity":"sha512-mWp8vmh9WDHdzZoHgeF22pNTbNweTyx+g+Yng/ekywF5T/MShWS3G/bW7weaiaH9rDLzzMDwAtl1OuIy3w7yAw==","signatures":[{"sig":"MEYCIQC1hl21MJ6i8ges9SlmPqXQGP+3tNiNbxA9LTbyOfwNCAIhANOxu3do/e3VGPLvlRi13/Ts9zhItoCr5TeS7LA8of51","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":53929,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgvQW5CRA9TVsSAnZWagAALSwQAJpHHNEaPjYuaDhv0TVp\npwW9gSUwvxA+9NavGqTI5/HITFGR2H0C70nWj4hEkqPp4ZQRpwic3xnKijYS\ndr3juxSxQ1aoxnyZhg7T9G5AssU0BnYjLHpVdi4lOgL/G7NFUvGuKOyE7oQl\nExsg5aXO11oU7nHDb0ZjuLKoPRY75DFrTXDUFxqMP2tNhItSuWh8aPWoEyVM\nwRqZKsg0hy3PByvfxzHWpVrSzqfJOE3UnIuAVPvkW65xce2YFN/nAUJ3sX59\nFmVSkw22+3QNrWmfkQt3AXTcWBCB+4Yzt1MizF0hNF+LViC+Nb7PgIl4wSbK\n2NGBfkha8l6rAVxgFg2VH8lA3rJrOlGp0zlMgx0Akvd4DkqLvZg5YQMrHMuY\nSpef1+f3cM2hAXL/mmzK7XD0WlRE7WGyKbuSAshXikc2HAgy8Pid/w9IAmBC\nThglLd64Vx97dmD4jloC/0e6Jf2lOvFDH+keATxbVBTPP4CSUKvzuWM1GxMj\nVUGDaDjNmWtvlWfEwXAAO8Kec/Jb4KIm9dfZZlucki+fwmn3WMMPqA014a4k\nhbA2tk3wFfbGowIDiiTnm/Z2qmFhbMD+XS4brNh7FS5wyGCQPwhEUCrLmmWG\nKcW7Ue6Om9pe3+eUY8QwXCrofyr/PWQcnSmHW1nEXllokpAOtSVbRIJzBCwy\neXvy\r\n=CmMW\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\n[![Publish Documentation](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml/badge.svg)](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml)\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"76215a672093e70523cf0b8082bcb1795974b63b","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc -p tsconfig.build.json","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --fix"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.6.2","@balena/jellyfish-logger":"^3.0.6"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^27.0.4","sinon":"^11.1.1","deplint":"^1.1.3","ts-jest":"^27.0.2","typedoc":"^0.20.36","depcheck":"^1.4.1","typescript":"^4.3.2","@types/jest":"^26.0.23","lint-staged":"^11.0.0","@balena/lint":"^6.1.1","@types/sinon":"^10.0.2","@types/semver":"^7.3.6","simple-git-hooks":"^2.4.1","@balena/jellycheck":"^0.1.1","@balena/jellyfish-config":"^1.2.7"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.139-renovate-internal-patch-76215a672093e70523cf0b8082bcb1795974b63b_1623000505600_0.7766167018785124","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.139-renovate-external-non-major-36ef2e37fb2c69edc21348f1468063759d26770b":{"name":"@balena/jellyfish-plugin-base","version":"2.1.139-renovate-external-non-major-36ef2e37fb2c69edc21348f1468063759d26770b","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.1.139-renovate-external-non-major-36ef2e37fb2c69edc21348f1468063759d26770b","maintainers":[{"name":"nucleardreamer","email":"nucleardreamer@gmail.com"},{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"445cae3801485f444e65aa02bdedbb23e290ddf2","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.139-renovate-external-non-major-36ef2e37fb2c69edc21348f1468063759d26770b.tgz","fileCount":18,"integrity":"sha512-tX7peNqlO/LrGg7l5C5SVn+++Wb5mBJud+Me5tYRvTP4B4yGXk7UXqKvtxlx8ZfLaI1MmcGFMcZG6Y5EUPnCiA==","signatures":[{"sig":"MEUCIGGkzJCKUmKUkdvHjOwQ3j1quvhaowrYHyi6/RcIKxAnAiEAwKTmO4vF2x+0KfDBDhqr1AmUoXVi5sMI6+03MOBm2UM=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":53917,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgvQXsCRA9TVsSAnZWagAAP5kQAIOapUin4WE59j7HLXrV\nf1f6IxpSqd3Q6qpFHJWyVrNjnh9gT3cEmGh9L88Q3QKtB3191tiOZvDyahXs\nw0O6O2xDjh+xR/u8sSfHu7zsZtBAqLAmnpKSpPUPRSt0KBalnvQ2awg/E5qR\nM4/67DnV+zeRF+c8FG336GbiBapH17YPRJ5tJuCcuoWE7I+VygtoHoCkiy0A\nVnhmc/tdBQYRLMP7poF+WJN+GJ9bBIvN5iRXYID2XEGwzYLs8V9N+w0REaFI\n1HJt2eq+/yg6h3ViPiHuCmkbHky/joTtCDrCOsUV+ExFP4/PjykrXZjg9BXb\nDi3kMBjT49pJlYbyaK+Om7hGU2ZzZ5iT5r0EASlR8fbUEZNnU+ky0+t4mHfw\n4oiKY8DZcceD14Ynuz0NZn8pXMIbxv/jTQ2KE6DFkPV9mwpdd58X9J9RgLof\ncoD/1Z0HKQ7ZmF149e9KaGnbkBTk5jcywGBLr/GXCqSUh5NYyNlbUPjwQJKs\nvnbPNdR+GoZ64+1IdQLrhq11ESN3WeMPl8o+gZVJT57jtGdNfAEfawT7cJwP\nqIQNa7dBKJ6GK5mb1/oS3dH/EN3yuS9kwI++IlDEm4wsxgsi95XF7OBiVnUy\neffuA/vvpvCPVbaSj2t6f2CmeSIFOYohI1FCZyAbG6e9egvjCuZv1mjzzBGY\nvMJo\r\n=YifL\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\n[![Publish Documentation](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml/badge.svg)](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml)\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"36ef2e37fb2c69edc21348f1468063759d26770b","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc -p tsconfig.build.json","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --fix"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.6.2","@balena/jellyfish-logger":"^3.0.5"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^27.0.4","sinon":"^11.1.1","deplint":"^1.1.3","ts-jest":"^27.0.3","typedoc":"^0.20.36","depcheck":"^1.4.1","typescript":"^4.3.2","@types/jest":"^26.0.23","lint-staged":"^11.0.0","@balena/lint":"^6.1.1","@types/sinon":"^10.0.2","@types/semver":"^7.3.6","simple-git-hooks":"^2.4.1","@balena/jellycheck":"^0.1.1","@balena/jellyfish-config":"^1.2.7"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.139-renovate-external-non-major-36ef2e37fb2c69edc21348f1468063759d26770b_1623000556132_0.600584091065677","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.139":{"name":"@balena/jellyfish-plugin-base","version":"2.1.139","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.1.139","maintainers":[{"name":"nucleardreamer","email":"nucleardreamer@gmail.com"},{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"5390aae47fe6574955c48f936bd84961b30acaba","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.139.tgz","fileCount":18,"integrity":"sha512-29q2xNiEySIjDjSQQGW15WinPcfabKJIZ9kYjZLEh66aOsWFXySgNGS3HMYjZZ5o1aSMI8IQeL/pl4KNYHs/2A==","signatures":[{"sig":"MEYCIQDNmRCDjVg28/ThtayJ18So9v3n01LFa+XES5hr3lWEsAIhAP9LFejHiWNRqOnyPHqH/dwZgq11IyeP56vtFuy/+3JI","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":53864,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgvQZ5CRA9TVsSAnZWagAAjHAP/0eDnNvuJVYvlzeE9fDM\nik7RBaHtFnV1fCNaTioZLn3FTof6aV0GEUDpEYFd0GOQD5QRBfTto8ymA7o2\ncAR/4egY4nfR3JB5IUO/WE1HuaaMtr04DQBI4uZenN1ueLoFMBYLvUrBFJ1N\nrWaVL4LfoFUYLq5VzmlAaOtYun1NdjEDOTHYUOOSRNZ4y8skz6kCCCndLiep\ne7BabvjmHaOVmNnJlKObA/kPNskQmiuOyb/NbsA0VGEQuPqvX3OGjxjNn/eA\nhR9GWtZV8I/O/n5oCATEtNFW3rPYf0m9xLmZkGiu5YNfhsSnCmiXvpRQdBTX\nIglJ9k62+iO7SPPycucRt45oTvb9PiDAWyPgkij+JenK+tFbdE89tXc67OlU\nD+RfI2bcDDV2WS0bMkvZjJaPQBO220wdTO0qBisFR6V4YPHruKTIDl8lAKHG\ntOKpBjasrVWmxTG6RRfSY4EbeHGrqUpYZn1EkPAjqBrAaFvmL2NbJ/0zbFwd\nokYE46eFII5bXJA36V4/gXTqzxHx6+5HJ6nUZs+tvVWXjYcXsAjkPDUnV5ed\npfB4rff22A8z6uGTcd/1VGaYIdjc+8xXQOZBN+j+qmE2Ny/YlV7MymvFdGYv\nK1nDsaEHhr8CXaM8rEsdZyLbOovHR1m7x9LZN4qdIJOk9LKKPPsNZmlx6V6U\np60b\r\n=zCAE\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"f172e6fbcd80329f4eb226e8cf11d38a4727afc0","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc -p tsconfig.build.json","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --fix"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.6.2","@balena/jellyfish-logger":"^3.0.6"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^27.0.4","sinon":"^11.1.1","deplint":"^1.1.3","ts-jest":"^27.0.2","typedoc":"^0.20.36","depcheck":"^1.4.1","typescript":"^4.3.2","@types/jest":"^26.0.23","lint-staged":"^11.0.0","@balena/lint":"^6.1.1","@types/sinon":"^10.0.2","@types/semver":"^7.3.6","simple-git-hooks":"^2.4.1","@balena/jellycheck":"^0.1.1","@balena/jellyfish-config":"^1.2.7"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.139_1623000697107_0.7520991287767549","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.140-renovate-external-non-major-4a7acac41f9450f8a94604deb5769a8a5e4fddf8":{"name":"@balena/jellyfish-plugin-base","version":"2.1.140-renovate-external-non-major-4a7acac41f9450f8a94604deb5769a8a5e4fddf8","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.1.140-renovate-external-non-major-4a7acac41f9450f8a94604deb5769a8a5e4fddf8","maintainers":[{"name":"nucleardreamer","email":"nucleardreamer@gmail.com"},{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"6ff176789d95f782aac7f764473ad785bec083cd","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.140-renovate-external-non-major-4a7acac41f9450f8a94604deb5769a8a5e4fddf8.tgz","fileCount":18,"integrity":"sha512-vmE+cN0Ao61dKROvqOXUB6Lhlv97YK6Nc3WVqodWN5q4/F5zbUr9mnCOWTY0KbShyLFYKjniupK7QE4fu7olFA==","signatures":[{"sig":"MEYCIQC9fjLlorhXbC3jqcvCnkffG04ZksjBaH9pdYWLyb/uaQIhAKJjlW+EmyS02mdywMtHyOl0WP3FJM6qVoV66scBHun2","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":54020,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgvQdcCRA9TVsSAnZWagAAaMEP/1oarttiOAfYS+OFwJon\nTT6YsK0wZhNvOXAuRa3x0wwlYGD82wNfUt4L2/5yNbR1TKL5wvhFdZIPa59d\ne6DjxXPsq6qK3mwgLKxcU3Beo+7Sv9vZYN3rCySKzYe85OPnAk3WnXNso7my\nnT+jwdf7ZZj0OAtRpq1ua0c1hi5uwRthXnJeI5wBpVvzCS5eCxXLW7SLONCR\n2S30acJyZEHww7xB3BJQYLdcqRrCPRe4NK7Aok+9K18NB0P8ynmLrSTE2ADv\n5oFIymjTdx6pMctuw5CFg9TGHoqMAGTaCgkDIdd0nXuXkPUQSBo+LG12lZ9R\nPy9/zdneBUXiuMKkGeXYJt58tba+fF0r0LFzISnUOddFk9T3ONek44ie4aog\n+nTmXHITxz4tXwuP3SApv0v1BQmjWi8X7ilU/s/cVCLYc2ErOl0wKmk0PePo\nzZM/D4IJSGg82KordS9XXOMs2dce0kJdFqOq3AUBbquwR/zsoh2Iqfl9xYnM\nKAkpLz8P9+z3WYLBkA6/VsL/1HyZNBrLOuO2+7yovT85Cej4o6TWwYUOlbig\nOarRLL0ZwUNWcGob+GYXx8mW0DER0C7A6NCBhPT3XTcE68lH26Ofoic7iHIx\nIKeU2y4g9YTLvU0kv0Gnh4d3SA5ziD5Z3/KOZqcBuGZgJF9al9DjTryozwMF\nd06y\r\n=Y7fA\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\n[![Publish Documentation](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml/badge.svg)](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml)\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"4a7acac41f9450f8a94604deb5769a8a5e4fddf8","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc -p tsconfig.build.json","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --fix"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.6.2","@balena/jellyfish-logger":"^3.0.6"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^27.0.4","sinon":"^11.1.1","deplint":"^1.1.3","ts-jest":"^27.0.3","typedoc":"^0.20.36","depcheck":"^1.4.1","typescript":"^4.3.2","@types/jest":"^26.0.23","lint-staged":"^11.0.0","@balena/lint":"^6.1.1","@types/sinon":"^10.0.2","@types/semver":"^7.3.6","simple-git-hooks":"^2.4.1","@balena/jellycheck":"^0.1.1","@balena/jellyfish-config":"^1.2.7"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.140-renovate-external-non-major-4a7acac41f9450f8a94604deb5769a8a5e4fddf8_1623000924610_0.7705714018858101","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.140":{"name":"@balena/jellyfish-plugin-base","version":"2.1.140","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.1.140","maintainers":[{"name":"nucleardreamer","email":"nucleardreamer@gmail.com"},{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"50a01a350d9f30c27a9507cb0ebd9bbfc5ccf988","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.140.tgz","fileCount":18,"integrity":"sha512-Sh3Gfy3ovi6afSYVm0ziWwSxKqW6rsPwakx4T/JScleAmz8ayeKz9Nje4iS2tFWxRr6ioE1JODGvmjY3F5tWJA==","signatures":[{"sig":"MEYCIQC7H04ykEj9IxHXBqfZW6LKN3Wp1cCUPkQVmZB7UuHiswIhAJYDkILFqnNwYFqwIi71zD9EWLnOACWYOUhYdXu03uCS","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":53951,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgvQjcCRA9TVsSAnZWagAAt0oQAJIQTpNhPAbDs9I55Mfx\nZMpcmAyz1XrPG2GuZdSuSD2G6inZtmGa45vE4GGb8+X9Q61YNHBhD00PeftN\nC2UnMMYheRuY6Ev0OR+kQ947VN15wwff69aOY9GkW6YqVlGpYOpJR7N8spRx\nXQY9VrJvUmNL0DExsbRfGDc11E8VJDSjU8ohDB5htJE9t31RTcIPx+w35dKr\nk7pyHI06jAOwu8cOTPCDqIkaf+dtoPCdNJ3NPln2V1jLwE1hC/pm8xigBac0\nWtMBte0KCUP1YOyCQlkrExAYjc7F+Q9t6Y9RrZpM2hVH478/hE9g7YJDKh7L\nejZ40EwWLmxhcqhKIhsUa3VLUj9B4P13H+qcMaVyPgXSq/cNYxBqpN+c4MHS\nf/Vt1qTt+I5e+Z5ARhTvsEZXQAoCD4P3dXLD94uey2wyaprUbs/Ki7xIxmAQ\nnd2YG+BYHV82qZq1kncYDSyzRNBtxB1RfRSioJI402tSRtcslSa2ujCjj6bs\nl2RwgA5ApF9yKSg1Nu0mVIY5AQeK5Q4eWTw6MHBNxqiRVNGlSAFRK0hR96yp\nb3pexz/nwqCptg6KYbgLtyA8tzXW8JvyLi0coFA/k7p4DbuwFesNp2jKqFUw\neBo68/3676meSDbQAhzRt11XS+cqkAkm1AmWymHq2CJK2WtuHERGUV5tVPzM\nxWBf\r\n=wu2p\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"5bd1643f26578b18aa3882afb16a81c937c35c3f","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc -p tsconfig.build.json","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --fix"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.6.2","@balena/jellyfish-logger":"^3.0.6"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^27.0.4","sinon":"^11.1.1","deplint":"^1.1.3","ts-jest":"^27.0.3","typedoc":"^0.20.36","depcheck":"^1.4.1","typescript":"^4.3.2","@types/jest":"^26.0.23","lint-staged":"^11.0.0","@balena/lint":"^6.1.1","@types/sinon":"^10.0.2","@types/semver":"^7.3.6","simple-git-hooks":"^2.4.1","@balena/jellycheck":"^0.1.1","@balena/jellyfish-config":"^1.2.7"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.140_1623001307875_0.7205570045393295","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.141-renovate-internal-patch-a1adbf9dfc948afde19d50dec37f7ffdf9369cf9":{"name":"@balena/jellyfish-plugin-base","version":"2.1.141-renovate-internal-patch-a1adbf9dfc948afde19d50dec37f7ffdf9369cf9","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.1.141-renovate-internal-patch-a1adbf9dfc948afde19d50dec37f7ffdf9369cf9","maintainers":[{"name":"nucleardreamer","email":"nucleardreamer@gmail.com"},{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"ea1d7cd162e484c93bfa4722a663e3176ca03db3","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.141-renovate-internal-patch-a1adbf9dfc948afde19d50dec37f7ffdf9369cf9.tgz","fileCount":18,"integrity":"sha512-1i4hhMxwlY4brLFwJvciwrQLQ8Ig8rprZV4DdIWwmgeEvdpo1ltObZ0dUvZOazqSBOOi3NrXjQDDACLevCR2eA==","signatures":[{"sig":"MEYCIQDA9jhnkpQOcfyZRSThYPV24zdZtlHhSqLPi7jEvUGJXQIhAPJNGaKec1p63hymOGEO42uVP5aiZDRlPqq5dDH2+ZYi","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":54119,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgvRstCRA9TVsSAnZWagAAYvUQAJTxtTPYBflTLt1OzpP2\nRUoBcDdB9dS/T93jlHSS+tCT62CyNGnWgzj+Y6kZw9X5TMQwHULLS9B21Kn9\nJlMYs+Sgf4OtJTez7oPi9/42cIUq0z8Bukztdo60bm95dNXuMs82RpobdgKM\nIt2sqDAc0WA7bdKXiPVJ8BaXK58+MRly2DGt5znWywSh4Xu+CZv64h3g/j5B\nplJ73nfC7SI4kUEww8XrmQdzIedAwRkiekkMeydBddkkOU9w03YYBHuseULP\njQE6JOFjdod/ToY8WNm/PMzEBojypyhFvXyVSxW1tNRq39qQmLTsQKZAnsYJ\nvzniOcZbTytuhOuNRlaraRPA8g48oQJXE50q340twiuxjhtUXX6IRPTV5+EB\n6oVDK0DytqQlsMx86LzSS3YFj4kXwGeafLEuI08FTgx37kfk0smBjQ+JY/yV\n3gY4/Hyp790UimfFXjQytoM3bBA1vi9nVzshyjABH1sstmpD3+tagF10f9N7\n5wS0RDseol5LN5bFU6LK8aJMzSOEVa9SiVrhKCbXHyNh5mxwPUkD8zIICD9c\nV/omVMpVLK/G83o9pQr2cAZrjSluHJrpGUxGtz5/Ygx80tKxrfRlEFC/8Pgl\nLe7ITBDLP8iDwSz3yJ7TYMqqAjkJlc+E5Jq0t4QEQ0lZWo9bv5YzIhKvu5IT\nn6K/\r\n=Hn/w\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\n[![Publish Documentation](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml/badge.svg)](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml)\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"a1adbf9dfc948afde19d50dec37f7ffdf9369cf9","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc -p tsconfig.build.json","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --fix"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.6.2","@balena/jellyfish-logger":"^3.0.7"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^27.0.4","sinon":"^11.1.1","deplint":"^1.1.3","ts-jest":"^27.0.3","typedoc":"^0.20.36","depcheck":"^1.4.1","typescript":"^4.3.2","@types/jest":"^26.0.23","lint-staged":"^11.0.0","@balena/lint":"^6.1.1","@types/sinon":"^10.0.2","@types/semver":"^7.3.6","simple-git-hooks":"^2.4.1","@balena/jellycheck":"^0.1.1","@balena/jellyfish-config":"^1.2.7"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.141-renovate-internal-patch-a1adbf9dfc948afde19d50dec37f7ffdf9369cf9_1623005996914_0.8979636940100293","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.141":{"name":"@balena/jellyfish-plugin-base","version":"2.1.141","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.1.141","maintainers":[{"name":"nucleardreamer","email":"nucleardreamer@gmail.com"},{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"578a4dbec47f9251672165b03c45ab4bbc0120f6","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.141.tgz","fileCount":18,"integrity":"sha512-uJdQQhENc9fIFUwliEEaulJMJMOsf6X+NCw1gPdKZN7wJKNIGgNz1XkKMbHPyyQ+2OndimsVI7fVhZiufb+0yA==","signatures":[{"sig":"MEYCIQDQkudx7ajaHGFiBmP933u4Pwlxckb/kDPx1Ngt3TyolgIhAKxQcirCkMCpoD4t5qQ+3UonWYYwGKUUx1Nzg6e87XTp","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":54054,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgvRwBCRA9TVsSAnZWagAAkwgP/0PlMM0mRDs6ccYgMZZp\nvtv4MZzOUmurl55IO5Pggg4HH5hmsg6G3F8at3wZOO6gGacSurvHsb7/eWs5\nJX2o7jf2T5mwRfaT74sT4EcqF/9zLylQ4BwOCmUiM4jzCgyDVQ6uM5WsUl9p\nuPX/DKGpwYQiDqiSAnJQG/Ha5WaIEzpuKZHx613LMO8MZR/1aBH6avPCtV0E\nGf3OI942WpgMgCB4WWfoKrPJhrm29f97awpgfmuCM72NRXBChyBufCWnzsyP\nVl+5WtFGawSuEnA/Qf7t2z96SQGL9dBICT2WtJn+Hupajo8bblO6O6Hq3gEF\ne1wrr3lqceOr0bvuBxN/Cz9sEujNsPzSPq9k/YVT+sckxe5fY/aOH/D8O2w6\nL+DeS5Ju1f72gl9rFDHrLhtFRfJg/k0SHWJiyRabOyIQBmfGQpo5+IydAYxK\nfEF+d7IqrDToF5Nsjdopn0cAQbynLayMy74DVtLF7o/gFdwR7gjqRJDdEpa7\n/PaLNBHYh6Wd5+kyy8jx73JklRdmdfztPV/4djmjCfsj1MB2NJcAAPomajsX\nNkjHt9YzsgfV9fHW9K65DD9eLXAPlqAvkkdggdRRZXp7+7PqV06lMW8EzZaj\nSIeNxrM+bv9kDHENDOyltNBuvdqA3ZZk+dCGO1WrKlvk92U6HnvVQ2fWcx6w\ndFnl\r\n=0f0w\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"7b373e8ccd3ffdc66bcc07afc9b6306046e3ece8","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc -p tsconfig.build.json","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --fix"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.6.2","@balena/jellyfish-logger":"^3.0.7"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^27.0.4","sinon":"^11.1.1","deplint":"^1.1.3","ts-jest":"^27.0.3","typedoc":"^0.20.36","depcheck":"^1.4.1","typescript":"^4.3.2","@types/jest":"^26.0.23","lint-staged":"^11.0.0","@balena/lint":"^6.1.1","@types/sinon":"^10.0.2","@types/semver":"^7.3.6","simple-git-hooks":"^2.4.1","@balena/jellycheck":"^0.1.1","@balena/jellyfish-config":"^1.2.7"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.141_1623006209259_0.8619853489796088","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.142-renovate-internal-patch-9934fc3d8f475694a033b321ab553dcba74df16c":{"name":"@balena/jellyfish-plugin-base","version":"2.1.142-renovate-internal-patch-9934fc3d8f475694a033b321ab553dcba74df16c","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.1.142-renovate-internal-patch-9934fc3d8f475694a033b321ab553dcba74df16c","maintainers":[{"name":"nucleardreamer","email":"nucleardreamer@gmail.com"},{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"1339eed74cd85cc03fc37fdf3d307bb605762e1b","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.142-renovate-internal-patch-9934fc3d8f475694a033b321ab553dcba74df16c.tgz","fileCount":18,"integrity":"sha512-j7Mme4YyvmTSGRpd02hGsTYA4Q9fbRQoLbvLx+Eew5KM3X7WyNTbIjtq6KzKlnhhXmU+RD6JlXWH7SKwq8RXIA==","signatures":[{"sig":"MEQCIBABzvvwajz0HyRkev3BWlCqv9WP1vdvKg+XmcHzM+oXAiBp0YrxPmZmbhFZ3jUnZlZuGQYgZO/YVnW8zL2VD/1LZg==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":54221,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgvZrECRA9TVsSAnZWagAAUZcP+wWTlrFXg/SMpVqii6yX\nQvEFCNdvMC1dv3K4AGMfObs0rIqH66bdNlmGXBR7jnKLkDOl50maMVULHpx8\n6i6WkB8HQUrrlI9GT0eEmpo0nPop6ioFqoo14cEv+dhvY3hrhZh5Oan/7auV\nytwFc1wrlV25BdSqLsZowjJuE2GCKYc8j5T6rWrTh4nGnwCNMZH0ch8/dbBE\nROaBD2qmkTTq8OyrA9DBOvvLVIf6rLGl1sTf8vBVlukYp9zjHHsNVZRKwEOA\noi0LGT1Ge8PlGlhjR4cRgCmYfbGzzei5aT4LGX8dPNLvloPf117MR+SQ1Wep\n2drzaX+kZirJzJa4lM1YYiXlLCHmMAg601MrpnJG2ywJUDh27K2568WGeBHz\nDwdy9b5BtFN5f1iLL/3PzunlW9m65yWlfZlF6AGiidK3PphrrkccmeOGpkGM\n550JzhhasVzCFk6rHiEaSVhg9BjOcvyO4+0F8XX962HV+DWSJq7N8EfF13Ef\nCC0xtw0MBY+aIvi1OHV9SABGBU0qYI1Kf5Kw3SA0sqL58NTLADCzu8T9rtn4\nPRqA2Mqpg+KxTkH7Jt6gYgpIZZtpkHo/hKUR6iBLCTT1+fZebK8TegnrQbGB\nG62R4FhpkppQkjSf6tPfy0hPILP/iOQ7d7MRSzRSgUdVgXw3GsDY5d3gojxc\nBbun\r\n=AkYA\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\n[![Publish Documentation](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml/badge.svg)](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml)\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"9934fc3d8f475694a033b321ab553dcba74df16c","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc -p tsconfig.build.json","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --fix"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.6.3","@balena/jellyfish-logger":"^3.0.7"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^27.0.4","sinon":"^11.1.1","deplint":"^1.1.3","ts-jest":"^27.0.3","typedoc":"^0.20.36","depcheck":"^1.4.1","typescript":"^4.3.2","@types/jest":"^26.0.23","lint-staged":"^11.0.0","@balena/lint":"^6.1.1","@types/sinon":"^10.0.2","@types/semver":"^7.3.6","simple-git-hooks":"^2.4.1","@balena/jellycheck":"^0.1.1","@balena/jellyfish-config":"^1.2.7"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.142-renovate-internal-patch-9934fc3d8f475694a033b321ab553dcba74df16c_1623038660038_0.8054512524037956","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.142":{"name":"@balena/jellyfish-plugin-base","version":"2.1.142","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.1.142","maintainers":[{"name":"nucleardreamer","email":"nucleardreamer@gmail.com"},{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"6e513a67a6363ad3f5312df3037804b733a90991","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.142.tgz","fileCount":18,"integrity":"sha512-iWcJMQ0vmLp+uhGhPbD0FX3wGSA5NL+YLwGmQNzAuho1afWjXdx0YMtRplwbRwSk95IwXO4KdlN6Ooe0XZP4Rg==","signatures":[{"sig":"MEYCIQDbWvDwbImz0XsmHdCMxGTM4wQA3/pjfmCx4dOtJjV1JgIhAI4daCr9DnBh9YNiWjspfCDCD2KbTfzV7GoS07zyNGJt","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":54156,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgvZukCRA9TVsSAnZWagAAtU4P/347v+S9pukLazFuuMzg\ncD8s3kNmcU0t62ycUv1TnFWmAO9JaYUK6J5VDgTnpu8L500BeV3HJB5lDrY8\nww4uDBmu2HqgIqX1G91Fapc8iweryZx+3JSTqiSjkx9Fpdh7iJOrzqML1yrY\nTH/ahV6qnanpX+thDBEiTKsrW8LimK4wPoU1x+40Je1fVbJdWcY1leY6K9Pd\nbAraUla+5VMwEX9GN2MhNvrmtIobRZ9gcrv8APCYWM2jIX/jpFlTPMNWEjRM\n+qrnxHVLV6PcJu4qn0LkfRwvtHbRX0gOcMFAnMXHV9EbTNmmu4zBhqwUldcW\nOBQigpIlzNRdsklZ91aTKVzYA5StvlhVpae7lPI/UU2zM4dUej4IGMlPLVvn\n/lTgW2SwFdxBBuZYilnEpkIPznRaOK7/DVdGua3flSVQ4H/KFmA+85n88YAf\nFhYr3JTykaAR/wNzSuc2i+Sz09BMKLfyrjjpqMuypU/3i5rLwuxGdktAXezd\nSmroy6+2+6LUqL2QwENfe8o8zniiXkrgJTK5QKXDZrTK+lB5wTqo7bPhQUKb\nEbaq3gH+w/i6XrBrpIoyfddR/50l3fiMrg9L2brPRFk+3okmTqdz3uQLuDj8\nwoK/KNuNQHFHmyXQzfzqGUqTPT67ratPkLlE+Sevq4bJl48lWo3eRXv8O+Qm\nLQ4Z\r\n=Azu5\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"64756f21a1ee3ff4f410c5c514e7af25d8b5580c","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc -p tsconfig.build.json","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --fix"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.6.3","@balena/jellyfish-logger":"^3.0.7"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^27.0.4","sinon":"^11.1.1","deplint":"^1.1.3","ts-jest":"^27.0.3","typedoc":"^0.20.36","depcheck":"^1.4.1","typescript":"^4.3.2","@types/jest":"^26.0.23","lint-staged":"^11.0.0","@balena/lint":"^6.1.1","@types/sinon":"^10.0.2","@types/semver":"^7.3.6","simple-git-hooks":"^2.4.1","@balena/jellycheck":"^0.1.1","@balena/jellyfish-config":"^1.2.7"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.142_1623038884065_0.717242887958945","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.143-renovate-internal-patch-8914d5db71f92d291c21c212921158df68c2ba8e":{"name":"@balena/jellyfish-plugin-base","version":"2.1.143-renovate-internal-patch-8914d5db71f92d291c21c212921158df68c2ba8e","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.1.143-renovate-internal-patch-8914d5db71f92d291c21c212921158df68c2ba8e","maintainers":[{"name":"nucleardreamer","email":"nucleardreamer@gmail.com"},{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"bb733f1406482c3c90f91f774d9762c6e9f7fb78","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.143-renovate-internal-patch-8914d5db71f92d291c21c212921158df68c2ba8e.tgz","fileCount":18,"integrity":"sha512-N6ikuFzEa4OKfOcJZtd8u4bgNXdcV/appxRHk+OGrL59awdqianNvg6LMKjQTl1sRysQpKQJLwN+N/IbtmRG7w==","signatures":[{"sig":"MEUCIQCdKoNm4uUogii0TWgWNA3vx+k2i0bP8g7K1byQNmo2/QIgPaWyjspG93CNRipOLxix3G6LgKSnKWMAeBlXY9ONdaM=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":54324,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgvtdYCRA9TVsSAnZWagAAiuIQAI04BW8JTrdCRgl4TJ79\nyrqli1SRiYty4ABW5I80gmM4gUhS+lBiT+byzmM3egHnusVj73EF0KY6QPZe\nsw53O4MGazAC0m9i4KTdnrizAwvmQdEbEdzahUNmQxoA5oP5GK5aLGVP9wtZ\njO6Du+rxX99ZolmqQZ4+56hU9iZ3MnrQhDD2C6+knTlF9Ryh/1JpcrT7NR4a\njGVLwZiewKe7Zps9A+xOuabcs3Sg7G8qv8DyBWWhywIfRhdHZ757oP5rMqxy\njLYDEng12g9vVyIjZU7uav8xHs0dNS17KBpV6gLO9Ii5LIeOZanZVN1Sz/bB\nB+qFO/RXeVTODLqMieKIuAmF/ynSKx3sH4G88mDXIHEI6+F8WEkqLDDJ39FF\nXjcdRHwAg/mSUn2VqUJcBSq0zqnsVFHVRBdumMHySg5c5fy3co6rj+n46Yum\nhuAR/djwgLIZ2cEOVYHXarX9Y/GC0E/tQbTyNZLwDFz1/SvZg+PvvmkVunlL\nzRyU+MHoM6vzyJG26yDeno9CIt21NFK2SUdZmw+HYTCs4Bc1PK7ZohPOUiV4\nBT45Ujeq1ZK+vPBNYYJ+v5bVRD80mMeipVo014EkltRAmLidg6GGY2qC2tPo\n5E8rwpQ1DG329WVnY6mZmafswDrbHDWTQm6W3VfpV4HzSI57ODLdI/lx4me3\nKv4r\r\n=t62+\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\n[![Publish Documentation](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml/badge.svg)](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml)\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"8914d5db71f92d291c21c212921158df68c2ba8e","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc -p tsconfig.build.json","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --fix"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.6.3","@balena/jellyfish-logger":"^3.0.7"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^27.0.4","sinon":"^11.1.1","deplint":"^1.1.3","ts-jest":"^27.0.3","typedoc":"^0.20.36","depcheck":"^1.4.1","typescript":"^4.3.2","@types/jest":"^26.0.23","lint-staged":"^11.0.0","@balena/lint":"^6.1.1","@types/sinon":"^10.0.2","@types/semver":"^7.3.6","simple-git-hooks":"^2.4.1","@balena/jellycheck":"^0.1.1","@balena/jellyfish-config":"^1.2.8"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.143-renovate-internal-patch-8914d5db71f92d291c21c212921158df68c2ba8e_1623119704579_0.49857798256740793","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.143":{"name":"@balena/jellyfish-plugin-base","version":"2.1.143","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.1.143","maintainers":[{"name":"nucleardreamer","email":"nucleardreamer@gmail.com"},{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"944ab6883dcf37e564b3b441fca4f16b4c5e0fa9","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.143.tgz","fileCount":18,"integrity":"sha512-nZ6RGHgdS4rVjFSGwzFBHhnoFvXsROB+yHnQdn7fs4b23nYScUcCciRq82ivG8lTpwznfhD3BgGm1Pet8sEDdg==","signatures":[{"sig":"MEUCIBv/zZ3dbEDf6N6BYz49Z2ytkWiKZ48xrgyEB4NILKI5AiEAt//SIPhzzfayDBNrHjPvQX9jivS72IAoT6uHRnCwZXE=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":54259,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgvtgKCRA9TVsSAnZWagAA+MoQAJGlY+RX106ljkR0A5OD\ncJdYWGqCS70N8XhCA+XIUKCIisGpYrx7SIocRD0fkpwMybxfte54PI2EbTYU\ntyk5V1O4X4mc0xJ+Uo/wtRMldNuD7Y0ysRgfaQGrBJN1tqi06c36VVHQ0l9A\nxWZpkrYOyZSeu70UY6A4E2KZZf1cS5/ezTTCmSMv2Kupl3h3ydpUFvgoF2rG\nnKuNdpkrtfeF0XPAz03zGaIDIjb1OS09zrWUti74ou11R6PECTWSxljTxH1j\nZIgw0cGSfSVARlae7oios3KqFqjKJ+Zntc+Pvnz7+r7smoAltECI4iaQ5dXB\nZheZ4yq3mgPsnjrLM2hP/ipzKeoGyC3PZgdTWHOOaaIjWd0/x2rLDNz9xlwk\nTYysLCRm3hNdomBj8ywt54wbujf8YobJ2rlIDSY2edWjA7faw+37sffmuxuN\n/xyjaozKAynp3y1Snx3y19nlQyUn9SdzIt2gsjI4HxK97DACC+t2Hi36Km0S\nDWBTuRNmhL6Gagf5gLhP6LOcdws19TiPVZYnY8U+kJqMcZWe9v+zNSnUKgjg\ne8vWWL7JhWs9xPArkSTMqyq8M9Q5MvsRXTeeXVv4RMvDK4S+8kuAqxdzH8AO\nsv/K6ECNnVbO4swXIkjatR6V4MXzPZW21aD+kvspoZY4jlxpDIMz1iqzEuYm\nALCr\r\n=3Lad\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"077981f92f75f3c4f9c7a00624b621baf2f7f060","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc -p tsconfig.build.json","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --fix"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.6.3","@balena/jellyfish-logger":"^3.0.7"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^27.0.4","sinon":"^11.1.1","deplint":"^1.1.3","ts-jest":"^27.0.3","typedoc":"^0.20.36","depcheck":"^1.4.1","typescript":"^4.3.2","@types/jest":"^26.0.23","lint-staged":"^11.0.0","@balena/lint":"^6.1.1","@types/sinon":"^10.0.2","@types/semver":"^7.3.6","simple-git-hooks":"^2.4.1","@balena/jellycheck":"^0.1.1","@balena/jellyfish-config":"^1.2.8"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.143_1623119882133_0.010416770262210218","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.144-renovate-internal-patch-55c63eb2cb3225f705fb77c59d059a1b37de4088":{"name":"@balena/jellyfish-plugin-base","version":"2.1.144-renovate-internal-patch-55c63eb2cb3225f705fb77c59d059a1b37de4088","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.1.144-renovate-internal-patch-55c63eb2cb3225f705fb77c59d059a1b37de4088","maintainers":[{"name":"nucleardreamer","email":"nucleardreamer@gmail.com"},{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"ccb3efbd5e0ff7cdc488b99465a89a4ce8ae2b41","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.144-renovate-internal-patch-55c63eb2cb3225f705fb77c59d059a1b37de4088.tgz","fileCount":18,"integrity":"sha512-sDDhQXnrUXW3TOa5IugcQwU6EK37NScIa54TrjqICkKU2LjbDrkOmxqY9fkSEBekL86YqLKPC23lSVWmIxVXmw==","signatures":[{"sig":"MEYCIQDANygt4G8EuHeC7O82o1eAtNv/e84j719M23c3m5JUMAIhAJYIfXlIfmbsjOLPEaJI3aZMK6lOXUmVW/ADI+x1/Xl+","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":54396,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgvuseCRA9TVsSAnZWagAAq/sP/iMmq/ZcGJ9CFi+YS5Hs\n05t34he+0nwvUySjn/a+0QzPHlYIAyOLX+B5ZBYMjU11pRz6FnCuatau96Xk\nPuO22Y8CcfNUV7s+wN/epQTsKovCmtqdszzVZUh/aXqQIf/heSsrvrPlgE85\nGNSH8hmuUujTjgq02aji0pISuyxNH1jfnRiP7pSroUtkAWi794E9aISFMTNH\njFFDN4bbuT8f59fL8AzUSx93uus/oXAhRKX5QVvr89A9Lb9B2V0GjHD57X43\n+elC7XnjTPUWJvDeInPthoULerojiQg0t96WFAF1nexk8TLD/w6acuG0q9Xj\nSzXiFHgE0JaT85erLaVPrUUs4SOEyyxj2YZeJz/zd3pP7c/xYtVUNtLpAMGo\necWzRgOi77LeIgMDQGZalWnLlv2v5/01ZEG2KwY8uuDV2DKLIyO8EHrdH3tf\noW2BvIXdC0py5/Go1WCgZQzCeql+HrUpJsmVJUK67bNchsoC2JeLoaxcYfWE\nWHKAQukpzSQfJoWuU2Z+T4bjBk++8Ws4r3mlVfT6GEvqFE15MQWef0yf7RDL\nOsSG9hSz+arcYhlSoFOsJG4JcteaTFmxcqzkf9SmFfw7X+ljRKB5Nj2S6MFV\nOYL+UiDdNI8dLB81yZm9CWUOMU936lB+9RJ+LR/iT0mixPvxednTQjMwJnFe\nKy2X\r\n=7mm/\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\n[![Publish Documentation](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml/badge.svg)](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml)\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"55c63eb2cb3225f705fb77c59d059a1b37de4088","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc -p tsconfig.build.json","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --fix"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.6.5","@balena/jellyfish-logger":"^3.0.8"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^27.0.4","sinon":"^11.1.1","deplint":"^1.1.3","ts-jest":"^27.0.3","typedoc":"^0.20.36","depcheck":"^1.4.1","typescript":"^4.3.2","@types/jest":"^26.0.23","lint-staged":"^11.0.0","@balena/lint":"^6.1.1","@types/sinon":"^10.0.2","@types/semver":"^7.3.6","simple-git-hooks":"^2.4.1","@balena/jellycheck":"^0.1.1","@balena/jellyfish-config":"^1.2.8"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.144-renovate-internal-patch-55c63eb2cb3225f705fb77c59d059a1b37de4088_1623124766555_0.5874791727006314","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.144":{"name":"@balena/jellyfish-plugin-base","version":"2.1.144","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.1.144","maintainers":[{"name":"nucleardreamer","email":"nucleardreamer@gmail.com"},{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"a941cc8ecef9478962ed16bfc6eff82a90d17dfb","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.144.tgz","fileCount":18,"integrity":"sha512-4tZ+vo/XnASBKyBKeKmYIeK9qCfbeCMJJBzVCMkgVVZ3BCelh4pY8Xf6/xhrjTE1X+9mPwBluVGkQmZWUpQ0ng==","signatures":[{"sig":"MEYCIQD4hDcwOTGneug4HyGoBl4tyW67UGFjQKnFJmK+AhMAIAIhAMm6eK9woe5ezr7cp4DFdfzcjy2Glr1zl7moaldlvaqY","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":54331,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgvuwvCRA9TVsSAnZWagAAnewP/10toiJucJ+Wga1C6RoH\nsrsnpZQcSWDJsNiMiL3DjOjk/i2zlXsLiv/KZPYtskLZkGiC/MH8pNUXY44A\nd/RNX3e+iJV76Fezfi2HeTsUbTS13MRHfJZ33ONJvMgj3HYleGbFArZfG6+O\ndUvubi6kWkvhxjpyXvq89DGiy5AOQKORqDmnWb9659byTZcbCpT4zkZfuU8Y\nKeJLyjWhy27SPRnd4VrsKgQvuRba7QjUE65zIA5DssQFrsxOk06ymvVS5N0Q\nXlId2rCWhY+Rs8rO3nJa4T2r6qOwx1QmCYXFRGQys//+VZJRk6s1s+3SK1kg\nfTaoVRZ3q1+3/c/9y2Ajo2PdZjtPkYVetT1bCdkW5Cde1JK5TZGTk7EQzv5D\nhuv/TkGu3ryqC8kW5xNQ1W9Y7DLlHI6i7lhtRK3rtjhDW2bqLfMadLtFfljm\n9dE3PE9EK/cE5wkv/Rnlw7Ih3GJ3KNVs+P4IZnh/Iv9yGbsJ1Adolmlj34iZ\npmEJxRx+EOriBmfA7cMZh/vdRe2fRI4JpJPXnQUPhAyMnO70EcFftcBIKrrz\nTNCNVNUL92cfLVUW3gWkXtoKQj0959CpJdmXiCf8RcttCeNjOryWxSj2LGsw\nzD9Ljs3bhYfc2OiHof8427Ie9AXs0YrCpNwwwiBLzf+gLYSSV9O9fPfSVaQx\nt+ni\r\n=2kIE\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"4434af2d6b2d59173e12b12e91fa2078d3d14155","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc -p tsconfig.build.json","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --fix"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.6.5","@balena/jellyfish-logger":"^3.0.8"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^27.0.4","sinon":"^11.1.1","deplint":"^1.1.3","ts-jest":"^27.0.3","typedoc":"^0.20.36","depcheck":"^1.4.1","typescript":"^4.3.2","@types/jest":"^26.0.23","lint-staged":"^11.0.0","@balena/lint":"^6.1.1","@types/sinon":"^10.0.2","@types/semver":"^7.3.6","simple-git-hooks":"^2.4.1","@balena/jellycheck":"^0.1.1","@balena/jellyfish-config":"^1.2.8"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.144_1623125039819_0.5931244654987016","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.145-renovate-balena-jellyfish-config-1-x-32f304827cecabb04f4065f14f82b6d65bf3ba34":{"name":"@balena/jellyfish-plugin-base","version":"2.1.145-renovate-balena-jellyfish-config-1-x-32f304827cecabb04f4065f14f82b6d65bf3ba34","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.1.145-renovate-balena-jellyfish-config-1-x-32f304827cecabb04f4065f14f82b6d65bf3ba34","maintainers":[{"name":"nucleardreamer","email":"nucleardreamer@gmail.com"},{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"3d6b42f80aba8188bc796e795843c812e4b90ee4","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.145-renovate-balena-jellyfish-config-1-x-32f304827cecabb04f4065f14f82b6d65bf3ba34.tgz","fileCount":18,"integrity":"sha512-C3N/B5A31RpcX7R8dUQstZgGBlx/FhiZi/xTvmo2Gk13ZDSLFH45RNPUk9nRo0Rmi2IDykLKDgJ8XfkvaoUtsw==","signatures":[{"sig":"MEUCIG3I/nb70wuxAO3uvSWGJoSM+UYUQot6nopBCEw+Y4mZAiEA8DilDKbM2FvDDYiOUhxZiRvr4ZUothCCKrBDn56Opr4=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":54512,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgvu+sCRA9TVsSAnZWagAAvBsQAJvxNn17E0drfKI12SqD\nczOwFHyD7i0rpDqv7yHy/uRIbvM5OQKrGTMCu97JdV3lWvI5U6R5r60mpiIE\nDLuvYRtuCFKdpkoSoR4SoadfXa8tmzxgAm2dKVrose0B64S3cv7ka/naUBLC\nKlv1IRunjvQSvhcbdP+C+FFB17Rm6elg7BpPsdXU4h3elDCC/qwOd1B9geFv\nF73+4fHVQYyixy5ACPiA60ip9AJxlqos+/Noiioh+aYZbVMdzQcNQlJpPdS3\n8j0nDGWG8+lp1sV1ahpcB0ssaah3TkYdv7eCfp5hqPuBt17VMM/Oj2k3J4Lq\n4sivwVq3H045ClWIxhcoJUHOcptKOLnATmnKl0LziL92mBtK0MCGTQeXgOuG\nJAeEg7sYF70IA3UCjpF1QjSLwvKq+e397+jNxtq0gH/tlqN+YF0/kP2/cKZJ\nwPM/zrkodno0q7iYM34I980haQJeqJEPOh7m5cF6IqYxaX4FnWBBNw7BS5bO\nWsnfc4LBrDZlsH1Ixrjs9guOt8Z7tX9l29NmL0jfHFv72yX1txNHMR6+tTLJ\nOUx+QrTjllhRSoRCmeG9B7seCRkFomq3H/0yqajlAya64SwHp2Y8T+I/sfQ1\nJGl+vxUO1CC4r15qcjfCPMrTAmlCkeAhAzqOY4JSHl4Cbs+5wYIAFxowk0en\nDnYX\r\n=2nzq\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\n[![Publish Documentation](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml/badge.svg)](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml)\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"32f304827cecabb04f4065f14f82b6d65bf3ba34","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc -p tsconfig.build.json","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --fix"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.6.5","@balena/jellyfish-logger":"^3.0.8"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^27.0.4","sinon":"^11.1.1","deplint":"^1.1.3","ts-jest":"^27.0.3","typedoc":"^0.20.36","depcheck":"^1.4.1","typescript":"^4.3.2","@types/jest":"^26.0.23","lint-staged":"^11.0.0","@balena/lint":"^6.1.1","@types/sinon":"^10.0.2","@types/semver":"^7.3.6","simple-git-hooks":"^2.4.1","@balena/jellycheck":"^0.1.1","@balena/jellyfish-config":"^1.3.0"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.145-renovate-balena-jellyfish-config-1-x-32f304827cecabb04f4065f14f82b6d65bf3ba34_1623125932543_0.8596635900534859","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.145":{"name":"@balena/jellyfish-plugin-base","version":"2.1.145","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.1.145","maintainers":[{"name":"nucleardreamer","email":"nucleardreamer@gmail.com"},{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"f83e6713d10049fd5fc6dd785d64f0300f9a09b3","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.145.tgz","fileCount":18,"integrity":"sha512-M65SKzZ0sQMneFDcpd3sBnVqcSvokHLXiYuZpfakqNdUxArNQ5ncCIM6V0vDkwgpr2wXBhVVUfZ9bZWdkAhTlg==","signatures":[{"sig":"MEQCICUleYjm2QyGjMIZuNmKds3Fd03wkPMLU8LaFyy+prmBAiBdiRAnWn6V0jMm4hfsSHeAtEt/f3rhs5TB352cs1TuvA==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":54434,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgvvEDCRA9TVsSAnZWagAARZ8P/RU+YDCLXhsbfO80QKiY\nNxHFOWYNFCxHqNp7coO9sZTw6D+xTyFF5qEq/2ej7QguyixWdzBr91QfRB9U\ncfSnBViGna00EihTnBKtx+YiE1wS54G+RgS0B60G6AyJYOYWI3dx9/RxgKHV\nccdVOejApyV9EVijshkI0SLkp1ifEBVxcHDYRvb4eIpb9i8Xs2VAWgjJpNty\np7KCzBYuoUfeNHnERSJ6W9Zmm4pMhTZTFGwqZafk3mIWLRJwJP2oUqscvGcI\nDsqF1d4pHBfcIu3YxkJ4WJI5fhPMLbKEczBWL1X5PNix+JakpymfOzLZSjcf\nOIPf0qh/9uvGCvJpQ2ZhkmF7kmpfNebXdl8gr/yFd2wptMeP7GazUCUcmsPD\n61ieug6NjlECETx8MuXo3E3vr8Xcg3tW9DsPZ0+OKyjqDScWewaxgcfpm1T9\n5zFifYRoSmsQG2T1i0zAEDZ6v9jeMQThMGpYa7k6ilCZ2vXZRG3sfMxTR8Hy\nLRgkkqYXoabyEd51McKMQt1cZeTNgA9lg1+KNK6ZZUY7xy660WQdQlWZQSvR\nmAHM2JghW/Y6kMTYP7/bYtiReAEcJRPRGzGTZPOfVmPDZ4B4sigeySyVo2H5\n/ci2jgwLy3ZOU1LcVneSj/nFztG7AZt5nwmJxhudtg0qGVQUuEnlKE5yez/r\nu9Rm\r\n=FwYC\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"0e88ddf274f012ff961e1dedb764c1cac39a58b9","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc -p tsconfig.build.json","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --fix"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.6.5","@balena/jellyfish-logger":"^3.0.8"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^27.0.4","sinon":"^11.1.1","deplint":"^1.1.3","ts-jest":"^27.0.3","typedoc":"^0.20.36","depcheck":"^1.4.1","typescript":"^4.3.2","@types/jest":"^26.0.23","lint-staged":"^11.0.0","@balena/lint":"^6.1.1","@types/sinon":"^10.0.2","@types/semver":"^7.3.6","simple-git-hooks":"^2.4.1","@balena/jellycheck":"^0.1.1","@balena/jellyfish-config":"^1.3.0"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.145_1623126275275_0.3547426178893691","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.146-renovate-internal-patch-b98c4ec216540ad5bcfcd35f21b9253ceb611673":{"name":"@balena/jellyfish-plugin-base","version":"2.1.146-renovate-internal-patch-b98c4ec216540ad5bcfcd35f21b9253ceb611673","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.1.146-renovate-internal-patch-b98c4ec216540ad5bcfcd35f21b9253ceb611673","maintainers":[{"name":"nucleardreamer","email":"nucleardreamer@gmail.com"},{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"b36845968f8973f110ecd2eb52a43440b786319e","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.146-renovate-internal-patch-b98c4ec216540ad5bcfcd35f21b9253ceb611673.tgz","fileCount":18,"integrity":"sha512-m4djlwR850r+yJKLT3kyB4yPImN4FbaSX54yq72uvKPz3MMGPNtHG18m23WTXT/pbsT2rKl5fVdEGOX8vo/bmA==","signatures":[{"sig":"MEUCIQD4XHJM0bLCMwhuw0N9rJ6/C9HUs+O0ccDUMj/tykWnRAIgNA0IXaZ9jff7+lVr+ByXNr1xwydIeGUEQ31QD/0CnHc=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":54572,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgvybnCRA9TVsSAnZWagAAHOEP/0vcd3nYXQXmqzv3mhYW\n9pvP9TRABgbkUZUF53KgOwCwgk8kjXBjUqSEWetY9GuTw1FXobOKmC2D/rHm\nGAUSC9agCmM3aJIrYjRDnEqIynCIOXSg5SIt0MfReniJgGUCUNGOxvrxgLHG\nJWqi1by7/9+bbx16SZBUcRex9Sm2bcsMR9tjXAk/prTrr3hCSs3oAkHQwH9+\ngizQHYZkpTlodJUgCP2kIbPF+FLF2emkXnrtAGsYd0Wn5vg9Wsy6IKJa0yYQ\n9aFWA6Pw75FOKAqwfkNlMVTydyPZLhILbSzkt5z0ejcA+BoZtkMvn4VtFEEm\npUuGlDLz6ldyKugF0TjcF3AIXSXgv5+KZO5PDfRWlCRLHSQGlEsbvxw7TH2t\nwJ0bcGpSLyjbMV4flTgib6gAlmgNDWswKLgKseQfFlmnIdShs9Rx790c+u0q\nxaB2Vqca2L+8mN8qfm9RXTe6hdLn9fgJ2ZBxJioXCvo4oVetTPskZ1EQpVkC\n+yor/T1lV/KLXFWyN5iqF0nkNRXCPDiC5Tvkk8nHGuEkAPcJl8sMhje1wXKM\nLRoVIwCwL2pQTLaTh64nbj2vvNZXH/cT6Hhd4qvbU02sGT08YdI7lqX8A5eM\nMXIdP0OoRC3L/rUJ9fN+L/mI9Ea9w9fPGkH0L9RGzyTIENQsZeCE8EwM/3zr\nGSn8\r\n=Y1Up\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\n[![Publish Documentation](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml/badge.svg)](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml)\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"b98c4ec216540ad5bcfcd35f21b9253ceb611673","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc -p tsconfig.build.json","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --fix"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.6.6","@balena/jellyfish-logger":"^3.0.11"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^27.0.4","sinon":"^11.1.1","deplint":"^1.1.3","ts-jest":"^27.0.3","typedoc":"^0.20.36","depcheck":"^1.4.1","typescript":"^4.3.2","@types/jest":"^26.0.23","lint-staged":"^11.0.0","@balena/lint":"^6.1.1","@types/sinon":"^10.0.2","@types/semver":"^7.3.6","simple-git-hooks":"^2.4.1","@balena/jellycheck":"^0.1.1","@balena/jellyfish-config":"^1.3.0"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.146-renovate-internal-patch-b98c4ec216540ad5bcfcd35f21b9253ceb611673_1623140071283_0.819250235721336","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.146":{"name":"@balena/jellyfish-plugin-base","version":"2.1.146","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.1.146","maintainers":[{"name":"nucleardreamer","email":"nucleardreamer@gmail.com"},{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"3ce82f10939c6e31fb54c7f1d4917cdb75f4f49e","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.146.tgz","fileCount":18,"integrity":"sha512-Z+n+e8yGI//ofk8YypfWFIicXwhMDEGqHh1I1lhdeENKobGAoy0plhfcvTcOIc0H+jA0A3wz1Asw34mkNYPxOQ==","signatures":[{"sig":"MEYCIQCCj8mRpp/XQTeKGiJVVsqRny3aZoYqpTfr9u9z4DxbDgIhAMonCha4gI5vlqWZ1kepoQUpgoFOK0rHPyKAyq8KTPFI","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":54507,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgvyetCRA9TVsSAnZWagAAS40P/iuKObDNzkoJ1oeuSdC+\ncvYj9AXdQzVhkmelBcFXhOgb3kZk68aSRlVWZhRv2NbZhFFli2xvOAD+SD4j\n/Ey7VQk6fDY12s4EgFjAJ/FRFahsRd3DUS+EjC+CphbuDoVJ1BkhDiZOMe/i\nd0avfViZcHnpzpDATncTuKsNdPpahMXObA5xhLp6DazsjmyWSABgsCDrQ6jt\nn8Ttleo+rEVt/5SLWOoZ9To0Jrh7WC29B4qykTmXhOb+FfmbNjDRzRy/o1TX\nov+ZiS/UysRQcD0xHzzEYhYXE4X/ys329tJ6vRx2+S+R32+5WUTk46r11+Kz\nomWHPgmhJXbshv1/ppB/VFMMXn/FWHncxgUeuy77LDqSnjLZ2r6HHwMz7fkx\nYaNUVKF0NkvMQTygIdqSqCd84/WeKpPwyiqOIsT1x/rmgnmJmC5Nb2V8Du8X\nYKRzZxwRIV5VnNqP15DGKAI5vp34TbQAhlbGmCs2vEldSuf6+IH/az/2TPYG\nDM9fVRO+xJH9nGH2oqB6Kh7w8NqwT7/2WF1q5xmXMXqHa6InK3lFJ1EPUUYx\n8hPed+w+AbOriGfnSPRAp9myIIHyo6bS+uJQ98QZlLAAchIsNYVob1F9v344\n9fXijCZB6j83ceH6nhthBwfrTddH0qg7esED0NOSxTZDKem6VzTF5/F5tTp2\nKk7p\r\n=fVv9\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"11d15e1f0526b8a0cbdfa2970f29d1c180875239","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc -p tsconfig.build.json","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --fix"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.6.6","@balena/jellyfish-logger":"^3.0.11"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^27.0.4","sinon":"^11.1.1","deplint":"^1.1.3","ts-jest":"^27.0.3","typedoc":"^0.20.36","depcheck":"^1.4.1","typescript":"^4.3.2","@types/jest":"^26.0.23","lint-staged":"^11.0.0","@balena/lint":"^6.1.1","@types/sinon":"^10.0.2","@types/semver":"^7.3.6","simple-git-hooks":"^2.4.1","@balena/jellycheck":"^0.1.1","@balena/jellyfish-config":"^1.3.0"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.146_1623140269105_0.7817295466840586","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.147-renovate-internal-patch-1cf0b5590446920a3ef4318b9e67718c5f59afd6":{"name":"@balena/jellyfish-plugin-base","version":"2.1.147-renovate-internal-patch-1cf0b5590446920a3ef4318b9e67718c5f59afd6","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.1.147-renovate-internal-patch-1cf0b5590446920a3ef4318b9e67718c5f59afd6","maintainers":[{"name":"nucleardreamer","email":"nucleardreamer@gmail.com"},{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"ee040e4fc38e9bd35813c758d83ea910184c310e","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.147-renovate-internal-patch-1cf0b5590446920a3ef4318b9e67718c5f59afd6.tgz","fileCount":18,"integrity":"sha512-Y2iWSlQCADuZdw2WSL/biMVu5mi08gQXFT29mWLoAw1Hj1ZTTfdqS2JshXSEa/TU3QA9zrtGMlDpIO0SwafinQ==","signatures":[{"sig":"MEUCID8DDvb9h1zQNsrf+mBljmt3ECuQ2mhlQMpPbWMQtwCvAiEAoAssKs3wsgiqCZnYIRWPKwtAgWV3Nmw8QWnBAdjKjGM=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":54644,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgwwZTCRA9TVsSAnZWagAAO8YP/RRO5Cb8jOTl5sXEOGPO\niKeToqC8IH/Uv/72upOeSmCujrSLw9rJK3SeSvby95GH0F18sbrimBWNqQ50\nGQel8la2U2b2uKKzjlDZ0zfbx6S7plfw9bhLbRzVpjuEhbNVKocZ+GfFW7N3\nl7W9Y2x0vUKHsKJmXG1iGqUmyWCp1tlWoB785wvyIjPW2xr/qYEQBc5axdDo\nVkD/lJtKt1WQIAn/ic853kUE0zfv4VDjOnVcUFAvnqBAuHG5yv/68K3t/To/\nZbFybZA6nxHC9bsr0SfMBS3FUZ1B1ERKKTqM313BN/3dRlQX99MR59a1wqrF\nxomjNjdtrtFYhr0k+oeINdnRXinCYwA+QS73CJwb5DevlNjYMmtQbzElfDe1\nTFMFwUYy1cZqKBGRfyvdh9iFVHF1SRqQ/682EExYALaXQl4iys0LIXhgd2oi\nt6H6Whx4eH2s49uCmiphIRsiPzBV8so78N6G3qCUkmRQsAGkmRAXiUAi5soE\nZ8OE0iEzznEK9huq9wdF1oN+EPuQ7osNvrU1eCq6Lzlgurki5ZClLU81lHcU\ns6xEs5xO0875veGDMYyvdteankHvA7LIr0103HBM8FP2GXny0SjRZEYo1YLb\nUdwk2EP5ZmKkYFwOTIy//ejZdud7g+Ijqmcw2XO6VMUxDy3LyeSlMVY8PJCL\n4TbD\r\n=2jdo\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\n[![Publish Documentation](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml/badge.svg)](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml)\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"1cf0b5590446920a3ef4318b9e67718c5f59afd6","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc -p tsconfig.build.json","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --fix"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.6.6","@balena/jellyfish-logger":"^3.0.12"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^27.0.4","sinon":"^11.1.1","deplint":"^1.1.3","ts-jest":"^27.0.3","typedoc":"^0.20.36","depcheck":"^1.4.1","typescript":"^4.3.2","@types/jest":"^26.0.23","lint-staged":"^11.0.0","@balena/lint":"^6.1.1","@types/sinon":"^10.0.2","@types/semver":"^7.3.6","simple-git-hooks":"^2.4.1","@balena/jellycheck":"^0.1.1","@balena/jellyfish-config":"^1.3.1"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.147-renovate-internal-patch-1cf0b5590446920a3ef4318b9e67718c5f59afd6_1623393875752_0.04570251125634095","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.147":{"name":"@balena/jellyfish-plugin-base","version":"2.1.147","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.1.147","maintainers":[{"name":"nucleardreamer","email":"nucleardreamer@gmail.com"},{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"bb1b13fbbfcdff3fd248e6b48f50362b891ed9f6","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.147.tgz","fileCount":18,"integrity":"sha512-fcwd1b3cGQgjmW/6n/k9h5lzBApg5qP36h5myvZXTi4ozZOulqQ21JM3t+iS3HyIxI4OS5fI2LaWKWSm1zgsWw==","signatures":[{"sig":"MEQCIH7/0EniuDePLdznGipCOE+HUBUXRbCgJOcXv4x/spooAiAs5OTQzPOp7g03d+PRANRl3l7UDsunLbXlk0WODcqCWw==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":54579,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgwwcZCRA9TVsSAnZWagAA9ecP/Rjqpka+0jZb5yRZcyZ9\nHvAc0GUlBMJ81yvykwWJmb6OEcBVWlvfGToqnaW3N6rLrSlgNBfN7E2Zvzur\n8fGXtzJirlGiyz+dXmAGOrBkLXXKL+9/xNLQc896Wdw4/3iWryeH48gQ0A+j\nE1I1TmIzR5+0Rpl/nyIGXxw/hOADfC70df8DJJEsyqAjBQItZWiZPTrKuG9Y\nAGvXwXYBra3ahDsOahq7QRLpJu53E1x7tcg8vrJ2pTBS5IGuJZuDktCJMicv\nMMm0mPZwZr471XmYif1vEI4RqhneFIbhFdOsL3PQ/EaHvXOr/ft5pph+ojDA\ndFhJxUFcBpF7atI2n+iGNfm2owtbFTQCkvJaKG8OpspktBhorGWsZg0lb+6s\nIcns6O3rHprftqKX3Lj0I6WU2hvlWA00HdcocLUYbKMgxCwCcjcGQvhB8fc3\ne68gZVWSRAAcmGGmHdJMitsNzaA8lYvlqu1kqK2OdzoanlzPPVnRno+8I48W\nGlbKWAEHCMI7EcUStMJDSqGQpoFtUwhxuIPAchnAT+5lc632I4uLL6rq98OB\n0UyCdJB8CoT1zsxeIaQtZtmcWnHYISgUQIwVjqkcKtMM3TauYAinLSq1G9r5\nA1GE3wLdu15/zOWMz1f0DOE+J3tK8YHRs7NWFnWYTwXF5I3DmH6ilV/3g1GZ\nmaUR\r\n=cqqi\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"aa92debfc1df2b9da145afc76daf9356e2a5d36c","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc -p tsconfig.build.json","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --fix"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.6.6","@balena/jellyfish-logger":"^3.0.12"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^27.0.4","sinon":"^11.1.1","deplint":"^1.1.3","ts-jest":"^27.0.3","typedoc":"^0.20.36","depcheck":"^1.4.1","typescript":"^4.3.2","@types/jest":"^26.0.23","lint-staged":"^11.0.0","@balena/lint":"^6.1.1","@types/sinon":"^10.0.2","@types/semver":"^7.3.6","simple-git-hooks":"^2.4.1","@balena/jellycheck":"^0.1.1","@balena/jellyfish-config":"^1.3.1"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.147_1623394072986_0.8268982022847471","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.148-renovate-internal-patch-d1df50a497976e766af74e6e7baf90023150ca1e":{"name":"@balena/jellyfish-plugin-base","version":"2.1.148-renovate-internal-patch-d1df50a497976e766af74e6e7baf90023150ca1e","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.1.148-renovate-internal-patch-d1df50a497976e766af74e6e7baf90023150ca1e","maintainers":[{"name":"nucleardreamer","email":"nucleardreamer@gmail.com"},{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"97a97181ef157d4c14c7963f4b1139e5d3380e43","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.148-renovate-internal-patch-d1df50a497976e766af74e6e7baf90023150ca1e.tgz","fileCount":18,"integrity":"sha512-qHWw+VfAIROE9S30OB+hjUIp6txV+4RFRRMmutXXTU7IPqN19eLWkpuANXbDIe7arFo+oXGAk7eI2O/BUY1nvg==","signatures":[{"sig":"MEUCIBndeZrCAYchw92AXHtQmAlGSVuH7HnQESqbtNTCj5/iAiEAvwM61R6Qd8K8A67BIemEdc3NuU+UWxtgN5TifgAlKts=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":54746,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgwxF3CRA9TVsSAnZWagAAQ0UQAIQEjVANXqnxMaJb2X4e\nnBgZ8OFlOenFlAsHTE7+TWlcZFaaAO75sw/HSVEYJ8oEtcqZsXiKMtIpwkcn\nuk6lWQISE3bU6GDNDcCuAu3aZq3g0L/wBP3KWo1JZAV9d53NXXnfzUxQGd9U\nhAWy0IStVLVticwrQN2PJ0qo5tzMPAwA6J/I4AJxuSb8N2R75+Ps7/gRxLYX\nJLSY5rQPTZIP2pVfP8vvtpjuJAIUG4BVfJVgF24p+OXiCSDHxNsN9P0rC5a9\nfPemrVsi+j9tqum/vVDWil7H2hK6nkIRZMuAQbJ3qpug7vln6/GjLXqakFbt\nUa+2shrVE6U9APqzkhguQxWXMaLie9pwlkcib0SqmOfO+h/TL6PB/1rCbr2V\naxB9tzBVJVi4j1qPcwAXg8Xs+Yq2BAtZBt0062k8ffN0hw+sPyPxRmH7lCIe\nUHc9CdoIUXQCmEv4MFFLeprwSdhD7+kMXqjrH0UFb8XVdvp/tOvtEx6/Wngm\nOllwyrME1YP3PWj404lVyTXcd2uVxkggNLptsTo79qlZ5VoI6RNkGtR+wsf9\nEoFzb9D7J8olFfD6b/eJz6DGRBs66QqHPgRZcDGC7nKVq1F51NMjWOPcgAOb\n+ay/4hwDuXr69DyipzdUtcE29gaylq/iru8NcMllmjzjJCh5eh0ZSqdJgf8u\n7kJI\r\n=H1Rp\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\n[![Publish Documentation](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml/badge.svg)](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml)\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"d1df50a497976e766af74e6e7baf90023150ca1e","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc -p tsconfig.build.json","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --fix"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.6.7","@balena/jellyfish-logger":"^3.0.12"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^27.0.4","sinon":"^11.1.1","deplint":"^1.1.3","ts-jest":"^27.0.3","typedoc":"^0.20.36","depcheck":"^1.4.1","typescript":"^4.3.2","@types/jest":"^26.0.23","lint-staged":"^11.0.0","@balena/lint":"^6.1.1","@types/sinon":"^10.0.2","@types/semver":"^7.3.6","simple-git-hooks":"^2.4.1","@balena/jellycheck":"^0.1.1","@balena/jellyfish-config":"^1.3.1"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.148-renovate-internal-patch-d1df50a497976e766af74e6e7baf90023150ca1e_1623396727876_0.3917470503411229","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.148":{"name":"@balena/jellyfish-plugin-base","version":"2.1.148","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.1.148","maintainers":[{"name":"nucleardreamer","email":"nucleardreamer@gmail.com"},{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"46df8dddf8467e6b469f0684bfd6582e60b5b821","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.148.tgz","fileCount":18,"integrity":"sha512-qy9QdL7aEMg7Q0ZOXiYidthhYnJbV2hyIKlPc7vxu8no1HzsRdyDFbaKrJHZCuxlPMV2b7yRloQc6G+xVQ9sEQ==","signatures":[{"sig":"MEQCIBBnMmhmv1y2EVW9N02afgF6/ZBamAPr/9pdfHXc8jErAiBQz267nJPu5PlcWzWZi0meR399TwIEQnFmYhUVEGRzAQ==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":54681,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgwxJECRA9TVsSAnZWagAAOf0QAJfT39sWm8TYEoVips4i\njqTfoL58hUr32IPnu/aAkMl9bXNTBYhDG3nT2aRvGb+u+jQlPzM3FA4R9NTd\nPo3KN/MvquzjpFrhFWYYTn1fMEi8yKrODW0p4kX8MAKue2ryfKsp1xACrFpP\npXJk76jglhOdVwbkc2//HNxCB1faRj/DRuFoYpiHCTpY3POwRvqYVKNAuqZm\nOP+rs2TdxQ3b6gKLq2d8dJ4qupt57iDmegI54goc+VuZdKZmCIw8EuPFVmp3\nfHvhh8U1uaZqfZUwQfymYM1UxctQGKr/Amu+syl92DmzFyAzz41toi/IvrZE\n7CPvsW4Yw0TuYumgXfZEWA4laVb6cxLp1ZYybf8lWBlHqZ5OiCQo17yU/RKJ\nVk9nEtlOu5DF+qr0MT4UHPqgMV7vgwEyUTc/JJzOCPNC5WhjIgZ/u6rk7WfZ\nwP7LtxCA5QJdE3BAY1yigm5oFsX1Z/XhUkPdLiqH1mPsmkz/jbLQq0YgGOpG\nNNoc0jaim2u161RO6FmlC+SoLgw53nieWOOidrK4dNASO6J05ltfrcXYhV84\nHVaxjjsOaXEXBiPeurHHqaoBKRFg2yQEg/2L2AuIfSbHQR0mavEwk4BhYeH4\neDnitR32SzOdetVCfIJVexv5oFXnfzDj4SQSu3n2SSjx6dI28fY580dvNaAk\nd2I5\r\n=pIBJ\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"6ed2b8a681e581d5d3be3f13d174770903427e36","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc -p tsconfig.build.json","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --fix"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.6.7","@balena/jellyfish-logger":"^3.0.12"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^27.0.4","sinon":"^11.1.1","deplint":"^1.1.3","ts-jest":"^27.0.3","typedoc":"^0.20.36","depcheck":"^1.4.1","typescript":"^4.3.2","@types/jest":"^26.0.23","lint-staged":"^11.0.0","@balena/lint":"^6.1.1","@types/sinon":"^10.0.2","@types/semver":"^7.3.6","simple-git-hooks":"^2.4.1","@balena/jellycheck":"^0.1.1","@balena/jellyfish-config":"^1.3.1"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.148_1623396932204_0.8799633298942495","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.149-renovate-internal-patch-c5a36ca18de3de2ed9f50962cd3fb919ff8a7431":{"name":"@balena/jellyfish-plugin-base","version":"2.1.149-renovate-internal-patch-c5a36ca18de3de2ed9f50962cd3fb919ff8a7431","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.1.149-renovate-internal-patch-c5a36ca18de3de2ed9f50962cd3fb919ff8a7431","maintainers":[{"name":"nucleardreamer","email":"nucleardreamer@gmail.com"},{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"e0a0b1da572ca7d23f5e1a0e667028981a96e228","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.149-renovate-internal-patch-c5a36ca18de3de2ed9f50962cd3fb919ff8a7431.tgz","fileCount":18,"integrity":"sha512-lRsD6QXp4LpbCGEkcWILM3zLzOM2bAd/TDL19spQr4B2AqhJ2P9bYR+BU4p6AsWFgNCpGfybgcvk4DNda3nw7Q==","signatures":[{"sig":"MEQCICWI8KIxU74NETwFSqGtrehBegYhN0NCsQtc90IrQ0RLAiBfYVWHU53IkbGMtUxiyB7D9UG9CPBCcLfwlBeYNE5jnQ==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":54850,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgwxOvCRA9TVsSAnZWagAA9j0P/i6fmjf9O2Qhy3nKUq5T\n/du33G0Xn5xTGGHQeV3LLh3J8/lZ+ZygBu9PfINbq1p16KXfX8OYASkkupBu\nFDMP7ALQC+sxfNhAYFHfeJpRUH2Y4ICNtPKPVbmJQYnqPsDX5TkQo4Gw/2Ye\nhH74YfCWnMmWXRpO8J5Bhn5yLL+LOT77ps4BoJAhfuo8BPpV5NnOiKHt0mtS\n89iB4pqg0BZrA+PcUliN6UfFDvfhRPmg4wUVRnhQ0yx5GieSl+6YKb3lwJa6\ne2fwEQdJjHszQjIQTGBB1PZ8+brVMh4dZ1QAlf0g0Cv2PuYAv5vTe18l8R7Z\nvVn7xDMkjn/YBjnmmRQDLX6Nkzm2a4OziAOjzaAjaKSXveitmNu/A89XAwKw\n4AVSTxnsqSdTHEDXNluVEXfMZSp6MFrxBzBXsMxJMSF8hCuzfXBA2gaSFQjs\nWIKRgpjjCMcPZbWdfpCvSX4JoQdtsnMKo3lfraLXuL350Kq9/76VQ6jCGMeI\nh2mSZzT4lUCF8iBhE9H6hgQD+oriSWtAlutoXXY2q/7rS3IoPDL1KOrDSUWu\n6z5BQHL0iyI7LUPRv14OlrJOSB7G5c6KiQDdp7U2g2RR6JDD7B2644Hh2Kzk\nm82/Al/0WJSo9qodSzKLL7fPQt/TgOia3/rJck7hvkoI0Fk79X0ImYI9zZpd\nU9Nd\r\n=embJ\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\n[![Publish Documentation](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml/badge.svg)](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml)\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"c5a36ca18de3de2ed9f50962cd3fb919ff8a7431","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc -p tsconfig.build.json","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --fix"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.6.7","@balena/jellyfish-logger":"^3.0.13"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^27.0.4","sinon":"^11.1.1","deplint":"^1.1.3","ts-jest":"^27.0.3","typedoc":"^0.20.36","depcheck":"^1.4.1","typescript":"^4.3.2","@types/jest":"^26.0.23","lint-staged":"^11.0.0","@balena/lint":"^6.1.1","@types/sinon":"^10.0.2","@types/semver":"^7.3.6","simple-git-hooks":"^2.4.1","@balena/jellycheck":"^0.1.1","@balena/jellyfish-config":"^1.3.1"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.149-renovate-internal-patch-c5a36ca18de3de2ed9f50962cd3fb919ff8a7431_1623397295222_0.9553290117919964","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.149":{"name":"@balena/jellyfish-plugin-base","version":"2.1.149","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.1.149","maintainers":[{"name":"nucleardreamer","email":"nucleardreamer@gmail.com"},{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"60a514b0695fce90a739b097259075385efa391e","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.149.tgz","fileCount":18,"integrity":"sha512-RBLcuo6v6//lolhsv5RCcMGkaiLfxjN0JbAIqW6GbnMM8nTgHTBpsGKFDi7VoBrkj+6mfQbVog1LsAPbQaUrDw==","signatures":[{"sig":"MEUCIHhs3uiQye/cKheiZWySnUJesHdeBg1kjfjmmNxPipEWAiEA5IzIUmQ1U6ixOOkM5ZHbUyLwWeT75Gd1WUfTgeHWnkA=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":54785,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgwxR1CRA9TVsSAnZWagAASxYQAJ7Y1YB6EnGDpOhQMZ+S\n63ldqCPq3158ma0/KXShafRJQfw9NdP9/h6yr2qnCjyf967Z9JpS0DVKTBN9\nTFNpcxeonxra22mst5A5zkpyO6tRcuA0A6ldhxaBJGK4zsuazQMPOHnFxZ4Y\n0t/C10daAqudSN0ApVfmGxLXRe2LSx3oNRkQ4UBmwCMlrb4GQyp/9sDQZQNX\nRC8naP7X21J9YcNfEP+dBmiz0XdMPM1Xz4K2dp+bXgZvKEUYgEWizgMeIcY2\nG3YXMtw2w3ecD+0+9svl2qpF2ygwnqYQkJz1ON/pWNmGk2Opi7hkdSvMe/bC\n6skUbu/XUFtc7CbxINok+LXXWJZHs7HegdF68ioGzY6vLLCHHDr4CUqemQnx\nI6/yL45M4G5qJMX+GxKnn6B2PwiTn31uxHDbHUD4dKAfghg9rkRa5LlGX5hy\nnHt3qfXbeAMH8Xmvt9WR4T/HgDMl45FbGkSiuXdGMDZ7pT/D8Y8e1FVjAfDT\nkqr0pUjeTvYdXabRX97wwqbFy2eKFHtfEeYKiVSsOIHj0weHDmWs4cJKaOE6\nyP4e26lt+f+cvp4Ns4hvHMAEZXP8PAE9EOEANLQS46Rfgq1GzTPejWaLmrbH\n4//uJR81APLDFoDNAgM69c9BfheL9iniLrf7tNNCFwQYYagNBjvnNVjO0sUB\nNzvV\r\n=F2Xj\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"46691d0c71631615d047712b9495517835b1379a","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc -p tsconfig.build.json","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --fix"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.6.7","@balena/jellyfish-logger":"^3.0.13"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^27.0.4","sinon":"^11.1.1","deplint":"^1.1.3","ts-jest":"^27.0.3","typedoc":"^0.20.36","depcheck":"^1.4.1","typescript":"^4.3.2","@types/jest":"^26.0.23","lint-staged":"^11.0.0","@balena/lint":"^6.1.1","@types/sinon":"^10.0.2","@types/semver":"^7.3.6","simple-git-hooks":"^2.4.1","@balena/jellycheck":"^0.1.1","@balena/jellyfish-config":"^1.3.1"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.149_1623397493412_0.8127666465936778","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.150-renovate-internal-patch-8e95f52c701b2687ea4a45a66805197a7b338798":{"name":"@balena/jellyfish-plugin-base","version":"2.1.150-renovate-internal-patch-8e95f52c701b2687ea4a45a66805197a7b338798","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.1.150-renovate-internal-patch-8e95f52c701b2687ea4a45a66805197a7b338798","maintainers":[{"name":"nucleardreamer","email":"nucleardreamer@gmail.com"},{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"2da982ecf32e4c8bf357e86cceb8af74a121861d","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.150-renovate-internal-patch-8e95f52c701b2687ea4a45a66805197a7b338798.tgz","fileCount":18,"integrity":"sha512-5rNJwHStxD8oU80uZM2QFBCOQnHgVNJu3buNaRc92bVu7tfWYspodmAfZnOmoXrzADI5WJOudmMbR5x2rl7amw==","signatures":[{"sig":"MEYCIQCnTNEUkH2Uh21JfDil2zOvf324dIV1mfqB29ZSCJr7KAIhAJjp4oPbApxq257lot87r22A9PvpoPiZmIyhlH9i79yF","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":54954,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgxAYBCRA9TVsSAnZWagAAFH4P/R5EiMcoeHGQd5thAV63\narA+t72WKkMppwdKNOZKtqv7kLA8yhyFZDUZQoefsO3FYJk7hMeUGWqeMHh1\noBmEj3NZQ1y9cJePcOv6616boXrSPnWLwTYkE/oCoc3/neu4dgxh7gB+cdbm\nIKH8ZDhI5ZgUQce6c8a1tCDkC/0co2KQuvp0JSU6wUbwbgeQVCdobOr/v0a7\nXSLdWH6x6UsZL+ueRWl3pg0g1ucKBExgzqbg+Df6tFdb1n5aB7fOAJzPeHVS\niLkIRnCsGcmsRgESztsEmf9YVS+c4hAuWS29N/DSbP8wANqWnjXXdVy/gu3U\nvK6cZNeJKDqrCbDT012Lk+uN29Tc6Mvmr+qgGVLzTuD9pBJkqk+GOeR5bP0z\nO8dELKmecbt06P2OMvIzZ3vaGToaFb0Z+YF01L0IPV4UB1ZFdv5hi2uyxhfF\nu+fIQ8KK3IeW5AoCigk2URFdgT0cYLLfFf6QKJkU4/3Obz3pxIJbl87SdC7h\nv7X95p+Z1BowZYWroufp2dAEiW3KjkrNslERPMB8jN/gsz4KdiHaPomO5f9E\n2sgy9ja5Dnt5138VWr+n+63jqpCcZG5MYOmN6zRz1RkkXLNTFgvtNAQXwbIG\nyI28AUP4S2D3M/7ujaJAJJRT+WxXuO72/o5kkzIOnjVGksdSgiJiqadMqwGy\npAxD\r\n=WBCQ\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\n[![Publish Documentation](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml/badge.svg)](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml)\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"8e95f52c701b2687ea4a45a66805197a7b338798","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc -p tsconfig.build.json","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --fix"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.6.7","@balena/jellyfish-logger":"^3.0.14"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^27.0.4","sinon":"^11.1.1","deplint":"^1.1.3","ts-jest":"^27.0.3","typedoc":"^0.20.36","depcheck":"^1.4.1","typescript":"^4.3.2","@types/jest":"^26.0.23","lint-staged":"^11.0.0","@balena/lint":"^6.1.1","@types/sinon":"^10.0.2","@types/semver":"^7.3.6","simple-git-hooks":"^2.4.1","@balena/jellycheck":"^0.1.1","@balena/jellyfish-config":"^1.3.1"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.150-renovate-internal-patch-8e95f52c701b2687ea4a45a66805197a7b338798_1623459329430_0.33245888538084967","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.150":{"name":"@balena/jellyfish-plugin-base","version":"2.1.150","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.1.150","maintainers":[{"name":"nucleardreamer","email":"nucleardreamer@gmail.com"},{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"f44c37176881d4a83a14c123e3bdabe8bbc694ab","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.150.tgz","fileCount":18,"integrity":"sha512-YSynEA5wtbo7Cwo7j5OzkW/vp1K4Ziz51KgXN420iCtXUjRSa7vouiDZx++E8V+SsWht4/Q5Um6iyE6zQmkThA==","signatures":[{"sig":"MEUCIH02U/HcAFXmB+IIoMo8OtxD2Hwi6OVO9TRpK4H/5eI/AiEAr1okOh7ZLv8DFeejTFRr5mRlW7g9gUwsuBSzXxp0cjU=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":54889,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgxAbRCRA9TVsSAnZWagAA/OoP/3LQX+U4vOJo/9jPy/5h\nkYairgXc+HiUfYBrVs/MKeQOniDSXjQMSX5ZyB9qPljw/W9C8jcoBARRDH0k\nkajObr6mQeM4VchAWWZleH/7XWD2MRKQ/gGq4m3yB7P3bNkErYt12hrJ9Jlh\nVjNmxKv7n/r7+16IBEroSykFkot2ieqc4rHPkkikdjg64FXW1MfqLKa4HQcS\nVd5X6YUIk/4dqDOQdR/zIiee6LTpk5kbpk70yY+KSpCRdDIWiarcwX0Y+veY\nkGI+JFyauITTmuUzdVo64yC98x8iQ30t3ZydvqiDPgwldO/UsaqaRCgLVJfL\nkqu5D/QwWeuUPERK6iT0QJvSG6UIBJKiMqFGs/tVH6JtPq5HPoJrJ2ZPMeTy\ngOovp43iwg2tRwnk5eIfr/SGj8MDoiMW0adnJJ8uQ4mRihBNOG5UVZ/wnlxt\noxjqw519NeY5oVBLb0x6j7IC4qP0UsI3hj5x9hGnsQoK9WkllqjWfMhkjBlO\nZDNJZsqkzId6zIjsZe6kUiW1jMF/JHgl4OsTfQSSIxEepy9WIPMrsG59ehcm\nwJMa8SCrzdZa6cGgcFmCNNt9Xifj6RDEKReV4mu10p2nxf2JvBrHeoTMsvkG\nsM03OiqrPzesTuiz01hbvj/fY3KGAto1VvtdVSzikZ9yCCkBrCLw1TmCbVAY\nYmro\r\n=+JH5\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"5e511f6b2f0cb9179d42088d80715edcb8ae32ca","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc -p tsconfig.build.json","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --fix"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.6.7","@balena/jellyfish-logger":"^3.0.14"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^27.0.4","sinon":"^11.1.1","deplint":"^1.1.3","ts-jest":"^27.0.3","typedoc":"^0.20.36","depcheck":"^1.4.1","typescript":"^4.3.2","@types/jest":"^26.0.23","lint-staged":"^11.0.0","@balena/lint":"^6.1.1","@types/sinon":"^10.0.2","@types/semver":"^7.3.6","simple-git-hooks":"^2.4.1","@balena/jellycheck":"^0.1.1","@balena/jellyfish-config":"^1.3.1"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.150_1623459537348_0.30477934392100514","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.151-renovate-internal-patch-4af6955fa20cbc350a0f7cdedabf1a7891fa1b7b":{"name":"@balena/jellyfish-plugin-base","version":"2.1.151-renovate-internal-patch-4af6955fa20cbc350a0f7cdedabf1a7891fa1b7b","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.1.151-renovate-internal-patch-4af6955fa20cbc350a0f7cdedabf1a7891fa1b7b","maintainers":[{"name":"nucleardreamer","email":"nucleardreamer@gmail.com"},{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"b7ff03f4812e57b13ccd2fc7283e6fbce542651d","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.151-renovate-internal-patch-4af6955fa20cbc350a0f7cdedabf1a7891fa1b7b.tgz","fileCount":18,"integrity":"sha512-9jNp8cvu4OrKu+7L4Vu2enX1zOGXPzxXof/SAfWT2VIpxvXtMvfn/GMhNbR7GMCScuXyBb+9Qo/AqIE5X88T2A==","signatures":[{"sig":"MEUCIHVWRWsRMrIKX6AYpaSkqPbbLAo3zA7RUpq2qpaYrPn2AiEA9CD4G/myOkclezm1+QPbsKAFquoyDPOTa/oEdPuoEo4=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":55056,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgxDKSCRA9TVsSAnZWagAAaHMP/3TUctplmZGoBCwgh2r6\nLPDXVai33+jm6EGUH/2c4jY4jas1X9vUGm8bFFy5OzqxkXAoEyeCpZiZCDZV\ncgxEmCji0VlyaULSFBC9eatUEda3QsRbUuZaKl8PCz15xaJuP1S362UUCyum\nmyCwuOttgBsbqU/q4dL0xuTyN9b6NOi9/AIWYbJzCVslKr/QoPJ6iZ3BPm7Q\n1IuKvnttQ50U682j2eN2FoUctqjSJyEoyu5l929NPD8jrVSGcN3VgBrD0mit\nNElzh+34DFDl8bTjJT6oER60mK3mcMJAlkHp9u4Q4WX2r+X+pNiPVZdkPB9g\n9vnhZ0nGJC+GeOA3KpHtP4lIlzseuLk0JmZ+DmDaUJjK3oOilaarfy/ulfN5\ndhvfcZFm62cSvY5UD5VU4SYNh/KiMvhyhsHocXlE9NJuI4OPSqmmLGEZSu3o\nvyioOKGfGtz0WHufN9u6BSRFWzt6J2jwHn86FRYEgqZme7pEjAr/vfZvxnpI\nKvP4a6ksnIJh/KHrYOHCvkcrOXrdbZjLiAaLAyDrwa9Mnoeff8FTuo0xRfPz\nOcqByxQTHw3l0KuRurtGbLKc9PZNEIWyAtmACOTeiNg3ZA22uqNaFBouKDjL\nc9X0cwG3Ig/yYORh+E0V2yc9pqA8UdGJSwT52LRcIblywSFPKVpiu0vjXYYs\n0hEw\r\n=CFsR\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\n[![Publish Documentation](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml/badge.svg)](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml)\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"4af6955fa20cbc350a0f7cdedabf1a7891fa1b7b","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc -p tsconfig.build.json","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --fix"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.6.8","@balena/jellyfish-logger":"^3.0.14"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^27.0.4","sinon":"^11.1.1","deplint":"^1.1.3","ts-jest":"^27.0.3","typedoc":"^0.20.36","depcheck":"^1.4.1","typescript":"^4.3.2","@types/jest":"^26.0.23","lint-staged":"^11.0.0","@balena/lint":"^6.1.1","@types/sinon":"^10.0.2","@types/semver":"^7.3.6","simple-git-hooks":"^2.4.1","@balena/jellycheck":"^0.1.1","@balena/jellyfish-config":"^1.3.1"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.151-renovate-internal-patch-4af6955fa20cbc350a0f7cdedabf1a7891fa1b7b_1623470738014_0.4778017197580622","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.151":{"name":"@balena/jellyfish-plugin-base","version":"2.1.151","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.1.151","maintainers":[{"name":"nucleardreamer","email":"nucleardreamer@gmail.com"},{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"8fb1b0afb6c20b2a8263b73a6870b07b8f0a6b52","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.151.tgz","fileCount":18,"integrity":"sha512-iMGOB2nDNu21stL0vmNmoCYWCl/B/cFApLs9n8KZs7oRrAoSgoqr1Xv9klirPtFtL0bjAM/RYfCjdMhqsdoLwA==","signatures":[{"sig":"MEUCIDXeXERsdCqdmgoGqEXhzyItqLHDclUdsf4eMnxfo/uUAiEAtDOU7+yXwgAa1um5VIcDw4xuLFHZJFeFMm1KuJ8P/f8=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":54991,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgxDNiCRA9TVsSAnZWagAABQ4P/1bSjZb0ls63q0PLfBXQ\nNXLF2M3EpOv3jZ0+UrRc9Kko2HMSUd6sB9t0oid7DpYR55BKaBHO1+qixzUI\nIOKRXopfkrGRMacsk/2LVhZICqDbZRz36DqHwk9NILtnopKgsddYy8jemYgL\ngQtlSxCT1QTM0Qz2+kCSubcqtLCwU0erjGEOVoY5AAl/EIoiBmrSCrwxvHi6\n001vY7HsH0ZspMjUI/EM27BWqfrSLbauiFVenVbqrvEnEKlHCjqr0Fge9DUL\nZWK9K/8j3F2BCOpxI/AtRHvFHbFGnGhr4uxA3xGnwWiioyBqpJqXWv4DTbVD\nXnHM/tAld3kFsM+/WKZ2fAwC7d3UMcu5eS+9uOd4C7DtoltuOCQzxocn+TOm\nXXA3Hc/DW1fLYLNDiuOmggf7pPgkEi2RX0jvdB8cMSNdRe8fzLUMT49dzzoi\nTB1Iliwvv+8m0krFhNCYY/9+Yfc7X6r+CIiPuUxm+uWTVPWcrgGr3uwTait5\n0PwsKTGTE2IERABJ5SPFSllbQiBlVAJBnM0jxnOz81Lc8Lkm29o4wl2ma85b\n+gQ2daT0cjYF54JKaVdazi56PVOKbBaPOiFxKM8dIMCHF3R09MEVhxMjcHnv\nRANzYEpAA1YcdxsTJBpoyRSJq3PuUKjp1znzdyRgaks6VnRWwJyitOd+UHEt\nNxzC\r\n=8LYB\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"c037e76c9e7dfd64e70bcb49f581f28fccd9f4ee","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc -p tsconfig.build.json","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --fix"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.6.8","@balena/jellyfish-logger":"^3.0.14"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^27.0.4","sinon":"^11.1.1","deplint":"^1.1.3","ts-jest":"^27.0.3","typedoc":"^0.20.36","depcheck":"^1.4.1","typescript":"^4.3.2","@types/jest":"^26.0.23","lint-staged":"^11.0.0","@balena/lint":"^6.1.1","@types/sinon":"^10.0.2","@types/semver":"^7.3.6","simple-git-hooks":"^2.4.1","@balena/jellycheck":"^0.1.1","@balena/jellyfish-config":"^1.3.1"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.151_1623470946754_0.6758049533735466","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.152-renovate-internal-patch-b55af156edbac310175bf3a98974986d25d7b6fc":{"name":"@balena/jellyfish-plugin-base","version":"2.1.152-renovate-internal-patch-b55af156edbac310175bf3a98974986d25d7b6fc","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.1.152-renovate-internal-patch-b55af156edbac310175bf3a98974986d25d7b6fc","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"5e9f9a05dad465a060212633db5723e50cd4c43f","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.152-renovate-internal-patch-b55af156edbac310175bf3a98974986d25d7b6fc.tgz","fileCount":18,"integrity":"sha512-wmXjK99nG0PVz8NYaKu3rtBDOhTeK4TEcip5rnlx12HT0ZuZB7BEFv1uTTQPBgNQ4rpI/g0ADW19vliPqaMZlw==","signatures":[{"sig":"MEQCIFHbTQQcVeWlZhbZXxym6zmEg86SyRoi8mFYaGV2c6+WAiB1jiBPNjv0/86amc2ePV6ZtziDvIrk74XuO2fp56Odkw==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":55128,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgyAQFCRA9TVsSAnZWagAA/60P/ArsiU1vUh/9LuohJET8\n59/ms65i+hLvfLRM6oa+Y/qCqYK4BOY2YGSSwWmwEvDYqfXYRRU5znFjF7fH\nWqbKvHYK71HWqRjTv4rmOrawmiidS3ufsl+Ccowc2kkSZSEyM8CA+IrvAfYY\n7YAvAEa/xLHOkexOMAuyJvZc/UIvLyfjkr95RMkGUIzDwQJeNeGuu5jzIIuX\nE6bbRBSAoc+rLAuBYhXmbIY3AHU7TJekOe+OahhmOEBzRbbna9j/VyzliOPV\nBf7gB/l3R6Cbkxej1AqV7QREm1OhvcFLlPxm1IU27gOjkzEOWZs2Ba/ePaeZ\nTTO/Gy1d3Lu6s2HC7Szk1oYZSxnkJUR6CQ4uDhjaRXnnSb8DBl7DxNAH2Y20\nUG6jwDoOkTkKrEI/NSl8beFMJYHbbcTFhnDPay6cUuLkwdVEVvHzYQX8LsOO\n+iad5rblb/+2evx6Ue6mu89FOHYWPTOezQZqONJaLE6FoDFwIZW3jQIzI5Jl\nNs7KAL8O3J55vTwJ43hk/g7gDHNoqjUETO/ykdaCMFHVW3YNVnJ/h+ZOLBUx\nISt5+8OROhOLwwVkPz/732yRRA9LnuOI0jby+rwcVrcZxABenllhlZz1pX16\nK0Oyxcbbaqb1A5lvm69nkewm7/rguHoY7wn+wEBD7AfihwkDCygwLqFHSbrV\nn6Rd\r\n=kVlD\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\n[![Publish Documentation](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml/badge.svg)](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml)\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"b55af156edbac310175bf3a98974986d25d7b6fc","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc -p tsconfig.build.json","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --fix"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.6.8","@balena/jellyfish-logger":"^3.0.16"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^27.0.4","sinon":"^11.1.1","deplint":"^1.1.3","ts-jest":"^27.0.3","typedoc":"^0.20.36","depcheck":"^1.4.1","typescript":"^4.3.2","@types/jest":"^26.0.23","lint-staged":"^11.0.0","@balena/lint":"^6.1.1","@types/sinon":"^10.0.2","@types/semver":"^7.3.6","simple-git-hooks":"^2.4.1","@balena/jellycheck":"^0.1.1","@balena/jellyfish-config":"^1.3.2"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.152-renovate-internal-patch-b55af156edbac310175bf3a98974986d25d7b6fc_1623720964899_0.09898582527363486","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.152":{"name":"@balena/jellyfish-plugin-base","version":"2.1.152","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.1.152","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"d5e0ff86048fd4ef0a5c00eb95ffe5d7c3ee19b8","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.152.tgz","fileCount":18,"integrity":"sha512-v0XSMXSAmy17aSZmk8y0g+6A5N50CboFOSN4YBEgFaekogwSYvGXrqUurMy82gJkMYYF5xfd8rVDIW9eN4AN4g==","signatures":[{"sig":"MEUCIQDbwmBiNt0SmsVwDw1PdigPJiRzY/WoroHs4he0+xzKEQIgMWv2lf67BkBnD5QlGEgTaCB73D+o6eg5Xj+tKBM6fYo=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":55063,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgyATtCRA9TVsSAnZWagAAQUIP/02sE+w4EuShzlwQOQsF\nAN3HT6cyN3sbpUCLwKWurB/g7Z2KRhJnucYjDzXfOwbSHSna7UO732gu1CCc\ni5U4xbpbgQqFdUnP6/zBj4g5qlQppqzrUWS7fcNc8sgyDQUSOEJXxysXwGOE\njHE5reXcDI33LMBH3mBYcMT2cRzPNpShe333Pc7RdCuBM0wKRbG0dMWzpTgm\nMVmh9+vbhOOHSaTbdl+Z8pKh7M2DgBxwz75pqx9SJlzlGwx1Sk0Nq3fRg+Vz\nUwziYFDfhiIXl0Zz9ZoZt7a5aaP+jQ0SkKhmtDTgAKY1nFdB3sfaxfXGxGXZ\nbQUcYCyszyMDeXJkRJCjlEouGXAqKhnmqTxGfoyViGTuQK9e7RCON40gikiF\nqrIL6F1E32O51I5GtuAYtR6ZlgKpVFY6JM+9y3F5fvSkr+AsdMcXNibxgf0n\nHnIVz9tpOQXZ7/p5FeVqaQn1HLT17w16T8uC/zrinMrgdRlFmf3MYr7+VMnT\n9/v724oqmFdw5tWjKTshW8NGC8z6gkZuII1tP8ZgVVXJ4AWRaGSduHf1P6S7\n0Ghq5MBhNstPGPcG3khwXCRjwZN09mFzOS/nJaz92W0eBi4V6a6PDLhR64jK\nl0DUsWIiIBotk5GmIRBH/H4cnHKRCCpm6QkxDoPJb/UvHh2GKJ4/oMJe7kq6\nfWll\r\n=VE9y\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"10f46d247ead5effb3a831d2f613e97c27670928","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc -p tsconfig.build.json","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --fix"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.6.8","@balena/jellyfish-logger":"^3.0.16"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^27.0.4","sinon":"^11.1.1","deplint":"^1.1.3","ts-jest":"^27.0.3","typedoc":"^0.20.36","depcheck":"^1.4.1","typescript":"^4.3.2","@types/jest":"^26.0.23","lint-staged":"^11.0.0","@balena/lint":"^6.1.1","@types/sinon":"^10.0.2","@types/semver":"^7.3.6","simple-git-hooks":"^2.4.1","@balena/jellycheck":"^0.1.1","@balena/jellyfish-config":"^1.3.2"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.152_1623721197469_0.6741048896301376","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.153-renovate-internal-patch-522aae76be320cb220e3cf2a517882f85dc158ff":{"name":"@balena/jellyfish-plugin-base","version":"2.1.153-renovate-internal-patch-522aae76be320cb220e3cf2a517882f85dc158ff","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.1.153-renovate-internal-patch-522aae76be320cb220e3cf2a517882f85dc158ff","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"c22314426414d64260e3b56c7fa748a24f0937e0","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.153-renovate-internal-patch-522aae76be320cb220e3cf2a517882f85dc158ff.tgz","fileCount":18,"integrity":"sha512-1N5JzEuwlXQ7suTTIYmETPfn5d8sA92cZKmvOggXAWhCmSNZ8H5TVO7uhBwqdViw6kpXH/4VdN/UwOE3FLM1+g==","signatures":[{"sig":"MEUCIQCVWrEDm5LghWySMr5Kl7Cto5PAA8FZKwh/A1N4AtERCAIgOsIA7LBx3ntQbgxbDNUrwarTCgXPCNzy1sImluqpUdY=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":55230,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgyBo1CRA9TVsSAnZWagAAcqsQAJEPC/TsZWtV2jxkJ2l6\n8PuShJlJtPywYtTHyqcXY79jnXUusaMGpq1vaNkYRx4qa3NBvXV5eSq9eWe3\nXp1Md/watxtgZ1z2BzRg+E0Ea6hbuBPaNHrsyfeXehA2pbKLgJi3HdEhVWW9\nS1y6OuXvoXLknFidtWT7w/WYw+TkBCN+8HWQ1XfLnxzB+C21goebdDxUa6D8\nle/7YJrW8JCMFs6Y+CHRfZzidPnR3mbqWhf5Xr98fzvkeZ55R9uudArJByYH\nMZaha9TycL9pxxUbg1j4voH7BpiAy7SkYN/AVyN5PHAmw+G7WFm4GR9XixxT\nyTIR5DJ9O7MVNX9zzjhdRbbKkWozbkeSAKVWnh25NrfWCdSOAQB6I3EqgZas\nBeiGMI7wARWp9FEmFJPZRQ8DKImps7xa10Btd9N26DfmyWxvhAVZnsDkL4Ej\nmQleJYqUpY1NCG4E7Xe051va/LZWLt7ncA7NzKGaMNoSRdoLEA/OIxqtJJPN\nKnuFPrIOo16v0zUgM4KGbeXPOKrNsGlr+C/Yiw7kyfm4SPavhWP3Kd1tkrZr\nIryJYa5DiEyOuSvhQCse5KoqpK/MbCZwbCPtLumOEUtqkT5cyI5WNTE1nSiv\n6ePI50tDmWpLMZbbWpqWx6DP0Imx3s5HwE5rcaSULEQR0EYZgz7RdvyDy2bF\nc7ap\r\n=yIm9\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\n[![Publish Documentation](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml/badge.svg)](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml)\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"522aae76be320cb220e3cf2a517882f85dc158ff","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc -p tsconfig.build.json","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --fix"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.6.9","@balena/jellyfish-logger":"^3.0.16"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^27.0.4","sinon":"^11.1.1","deplint":"^1.1.3","ts-jest":"^27.0.3","typedoc":"^0.20.36","depcheck":"^1.4.1","typescript":"^4.3.2","@types/jest":"^26.0.23","lint-staged":"^11.0.0","@balena/lint":"^6.1.1","@types/sinon":"^10.0.2","@types/semver":"^7.3.6","simple-git-hooks":"^2.4.1","@balena/jellycheck":"^0.1.1","@balena/jellyfish-config":"^1.3.2"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.153-renovate-internal-patch-522aae76be320cb220e3cf2a517882f85dc158ff_1623726645781_0.7976067963246882","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.153":{"name":"@balena/jellyfish-plugin-base","version":"2.1.153","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.1.153","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"bf65b2dbdec93db95d82e44d66c6c13a065c5d37","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.153.tgz","fileCount":18,"integrity":"sha512-2P8dkQzKjByZeZTAMYbiTvK1D+qLFRq1NNzNRl3XTZ3kzIQtOJ2U958NtcT3w4O5XAw3+o1Poi3MvZNERiSgcQ==","signatures":[{"sig":"MEYCIQCdv5epWPiJobC6LB6W0FzpT7ILlV5/OMB12mY20ZyFoQIhANAEWvYSUDhqmNzotgJBZHj05xDjS+1qYtleIKWeQmpt","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":55165,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgyBshCRA9TVsSAnZWagAAGVEP/icjq6sPnR9aoVn6svGI\nr7m3nmyLDJsxqI1h+aTMtI5h2fiThmy+jobUqzT73x7vp4xg4FDi2NPaWSu+\nKl9PoIgMZeH1y7g60PG44y6Y6Qg1dDA5A2p1Ktf7XUvdaDzow5QBrOFHwCbm\nR9gj6p9M/Yxz4q8RMelxyxyIbnwSjT+MwJoi00eq658AGJ8et+qllRb2SR2v\nKbGUhx5q9klI8v15nw/fYR1y6ORVKmCjUIL988bXMfKkaXga4eFxqBkQwlv3\nLK/6F/ppNcv3HTIeL8ZetvlvK8cSmx3+A/d5YlA6AWAnmpDZluvBKvD3Vjm7\nqYoD3h2rljA/99/z6b5PvLBI6ZOhD2faKU6qjXYt3sFW33KSfaxt/peRCMJe\na/51LXfFeuwqC/r1IcoXqKggVa9qE3yr8zwl3pH7h1jjSmJAhMPjKLh5zb2E\nmwLURYoeC7bp81ilV27sE90l+tf3tiRdBNFgctcmtjlNt/qrS5a/ycKPXI5F\nfSauSxNqk2Xsy5i5On1G0TA1z6jdWKQ/+V0F8bzkFw6gyTTZb/4d0qVgqVDw\nBAB9tHrsMoTerzgDanG8pITRaQUsex0mQr47s3qbaZFcw2WnY+jg73/3wBRv\nFu1UKa/2EcOz9HWO4wYjPl0jcg+31KrsK4NBogrAdvYxKh+kynTtYeJxliPg\n9I2p\r\n=2nyb\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"3bb38229b60ff78761436242857de1ba9cc64945","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc -p tsconfig.build.json","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --fix"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.6.9","@balena/jellyfish-logger":"^3.0.16"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^27.0.4","sinon":"^11.1.1","deplint":"^1.1.3","ts-jest":"^27.0.3","typedoc":"^0.20.36","depcheck":"^1.4.1","typescript":"^4.3.2","@types/jest":"^26.0.23","lint-staged":"^11.0.0","@balena/lint":"^6.1.1","@types/sinon":"^10.0.2","@types/semver":"^7.3.6","simple-git-hooks":"^2.4.1","@balena/jellycheck":"^0.1.1","@balena/jellyfish-config":"^1.3.2"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.153_1623726880900_0.08664895864297839","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.154-renovate-internal-patch-bc2b8ef5611f86533155b63653c8d3fbbeaa9a79":{"name":"@balena/jellyfish-plugin-base","version":"2.1.154-renovate-internal-patch-bc2b8ef5611f86533155b63653c8d3fbbeaa9a79","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.1.154-renovate-internal-patch-bc2b8ef5611f86533155b63653c8d3fbbeaa9a79","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"6c9bb5c6be90070f8887f2f6874f4a93ec5d8f7f","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.154-renovate-internal-patch-bc2b8ef5611f86533155b63653c8d3fbbeaa9a79.tgz","fileCount":18,"integrity":"sha512-79hMFcFdJBqMrzgnkjxkYZn5jxSH+LuybHsl7MidTVds34SiU3BR8eXWRO9Tkpgta9peWb15xP2zLUJlnedToA==","signatures":[{"sig":"MEQCIHMOsX2wTdQgG+W7lA4hOXcFR1efhdy24IqpanHd5MVCAiBWgRP/kWpU4C9hM42mYjb1H35a3jYXKBKyP4nwq4g7yw==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":55334,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgyERECRA9TVsSAnZWagAArUEP/1GasI6mLFsPBgkAVWAY\n0TcRj2THyasinqdP9GFtAZW+JCBIIf7IWu18DluRBpcrByoq87/P8eCdAYWU\n+FzvpqmZV+V0hexsH6W8pq5/mQVBdxRxNTLKGt8E/bm5KaNeqXPzMxFzC8jk\nOeFnNEsnft/dBz6AIHPgEQScVUsT4fjd/wI/ltT1LSUjvlp6rpIdmtb6XWHB\n65oDkJUbHZmcl+fBOjWhfbuyIWFFIJwZdc8k8tb6R1VCYw7GoJ552Z/sK9aR\nk5Sc2J468vC8TXtypJX4UIazGE6/OKmZFs/Gel+MvJmexUuZcPQTqjfAdMXY\nJjSW9t/6IKpOK4de+bMP/PIzcZRWTunlwIczTdeIIRXRv/OEfz3GJnyId31q\n3NaUqRgD+EXMvsKnwcAm1dXJSdvLzrtF8hYna4QX38tGiOcFb98jJCV8rdC0\nAvBkNYEpJRRV7JiGFNGQH1LCQVdYPgyKAiFsv+FFrLAAiEFjltGMdsrgRKfV\nFPpLfKdC6zCcNoPproEEy5C2+GhnjhUuuZk0QmPbyp5kjUPyRZOFr1phkcXZ\nY+aIROEgIO9tr8sxeANZi446EcSecSglVdv2nRdG9RjCBVXADICpiIMg4MbA\nJmR83+MidowNg7jMuJluKgkeBFf/LhGQm2S6QAy/iABYDpi9Sk614T1vAN/Q\neOsP\r\n=zleZ\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\n[![Publish Documentation](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml/badge.svg)](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml)\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"bc2b8ef5611f86533155b63653c8d3fbbeaa9a79","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc -p tsconfig.build.json","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --fix"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.6.9","@balena/jellyfish-logger":"^3.0.17"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^27.0.4","sinon":"^11.1.1","deplint":"^1.1.3","ts-jest":"^27.0.3","typedoc":"^0.20.36","depcheck":"^1.4.1","typescript":"^4.3.2","@types/jest":"^26.0.23","lint-staged":"^11.0.0","@balena/lint":"^6.1.1","@types/sinon":"^10.0.2","@types/semver":"^7.3.6","simple-git-hooks":"^2.4.1","@balena/jellycheck":"^0.1.1","@balena/jellyfish-config":"^1.3.2"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.154-renovate-internal-patch-bc2b8ef5611f86533155b63653c8d3fbbeaa9a79_1623737411895_0.677136634714719","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.154":{"name":"@balena/jellyfish-plugin-base","version":"2.1.154","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.1.154","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"9ceebd3c82435c82801032e887ed94a19ab82d1b","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.154.tgz","fileCount":18,"integrity":"sha512-nvTmlWugv2xe7aaxyiHpojFLa47vJmmRejR0iBooqcdSC0UwGONEZBnnSMvzlU5T+vxWnzbFKFfaxwbl/VVaFg==","signatures":[{"sig":"MEYCIQCGsu3t23b5tVn4EjZT0PSzGzM5JwHWXI2oJQGpPb4czQIhANZYzBbdXgKRrhJYssPswiwZcs6UrPGj4UvTrqcEk2dH","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":55269,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgyEUgCRA9TVsSAnZWagAAUxwP/RXZCAYagqTdTT3ixSvy\nW0YefKo2SB3V3+fJORZHvBQ+9MoWF8AorZTxwNJDuhwbmyUKVHjsQmVeKlzu\nals6ceJewphpzA/9+y05XoLPmCgNzOw2Cvre+1zRcax59rqSCjWEWh3UlsM7\nw8zTF+7vfTJRWr3GshzHmpAcIWSu0ix4kNQ4ulpl08unuotQR40uVt309DWL\nR3YE5IYwKDA8zv1fhTDoL4P175hwSh9VTppHxwbgihLHKVp61TJFo9hO1dgS\ntr9vJlwnAcI4cZDn6qyiEqR92sW3iifTAd45eOtyN7qxd8H6VwuifN6BHviW\nQrQQcmrwxN6CPbRJmtELYGTilECpcNukI+/5W6HTYrgzI5gL6nmzLhkRPWxD\nvHzOrT8DrnVizM/Em9nz/xAwgXb+xWq4jy9aP4+7qFK514SVUChf7HSmNOlu\nJeGqld+l4/+2Np9jxr61H/2du3RndaPbcIlkUEsL95YzIrWFH3uCT2qPYYtZ\n85U/MjHEeXlPyg22F2TOUsmkjjtlWMogFUK//InjkbK6b8feF3RrQChti3B8\n7zYuBa83lzpGq1UPOJJEPELyPpwueuqvvwy602lPV9z/a2f2Sp/Z02qJcZ1J\n0jMGJwkAUjaxORru5PRSGbNojsXpuLwjJRKBK5K/zRptt8960i34CvX/KI2F\nXFJP\r\n=6w4s\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"ccc6f29e8244c3ab5475569538c76891711bace8","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc -p tsconfig.build.json","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --fix"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.6.9","@balena/jellyfish-logger":"^3.0.17"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^27.0.4","sinon":"^11.1.1","deplint":"^1.1.3","ts-jest":"^27.0.3","typedoc":"^0.20.36","depcheck":"^1.4.1","typescript":"^4.3.2","@types/jest":"^26.0.23","lint-staged":"^11.0.0","@balena/lint":"^6.1.1","@types/sinon":"^10.0.2","@types/semver":"^7.3.6","simple-git-hooks":"^2.4.1","@balena/jellycheck":"^0.1.1","@balena/jellyfish-config":"^1.3.2"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.154_1623737632564_0.7552100161458215","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"3.0.0-integration-types-badeb7294b8ef0853790c4cc9cb9c88d8764df86":{"name":"@balena/jellyfish-plugin-base","version":"3.0.0-integration-types-badeb7294b8ef0853790c4cc9cb9c88d8764df86","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@3.0.0-integration-types-badeb7294b8ef0853790c4cc9cb9c88d8764df86","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"b24a48f719f16e897a3367926d9ec2dadd31a2c7","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-3.0.0-integration-types-badeb7294b8ef0853790c4cc9cb9c88d8764df86.tgz","fileCount":18,"integrity":"sha512-zeUUDO8EOwLeHpQ353WplbE+MjPn0gWDgGB3OzaaAsyaA+A91AI+CNrqN3RXNhswe8UbOxawnJAQXuiznoALug==","signatures":[{"sig":"MEQCIGFQnDZCEbPsainOH1fT3SoepzY9gx2+IBG5R0M57cQBAiBhfrKHgvVCAsrDorvpqThMKOYBVNRpGnSPAqgwrKEEhg==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":55677,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgyaN8CRA9TVsSAnZWagAA3fEP/2NDRqgjZDHWewYU+ktf\nprLnN+ZGqZrOqQWjulXzZfU1opZ9hFibgYj2XtAMx0K0+m09DGQhSh5j+581\nZJIU270zrz3B+5rfb2GwX037f/Ydoi7B5Ec5SN/Mr7oXXrBQ0JrpbplcOtbr\nR6RMPBMsW36G6XK9Qtccv4OOcYsnECJZ9yIc+Wxf2cIR1FomcJG77UcXN503\neVZFz5oapkZ1fShSoY8HoChpOJN7ImgvdAUmWbA3Lv6ZspjRuM29sKoQzahx\nvYT6d3k/u8/VG6uHQAryIf3mQjEpwU3u27s70RhBURQSq1b5xRRQwdyPdtyW\npjUVItaqFvtu8KE2P+T+MLgAuY09AbClvfxSpV7I6Do1jFX+uSyG6LjFhrju\n6SePhfMRN97UwD0ErNTz0441CQYJsql/JQB9AJMUdzhjbvf0D9cequmdKejK\njdxN3YfuTwLCMYegZkTBsrRIJ6EXJnLj6PnGqbKuYJFB7I8BWy9JSwPvTRhG\nDVVgmGnIg/QUEpcLwxeG5UDCLutOxpZ8KDnZvAby4iCBSpmX5Tx6KH4e4JD2\ngKTRgxf825XQG/eqtaD/sSO8I0U/nZqOs7o1xfhK1hrSLwRl6d53CT9fuq6K\nDA+jXx0VS2hiFVpe+K4+mhVgjaLgEMjYuXQq93wd51aUbLrWI4fOMPlISLLo\nS2r3\r\n=bJZw\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\n[![Publish Documentation](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml/badge.svg)](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml)\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"badeb7294b8ef0853790c4cc9cb9c88d8764df86","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc -p tsconfig.build.json","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --fix"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.6.9","@balena/jellyfish-logger":"^3.0.17"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^27.0.4","sinon":"^11.1.1","deplint":"^1.1.3","ts-jest":"^27.0.3","typedoc":"^0.20.36","depcheck":"^1.4.1","typescript":"^4.3.2","@types/jest":"^26.0.23","lint-staged":"^11.0.0","@balena/lint":"^6.1.1","@types/sinon":"^10.0.2","@types/semver":"^7.3.6","simple-git-hooks":"^2.4.1","@balena/jellycheck":"^0.1.1","@balena/jellyfish-config":"^1.3.2"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_3.0.0-integration-types-badeb7294b8ef0853790c4cc9cb9c88d8764df86_1623827323935_0.5875674528656183","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.155-renovate-external-non-major-be347579b81f756ceeffbb2ec5bcd7106f5b9bf3":{"name":"@balena/jellyfish-plugin-base","version":"2.1.155-renovate-external-non-major-be347579b81f756ceeffbb2ec5bcd7106f5b9bf3","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.1.155-renovate-external-non-major-be347579b81f756ceeffbb2ec5bcd7106f5b9bf3","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"757ff3f0311ca9edc9b77a1ed546fbca78301a76","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.155-renovate-external-non-major-be347579b81f756ceeffbb2ec5bcd7106f5b9bf3.tgz","fileCount":18,"integrity":"sha512-zR//mUdDE2qaMFJnglWo53FWXtqp2uXx91Yb6StyFJKXSyDcVgZDMxMibPMbilNHJY2JGq23uauR/qeHlnnxmw==","signatures":[{"sig":"MEUCIQDK14pqu2Dj7CnHeJ5/4WoMM23SjRtKtguoQ8I4iCqfSAIgfQRsCE81hnWQuNeQaZNnXJe+NEJw6ddDYHtWV2rlZWc=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":55413,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgzTkmCRA9TVsSAnZWagAAsyIP/3dmsfvx0KMAmDKm4Yjf\ngeWLb8wX7hBAF68FgWWancp03Z2nHDvTkSwiK/iFCddDSxk4fs7Ma41WPJ/5\nC6CxxQt6q4/ze+xa57hV+IFv+yZK/Tt0n2rt/RzvESiulQduxZ23s3ZD2lOu\nZRvQ7jhdaLOCGjCosgfbdTgmiMi1VQJbTvGhrFLu8JvtGkLImUdx9jFjfdfC\ne1kukjlBKXRAaf8+CDwoEwE1OHAux+g0OrxRJ0IlcOarqy3HmvJFTu0HOIeU\nfb7TaS2rmDB3xZk4rbY0u+fgkv2zUjPiDEbS1ZUZUICOrlnuqwOu1+K9jrux\nOnDUZmaozY2RS+44n9kIA6mPaHG/bfl8Ycqbzg6FfhtfZ6W6qB1hEtiNIxCQ\nBYEyCjbUDsh+CqTaM/lc/4LEBVvWJI/3W1Pdlsrjms6B3I2RAWCsglSuwn+4\naVCUefUPWpD7nxutkrCtnvAwE2cFOejkfDP26sKTxWeo30cRj38lztbAPZgi\nDc+Z5OegRHKvoKLe7p6qxXED3mIuSsxe3OdzAMf0c7XrAFE14bcmlNEcRH7n\nRa7Tii1p+B4iv+VBFyI243RzLKK3CDzZrVw1XkZ3LDyp5BI271+M/SI4CIyZ\nI9kzAvjP0aSdWv0o6srTFbtqEEFwiIDLrntfNjZ+NP+GlOjh3L8Lp28mOEpY\nsgrU\r\n=33Td\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\n[![Publish Documentation](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml/badge.svg)](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml)\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"be347579b81f756ceeffbb2ec5bcd7106f5b9bf3","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc -p tsconfig.build.json","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --fix"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.6.9","@balena/jellyfish-logger":"^3.0.17"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^27.0.4","sinon":"^11.1.1","deplint":"^1.1.3","ts-jest":"^27.0.3","typedoc":"^0.21.0","depcheck":"^1.4.1","typescript":"^4.3.4","@types/jest":"^26.0.23","lint-staged":"^11.0.0","@balena/lint":"^6.1.1","@types/sinon":"^10.0.2","@types/semver":"^7.3.6","simple-git-hooks":"^2.4.1","@balena/jellycheck":"^0.1.1","@balena/jellyfish-config":"^1.3.2"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.155-renovate-external-non-major-be347579b81f756ceeffbb2ec5bcd7106f5b9bf3_1624062245552_0.5261488390804745","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.155":{"name":"@balena/jellyfish-plugin-base","version":"2.1.155","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.1.155","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"280bb6dad4aad6dce3984783de3892f2d4ae622e","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.155.tgz","fileCount":18,"integrity":"sha512-6ktP2ZZEvigsBd+s3V8rieMuwGyhqg80FNC6dRdI+pFaiuETkIfCevkeP/rLcvIPcWqDFjdYmTp4cTtyMZP09g==","signatures":[{"sig":"MEQCIHu1PQVnb943zQ76rg7Y3wpI6bHGoKbShf5P3Az7dcFoAiB/jr47AVWKzYgtCIFirVg2mboN+eWUB/EQJgqLcff4IA==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":55344,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgzTn8CRA9TVsSAnZWagAABXwP/2+8WyPMoFynkYt18TYh\nsRrgKLJ98ZJwRJHDCuBwv08l4vY+P9c8iWNVBYTme88gbJYBBExdzZibxvmd\nH1WYQ7V+Uksl2Nu8rmHnRIb+qWLJMsZi4rz+BsFDMtFtIeWDis3RLGKhqFwD\n0fx+D9qi0EB8qGCr0/Ypm8PCX+u6BL63FI+mHXMxMO4O32bDzUYF7vo09fD7\nKIAU/SvF8KfmbMFhIBKYeEnU212mWf4YWaTmmm6psCTH9BF5WdLauvJoGXPQ\n1xsRRLhphJcHLoZH0n3UrCLbBlQurF6Q9B3PTKWovZAcj0Abs1KhJHzn3Cnh\nWu4MZd1nlsym/83bIIihGic+xnXvF387GI0ICNVJp2tLzHvuI8S9CL86RlwX\novDex1ZzYEDfn31FxPeYgp5Qj8p3nWYc+RDc12DTXeQH1vcS1j9nHL+vZYp9\nv7ss3tIBt55Az43ENSUrIDNSTVDjZyU6FqZyFfNGcUojUucNrYDEPGejPhV2\nBTNCArWF6gcNOMvZt0JHqUL+MB+40zFhF233UEdabU/zISpldL1LUX9S5mD4\nDtrV0ii7JFfQU5uSj22vShPoiROPOsEywg7LrAmKXAmj6v95NuslB+auVtp9\nI75FMQ7ND8tMVYkj84rg0btIKeYs6Yqmx8LpsQCOgsqS9pWng4E1vD2uPKoa\n+BhF\r\n=HtF0\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"2cc2e965688381bd0c4a0c83ec470fe1e7fe2954","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc -p tsconfig.build.json","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --fix"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.6.9","@balena/jellyfish-logger":"^3.0.17"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^27.0.4","sinon":"^11.1.1","deplint":"^1.1.3","ts-jest":"^27.0.3","typedoc":"^0.21.0","depcheck":"^1.4.1","typescript":"^4.3.4","@types/jest":"^26.0.23","lint-staged":"^11.0.0","@balena/lint":"^6.1.1","@types/sinon":"^10.0.2","@types/semver":"^7.3.6","simple-git-hooks":"^2.4.1","@balena/jellycheck":"^0.1.1","@balena/jellyfish-config":"^1.3.2"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.155_1624062459571_0.3840158742247013","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.156-renovate-internal-patch-f13145c4de7610e4692a428ddfad922ca393649f":{"name":"@balena/jellyfish-plugin-base","version":"2.1.156-renovate-internal-patch-f13145c4de7610e4692a428ddfad922ca393649f","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.1.156-renovate-internal-patch-f13145c4de7610e4692a428ddfad922ca393649f","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"d9f254105c4972cbcc1471425077a86ed088cf01","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.156-renovate-internal-patch-f13145c4de7610e4692a428ddfad922ca393649f.tgz","fileCount":18,"integrity":"sha512-1L9beedLr7OiDEQB8nOR4Yypr27mMNEwyxsmU2xV99EHT3pIlqnpJQxX9tIOgZTppcWbNn7cZZtEw2FvfA/omw==","signatures":[{"sig":"MEUCIQCYYbfzpbOokK1OSCCv47zfEwBiHAhn9npT8qiZJSOtcwIgJqXyFRfxW+QbFRFnMpx8litfB7fh1i6nIx4Xls55eY8=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":55513,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgzVIUCRA9TVsSAnZWagAAs1kP/iyuj7OxaXXxFepSunxP\ntARsR5lsuGJRuVOE0vAEvlDMvzFOWSVouOcxx27j0neWv7shQINPzvCNTOJl\nG5YdxFY/e5NwhCkXEJErerx5MFNzUlYFFIelG/OFqZilXnmt+IJd6wqYf5u5\nSrP3YBzB2A86mrybPXqVrFs/CPdF57ULsjsR3c4anZ242PWqVAl/Ufsum4aj\nbP89jtfo+lpSRv+CFug2eru0dU8zniwhfe60vfo4+gVBVFBrH0xRAHs8WDKR\nbRrWLVqTczx+DqWZr8uh12TV3WNZBuIkg3i10hxe6Zvl4hYhZEvfhDSLAEv1\nQnitLpVGpViLhdKREse4P5JqTZg/o8fPa6gSI+f9+Ln+tASKWHm0+E6nuRAE\nvQFdwOJrUS1khYeC520i67JGtNxVtZjcKZENOZELhqcF1rkrzCHbd0LK5qq0\n934/BjM4x5lhOz6WLjZqsacQGIHbGAoZZmbV0lRODOcBvYDLcKKy5sjzX8Ik\nUJ0EuuUha28Ub/40ydutFO2PRIOlERT4F+5pSPnC5bHoLD+G8b67Jg7kDrpx\noFKpHLJS7d6UYvBJdeTvLCz515l+n7yqVI0YDfVY+Vlbl7vtIR6A5KxyMszF\n0cSLP9dnVEQGFzokzwWYrrSvbmyQacfzresN3D1ZTyYkaIBEMWHSzekjvEDo\np10g\r\n=Hlc4\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\n[![Publish Documentation](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml/badge.svg)](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml)\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"f13145c4de7610e4692a428ddfad922ca393649f","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc -p tsconfig.build.json","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --fix"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.6.10","@balena/jellyfish-logger":"^3.0.17"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^27.0.4","sinon":"^11.1.1","deplint":"^1.1.3","ts-jest":"^27.0.3","typedoc":"^0.21.0","depcheck":"^1.4.1","typescript":"^4.3.4","@types/jest":"^26.0.23","lint-staged":"^11.0.0","@balena/lint":"^6.1.1","@types/sinon":"^10.0.2","@types/semver":"^7.3.6","simple-git-hooks":"^2.4.1","@balena/jellycheck":"^0.1.1","@balena/jellyfish-config":"^1.3.2"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.156-renovate-internal-patch-f13145c4de7610e4692a428ddfad922ca393649f_1624068627877_0.6460541583817123","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.156":{"name":"@balena/jellyfish-plugin-base","version":"2.1.156","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.1.156","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"fc4c35cf0f199c98b1f507c6d5d767b32b68c6d7","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.156.tgz","fileCount":18,"integrity":"sha512-/Knby1Rcu0EPSNzSjKiSyKzE+Fvm//UpyRQ3Ai2cxNJz2PwSSFzn8ebJzuyquYsrbJ5Gl8xalce39Ko96qVygA==","signatures":[{"sig":"MEUCIBfYENg3X0od070TTCGGclJ3+qT3pTKScHmM8iBkoPemAiEA7KT+AQC/NXQehFeze4RaP3EaxCsfnsV0jNyid+BSU2M=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":55448,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgzVLbCRA9TVsSAnZWagAAJzwP/2Qj9BqsubqiFigTkHCr\nxsthHzsvUwvK7roVmxWwaJI4gh4OU9u4HhkG8tAgUZsu5t27cJzkGD/f4zcF\nrPYd+m4+gddZ79ld4TBmA7QCIfSEhxE7oL5P6324RQwCmNzdb0e0rx5nuHtf\nwZiHMDDp9u5j/LdW/1lkB4eaY4akUNvKGs1J3v0qpEcpxvuEEenijmqGbuP0\nDkQlap3mYBOfp5jN4mkqgKHDvtcBw+VaUSs5wKkl+g1mvH8iqlFmT1QAjWlF\nU+pGgAhbOlFdxX9VqF5YrKTQGNDPAJbir31EqkANs9OuANPvWTKM1iwoFMch\nQ8P7SrhOB8Bo6Ytqr+vNv8hT3hXQAizx51OmnF1C5hauGM9G7KTyfyWyqHOe\nLwlflbOKfhpYZkjkORkCO4ZBrYRkCE4M3so7YkUMJ6XKO8+gMBrYIBOocvMB\nrRqfeW6ig3YIhyNW3zlIsP+oJPjZ7G1QCbiBFT6w6iEpaKvnUi5Kx4xZNxSH\nucm8+seJb4wpYde+mdMsyq32E1Pgsi7xwwufVPTYICRuOKzFWGQOITUDHMqf\ndhCE/mIVM/ODDORXbrlCc/2Me+gcxQkQDQPGp16bQO2UxkLzGjKcYhACyWRn\natXLAiWPq6kxoi/iC38BYneYJCVT5jn5fZV+A0iy13/sSOhPUCtZbaJ4I/GG\nA8K0\r\n=WjKO\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"8783d093d1a692bda246871bfa9fa760d22f9000","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc -p tsconfig.build.json","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --fix"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.6.10","@balena/jellyfish-logger":"^3.0.17"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^27.0.4","sinon":"^11.1.1","deplint":"^1.1.3","ts-jest":"^27.0.3","typedoc":"^0.21.0","depcheck":"^1.4.1","typescript":"^4.3.4","@types/jest":"^26.0.23","lint-staged":"^11.0.0","@balena/lint":"^6.1.1","@types/sinon":"^10.0.2","@types/semver":"^7.3.6","simple-git-hooks":"^2.4.1","@balena/jellycheck":"^0.1.1","@balena/jellyfish-config":"^1.3.2"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.156_1624068826576_0.09153430799373985","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.157-renovate-internal-patch-4a652e79d82a4e44667deba6453044c0b524680f":{"name":"@balena/jellyfish-plugin-base","version":"2.1.157-renovate-internal-patch-4a652e79d82a4e44667deba6453044c0b524680f","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.1.157-renovate-internal-patch-4a652e79d82a4e44667deba6453044c0b524680f","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"818cb4697cf46c2004711f3ec177f356b4fd8ad4","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.157-renovate-internal-patch-4a652e79d82a4e44667deba6453044c0b524680f.tgz","fileCount":18,"integrity":"sha512-0XE9NmIvpV71iVGj9BZ2ypDxcHhiM7ODFG4e2t+KMJXFU5EjJ87rZ+gQ5YbUu1MRI4M6Kibf5LkBGI68dGG0qw==","signatures":[{"sig":"MEUCIQCP8D8Pq0ibyTrMyLQWppul2T8cm8Js6j5WDrh0it17gwIgLCazR+kcIHgrkHRMGL63lt58sErkB69+dC03BvsgLro=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":55617,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgzcoZCRA9TVsSAnZWagAABewP/RkeUJ0mXwde+B2ORpFN\n9qgzGXsCih5WzO+2Bk0hBe9ah2QmI8A+TGYYY5W89joi3ITTfu7t+eTQkY/V\nboyQiMcfqhxom8gp7YBvPc79+7iOZeON0soEPbI2qbniDPh4h+K8y+nWJpKS\nk6Xs7G6VVAqfW/Btb8h0MqLcVarRwU0S+2s7bv3n8gMphFlzdG1cuVSmWhHj\nRus4NSnye1PXNVNCDz8iLYTwWALiHQ/2rwV5KeEam/0dpODg5eZDqg4xFub9\n4DXqYqmCTognMy2Jz/5GvaKlCwmQLL36NPOZJtcyHlty/O7IvYfPc3IR4C18\nwopfysVuHhJMdhcpVSplY6vZEdiGcAFwZafSRmxfpvlsj7V+Hb7BlINeEbfg\nusBhzgwugs+ozAoPvJiHfJbJLo4wpqwGdLJt5HyGAJ89v/gR7qrjsFvzRQua\nxaNfzCcFNATPpgWXAIIpRSZFZ9Co8BnMwaxryEwHxhrLiaiewInnT2mqqm22\nCOTfIP7z2kHb5NDj6yYC5sIt5bKdQ/4pUNleBOjzKNpHe4ZVekm3lFIwfhP+\nOH17NNfQMuV6l+ytlSE34yC+zBhlBGTnvLjvrEuvDxx/53togXpjEalzmQzE\nF1NUrMulR+JR8edHk/KHQhPGv9zqY+4RFa5G1dC31JKIUXU4fJJuqFoCM5en\nSPUy\r\n=2/aZ\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\n[![Publish Documentation](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml/badge.svg)](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml)\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"4a652e79d82a4e44667deba6453044c0b524680f","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc -p tsconfig.build.json","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --fix"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.6.10","@balena/jellyfish-logger":"^3.0.19"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^27.0.4","sinon":"^11.1.1","deplint":"^1.1.3","ts-jest":"^27.0.3","typedoc":"^0.21.0","depcheck":"^1.4.1","typescript":"^4.3.4","@types/jest":"^26.0.23","lint-staged":"^11.0.0","@balena/lint":"^6.1.1","@types/sinon":"^10.0.2","@types/semver":"^7.3.6","simple-git-hooks":"^2.4.1","@balena/jellycheck":"^0.1.1","@balena/jellyfish-config":"^1.3.2"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.157-renovate-internal-patch-4a652e79d82a4e44667deba6453044c0b524680f_1624099352635_0.38757159731410296","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.157":{"name":"@balena/jellyfish-plugin-base","version":"2.1.157","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.1.157","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"1c3abaaa50d5a4c5b8a661507f9059fcf1591301","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.157.tgz","fileCount":18,"integrity":"sha512-5ZeADVt8qoaNSmUjK8352EAYKqZ9Hv+aZQsJcLipHJYilvZ3YMfR/h7hOpjokgnhcmAj9Dz1azSp9f0HixQTVw==","signatures":[{"sig":"MEYCIQCLEPrZTaYnYmz0+ql6BL/nTknAeDmpEsQFMxlz4DfXsgIhAJ1X8z9sGT4dWfK2VQLWcYXAlsCqXif/l00NOUEZY/IW","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":55552,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgzcraCRA9TVsSAnZWagAAnGcP/iZ74z6fu7+SkXEfT/XQ\n2OWmi9wEsTpQbNbIhvMhD53E7XmJeO+CJY4eHEdO06aTeI7tyI83+8Tl7QdD\nXXDS+aDD6xG6Dcctcxci4NtxtBSfpdPwUp5Vok3dSvNFgcIC9mDkz8gBbG9M\nQ7aUF8Mk6X5crZWx+eqCaOiX2TbMFpwCsPCIn1aiN3rANZoQKwFWLuJxV2yO\nAKR1WMWeeYhwq55P9XKr/vYJZhn1U2f1y1sGlVtSGaIKNE7oYgHLI93wPnQM\nP90wZdrzUgUHT/+1bYaKt3Iad/ZmNX73jfat5fqymTdVDreCYNH1HpcrjJtJ\nd+DASEggLptLBbCxhXI2YqerIFoISmP6Pk6Rs8Ca0BclFwEbCg/a13/qOZmK\nSqxRLqZZqYhmmwHKBBotcXH6eHVCuWH7OjZywG+fQ65RBBKqOKfontbJwy56\naQ3cdVxuGpQhZWe5MVfQdHQOXklMEKyHe0WzSGcl+n9NJsZvAN1lksnJjJqf\nDjMGKpoKikOjjxDLotkCuK+dEQ7l7mrW2FDwzzJU4VF5RfN8fh9Cr8cWDC7P\nrqpEcY6ox9446eRyGjk5e/2rLzqsxj2Xuxp0oDUoigg8f8IrKgOUNa/iS2gx\n5ZS65rDsFgqihAPjg6fwfEQMCo36iUq6MYm/pLYQIgLfLVDgT3jyINLfAt8f\nP+tU\r\n=r/wh\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"604021466f3ca13b3c750356b3ba38bebc409f30","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc -p tsconfig.build.json","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --fix"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.6.10","@balena/jellyfish-logger":"^3.0.19"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^27.0.4","sinon":"^11.1.1","deplint":"^1.1.3","ts-jest":"^27.0.3","typedoc":"^0.21.0","depcheck":"^1.4.1","typescript":"^4.3.4","@types/jest":"^26.0.23","lint-staged":"^11.0.0","@balena/lint":"^6.1.1","@types/sinon":"^10.0.2","@types/semver":"^7.3.6","simple-git-hooks":"^2.4.1","@balena/jellycheck":"^0.1.1","@balena/jellyfish-config":"^1.3.2"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.157_1624099545857_0.8218413339254291","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.158-renovate-internal-patch-2e155395b363ecba5927fb9d30080eee16236374":{"name":"@balena/jellyfish-plugin-base","version":"2.1.158-renovate-internal-patch-2e155395b363ecba5927fb9d30080eee16236374","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.1.158-renovate-internal-patch-2e155395b363ecba5927fb9d30080eee16236374","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"759fdc38af67305fa1737a42119d09e29e29169c","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.158-renovate-internal-patch-2e155395b363ecba5927fb9d30080eee16236374.tgz","fileCount":18,"integrity":"sha512-Gz1R4wsmOUfp+oUYIKyV+5kCAb7noos49p7H7l5rhcALePSq2TdXqYTHcWtQL9jbNwQ+ta+3W01c1jZSoL5Nwg==","signatures":[{"sig":"MEYCIQCCCrRfVsfYNo1B9t1KqDODuLPA1/cHBMSL/SKk4WVWXQIhAKrwr73Ie5LeAsnRiLCbOPFC0NcZZTyhAe2WmDy/pSqX","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":55721,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgz1V8CRA9TVsSAnZWagAAySYQAKPKOZSblr2ji/mtzr6o\nn4moXI5bv83n76z54B8G0EtCZTnd4Ik44hPQM3rm7IDIJaiSCvIFsVk1jV3b\nM1tLCQU8rnIST/JeUn/ewtRG0GAcRmBiys0hDOOhwc7eupQBUH15Ofx4uR2P\nYORQBkKutjhvEfd2WUY96BfmtWYxJQmnAtlfI5KBVNvCPQjpVSh6Gmlcn+Yr\nk2wjXl6XIe3WL4OHBuBk0EskHQUwwDfFKS/XJnoj/qbXhawtzc8vLU/pgRAL\nZRQsHBfl3Ta3pBR+acXVnCn8Rwq4d5ALWWqheCztzkCSLuPQcstL2VDaqxFa\nNeoIs6VAqYU5fumSgsN80oWgpOf1yeZYXwnHSvywk3jhWU2ZIo9hz7GT5CO7\nCOxbjsq8iYgulUJ0RxQBuzz24JgT/0EjxpPX0SarFLnoxU9JyodBVGZHGQvY\nxVDQ5c3IBlkCPQ62/Ks4iTTXlQb88kTkOIqu5s6UsobR69k4G//4Uo0y4dlZ\nG8XvCns9mXkJEuPUir9lrqCVpmEHXze4IbhX5W/Uwq2tr3JEInkJQPY1+P4K\n2+jlfQbsvLEH7JlvVdaWDZaeSiOeyGP7Sq2AtiMWxJpst28MU3nY++Q5608v\nKfKZYv/jWwvdH8CBk3WHBv8Judm/DurKog68sNLrIbMapMsunRPosocCurYx\n+pP9\r\n=s31t\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\n[![Publish Documentation](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml/badge.svg)](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml)\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"2e155395b363ecba5927fb9d30080eee16236374","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc -p tsconfig.build.json","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --fix"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.6.10","@balena/jellyfish-logger":"^3.0.20"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^27.0.4","sinon":"^11.1.1","deplint":"^1.1.3","ts-jest":"^27.0.3","typedoc":"^0.21.0","depcheck":"^1.4.1","typescript":"^4.3.4","@types/jest":"^26.0.23","lint-staged":"^11.0.0","@balena/lint":"^6.1.1","@types/sinon":"^10.0.2","@types/semver":"^7.3.6","simple-git-hooks":"^2.4.1","@balena/jellycheck":"^0.1.1","@balena/jellyfish-config":"^1.3.2"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.158-renovate-internal-patch-2e155395b363ecba5927fb9d30080eee16236374_1624200572320_0.3338516139164829","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.158":{"name":"@balena/jellyfish-plugin-base","version":"2.1.158","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.1.158","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"47c9e6a4c360ab9f497b77f5a5b2aa3ed87d2d80","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.158.tgz","fileCount":18,"integrity":"sha512-oeAKSKRwTCehp42SeRn02PCsDu4E00A0Y6N2+M8ix/7/FUR5fhkLCJbnUDds9Ytbm85uIJY179w8yHS7H9JbgQ==","signatures":[{"sig":"MEUCIED9nw2rYHZYuSizsJFMG6+OO0AaMj41nQHwCHPm24BeAiEA3D3q/93p4vy2E7WMJThUEySonI101yCyir8G3/s/qGI=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":55656,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgz1ZMCRA9TVsSAnZWagAA7tEQAIQ9Y2l4fc7AWJwbuX/d\nYP3WRFsi9AYNYJUPjZ0kSiDIf7KzUKiOuCh2MO3p408DmzNoQl2bVzLcibzy\n5+sBJ6QCx1rv56qk10a+bg8YQlCkf/bGChXy6ZgZTZ+2n7y0Yyo0VZA6ShmJ\nDsYCWJAvhW1c5BJ4lIqYn2/F9y9WXoVKRecETPbvnJb9ckOe39EbcG2jGwnS\n1GXNmbXyn+llwxWXuixMmqdwNJC4j8+/ctdWOpH6kv+xZnV4FaEcjsMFyrtH\ntjpWC0shRSs8Qtq1EKl5bHOJACpcCY3AqATJE2NrLVRdijivjITh6ng2RVax\nPh+qPzKtT4Piu9FURhwnuxOTh7ZKyNrN5iqHdHJHjZI7GcJ8gzWWjgoKK15F\n8utDwDoT3H3gUQd3Ufv75yzE/et6mdSQniAo2veY79XGcQTXzikazbgHkxyR\ns4UQSS+bnLqE0/C4RXG5u+5q+W7ZmgQefMFq30vxAEPOSH3eZO2l5/zrjyLe\nuDMqwiAOg14DhsPIB1wENOx8EVlXBii4o7myy0VXjbc/HVygojFgtk591T02\nOOJFpARqmHEmGXR5K6tVxiCiqaq3/nPrQvmjpApjZ0KV5+U12k1n1KYPq2HP\noEga1/8xhLJx4yJ+kREl97VD1upIFt3IdVF6rtyjEhB6wDEH4HcR6qsSZjI4\n/JMq\r\n=ZUqA\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"42a921718f0001d3e4c2480c78d5fdb48dfa2ce8","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc -p tsconfig.build.json","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --fix"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.6.10","@balena/jellyfish-logger":"^3.0.20"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^27.0.4","sinon":"^11.1.1","deplint":"^1.1.3","ts-jest":"^27.0.3","typedoc":"^0.21.0","depcheck":"^1.4.1","typescript":"^4.3.4","@types/jest":"^26.0.23","lint-staged":"^11.0.0","@balena/lint":"^6.1.1","@types/sinon":"^10.0.2","@types/semver":"^7.3.6","simple-git-hooks":"^2.4.1","@balena/jellycheck":"^0.1.1","@balena/jellyfish-config":"^1.3.2"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.158_1624200780313_0.8281928083402827","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.159-renovate-internal-patch-9443843ed0aceaafc6f59950167ba4e4415355ad":{"name":"@balena/jellyfish-plugin-base","version":"2.1.159-renovate-internal-patch-9443843ed0aceaafc6f59950167ba4e4415355ad","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.1.159-renovate-internal-patch-9443843ed0aceaafc6f59950167ba4e4415355ad","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"2b51c91aaba467d5730cfcd75b1431156ebfc83e","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.159-renovate-internal-patch-9443843ed0aceaafc6f59950167ba4e4415355ad.tgz","fileCount":18,"integrity":"sha512-0R2l0rJzIx5WJ6iPnsTWS8keVi/OLHc+d6XBF1vWrRfMwVAxd+4BCZRmju1nY0EUKY9ouKkTWDriVZYVXCVYeg==","signatures":[{"sig":"MEQCID/U1lR61Sa0siOnQmwNXgq/Yk3pGu8rMiw+cx4iC6D6AiA6wZ+n2hopHSlBQs/E3W8apJ/49pgTnceEWEAvAagryg==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":55793,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJg0Yu0CRA9TVsSAnZWagAAJaoP/0bHNsZ+TetY40KRKa1J\nUGPWp5u9aW2ZvBZPwrTwUUi3aJ526DZ664hM0GJO6VMGkZ+fYjPly4em6pGD\n1UjP4mlxS5selE7aojsuNDmfM1MM2RdXnTJdnsyLG1EXyFufjnm0hjjS/xld\nyalKa1WI08dFwncXseXhrjj1m9EX2bqINh+GgkDwmZruPaJe23qYSH2QtXCL\nBdUuBCnPn/7XbIRKfcSmzwQs7AkQJY6nGwgWCFvzJt6K1EOZWbke5l15O9+j\nK16jVCP1rcneM7VhMiAOBrNxp3wRYIML7xezOf986TbE68hbj/ZqlT0SnZij\napZGVA8uaKUyCu035kDVHoW/pclPLV++R/2uaaPgnyuRa3dCQC/JNUc/Mhrd\nYM/hDgzdUEhMzLPLPHEkyECfEdxK4yN3c2yL4A8eBwxXskZ0pFMmUn8xvsTt\np17AS3Boxuwh+VXils+5vqpRXBSy7ZrAQcFIf2FJi6S6mwNO1eDOV7mvB4Ay\nuNOS9j9I1Yi6k+qI2ZzV2zkYIVO52/7WpOhP2bpLUKCw5T19XD8zfA/26aVp\nfTYKbA0j3sBQGh6/t/nIxZ8t3SfkqFT2Mb77bBkNAaSeT1EIQp/Pj5pPdanQ\nonb380M/clqDAWl8JT0h8P2nZNrKFVifDT3QXEOe9AFAJZ44f6N8tiLOQeo3\nB+QE\r\n=KZVu\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\n[![Publish Documentation](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml/badge.svg)](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml)\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"9443843ed0aceaafc6f59950167ba4e4415355ad","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc -p tsconfig.build.json","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --fix"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.6.10","@balena/jellyfish-logger":"^3.0.22"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^27.0.4","sinon":"^11.1.1","deplint":"^1.1.3","ts-jest":"^27.0.3","typedoc":"^0.21.0","depcheck":"^1.4.1","typescript":"^4.3.4","@types/jest":"^26.0.23","lint-staged":"^11.0.0","@balena/lint":"^6.1.1","@types/sinon":"^10.0.2","@types/semver":"^7.3.6","simple-git-hooks":"^2.4.1","@balena/jellycheck":"^0.1.1","@balena/jellyfish-config":"^1.3.3"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.159-renovate-internal-patch-9443843ed0aceaafc6f59950167ba4e4415355ad_1624345523617_0.8781230091856551","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.159":{"name":"@balena/jellyfish-plugin-base","version":"2.1.159","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.1.159","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"9ca310babc697915f109b92fa675b3b014427836","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.159.tgz","fileCount":18,"integrity":"sha512-MWow9lrfk+WZO//d7CRBQOYJsHGTqqeqpZ3CEPTDTPu/X+VdAiFW/yFZh0X3CraZvVUhsTioow3FJ+XQhvjmLg==","signatures":[{"sig":"MEYCIQCqtzsTtiKhkEANvxI1B8uB8G2Rd0zc3DX7ElMLOqV+wgIhAKDBs9ZmMKusS2cyooRX1xqwVRM2+tC7cfvE0zQ8AXQJ","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":55728,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJg0Yx5CRA9TVsSAnZWagAA4EoP/0yNFWrww8N1nwrN81ZI\nfA2f6pQJ/QBEQJr3EqxY4Q7Z2hQrn21p4QlWJdXne5VJD554Jeg5wjnXXmo9\nmupGzcyIURG9hASXJv0xAwphnChou7tSC9A3m/uZ/Co26LvG8YLBUmK0QelB\n1vl/LE7Lff3vONTf+7oqhHf+QhzBRiCBHTXKiNbVq9LTyLV6wLig78fLbGp3\nQJHefpMuKkoVjZV83tMmA2/dQUtcOvj9znrLVav3j7Iurk2GMValCcNv7Kew\nE9fyvMEglE0tRDpf8QjtRnV5zOwQCNJA/AJ7VfeT5FFLZ+U+QUn/4QrwhrN6\nS7r5qOoB30LW+VmQOOww6E7VURGfVOl9lzgASv5IS41g4KmlRGpwzrD9C4hf\nhOf2cpaqgzbcHxy3Um+wlrFoB/Cv04Gy8QDr8ZOcWoyfAWOSzBL1kozdA47n\n69a7l7yZopE3w0bQ21PY3NYW36gEGWuOSzJe4okU4xJ8jgHUwV5LbLKXexPD\nvMYx7aqUr7rC1Av2s0vK2xHfI5yQOzsYVva5ch+UwpX1etXh2VRa4yDDhi4o\nzTmqDx+DKBHlGApBWXAUdYt8E7odfLfsyELcwUEQKtJJwtlLx0+ptz6UUVny\nknSuy1a0YEKlo5fZ1ZiBxXUGcZdcsElNjeBRskCgJB49vbzyVUnhFfI7+c/S\n+0jU\r\n=mTXD\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"435aed654b88acd9936f116195c17c1e97b0d619","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc -p tsconfig.build.json","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --fix"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.6.10","@balena/jellyfish-logger":"^3.0.22"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^27.0.4","sinon":"^11.1.1","deplint":"^1.1.3","ts-jest":"^27.0.3","typedoc":"^0.21.0","depcheck":"^1.4.1","typescript":"^4.3.4","@types/jest":"^26.0.23","lint-staged":"^11.0.0","@balena/lint":"^6.1.1","@types/sinon":"^10.0.2","@types/semver":"^7.3.6","simple-git-hooks":"^2.4.1","@balena/jellycheck":"^0.1.1","@balena/jellyfish-config":"^1.3.3"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.159_1624345720509_0.7471385916639335","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.160-renovate-internal-patch-586cc31f49be966809515814457ed8f028734388":{"name":"@balena/jellyfish-plugin-base","version":"2.1.160-renovate-internal-patch-586cc31f49be966809515814457ed8f028734388","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.1.160-renovate-internal-patch-586cc31f49be966809515814457ed8f028734388","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"dcb06bbc4b2d19b8d4be9b1e126f2074f8c14ed5","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.160-renovate-internal-patch-586cc31f49be966809515814457ed8f028734388.tgz","fileCount":18,"integrity":"sha512-mDsAiPGUtSgdSETTW8YTrW/IN3FVcIKPKmDj0/6DayMdVCPqKp0b1S0IlG3EuatmHRn2XYNtfetDwqWVb+JDBg==","signatures":[{"sig":"MEUCIQCpsM8v7IKxD9qtH9pqE+MFNOJkxUXjSWbzeDCtiBgNAAIgEiaairmTIHZRPD9EIUbji1Z/NlyHHeLl81DtL9RYGxY=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":55896,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJg0ZhMCRA9TVsSAnZWagAAWukP/igJMwTRJ1Aq45YF4xCa\n5dFOyF4RPhoxw0kag1rwAT4FpkBm9Ml2FtwzsOpLUMgnaoRZaPKdpWDMxVjn\n9A2dT9DdPtwkomoPDUwivZvIiungOaAsX04GluMx7V31VX1C2edFrDYApB81\nQSgcsKDiGMbrQDm0GYLwpePV94RUFr612y/h+dqceb9GdUS71IkDok8v5Uvd\n5YlsQDvM4Y3bgoxdnEn4N5XfMxHP/qA3CNUqyXiCMzSvCsJZX4PhNisxlN4u\nOYJjyyD10ctm3dif3chvzwu3lsbYm+fb+RKHqbs++Q2NV41eZ0J+AYnF7HZT\nLlF723f/3k0X9Yo0S3Vs+qOkVd8hd1YZFb+7PSsdMj3OdaIhbAj9UvfAB53n\nnFIAdnRoc4dAh/Diyx0QSh5KxXyuYlJfzz5SWPbFWdgkuGFDTjA3jiCC9te7\ntX82MkpFOAsM69jsDOnJNNsZbjacAwPoF2qJDcXol4KRjdOsTV2fv213xZGp\nS0+oAFLLqmHV/Voii7ihJXYFUwZazqPo0huMW35sP7NEQD58LW43wfd0mLDq\n16nEjw+iaTKQsfWT/UkFcXi8S89ogm+sFBnYX8yDVhtFWliij3F0VLAE4vlD\ni6kmnOSmbmKN+8j2ab2UoOHgWzIA42W6xrcgCFtiJvO5UBlPl09GivChJESh\nqn0/\r\n=6MB5\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\n[![Publish Documentation](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml/badge.svg)](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml)\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"586cc31f49be966809515814457ed8f028734388","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc -p tsconfig.build.json","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --fix"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.6.11","@balena/jellyfish-logger":"^3.0.22"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^27.0.4","sinon":"^11.1.1","deplint":"^1.1.3","ts-jest":"^27.0.3","typedoc":"^0.21.0","depcheck":"^1.4.1","typescript":"^4.3.4","@types/jest":"^26.0.23","lint-staged":"^11.0.0","@balena/lint":"^6.1.1","@types/sinon":"^10.0.2","@types/semver":"^7.3.6","simple-git-hooks":"^2.4.1","@balena/jellycheck":"^0.1.1","@balena/jellyfish-config":"^1.3.3"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.160-renovate-internal-patch-586cc31f49be966809515814457ed8f028734388_1624348747946_0.6090082296447492","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.160":{"name":"@balena/jellyfish-plugin-base","version":"2.1.160","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.1.160","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"4cdfa9e44d7c4ec3fb6f92c976a9881216e78555","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.160.tgz","fileCount":18,"integrity":"sha512-9flHPKJ086ew0KLV1hx/1xwkLAUAkibhJ3bUckuM1Xq05RrymyHts4zgbWWhbtaMHKUk99dbstSvDcTyqMJGSw==","signatures":[{"sig":"MEYCIQDP2dNqLSbsdg5j5UoUG2v7GyHQIbNf1yhR17fuZKH5NgIhAP2feQrWBOETWLRrmx65TxXXWQlVX9Z2JOgsYbcLJMMX","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":55831,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJg0ZkdCRA9TVsSAnZWagAAcFoP/0aMPXASYyDpLWyI+yKw\nupfB9azrBOV53p6tmlpV5xBIX5oggSYY2PjnwnUA0ZuLoyJx8kFn/jCrND0y\nI4cIlQNTmFBMzBEhrT4Z6q9tM90gWbMuFanHNN4JMqfS1QMefUabQ2QsPriU\nxwSzl7TzkILE2bSZEcRMe6nZaAsIUoYi6JKFS9bog3ERpB/sM/a/czpr1f39\noNxFzB/INFk4DgR4widStltAPw/H3mJGGaHuvKT9QmJWEfmypIJGeD1so0Xr\n3zYlovF297TB8fHS0HnM5ufn/jL++bzYjdEk2khv1b2g4GUMjdPxNDhtRvgZ\nlVefr2y4OtdalGNTJWTOd+7AlV+xHnc6MI8H8TC0BY+Im1MZtO2Ny8zlVzFg\nbHykrGNQ7LelXrRZXx0IY6E7ueb+hKrGeftNuC+PlBxJUdROhZqMz7v3wywC\nJnhfx+uD+Tt8FGZ+MKkzHBCnbdQQ2Gp7iyH0AcBO3gM1HPVRrQm6SW4g3vPX\nrBKVAZPDT7/8PuAXw6OWeZ2i3p7duUmdVAj3OS6rLLO7tJqALMsDXJZLaJaO\nJaDywp8tjCZUCEBaBXCw2p0dc5rLcRbrPWCWxMMXKapH0YkEZyepscTHk0fF\ns5rfJb5fOPJQRoYkksg0SpO/aNbkFnSof2YS/xvBQUFYfUK/GZMcESqAJ7kl\nLGcc\r\n=+o+y\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"2820da1aa92fe3315f199c988030bd5a8f761ea9","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc -p tsconfig.build.json","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --fix"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.6.11","@balena/jellyfish-logger":"^3.0.22"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^27.0.4","sinon":"^11.1.1","deplint":"^1.1.3","ts-jest":"^27.0.3","typedoc":"^0.21.0","depcheck":"^1.4.1","typescript":"^4.3.4","@types/jest":"^26.0.23","lint-staged":"^11.0.0","@balena/lint":"^6.1.1","@types/sinon":"^10.0.2","@types/semver":"^7.3.6","simple-git-hooks":"^2.4.1","@balena/jellycheck":"^0.1.1","@balena/jellyfish-config":"^1.3.3"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.160_1624348956664_0.5756437621925317","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.161-renovate-balena-jellyfish-types-0-x-71e2dd2f00a92901b29386b2d27efa877563be96":{"name":"@balena/jellyfish-plugin-base","version":"2.1.161-renovate-balena-jellyfish-types-0-x-71e2dd2f00a92901b29386b2d27efa877563be96","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.1.161-renovate-balena-jellyfish-types-0-x-71e2dd2f00a92901b29386b2d27efa877563be96","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"d826459f46d968d42fa432b2168ffec8fccda8d6","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.161-renovate-balena-jellyfish-types-0-x-71e2dd2f00a92901b29386b2d27efa877563be96.tgz","fileCount":18,"integrity":"sha512-8+Gwmk2RLr2muUUp9eBtdAooGjsB+uEeIej+m6guEo8XFUudNtDHx3/tAGcHWduYYWGUBPmNGamo1xJIJ7RVfg==","signatures":[{"sig":"MEYCIQDgshKQ884oAB7olys2GTQh3JEIZaVCW6XaJL8PrPoIfwIhAOT+GcIr2ynQSxrhkY7YU7rEtWHOV3tZW2cK3CGmQzxr","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":56009,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJg0dVFCRA9TVsSAnZWagAADCQP/iuKj5BcJuGXhsynoX3v\nHmf8zwXbz3OilS9RK3wKTl/hiMgKz5driwxMyGxN1C5CxMoBKc1fnrUKyCSs\nzYnsqOdkwuCwX/i1D2qeb+B+GgfVzh8JVBwKxTxTFe/yyXOUiWFdtwC/xM7k\n0jZIUUKdYwFWLkOkcFet178w0m3FNOSKbiSjZ5dn0na512H46V9R6sMStvNM\n9aGaIJ3uyparOOc9cIhAcyCAC01h2vtRUNgDimiCF7iInydmMnK+/C6Ham6c\n3Na2Vq50Q1+H29kC6SPaFXWFDPhtNEfEB5n2UXgc+ayRbpcdY2FlLMXzBx7x\n5zCoCx/+JP5kaMTDtvLj5h2Dzu88xIjvH5MTPKjAh00F7oY/Ft0nqSFNornt\nHqxIL0rdR7WipAGxvSvCr2xOWFWyvhEb0vV3jy6OFbjO+ikgtNiTxKfnIvRz\n7SzywPIfvz11NxhY3V5ejOqwbQxJBSb3Jt5Io7irDUZ8bmtyGvw9kgTfCDbf\nPcE7dIx4tzNwErX7l3l2IZVsYcuk4r/azIaGbxXlpWGMlFdKbEJ4CklQjtb1\nFfL4qbAimJO1zhGgV2LMCZSkxsSGHj3peBPwIjSTeoUKyN3l+CbuQG5/mxU1\nwCTYMgEFqpDtgXMtDITuV9Gz77v/Mi1GEuIU4PDVbbiK0CT1FsP32clxbzbL\nwXm8\r\n=pL9P\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\n[![Publish Documentation](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml/badge.svg)](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml)\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"71e2dd2f00a92901b29386b2d27efa877563be96","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc -p tsconfig.build.json","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --fix"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.7.0","@balena/jellyfish-logger":"^3.0.22"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^27.0.4","sinon":"^11.1.1","deplint":"^1.1.3","ts-jest":"^27.0.3","typedoc":"^0.21.0","depcheck":"^1.4.1","typescript":"^4.3.4","@types/jest":"^26.0.23","lint-staged":"^11.0.0","@balena/lint":"^6.1.1","@types/sinon":"^10.0.2","@types/semver":"^7.3.6","simple-git-hooks":"^2.4.1","@balena/jellycheck":"^0.1.1","@balena/jellyfish-config":"^1.3.3"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.161-renovate-balena-jellyfish-types-0-x-71e2dd2f00a92901b29386b2d27efa877563be96_1624364357142_0.4964078409556101","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.161":{"name":"@balena/jellyfish-plugin-base","version":"2.1.161","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.1.161","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"9ebf94c4b17eb15f0cdc6b90eac171ea16f39860","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.161.tgz","fileCount":18,"integrity":"sha512-BkPvDBI2txgge2UdKAOyOM1Mum5J0NK3eHaLJO0NY/R3X7L1reE/wn85lgUYPHE93rKJAv/soFq85jS4m0VdIg==","signatures":[{"sig":"MEQCIDS+cC/YvmVyaS1EykjZUAc/emWCXHyngRUdrOiOBajrAiBF7ktaBvXnH2j40kL3hOU49e1/kPW+A9shQZDtquwnUg==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":55932,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJg0dYcCRA9TVsSAnZWagAAW6oP/26oWfhkpkVxKQYJdqWh\nv1e0JQi3AjiuKturLtA455zRhuWRq95HvruFeaYf2BXR/CVAM6qBQPEoNwLA\noS8mCmVb/0yx0EjXGHbETkpcZzh7xs9sHv1O3/PT37lnodq811ID0NDwpppl\n4lkuefojSBPAAyaMN1ykX+VOEe/u3YZDiohsyYHejBGL1TWWsWN+KEQXUrel\nsUdIGP5MclyLyuOPtan5AkkiL9v0rNuCmkzVWhZ03y8n5/LxUqzgN0CrntGz\nK7zBD1zjOpBJQyPnHlKTYKkCzTWx9VRyEwVMt/gZ/1ELBy+Nd76HbLCHbvew\n+0VGn/v794QfWO2B+yRcyjc7wLnUBhl4rxYS/Hhb3WJ2VK9GgQYrA3rgE+Je\nNIyaAizos2mtcGZ4zKhMIxSrUFanWVc557/KS10lzR+TFPXbtZ0kb6XHclVe\n5EIX3Q6gnQl07L9BajVfc5gu7wXoActfCdqD9alX6oNJA7jkfD4SRs3tj+yW\nDOufKwEzT0a5YlZun/X4foSJU+cIsq1TdVOeE2Llv6Z23qWSM5ciKJZK9en8\nfcgundl1We4OHsZso2InCVBz3g3ftu126Epj5LV/udD/muUowUcysOUQpAi5\np9ZQKm4DOiUkQ6SmgL+Mntwc1FXCHeMyeETwWVz7H1KjRSbneo3qknPsnf9S\no90s\r\n=afR9\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"bf68e16cf22420fc0b98f83ee4786e9c4a92fe40","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc -p tsconfig.build.json","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --fix"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.7.0","@balena/jellyfish-logger":"^3.0.22"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^27.0.4","sinon":"^11.1.1","deplint":"^1.1.3","ts-jest":"^27.0.3","typedoc":"^0.21.0","depcheck":"^1.4.1","typescript":"^4.3.4","@types/jest":"^26.0.23","lint-staged":"^11.0.0","@balena/lint":"^6.1.1","@types/sinon":"^10.0.2","@types/semver":"^7.3.6","simple-git-hooks":"^2.4.1","@balena/jellycheck":"^0.1.1","@balena/jellyfish-config":"^1.3.3"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.161_1624364571818_0.32940545082860395","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.162-renovate-internal-patch-8279853222ead57d73d6e54526b0ef6726d7974c":{"name":"@balena/jellyfish-plugin-base","version":"2.1.162-renovate-internal-patch-8279853222ead57d73d6e54526b0ef6726d7974c","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.1.162-renovate-internal-patch-8279853222ead57d73d6e54526b0ef6726d7974c","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"68d02755e7abc963bc40ae592c148a98703987c3","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.162-renovate-internal-patch-8279853222ead57d73d6e54526b0ef6726d7974c.tgz","fileCount":18,"integrity":"sha512-NmY76W5gQr0/nn8eUDrJhjczIQRmePtyaToxqVSrhDTtOxwJ6dgv1eJ01rLqxnQdJUoyUap3J9lD54J+lCus5A==","signatures":[{"sig":"MEUCIQD9481dnlGKqsgQyF6jFOvPwtq+svwRj16YRePJEj7DoAIgcdbv5T9DII2MEV8toR63pou5drJTsGe9+4nAcIcMPpg=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":56101,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJg0vu+CRA9TVsSAnZWagAAnfYP/3Az0HOcqyAW6qJ43o5y\niky3V+6iOApFr0WDWEjYz94iqJNA1wdlv82Bv+Si1iO3dJusGmBWz0P2BR2z\nWpqarYMzX+D8zspGkDobIhbQOXdfTpsB1h+jiCSYVKiQlvgo/WT3kp7ge/Vg\nSV585Z2wzIYQvfkdvta991KWeylwsSP2YX1dmuDe8tYkG+pJl008Sle2WUf3\nnL5UhfkBLiFK1HaF/Irb2otUYsYegdxI75KHnJrKoWu/gUWwQlmAxmHdb5W8\nL/JIJYzwcQRNjUlh2D2WTKGCUPPr5gLkuD9+soFEAQx4fX0sKoabFktGxPK1\n6PatxYMvcBtsUlk8PtxwUiB4mBZPxnfiEbGgNOE5o6qa9pTnyKw23FmKZYbv\nIELtKfSKDy0ztRb4MQgrXCFYLZobh9ezI80oWvgDuTdTRgpVGq88jpJcmGyc\nhX6eZUbNJKo5+tdkoS6xxtYM/dMPRXkeK4Lzv5jGRAKfwv7tKnLxVL1shUcD\nrKtzHr1kp7eY5TQgEp8Uq+bzK24CAle5hd5YYbzfSiQSNmNhOj/VRqyZPseh\nj9uobLoa513plEvjaPUOrrFBK/RphEmgCRDIANV/cUO8cvl0GmZvZYTCyNyv\n7wd3cRPPSs/FnpSGZgazk57I5HPXlv259JI5es7Ky6kzla9wBYz6q41uwM+j\notmW\r\n=iko4\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\n[![Publish Documentation](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml/badge.svg)](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml)\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"8279853222ead57d73d6e54526b0ef6726d7974c","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc -p tsconfig.build.json","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --fix"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.7.0","@balena/jellyfish-logger":"^3.0.23"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^27.0.4","sinon":"^11.1.1","deplint":"^1.1.3","ts-jest":"^27.0.3","typedoc":"^0.21.0","depcheck":"^1.4.1","typescript":"^4.3.4","@types/jest":"^26.0.23","lint-staged":"^11.0.0","@balena/lint":"^6.1.1","@types/sinon":"^10.0.2","@types/semver":"^7.3.6","simple-git-hooks":"^2.4.1","@balena/jellycheck":"^0.1.1","@balena/jellyfish-config":"^1.3.3"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.162-renovate-internal-patch-8279853222ead57d73d6e54526b0ef6726d7974c_1624439742254_0.6364938821432431","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.162":{"name":"@balena/jellyfish-plugin-base","version":"2.1.162","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.1.162","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"bf10ab485d0bf938f4336ecdcc380b6fa4c39dac","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.162.tgz","fileCount":18,"integrity":"sha512-nw1idMEn0PvHiUKupGyIM6nYFOOvQft0ceXXsRj/VSMuWV5oVL7guFdGmwtkBTjE1yX8noAUeMMFUhhxc1eHWg==","signatures":[{"sig":"MEYCIQCUXjw6SJgHAaA2NP8y/19XifEICyp4vpR1JCTjbWdSiwIhAKl8kaY9hYxSjYuB+xnc6IdFXKLOwoKhSedDEK/H64g+","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":56036,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJg0vy8CRA9TVsSAnZWagAAtVEP/RU+NEPgOykIbfAX9Plk\nd6ULol0k4Dn9cLLl8kjgLrDu6rVQmu5luvEm/qm9c+IG1mJSSSkCBXYa6OyH\n6NMJBYIszP2N8/Voz0OaUN5vZlO6cOQ6H4+o//W5yj4jdaJYP6TFpp+5qKMT\nVkCclet/k7GB8TcnYaOp8SEV2Z17tLZ7wING3Foz26w5K4OYxutTuMJIZ4xw\nOVHC+4DyLr+Wb1DfhSAhtYXxi8KIdJ1nP7IEi3f47++zg6egKXcxmvXHDb+6\nhd0Kf0MV7oX5CUYnhu964qzII/WyqWwTYkaEPIt92xxfvoKdnOdrS2q6tuBd\nJMXz0jrEYcmW+qzv7PIfwUR23nooig1+4Y1GONtF+k7HX3RIdX1+dYRh++G2\nRRBoRRao+q3E9Ohk7JChOU4pzGIak4a3WXxnG2qqBYQeKSpqhZXR/t5kuAEY\nABN79Td9zoM6T9WgkkM8EC88jdsl69zrOFg0V51pH3LOvSjqFj4Qe28QMIt5\n/NYjc4YBNxd6nefnQj02UIUkSAqdPPCNvK4jHJqITjStG96Tmm5I3Jrf9Lc/\nyCySRbWGicSo5r7igebIZDScv7NJ81UnRYqsvqX3DwPNmNad6afuBOuGbhrR\n1+iE3U/qeadWdUOh+pbkX7H0XqZvhEigaSf3QsBtgfp03Uv2sRNS+bYnbWQL\nA/nP\r\n=SW37\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"e3a9303b8ebc185d4bceca154cf1c925e1c6e75c","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc -p tsconfig.build.json","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --fix"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.7.0","@balena/jellyfish-logger":"^3.0.23"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^27.0.4","sinon":"^11.1.1","deplint":"^1.1.3","ts-jest":"^27.0.3","typedoc":"^0.21.0","depcheck":"^1.4.1","typescript":"^4.3.4","@types/jest":"^26.0.23","lint-staged":"^11.0.0","@balena/lint":"^6.1.1","@types/sinon":"^10.0.2","@types/semver":"^7.3.6","simple-git-hooks":"^2.4.1","@balena/jellycheck":"^0.1.1","@balena/jellyfish-config":"^1.3.3"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.162_1624439996333_0.5912669551297431","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.163-renovate-internal-patch-bd8d66f6ebbe5817edeec938070ed5d1beaffa75":{"name":"@balena/jellyfish-plugin-base","version":"2.1.163-renovate-internal-patch-bd8d66f6ebbe5817edeec938070ed5d1beaffa75","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.1.163-renovate-internal-patch-bd8d66f6ebbe5817edeec938070ed5d1beaffa75","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"187467374d96ef4d4fdcc9aa5bf93acffb4ed45a","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.163-renovate-internal-patch-bd8d66f6ebbe5817edeec938070ed5d1beaffa75.tgz","fileCount":18,"integrity":"sha512-lg/xe9ExkuwMeQjls/gk1enwZpRTZFabSBFvZv+Ne+38+asSsXHQfuzqhZWonorPWAJCvkiPWf7frbQvUEjesw==","signatures":[{"sig":"MEUCIGbaKj4yEPwTeNI9RMKJtXFPZHk2rIXc37LpLBDDFZf8AiEAwzl695oX9Q7je+cI23PAcwxVSVEnlgZJkA76+io/bj4=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":56205,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJg09m1CRA9TVsSAnZWagAAz6EP/3lD3mdlalwlsTwj1y62\nzGDg2UddjoVAZsJxiigqGkQvl73UK01e5lBDcc9OE5mdPbXK9Lx+a9U7puQ0\nXGdAqz1U+EwfyomGx0aZWjMmNP3OQv0dxiF47zHC11aKbOm7rXUqn/UgyW5U\nY7N09qHdFFHJfP8TESyRPyYb+YXFqu2hZsdOyT2gQomt3hLtEas1qjmYN8Q2\n//UMnHnIGC3EYWyfNW8kFQEpHyzdABVq1P6iazMZCeyVpZ6IY04YnahC2f/K\n6tTXdrc+3o/Jjy4JuA1BedTvVKS6rCif2RA0+eeUnkseGmg9ewYOJHR2XxHX\n8i2DkhtKwubHa/wLe0vFxaDGjJRoxVnTf4QleIAg8An4S5xgFlTHdQ12j/K+\nAlQrkwXuGoiBoGEwTbOSoQiACVnZfQrZeyyUJvdWJsizvGD92HdVdjGXlSQR\ncp61bluEcmzEmOzMM2qPrjHOa8tCI3K0EKao7d/KJelh3TUFE9l/j/wKe1k3\nsmOxIrhM94InldTEL6rluB4retlQc2y6ORYP7ux6+ZKkJPlcix3yg5wGPeTb\nPSvr4j+QxdLL6I+9CwiOnQl+bayRxwt9DPqjOHLYQkNTpTD7JXYeiBhMeyFv\n/yowyD6fQf6YhhxWptAIDXRKPDVt7GB1TMo2TVZUDkZ7B+QxTe5vT1THZ/Xe\nclND\r\n=iDdf\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\n[![Publish Documentation](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml/badge.svg)](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml)\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"bd8d66f6ebbe5817edeec938070ed5d1beaffa75","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc -p tsconfig.build.json","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --fix"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.7.0","@balena/jellyfish-logger":"^3.0.24"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^27.0.4","sinon":"^11.1.1","deplint":"^1.1.3","ts-jest":"^27.0.3","typedoc":"^0.21.0","depcheck":"^1.4.1","typescript":"^4.3.4","@types/jest":"^26.0.23","lint-staged":"^11.0.0","@balena/lint":"^6.1.1","@types/sinon":"^10.0.2","@types/semver":"^7.3.6","simple-git-hooks":"^2.4.1","@balena/jellycheck":"^0.1.1","@balena/jellyfish-config":"^1.3.3"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.163-renovate-internal-patch-bd8d66f6ebbe5817edeec938070ed5d1beaffa75_1624496564694_0.7564067279774407","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.163":{"name":"@balena/jellyfish-plugin-base","version":"2.1.163","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.1.163","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"65154302ba2021bf06b2cb8613ae192f69916bc1","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.163.tgz","fileCount":18,"integrity":"sha512-fBCiOHCcDHN2iiGsNyYhowPZk4Mznzx5OK0L+4EjJ6WIEkrNTF7cGDn3A/VhYcCQBU8FKFwkKIvuKFl8iYLfqA==","signatures":[{"sig":"MEUCIHQSFT8oUKoWS0Gv3Np1yuA81FsDI6nRdENJPBDcnDKGAiEAm6KDH06tZlG4PbseWdcBs0lBsH/A+GeALCv/nZnkGDA=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":56140,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJg09pnCRA9TVsSAnZWagAASBAP/jrSDSFJfilw6zYBom6i\n0s3uyuuxNkQbu5G/wy3TsVsG/LrrSIePbVKgyVjhPQvkw6AoJ1y7r//3eFvn\n2ywcLfZ8rVSr6m1xljhsAz2nbFS6Q1N9kZ2WJbvchNXVr4+LTi6R7FLDqOE4\ndYlDRUtN8Nu/250y2PILIe1I2LwUYJui3yjA85xedp3IxyroMMKTXMBtVkz1\nOQCTYzK+YZY2ATubknVt6GtBbhZ4QTcrSNT3p5k/CeffyVM5yb3WUSWVgGe4\nHO6DOTdSefye6FCdwy5P2RFF8jmtsgGYHDLJy08SDihuCk5ol2wSuC7KFpRW\nMGQbG6TFeW8RpFInN5YEb8eSseGy3lft+1wlN+GCxp6CeUJVFUI5dkw52hrh\nF5djqHrBP7oc8I6Zq/QuZ4/3t2cTKXhukCVdtkG3IkhwcQDooupYEgiRJZOi\navZzzjpNJF8YQDnLAjX3uPTHEIWYJ6DJtOF+ExRKs1eXgBiCvGiSxCqZuN7r\nz7sZPcE5o7gicPT6nqnnYMAPjh5KoTnetqTtqdSemzMHtHHqUkSFWT5C9XWE\nIcDBcswOowNte/17aL0PJIsIw8tMnkO+hhBD5uWX7HRasHhDQOP6cZxMI30p\nqSWM88gb53ultw9AG4v1Q0FAOHnJbtTXfe7Ul9Ty4RoZpI0t0N8qR1imRT/6\niecZ\r\n=Gea5\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"3c717352634308e3f24836c2135119a8601ba079","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc -p tsconfig.build.json","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --fix"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.7.0","@balena/jellyfish-logger":"^3.0.24"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^27.0.4","sinon":"^11.1.1","deplint":"^1.1.3","ts-jest":"^27.0.3","typedoc":"^0.21.0","depcheck":"^1.4.1","typescript":"^4.3.4","@types/jest":"^26.0.23","lint-staged":"^11.0.0","@balena/lint":"^6.1.1","@types/sinon":"^10.0.2","@types/semver":"^7.3.6","simple-git-hooks":"^2.4.1","@balena/jellycheck":"^0.1.1","@balena/jellyfish-config":"^1.3.3"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.163_1624496743325_0.2886033215764028","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.164-renovate-internal-patch-0b0ab9b7d405f56b1b4fe83dbd57ec9b7148577f":{"name":"@balena/jellyfish-plugin-base","version":"2.1.164-renovate-internal-patch-0b0ab9b7d405f56b1b4fe83dbd57ec9b7148577f","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.1.164-renovate-internal-patch-0b0ab9b7d405f56b1b4fe83dbd57ec9b7148577f","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"91486f9cb79bcaa0372ae1d53c3d7c29189fe715","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.164-renovate-internal-patch-0b0ab9b7d405f56b1b4fe83dbd57ec9b7148577f.tgz","fileCount":18,"integrity":"sha512-L3zTmbkAEW+ROiwKRbxAd7E5xl83cfsZDsY6BWQEBCKcfLCsL/abDfnOJN8cOnORlojJiBMa9iBLpAuwlpiFqg==","signatures":[{"sig":"MEQCIB2OIdS84tHUJUo/GlPJWHx+q+y5XsiayRzh9g0meNvmAiBbqa0TkkJSo1mVEwMIHRd3No8RsHKoYkltmo/lEhL+DA==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":56309,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJg1JaECRA9TVsSAnZWagAAOBcP/26YLdUlnHy7C0Vc8X3F\nA37OrY4XktXVeQGt7PD0GBHmbr5fsGvRBxrN1QInCY8ekuweAfEAffiu2/9A\nbjAEGca5zH55NUB97P4ASYL+F9LohoF1u9zkh8I6usWmzaLwNI7dJi8uJ/m0\n2i0vqEyczh0X9rgfNuDZ2XQJAVQTw6mLpZIheqJHotDExMwmEayAD1SmLrGL\n4YJMUqLnjfrJa+GpNntyXgo0O2GMEX3Na8Jmp9n7ZeLSQw7bv0E8GXxvO6b3\nvhwg/jkzJAr8NzOqkrEV0KrzuJYemjpCs5agsV5QPOk0BpzXZtotapASxR60\nbDwxRy+7lIvOgGXb/UKj1rE+xx0pfGFxv6IlVRaQ1PJubHDOOc6HDQrNW2/c\nshXc+PTaoJfAx6l6qX2y26RjCrwSIgTLCEcg+SNnPZIOTRuNB6ifBLHNo/N7\nFqmkvYs3E3zx18EwAyUPUG3Q/Tb1UGvDcAGd8rogHACNiSvE6lQM+94k1Q4r\ntcQJ66CQMeDVlodL4bcgJpuXLLJVai8qSQcFq23Sz2dJW6295sV/NzhF1vhn\nndO4iv7Gec1M9yU1ZTNgG9S5p9q46ekKUQR3+PB7I/Ri/rIfWxQoNkNqv4At\nP4OOTdNmhpkKllU159zVOXylZRxWTQeaZ1egOY2mFEnqKxgRR8891G3oqFyR\ntVes\r\n=9QXq\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\n[![Publish Documentation](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml/badge.svg)](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml)\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"0b0ab9b7d405f56b1b4fe83dbd57ec9b7148577f","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc -p tsconfig.build.json","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --fix"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.7.0","@balena/jellyfish-logger":"^3.0.26"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^27.0.4","sinon":"^11.1.1","deplint":"^1.1.3","ts-jest":"^27.0.3","typedoc":"^0.21.0","depcheck":"^1.4.1","typescript":"^4.3.4","@types/jest":"^26.0.23","lint-staged":"^11.0.0","@balena/lint":"^6.1.1","@types/sinon":"^10.0.2","@types/semver":"^7.3.6","simple-git-hooks":"^2.4.1","@balena/jellycheck":"^0.1.1","@balena/jellyfish-config":"^1.3.3"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.164-renovate-internal-patch-0b0ab9b7d405f56b1b4fe83dbd57ec9b7148577f_1624544899545_0.012475081430056045","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.164":{"name":"@balena/jellyfish-plugin-base","version":"2.1.164","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.1.164","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"d604303e3ba17e3f8547ffc442d928e2ee64031b","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.164.tgz","fileCount":18,"integrity":"sha512-cEQaZ4QN8bLfqpMGX0Y0BGtvjD/sVlCvfCCmhhQ4XQt4cdpQAwNwB6BtRvfnF4fq6wGIbsToQ4HfW/iMtqGYhQ==","signatures":[{"sig":"MEUCIE1tkqkl9Zip8inAxFv2nhlRRu6nWPx8mj4AnGaFBk4XAiEAprwj58kUrCnTainRqRMciSuEFEbyDzLBMNKKJERIiTE=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":56244,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJg1JdNCRA9TVsSAnZWagAALpoP/1ecAATTgOLcfe9BjEsA\nAzrO5KVqYbk4AxnGVkg7nyGVNUe3ZcoEGA1exzP0XH7ElzDTrelzU5+oF6iv\nCtxMCyeLlk51HpMdIAkS2wVfUMSNVVpDBScj8kHtQ1Id0WNvJdAeu2Xy+uyh\n+ahj+h0ZNlFyS641tno6l2eBGYDLwMZxl/3mTLXssfVwqDKtQ0y3k2KQA3Qe\ny2Yw4LVVF4Di7cY3iA20ueAL93g5ZEUenLy5dlTEd5K964b3zOoTXQG1Swm3\nDQeU8DgNR7E765SiMJZif5KEFVi1fW8sl+PDAoBP3T9JI9LrDKL8z9cAhjKF\nUTHZACWB8nIEaqA7voNl5QzvV6DBi2jvGbPVLIzeN3xE5zb/XHZ0tU+Etd1d\nepfjMiCN/EF3GbTFcm8FgL+mQE7zkjTknVMVSqCorS0OOkUgL63QxYf9YcqG\n/MkyIKjJGnehM8HebJaLMJh+TsM9nbjBUYAheaPXh8/dF5zB0KXzDpvXxTzy\niQWORchSPDvguXi0G6mj+mB4vAMoL5jwcqRNhsxltXujG0RZ3RlrwHDSSGpd\n7ve9kPJ7yd7Qv0ihwqZsS1tQIsUJ5LrSXuF9pGKjO6tjzDXj36u2ZffGnfRu\ncvRkr2DSgIupjN1tsNmPHKu71Oc2eMBieVsjLIRWFHdFkAidDFUfNY5hO6Hp\nI0gd\r\n=JlB5\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"e91a068424d104c9d07f0b789e67956d3095f0a1","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc -p tsconfig.build.json","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --fix"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.7.0","@balena/jellyfish-logger":"^3.0.26"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^27.0.4","sinon":"^11.1.1","deplint":"^1.1.3","ts-jest":"^27.0.3","typedoc":"^0.21.0","depcheck":"^1.4.1","typescript":"^4.3.4","@types/jest":"^26.0.23","lint-staged":"^11.0.0","@balena/lint":"^6.1.1","@types/sinon":"^10.0.2","@types/semver":"^7.3.6","simple-git-hooks":"^2.4.1","@balena/jellycheck":"^0.1.1","@balena/jellyfish-config":"^1.3.3"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.164_1624545101035_0.03659954718897307","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.165-renovate-internal-patch-4884cfc5e20767b1547b992ba0e0fcf95587610e":{"name":"@balena/jellyfish-plugin-base","version":"2.1.165-renovate-internal-patch-4884cfc5e20767b1547b992ba0e0fcf95587610e","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.1.165-renovate-internal-patch-4884cfc5e20767b1547b992ba0e0fcf95587610e","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"3bee86d33e9e5d4b920f65cd8b86bbe505dfd9b5","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.165-renovate-internal-patch-4884cfc5e20767b1547b992ba0e0fcf95587610e.tgz","fileCount":18,"integrity":"sha512-+4S6ubRS5IGpmhyILxryF7Xj0qvv9gRJ/eGzo5pgbuS6THYL1fZlzs3ty+LpBb9ymfycG50yXw/frpcJKFejSQ==","signatures":[{"sig":"MEYCIQDh97hnCXjszmb3AxmhSui9+RnBREiE4xVsm95/cn+9TAIhAO53+5nCXHlF4qSu+D/E6xUdpfSlKgFNzhAxqypyy+Vl","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":56413,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJg1T8LCRA9TVsSAnZWagAA4gcP/R12uezL09PyoiPmP9ml\njJ8LFfiTxmMNlqOTrMvMrksqmZyUpl5cc9GRtGJi6Wa8V953WIIvSOcCa4pY\n0extL5gGCzStwgPu21DDYmDgAJK9ePM//hRD/xUa4NjmJjKXEXCbLaUEskV2\n5Ze1qLJDEnJwUj5cepoPfKmdsGYNt2d5DtKushZw+QenaBsfyIdsnwmVb7sy\nPUkzLfkYkbeY97nRwjZfrtk1dhZi/5HbTTklgt2nPwfTd/cprZzlwnA8FZV/\nUZrsZwGlhHkyooMXbozFJD8DkHpLDwBHeB9qDdxIkY0pxD42Pf625W6JBFvy\nB8yuQZ800vf9wDSrxV4uh8Viesj6L7msoiVyLzbBmC4NY+YovEjaTFTSpu1k\nr+7UJKi4TIcu83P9Kg/07K5W/o0k/Ti9M5QSpx4E2R2wXkSBwrDSuZeHDXFz\nfBw3Sorep2qL5PeiSFXROzRDnpRiFDqLOIlQoteVUCYz+V6fkbkvXwHUxvz7\nrAy8OvuDzNpI/WVHXh5z+nUxwtRzT4crkX3ahO+xcAoQTMN06VBIXKZ4uhM5\nOxP30uxI/QSWmfJoPNAPWp5XYiU/Z4nTPttGwY2NZP6I83ap2xQETz3mzAla\no5gAxrGs5DFTwM72cNQGw/Vyc9T5bkddCV2TZY1rIWjS8wecXDrMY0ZyLAjW\nvhFr\r\n=4Ecj\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\n[![Publish Documentation](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml/badge.svg)](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml)\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"4884cfc5e20767b1547b992ba0e0fcf95587610e","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc -p tsconfig.build.json","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --fix"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.7.0","@balena/jellyfish-logger":"^3.0.27"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^27.0.4","sinon":"^11.1.1","deplint":"^1.1.3","ts-jest":"^27.0.3","typedoc":"^0.21.0","depcheck":"^1.4.1","typescript":"^4.3.4","@types/jest":"^26.0.23","lint-staged":"^11.0.0","@balena/lint":"^6.1.1","@types/sinon":"^10.0.2","@types/semver":"^7.3.6","simple-git-hooks":"^2.4.1","@balena/jellycheck":"^0.1.1","@balena/jellyfish-config":"^1.3.3"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.165-renovate-internal-patch-4884cfc5e20767b1547b992ba0e0fcf95587610e_1624588042558_0.11880921485374007","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.165":{"name":"@balena/jellyfish-plugin-base","version":"2.1.165","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.1.165","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"8eb28fefa34098c6ae7690192f6e81ef0ac06a0a","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.165.tgz","fileCount":18,"integrity":"sha512-GlXcuEy1pWmcdt6N/lKztGRq4QJJnoq43Dkp1mCTFMzS4rNbO2mPaUWQPQVriG3+vZ3D02QvBsAV5RGxdqaQcg==","signatures":[{"sig":"MEQCIB2cq/qfKBmULieBV2HrmaNqWRzHvM9MBwfNiUYuaSxmAiB5AnYIah4uY9ukTUkH6E+DizIhcxdgFN+Dab1CeZjWzw==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":56348,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJg1UAzCRA9TVsSAnZWagAAIHwP/01pKq0OaRRpalfGVu46\nWSFRsJZwN1GRh/BIOw3EmCwpU2d3ykviCZBlREqaF36T7HmARTapj4aZTRSy\ny8113qNZi/gjmdJXP68LXnuUHSBDp45zSPRKEWufhV+WyRqpEgitpxyAjb3p\npAtCDSsbKhPt3ojBYxOiFUvijCI4HblgR8FRj8HJaaFwZ9EsBsunJy7D3/tT\nVWrinSaq1gGskz1jh4EAm3zVOWYri/7iguRlQpD605SHQGxIEpFe3/19ywTw\nwjMbovmSevVtKk0CQuQvaoa4qazgbDQXEMcMl5bVuKbhkALV3tcwB1xKi9dU\nhgQyts8NBK65n3ardPOnZBl42rRKDyeHHF+Z+es7UFPmK8IGbHu3XXSfirV/\nuPVexlBBbIQ0jMPml9KltwGo8lqcsXVT7KYPzLCEfU+Yx0WpeeXiTW41roI4\naY0vdnR6o9j/6w4QAtUJ4yzoMzkQWk+hZlx07JTif7xOHnZpbpU8Uds58wGH\nEuooSWG5BwmtHsh2Ar0O0ajEgVg+LIVqPX1ebZNIuF+pEOuC8legifGhXoJN\nFoWgDn+oOJlf3OyuCz4XtieTcJFSZvMSsKzfXPcSqLfAGt14WoCAmkPR0wVG\ng0IaqvP1zEbnO8QrEAQB8TJUt8dJHqWz1rUB44WjuVZUMQPmzOOA3EvWqt4z\nZ2N0\r\n=4X15\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"2cca0b7d3bafcd560e9a4d8870c9a85e3141d311","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc -p tsconfig.build.json","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --fix"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.7.0","@balena/jellyfish-logger":"^3.0.27"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^27.0.4","sinon":"^11.1.1","deplint":"^1.1.3","ts-jest":"^27.0.3","typedoc":"^0.21.0","depcheck":"^1.4.1","typescript":"^4.3.4","@types/jest":"^26.0.23","lint-staged":"^11.0.0","@balena/lint":"^6.1.1","@types/sinon":"^10.0.2","@types/semver":"^7.3.6","simple-git-hooks":"^2.4.1","@balena/jellycheck":"^0.1.1","@balena/jellyfish-config":"^1.3.3"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.165_1624588338576_0.4100021810333194","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.166-renovate-internal-patch-58a5a5e46a2b19cafdba09f1c0986618c01a0e11":{"name":"@balena/jellyfish-plugin-base","version":"2.1.166-renovate-internal-patch-58a5a5e46a2b19cafdba09f1c0986618c01a0e11","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.1.166-renovate-internal-patch-58a5a5e46a2b19cafdba09f1c0986618c01a0e11","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"69b51a5999f9aa6f1c297a6cfbff97dc5b85ff3e","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.166-renovate-internal-patch-58a5a5e46a2b19cafdba09f1c0986618c01a0e11.tgz","fileCount":18,"integrity":"sha512-VycpWxOM0E5ggFhe2hlAd6QgjzNFkCieuvfalEA/nyFRpBSBAfPxRMf1oKc9U6WXeVu5uKkPzXKtSHRCfhfgWg==","signatures":[{"sig":"MEUCIGJvH33II3Q1WatwxjUyMPBhL97CakiREQqqUWKdQbOXAiEAjLctnPQnqm/jVOMnSPafJdetS6i0YiSuiiBu2uaSqo8=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":56517,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJg1mcsCRA9TVsSAnZWagAAOkkP/jJwoiWNs0z3Xx08ug4m\n+EETI8LRMMhGk3/jWeuW3T8MCPxfy2KNlE2lijykHPb5TkRvoxH/xdr8iTwj\nVaIaOGsbYlT2Anrmq64awPV0W+tDsbHTo3tJlue0OWLIedSu1qNhqFxM4Yyn\nJL5cvfsbi+T64KJ62RiLtqFS4VgrBzZ+ag6UT07CUZgfZBwT/SQFOlCj3azh\nprfX613a6sMMdWZFAcwhhgYNeGmUatsvYnqRLmplaFw85gthowJ0askWElvW\nZrqjoTSU3Jyi+o3MWIru/Z2GB5M5NAN105CwLcZQBTqwEhvUyAsq1ORGfwmF\nqlTe4RX+H9or7eVxD6xgGBCJHz/L0AT+zh4CoLeNWo5sPMwHX9YPJ89k/kEQ\nd56Q9Z0XZRQI3iPvhJXbLM5N1PjoCDvrWzoQS5uEckvkL8G/PIxDFAP9YcBC\n3Ci4buIOvqudyTDOC4yUA3SDU1g0NCRnUd3cKo9MkajZXH1vza8Y93xyvFY2\nxoSf0jgsULyAiRDzfLChLubwscKVOMnjfLkoOvKOzLJRHUw9KEyQzyMBa2Sd\nltyoxSFXhDIwlbceOorlieEdOV1zHD4C4qZaJcpMP8ZUlcMe4waOpMn6sdYa\ndFA0v7CHO86+Rf4FG/d1HhbgQKV3Xpco1PLH5iebHNwhLPjWn9a4/l0uqXWJ\nWKDW\r\n=CxfJ\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\n[![Publish Documentation](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml/badge.svg)](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml)\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"58a5a5e46a2b19cafdba09f1c0986618c01a0e11","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc -p tsconfig.build.json","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --fix"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.7.0","@balena/jellyfish-logger":"^3.0.28"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^27.0.4","sinon":"^11.1.1","deplint":"^1.1.3","ts-jest":"^27.0.3","typedoc":"^0.21.0","depcheck":"^1.4.1","typescript":"^4.3.4","@types/jest":"^26.0.23","lint-staged":"^11.0.0","@balena/lint":"^6.1.1","@types/sinon":"^10.0.2","@types/semver":"^7.3.6","simple-git-hooks":"^2.4.1","@balena/jellycheck":"^0.1.1","@balena/jellyfish-config":"^1.3.3"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.166-renovate-internal-patch-58a5a5e46a2b19cafdba09f1c0986618c01a0e11_1624663852025_0.6681752477641596","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.166":{"name":"@balena/jellyfish-plugin-base","version":"2.1.166","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.1.166","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"99c42c4d46d73e9efb3886c6e870262a7ef53a4f","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.166.tgz","fileCount":18,"integrity":"sha512-XgaFl0b/BnQQJElWpvJrhFQdrtIHVjzi2GFVXbkrBwuNbxybq34LHp4dzzCBdF3VOQT05+LBJ7f4tpenKWJRLQ==","signatures":[{"sig":"MEYCIQC6hVdOR6p4n9glyP0NvEdsgVmuy/Nz7w+MRsT6HbXDfAIhAKJgt0Oc3A8O7kgf/U0g5JGipukRTNOk6AZI1DtZMgHm","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":56452,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJg1mgCCRA9TVsSAnZWagAAVXoP+gNG2341jneNUN2c3xMl\nLj5zYhEtkdZ89jlELcsag7Vu7zcTzAb/XGhFm7sSqMQaiyvXjRewg3OS/Hjp\nGIgWJuYMV+Bm0BTh4cXvlHodr2cKETsXTiwov2WfGjXA3Q433AE04PKeE0kK\n4SyIC8e1LCwa0fAwYiAhZusb39dXUWF3dpzovF8NFbtJfeX9Cu4NPtpUTy9N\nVmfl/yUvCa3WqTCVRSo/KsSkeVtvw5sykS9/pps6PAj62kXSDWNegX+ReIcv\nkKY4GHe9notwXODVy5knhKdzPWeUqJU1HfqMq7h0Hp1cS/L7WjAfY/U4oQi/\n6Jy9viRj8S5bNAkxs+yljRz/4JqnnguJ8Mn4+kOfNM4ro6OkmbS7aF3GYuz1\ncbhktsYbNrdJ6sIXbW/Et+IflVYg5YYD+jIcYo+5jRQFXb3hY0unNu8RbIsl\nO5S5t+M5LwzVOs5xsKxznTX45ZJ1Qhr7TwMdQHsnv+km/uqXMh7CaHV3KFDK\n1sfVd7hp8WVbE+uh5xHGx0tl6+gMQ19XFArZDYdbmWA2m+9Fw/CfO+bT1Kjc\nMPZrSq//45uPFKMnHyXBGxldns1tRHxyy1XjmPitzQkP+xfL28X5O7SV+wCt\nqG/6He0bTPKlOfu7Olc3PfXe0iBvS1gx8ljc/6QHgrh+ulm62dzS4Hwmyy4a\nHQcc\r\n=ImQv\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"30d1d3c7ee39fcc828feb139fa6adbb380e79735","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc -p tsconfig.build.json","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --fix"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.7.0","@balena/jellyfish-logger":"^3.0.28"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^27.0.4","sinon":"^11.1.1","deplint":"^1.1.3","ts-jest":"^27.0.3","typedoc":"^0.21.0","depcheck":"^1.4.1","typescript":"^4.3.4","@types/jest":"^26.0.23","lint-staged":"^11.0.0","@balena/lint":"^6.1.1","@types/sinon":"^10.0.2","@types/semver":"^7.3.6","simple-git-hooks":"^2.4.1","@balena/jellycheck":"^0.1.1","@balena/jellyfish-config":"^1.3.3"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.166_1624664065994_0.5706132633046244","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.167-renovate-external-non-major-bb80b847e9602593c405189b8ade62819d4ebd85":{"name":"@balena/jellyfish-plugin-base","version":"2.1.167-renovate-external-non-major-bb80b847e9602593c405189b8ade62819d4ebd85","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.1.167-renovate-external-non-major-bb80b847e9602593c405189b8ade62819d4ebd85","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"791631c800beb8b44e15a1e5c86f46b749a41bc2","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.167-renovate-external-non-major-bb80b847e9602593c405189b8ade62819d4ebd85.tgz","fileCount":18,"integrity":"sha512-lM4GJ1WXj2T/9k5zcrrMOSEk/cCdRfQNqq4TbxZDX1ZjFQAj5jaLNBPOVi6Hxn1KCvtWZpJwh/afmmC6+mlCuw==","signatures":[{"sig":"MEQCIAwhgldMLGwk36qdi+ZSBkt9NRf5qMrtt7Ex9Wh/Q1ptAiA+yAIXWBgmV9PKkTKFa/lGv9IsZu0O1NQH4yhnrVIRjQ==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":56597,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJg1nRYCRA9TVsSAnZWagAAX7UP/3y41LmsH3VezoSIa3k3\ndtFQfhmPVkW8w6kAmlxeiT/mFKqwXGVsXlLk/LvgxSVpGIzWUpQ4wXLUp1dw\n6zwO+e2hhEcsuAoyCyuXSjMOV6ggQLfNryc0cdOHzCB756/W+Bv+zn2k/LzA\nk/gHKB4lCAoN4/tGftxjeemQaBq5VIiXBZhk/vbOBZsdlxlxiny/NtmWlDqt\n0hg2Nu6OBb4wHDMkI4/XcrlnzDyuIGkhSaH4IgOBW/LuWzVDaMvCYGGdkirz\nfFQ8TQPk8zK7XTRd7do44EWWcjl0oAIFAgSCJGJubkQ9ow1B4RFdniu1NN/J\nvgtk6Ewx+kdb1xCEK+MrNXEiPVSIC0EFniESq2B4I0Cz6a+x54Q3fEnB7QCi\ngzTRy+9tmxmFh4N/gnBgSDrJqj24Kzn31uydvaNo2GjZPrmm4e7proSnaU0v\nygg5B55hOsarTszfbdDuC48iy/kV0nd1odUPy193+uPhOFikjwiKagPR/tZO\n7w9t+JUcu6Aoayk4H4Wisjkxzin2E0ZZuM+/TwXCg59evXWeQwigye8sQAzz\n+MG5z+nWi9X7gAtpxKz8/9hM+jzfWWwpA+OCdzbChJb1STIwQPYCZi7eMIMD\n645hRDjHKJXS2zOx+8ndNQ5Hkta9F+kyigHZ8WEXDXnLHF57pujmuPqYSzN0\n8eEt\r\n=XYWq\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\n[![Publish Documentation](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml/badge.svg)](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml)\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"bb80b847e9602593c405189b8ade62819d4ebd85","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc -p tsconfig.build.json","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --fix"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.7.0","@balena/jellyfish-logger":"^3.0.28"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^27.0.5","sinon":"^11.1.1","deplint":"^1.1.3","ts-jest":"^27.0.3","typedoc":"^0.21.1","depcheck":"^1.4.2","typescript":"^4.3.4","@types/jest":"^26.0.23","lint-staged":"^11.0.0","@balena/lint":"^6.1.1","@types/sinon":"^10.0.2","@types/semver":"^7.3.6","simple-git-hooks":"^2.4.1","@balena/jellycheck":"^0.1.1","@balena/jellyfish-config":"^1.3.3"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.167-renovate-external-non-major-bb80b847e9602593c405189b8ade62819d4ebd85_1624667223749_0.5911412362436361","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.167":{"name":"@balena/jellyfish-plugin-base","version":"2.1.167","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.1.167","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"17a5b3ef91a6a6b090baf04099246f766cb9aef8","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.167.tgz","fileCount":18,"integrity":"sha512-YVlUOiwMTgaZwsEMkWPzB9DV5IRY9zGhYUZ8gq+dkG8j3kDSXVylQx9YFU8W3OL85/KzxxVMUz6tL5F/j1xBAA==","signatures":[{"sig":"MEQCIGX0yvSONsQVBp20sdhflysvVsyitMh4MUASHrAUmdKoAiAA6v2mIepA1cWN81WeBfbW+8zCz2aASQmwqJ2QsEN42g==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":56528,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJg1nWQCRA9TVsSAnZWagAA4VoP/1J5UNxRQ49vHuho0qtl\nAVtvd/fIo5bhIjmn1FqAUCx5OuF33ExpcshbWmWRYlGhuYUcMaaR/LZRPfjj\nFVY3jJ19PhTH7qqCH+sPIzg4taKZaXGmifV3m6i1dhOccmXrDa4BgkfSoUpG\nrEu1+qFF8El4tQ4dyN1FTQZ9/rGxQrHMuU7pcR+kAEAjnyEUmCTbkUGT7tu4\n/Bf/dNQNgpv7vihaa321dIrm9cWscSg1xoBtGAkDNLMBYtd1fZkeuF8qVPUm\nbVQ4GoxmNVt0EBlSCfFbpIWRNWTYbsRJ9g1ypJCpmA5kXS7wqg5kOUMk/n0D\nm0p8U04BYp8C7gxCBcPrMZT2eAnzgPqe5qtHav1xXAEbzipw0fHnwwyGZIRM\nbEVvaAaoovBk/tQuRkyh1xWtfujwI/LP9A7JRQwPKV3G5YMqOT4176/h74gF\nNM8VbkdGYsurO4dlSHkYL2PA2Vbayd8TNOq3Ocm0XB5wqR9pjry4dwWEMlUC\n7bdqPgHbuoN1WAsHmHaIGeKG6/ZnlPt30d9RVW7BzAxEZ3+6JS/DL3qKy8qB\naQhXNudZaU4iHEZXKIuylTmXT/QSZRJB3ej1ppXyfRddJKXLa6KQsb45olPN\nI4hFMIj0PCNmWFnACAyMxXwAlsz/a+xmz0KD8OA9sZ+nFSNBubvcvA6RWV8r\neTvI\r\n=9O4E\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"0d1bb1719b5d980e2d7eee5f089018e51daf78a0","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc -p tsconfig.build.json","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --fix"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.7.0","@balena/jellyfish-logger":"^3.0.28"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^27.0.5","sinon":"^11.1.1","deplint":"^1.1.3","ts-jest":"^27.0.3","typedoc":"^0.21.1","depcheck":"^1.4.2","typescript":"^4.3.4","@types/jest":"^26.0.23","lint-staged":"^11.0.0","@balena/lint":"^6.1.1","@types/sinon":"^10.0.2","@types/semver":"^7.3.6","simple-git-hooks":"^2.4.1","@balena/jellycheck":"^0.1.1","@balena/jellyfish-config":"^1.3.3"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.167_1624667535519_0.7411631441389666","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.168-renovate-internal-patch-614c0be26c193a4d2c12307633cd187d38ea826c":{"name":"@balena/jellyfish-plugin-base","version":"2.1.168-renovate-internal-patch-614c0be26c193a4d2c12307633cd187d38ea826c","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.1.168-renovate-internal-patch-614c0be26c193a4d2c12307633cd187d38ea826c","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"1a09bcc870f3915fe78a0b9caafbd74a4811b6a4","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.168-renovate-internal-patch-614c0be26c193a4d2c12307633cd187d38ea826c.tgz","fileCount":18,"integrity":"sha512-U5HNdb9D4gMfuZo7Oh9kngT4brl2UIIq06th5g+4RBCDMsdSv8LnXPjM+iQozBngWQeQEWaid57xs7cU6VdEpw==","signatures":[{"sig":"MEUCIGqmPmowX99ILq7SYs3lPgrh5qCoqxjCJJ1jtDbBASw5AiEAnWICu2HUIhLsPCDKGJoil3v6MMyLcr+SzlJmxEA3Vk4=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":56697,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJg1nfCCRA9TVsSAnZWagAAQdcQAIb6gi/b67VMoH2aJ2ki\nN1saBnjHC8LpGt5f5byPxJxC/1a4kwPUhcxudvmHhWA2WMILucxii6QF3mh7\nElucW35/7p+6TyZ57/2rO94pkP1dab3LTxlHuk0fqvCiWJhjuVx7huWW7pAY\nUX3yg+i7nGmZER+ptmbhxPe5iIbd7GHvAvVlTepJpDlc+MOrANVU4/1haUNV\nqYWN88ukNTaQu504mCLvfYMZGE9qjE9NG072OoksR1fCoWhiIK6xfMioOGtP\ncEbg4GK2DW5hXtHeG1XkkxBPcsyv4aAxFq5n//kLkSOBhucPgYS4RNEGZvQY\n2+PGfvpHpWvbxlmALwE9LZIN/aVj26NT2qlWC6omyWwy+NfjazkHTMZQ+vF+\ns2119D9UXbzUw70DJB7NnInQ3rxycfdQpxMaBc0I8c4RJOuGCDoucRb9WEsH\n4uKmcZTsCk9RpnFU6TEkA4JP20fkxMC7AFqMejGBccNWDYJ9G5k88vTc7MfW\nkoW9LCT+4tEpuMvLGJXLcRgy2iISj0cEGUV4vCHqxyB41eP85i4hpmLIG7E9\nQLfJbHoPOfT09d+bKABUxQ4X1j16806DzMtM81WkFmmGPUCh8WbsrMoBPYVt\njftU33TjsTA1pvYyfBlTdtXMREWBJ+s8AdDzGlnHIqG04BhI7x+ORCpXqwlT\nXfh1\r\n=Dw57\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\n[![Publish Documentation](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml/badge.svg)](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml)\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"614c0be26c193a4d2c12307633cd187d38ea826c","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc -p tsconfig.build.json","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --fix"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.7.0","@balena/jellyfish-logger":"^3.0.29"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^27.0.5","sinon":"^11.1.1","deplint":"^1.1.3","ts-jest":"^27.0.3","typedoc":"^0.21.1","depcheck":"^1.4.2","typescript":"^4.3.4","@types/jest":"^26.0.23","lint-staged":"^11.0.0","@balena/lint":"^6.1.1","@types/sinon":"^10.0.2","@types/semver":"^7.3.6","simple-git-hooks":"^2.4.1","@balena/jellycheck":"^0.1.1","@balena/jellyfish-config":"^1.3.3"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.168-renovate-internal-patch-614c0be26c193a4d2c12307633cd187d38ea826c_1624668097708_0.5403981186692113","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.168":{"name":"@balena/jellyfish-plugin-base","version":"2.1.168","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.1.168","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"81d24be192672e4d2cc175abbbbe8431cc21c675","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.168.tgz","fileCount":18,"integrity":"sha512-LXvsqrgP85SP9Hsuyir1XCwyJgrqBCZaSXl7v5cJ0TIQnOFXjdUYdUTVnnszQgsDpt++xcpTiL1haP6SCzug6A==","signatures":[{"sig":"MEUCIGJsnyOWoCXreiFcz3zPlJrR5fyIy4Cc9WzeQCuww66BAiEAqcIRhWDRO+w3imU03a6ZaS+cKz+W6KFwSo65j5yDZqo=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":56632,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJg1nicCRA9TVsSAnZWagAATc4QAIzCrj9u0C4JVKV9AxDI\nlrkP9J/5fCQ8ij82MGy5+DYZv9Wh7BQhfCdJIgbTN9CgUbESKTZRZGCn+Svo\nnqq7uJwIB2oA904Z17/g+rmHsYSlj8sfdquAk2MkaFDc9CemMq1bwSCJi8gn\ntHSJBAyZvku9Ikz199KQbdWkzDyM46JXwXptmptCkUqLOAIrmzwle2LWryI6\n38nWgttTO3beRhTvmNkQP+ijsNPxW4vTZUu6YBq12g6J1E3WfLzwY7ayy7MM\nxYAKEM2TAaA5hm2tMFnZJqGkx7P4ejM64F5IMmwvZWQ+Ejd3eq6hg83e7wNp\nCNabwmOSLrRejvDpgnOZbe91Kv/4IcmYohEyMWVjo+nQcTn5gpjnIc0JBykB\nb7Wfw4lPwAd5arEgAFKMq/CGwmtbXZtYZFUam8/bEj6k3GAEXsz/yLMGToHX\n2FzSa2gDUW3hNynQ99ypdRqtn/DJoSddBTCqRj9yqYPot95dtGWmFt8W4hov\n+Bgoo7K9QPZHAJM7+g7nkqFB2ehikjs+5JXTZ3/x63lKUoe4R5y4YbGKfXYh\nJxT484ZK2vEosShtGqM1mQY1AexVwXpMNwgdtsi4aaRmuP182u6OBuEOx1pV\nuSl4homAHgek7U1ZNiBMiM3mw8tutjjX1wxk6pq+ya7+IpHxk9ZvhN2yuna5\nBDl7\r\n=YlWC\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"8aa378406dac4e45acafeb1fae30ee8dea43b297","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc -p tsconfig.build.json","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.5","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --fix"]},"_nodeVersion":"12.18.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.7.0","@balena/jellyfish-logger":"^3.0.29"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^27.0.5","sinon":"^11.1.1","deplint":"^1.1.3","ts-jest":"^27.0.3","typedoc":"^0.21.1","depcheck":"^1.4.2","typescript":"^4.3.4","@types/jest":"^26.0.23","lint-staged":"^11.0.0","@balena/lint":"^6.1.1","@types/sinon":"^10.0.2","@types/semver":"^7.3.6","simple-git-hooks":"^2.4.1","@balena/jellycheck":"^0.1.1","@balena/jellyfish-config":"^1.3.3"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.168_1624668315876_0.1871678180612344","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.169-renovate-external-non-major-742c3fea36a0172997f806692b9d51b3bdb81e19":{"name":"@balena/jellyfish-plugin-base","version":"2.1.169-renovate-external-non-major-742c3fea36a0172997f806692b9d51b3bdb81e19","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.1.169-renovate-external-non-major-742c3fea36a0172997f806692b9d51b3bdb81e19","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"0c5846479c8e76b26dff84d7ac430706adebfb4d","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.169-renovate-external-non-major-742c3fea36a0172997f806692b9d51b3bdb81e19.tgz","fileCount":18,"integrity":"sha512-5lBnGv1oiHDPD/1WJrOdfHUPuPeCLGzChk/5gdc1Lhoa9sWhvmSbuIQYs0WPJCGvXnuqEZQ+wJirk+DX3BmvPQ==","signatures":[{"sig":"MEQCIApk+hYJQCY7MTT8k1kXV51UYj0rRyWZf5Xl8mOg5+o1AiBoB08VU57gO8MZ0QUH0/rJ8gFs1LHaoAHE4+N8F1cMFA==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":56788,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJg1/pLCRA9TVsSAnZWagAAJI4P/RwVbZt1XnEwBb4E04Xg\n07xlNklyefXYvu+9WmJNJb4E/SxIMOEJLncYHbeoXnZaqptnDPruYpGtGzzD\nmJugB1p+7JjJ1WcHwH35MN8wZpAOWW+j7oeJBW6RaoD5iz7TMVlJ7+3+nQni\npNQaqnqBbOcfkTKayyMbsmVTpJEMJUAfWm376GIfRN+n2xLETs11GjVFzsQ4\nCfHRFBy2kSVo7UmMPCO9p+ZtXHHsZy07039dHjqpbTsmNnAc5CphoXlIdZrr\n/6ylOrgbJudr3BuTeDqQPnydIPwrS3ZDteO34sWZSRnDaYTFpMIo5tMIrJle\n05/MVzqPp0f9m2vwQsJQUa+ekc+vadES9ziM4S4TbR5cgIO8fni5Kv+C0umh\nQZxpnEb+qK44y+bFco6s9fv6wQGyt6tEXaDLgK7cOkXhQNDPiKPWrkJMZp6N\nMfjxDfStIrAEiB3B0Qz2DYM2vnkRIwYN36SuiECPdSQI3GUeFhcmeOqQznIW\nTR+5uOelSCi5tu3a4CDcYghFRp89G22qFp01bRv9F4PNf4blSaKVTWyjtXYs\n/WnaYddvQgSPBHxJ3MjgRjYYWUkgELR0Ns0e8OUvwqrEWK543T8yNRksOkNv\niz0zCTf/CbQCQVWEmTgKir61jmUmkHJRBW7oTQ+olscSgLfk5STS/0boGSqh\n9rEy\r\n=pVcL\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\n[![Publish Documentation](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml/badge.svg)](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml)\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"742c3fea36a0172997f806692b9d51b3bdb81e19","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc -p tsconfig.build.json","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.13","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --fix"]},"_nodeVersion":"14.2.0","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.7.0","@balena/jellyfish-logger":"^3.0.29"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^27.0.5","sinon":"^11.1.1","deplint":"^1.1.3","ts-jest":"^27.0.3","typedoc":"^0.21.2","depcheck":"^1.4.2","typescript":"^4.3.4","@types/jest":"^26.0.23","lint-staged":"^11.0.0","@balena/lint":"^6.1.1","@types/sinon":"^10.0.2","@types/semver":"^7.3.6","simple-git-hooks":"^2.4.1","@balena/jellycheck":"^0.1.1","@balena/jellyfish-config":"^1.3.3"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.169-renovate-external-non-major-742c3fea36a0172997f806692b9d51b3bdb81e19_1624767050824_0.7930076477758852","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.170-renovate-external-non-major-c1895b232fc5ea2f81bb6c76406508bcb9d74a04":{"name":"@balena/jellyfish-plugin-base","version":"2.1.170-renovate-external-non-major-c1895b232fc5ea2f81bb6c76406508bcb9d74a04","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.1.170-renovate-external-non-major-c1895b232fc5ea2f81bb6c76406508bcb9d74a04","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"87683a70f4c9ff00f59af095afb35a1e1cf33260","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.170-renovate-external-non-major-c1895b232fc5ea2f81bb6c76406508bcb9d74a04.tgz","fileCount":18,"integrity":"sha512-RmU2U0iRR+DaDxhCjjCVNSqkpIaQxxLB8dHfOT5zUpKqRMmp8x5BzvwzgxwtV6niSzINV7LFPfLvQmzc+f/wRg==","signatures":[{"sig":"MEUCIQDhDkz9VhlEv0Fq1NJDP6/EIKq9i+rwd9NQhu3sgrdo+wIgQKtlFZZatj6moHz39KgIWKteciq08DVCUJ93qd0a9G4=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":56883,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJg2N/cCRA9TVsSAnZWagAA7nsP/R601WbiCa8KjNltEsur\nrlxWxx1D4XLmB+tgj9vKu/gvnkheCJ8v29+bUd5lL2yHnf2AD15g0hXz2K+s\nXhz94ju7A8qw7MSg+qDkBJkipvAxQjO0JkYvVN+kjfK3wum8boseP/1iMpYU\nzMtZc8I2uqENd2ZojmIogbo0JH8W87wkkeXpqwMr8Y4rM0KVVUTCBqReMAp3\nAg2nZkQgX9XibpCZZcAte6FiaJaQTqLbHEWueDcIdYIGPTqhq44DXazM/sb+\n4mz2wI/d/4Op1alAqsAK9KFgrITbq7mg3PvH8aPG2rp0vs4BKy1Cnq28XBKY\nX5RIMg/JoZEWVmkGdV7Fd3dFB1SWTs9o1SjUPD+STBrEbcXjKWMmfoeca4iI\nsseUwzeARWIRYnrHGKTRkJMfUgQDlNEsWcZP72gSQ1SsvqRnFhzuKbncjB+H\n7jlt7arj0OQ8gMpsZeJLhM6+nzpvxo5dnWogvKCRu+XXA54O8jdb4o7lqKtY\novRKk4fi4iK/sIeZWPTGxrAIF7ndckwll2Hy7F81H7nAxf8Dt8ZNYJUtruFQ\nKyFPSy2LpxHi1z43ZI4ZvZ+VuwbNeyJNP8z6hzjtK/hkxYzHbxixahSM1xu4\nF9VtYOA+jv1ErqwXNwLxtib+Rom+1/9us1gKLqUjAQ2LXvlpCM8JceXXYTq9\nPxl2\r\n=EkOO\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\n[![Publish Documentation](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml/badge.svg)](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml)\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"c1895b232fc5ea2f81bb6c76406508bcb9d74a04","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc -p tsconfig.build.json","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.13","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --fix"]},"_nodeVersion":"14.2.0","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.7.0","@balena/jellyfish-logger":"^3.0.29"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^27.0.5","sinon":"^11.1.1","deplint":"^1.1.3","ts-jest":"^27.0.3","typedoc":"^0.21.2","depcheck":"^1.4.2","typescript":"^4.3.4","@types/jest":"^26.0.23","lint-staged":"^11.0.0","@balena/lint":"^6.1.1","@types/sinon":"^10.0.2","@types/semver":"^7.3.6","simple-git-hooks":"^2.5.1","@balena/jellycheck":"^0.1.1","@balena/jellyfish-config":"^1.3.3"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.170-renovate-external-non-major-c1895b232fc5ea2f81bb6c76406508bcb9d74a04_1624825819629_0.4986957745897733","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.171-renovate-internal-patch-e4f9cf32f950f19cd507263be1ace3dab3995030":{"name":"@balena/jellyfish-plugin-base","version":"2.1.171-renovate-internal-patch-e4f9cf32f950f19cd507263be1ace3dab3995030","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.1.171-renovate-internal-patch-e4f9cf32f950f19cd507263be1ace3dab3995030","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"8ab72c9fa95f4f729e2a2ff4fdac45240e152cde","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.171-renovate-internal-patch-e4f9cf32f950f19cd507263be1ace3dab3995030.tgz","fileCount":18,"integrity":"sha512-x6u/FYPGLuzvsu8oiEPajLygunEN1wmH/IX61s/uoSp77PHA0v8xNHaDYmxO0wyXbqE3g5SGeSAUei2TAl/fJA==","signatures":[{"sig":"MEUCIQD0c+jyP2dCa87NXj//ck6SwrHElcUhUQnV8bl30l4oWgIgUHkHYkBouChgvaR/cJTuWzQW54Wx5bJ+IiWM8QPOspU=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":56951,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJg2v44CRA9TVsSAnZWagAA9tcQAILffeqj0gIF6yTJntMJ\n6r8Sk5r5TIHbioQTkMSrA9+DX6ChTWwM0KI3+68MT970ZtEgSjM4hTIw2rQ3\ncLLYLLlj3SF3j7gWQ8azEYPZ7izwqSS2pfqK0oLmwJQSbywRjK8ORjxLgCgA\nWu8hD5psgpBY70MLp1a9Hy6WxncOZfZIRt2TpMDZlbIDhVYVOA80g1y0haMk\n85TLIQn+dse+A6VYhlW9JGWejdjHsOaN7y8m+OoAr7OHbcLycA9SO78OTgc2\ncD/aMW37MA/PLUxNcCd98LNQamwluQCNaRy8Os41tDEDw7tk0iogim+if65A\nvAYtEXGqMj7hy5KM+hpoLwh+qcp4qkklKVSkC8K/96L6E3JfrP12l9rCv+oV\nEb3etTu5VFjCCwatkRdyXJldcz5L91Yr4X9hJf+c+mZSv1JMPr6RN2XxTF/U\nYmGlTD3eiPa2d+OSxlNZvm0cEL+RerYFRl/+bA1LuMwl4W8DPzudyZz9cwyW\nuDHZ/cptz2KIoZW5fx1shEG7v5iX5RvlISL4kcgnhjtcYLfRFhTS9wDL/XdE\n2E4ZRzj0O8VHpaiUh1Dg7GEL626UEUakrVYmqIycDPKyKPMJmxQi1Abyt/50\n6WldHepLj4i+mRIP7msuOXG895gCCTXFg+B0MZwI2yCkZLiodIHU09RyX/AF\nnQUc\r\n=Gk9u\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\n[![Publish Documentation](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml/badge.svg)](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml)\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"e4f9cf32f950f19cd507263be1ace3dab3995030","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc -p tsconfig.build.json","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.13","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --fix"]},"_nodeVersion":"14.17.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.7.0","@balena/jellyfish-logger":"^3.0.31"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^27.0.5","sinon":"^11.1.1","deplint":"^1.1.3","ts-jest":"^27.0.3","typedoc":"^0.21.2","depcheck":"^1.4.2","typescript":"^4.3.4","@types/jest":"^26.0.23","lint-staged":"^11.0.0","@balena/lint":"^6.1.1","@types/sinon":"^10.0.2","@types/semver":"^7.3.6","simple-git-hooks":"^2.5.1","@balena/jellycheck":"^0.1.1","@balena/jellyfish-config":"^1.3.4"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.171-renovate-internal-patch-e4f9cf32f950f19cd507263be1ace3dab3995030_1624964663770_0.8614668468090596","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.171-renovate-internal-patch-83aa6b4cad532936bbf01ab0abb641541f7f2d5f":{"name":"@balena/jellyfish-plugin-base","version":"2.1.171-renovate-internal-patch-83aa6b4cad532936bbf01ab0abb641541f7f2d5f","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.1.171-renovate-internal-patch-83aa6b4cad532936bbf01ab0abb641541f7f2d5f","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"d52762ead0db056170f6ddf06b990cbad7cac4a5","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.171-renovate-internal-patch-83aa6b4cad532936bbf01ab0abb641541f7f2d5f.tgz","fileCount":18,"integrity":"sha512-CuzpgSo8LWWqtc211HBRzCjQC8mdGx4mNqCyFqz9fdnOh5bIRargTBxCJlut3rIAJTmPNyAo5B1K7vpgqWUAdA==","signatures":[{"sig":"MEUCIFbfLw+6Dtnr5MROIcSwAhzxjUaHRDunK7Gn3SOuKvNRAiEA21sSDEHrziB8lkwzs3E34rugzri0s+xAtHHMqKym+Fw=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":57027,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJg2xoUCRA9TVsSAnZWagAARkQP/1YS+WssovsPiCq/fjF3\nYm5vmZULstDL+DOZOJe/ayh8W2KVokhpi/bZgLEwUKggzgZeKjrzovWEhL98\nh1jkeO2vMcyZgOhhvhDe7kgsRfVDuJQ5piiznLLmZ9IyvVf/DiPPmZccB+ta\npCoZ9v/HAUQKQMJGL7Xwo5YNQs+ObjxwjN+uW1CpYdyMHNryT0EQMkr+zJwB\nrwmoUlwI/GUkEgQC9lMdFfUNQll2VR3E/rlP6bdUaNcf+q7VtEbOWLdxKLsX\n3WISDEiFNxsRhvGYsRRuOsSAJUMelaQ3mfeazDX7mahtZ4q61GrgDxqy5mv6\nBNCdWTrLynsYN6bYbs0UjnakW4WUW8jEEGwHZ9xlhWByji4qT3ZrXvVNeA0f\nOYBXBEk2hN4zNWREwRMnNJ4DPYBLnKGGQiNDGLSDKIMM73PAntROS/H/TXfC\nyYSye6i9qAdU+FqdY7kU53ezR4o3QOT5InBk/Wqr/DqKakzjK+dv1mqRypNf\nJprVVUrNNDJfR/wzYWWKmPftJgg5/X0r8133uv/yPJXTqBiTYPt2jtyQEzjc\nx87sBvEL1fyNX2MBBh+Ja9BIi07Thrt7WfMHtbnLQ6/4PeErw5z+sXvTxInV\nk8/HMhGghCy3I1rGcYn+te2hzg1HPxCxG8q8x4NVyTzJXeoXpcmnQpsIpjX2\n7k1M\r\n=1Xhz\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\n[![Publish Documentation](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml/badge.svg)](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml)\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"83aa6b4cad532936bbf01ab0abb641541f7f2d5f","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc -p tsconfig.build.json","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.13","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --fix"]},"_nodeVersion":"14.17.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.7.3","@balena/jellyfish-logger":"^3.0.31"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^27.0.5","sinon":"^11.1.1","deplint":"^1.1.3","ts-jest":"^27.0.3","typedoc":"^0.21.2","depcheck":"^1.4.2","typescript":"^4.3.4","@types/jest":"^26.0.23","lint-staged":"^11.0.0","@balena/lint":"^6.1.1","@types/sinon":"^10.0.2","@types/semver":"^7.3.6","simple-git-hooks":"^2.5.1","@balena/jellycheck":"^0.1.1","@balena/jellyfish-config":"^1.3.4"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.171-renovate-internal-patch-83aa6b4cad532936bbf01ab0abb641541f7f2d5f_1624971795774_0.6034775657440661","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.171":{"name":"@balena/jellyfish-plugin-base","version":"2.1.171","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.1.171","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"47dd71ca80c40712856aafaf585f7614f7387aa4","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.171.tgz","fileCount":18,"integrity":"sha512-/p8FVzaAFha6bSg52DZczdnjOMXF7eY8SO9zhY/uXyylnwdjZj6wGAht16tgFojZ01sG/VGWhWQ8CawHFDm8LA==","signatures":[{"sig":"MEUCIQDUTpqnqGguDZkUb7rapTLtnQKy0NDUVbqwt/8Gjpd8wQIgDl5OaF3Qbj7hf05dIlH/8CwxjwGbDdqq5dnRZduzw8c=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":56962,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJg2xsWCRA9TVsSAnZWagAAG8YP+wXetb8MfGX0UMtTaT43\nnORhOZs7l3H3JD2T+VcmFPA8sWW3X8jjyz6OGZKb8XMg04oNWU2CZbb8JROu\nRf/TFmOCKuQWiUdPvZFhpHn50KMSTlnt5+Pmd3HVTTFgvxvtHMj9Y2gaoc6g\nLh6IxvA+DWz51ADwWab9E0zw/aCNDzcJ8vSLjljLBF2ohz2HCTRmmRXJ8Xp3\nBYuvOuWwYf44lZjtLmorFbY2ogQxHDmPImS5HwtgLcyuxAOdBkCnzMErTcJj\nu587C6h6EzbFqwt+p/aPF/I5vkeCk2t9A3c3shlohZfccHlb4WPSCVZ6FhkH\nPUJzAKM4AJZiNztdVc7/xSAFI2sLjMHfbcOmY5sOJeOsQRX25C2rsc6a2Qc5\nIbWla/PJkKrBXUL747EaCeIn7MP8ZsYkklfBuXmQMyuxEtGvhXi9ai8MuY8h\nGdI3afxdR1xGZqjbpV6myUgINB0c0RMrm3KXkAOnulr38UNtSG9rPx3iHszz\ndfjQTEtwYWRb63kQwsS9jqX1M6Utp7yf6dl4ro7vkMolS1FYXuGCEiTnuE6j\n524YhLl2J6htJie2QMWidssAulSCbS2fCH0PE8PuLfq0q3MVlITJz8xVO4rx\nQHeiXyap6wM3PFQ1FfQiZ0DvmRHE6HIpotNnKnr3J2MsRg9HsxorXGy/IkBj\nl8L/\r\n=v1Uq\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"cf182067714a6b97e93910442c4fb5e8b80ae89d","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc -p tsconfig.build.json","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.13","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --fix"]},"_nodeVersion":"14.17.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.7.3","@balena/jellyfish-logger":"^3.0.31"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^27.0.5","sinon":"^11.1.1","deplint":"^1.1.3","ts-jest":"^27.0.3","typedoc":"^0.21.2","depcheck":"^1.4.2","typescript":"^4.3.4","@types/jest":"^26.0.23","lint-staged":"^11.0.0","@balena/lint":"^6.1.1","@types/sinon":"^10.0.2","@types/semver":"^7.3.6","simple-git-hooks":"^2.5.1","@balena/jellycheck":"^0.1.1","@balena/jellyfish-config":"^1.3.4"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.171_1624972054113_0.23778815629940664","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.171-remove-package-lock-604ac88b7c9035149b46995d03e5669a71d8273a":{"name":"@balena/jellyfish-plugin-base","version":"2.1.171-remove-package-lock-604ac88b7c9035149b46995d03e5669a71d8273a","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.1.171-remove-package-lock-604ac88b7c9035149b46995d03e5669a71d8273a","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"7911a37afcf3375a6ac5353900d16928d5a349c6","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.171-remove-package-lock-604ac88b7c9035149b46995d03e5669a71d8273a.tgz","fileCount":18,"integrity":"sha512-LSUzCY9V07OxWxUSUgOB5/sigxF2Ix28ud41R86h09wppRKIhOflqm5+1FASBQUKpGOiC0F0jxq1OgQOOb3o0Q==","signatures":[{"sig":"MEUCIESFuUdySYBP60DkIj9NTvdagAU/v/2CZSDQGWhhVde1AiEA1HmrkbsSYe8BAts6Lu8KVObQR1V+Xz+VREDUzkqFGio=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":57026,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJg27hgCRA9TVsSAnZWagAAuOEP/1nuWXp2MJ/CyGrDjPwy\n5n5bzG3T+jU8avjZPFkGim6GEfNAO0jzAY2jb6gVCVBtgpxMc7UG0dlOalwx\nqGwX6AEop4o9mBfJeikNnPqrbrsMc0XjmOirov+GfPXiGlpR29Yrgdtl39Qs\nd/KpjA1CVVeNfGQOoP6IheyBv+7z6Er/tsYF28PWbZif0NYtnOwm7H8Ukp5E\n6OVyn4Nd3SleCCf5CN1aji2SNoepXqWz9n7SdLbvOPFSaYPZs9XlBdWID2Zg\n4q3H6NvoXZwEQP92gArf7XFswUFdiwrgK2WAjM4ok5SMuyEw68pY0rabx91L\nS85cg1wPvP04ElZ5YkbUjQ5CLhSbvTK13mwIGKN4xDvqu0vBG/13VguLLB9v\nxZgYYaCkKPJpgKNx/oiuhD8OlkOm425jwiixt7iWYQ4QbUmuh5Gzk5lw7dGj\nrjIu9nHBmuRywsEiZCB+/APzeGEuuDMtxSf5bYuoeD22x9qARKz5o0zNKXqy\nmkyaySuhczfvJIsixGrEenkCgwVRDrd29tadM3wdfNZHHWCoPnwyFekR9UN3\njCrhVJAL72tEZx4YOevJjMgQewJYgjBML8WdTo2PL0kfAl8il3mmCcNXgC45\nqIOi9WeO22k1bOeGTV9lfCzUtrI7sMCrNKa2xpDiNtGwqAPpB2ibrIm/bjWL\nSlZ/\r\n=jTbO\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\n[![Publish Documentation](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml/badge.svg)](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml)\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=14.2.0"},"gitHead":"604ac88b7c9035149b46995d03e5669a71d8273a","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc -p tsconfig.build.json","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.13","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --fix"]},"_nodeVersion":"14.17.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.3.0","@types/json-schema":"6.0.1","@balena/jellyfish-types":"^0.7.0","@balena/jellyfish-logger":"^3.0.29"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^27.0.5","sinon":"^11.1.1","deplint":"^1.1.3","ts-jest":"^27.0.3","typedoc":"^0.21.2","depcheck":"^1.4.2","typescript":"^4.3.4","@types/jest":"^26.0.23","lint-staged":"^11.0.0","@balena/lint":"^6.1.1","@types/sinon":"^10.0.2","@types/semver":"^7.3.6","simple-git-hooks":"^2.5.1","@balena/jellycheck":"^0.1.1","@balena/jellyfish-config":"^1.3.3"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.171-remove-package-lock-604ac88b7c9035149b46995d03e5669a71d8273a_1625012320269_0.9975113978566081","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.171-remove-package-lock-af928af414b47622118d5fabec959e487c239a76":{"name":"@balena/jellyfish-plugin-base","version":"2.1.171-remove-package-lock-af928af414b47622118d5fabec959e487c239a76","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.1.171-remove-package-lock-af928af414b47622118d5fabec959e487c239a76","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"620a42cd32bf4c83029da963f16e82106f349428","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.171-remove-package-lock-af928af414b47622118d5fabec959e487c239a76.tgz","fileCount":18,"integrity":"sha512-XQPh/TSzKcLbqBBdI5QvCv4M/KW+m6p3gfee+oeYlwcTqIQ1ts8dDE+idRtYAEFfEoXgzZ0i7DQa0htzA4tP1g==","signatures":[{"sig":"MEYCIQC6wWC923wiUH5ZJclX4OuNWjItDF68VHeK0L3nspFw0wIhAOIRphZ7T3gMNxh1z1ybGUdHgmCJEywsRDCyd6vzZ0CY","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":57076,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJg275XCRA9TVsSAnZWagAAFc8P/0tTg3kaZvikRrx/I7LE\nclqIS0/p0Z1GzPOUQtOcsJ3/9miSlUGb/Cf87mFLIbOR2vdnC4sMsXY+Sfxk\npeSUwBzm9Aqb8KD+HsH+ePCqUxBPS7sAIByqrdiOXzRL+xGTQRxE+KsXPb0j\nM7u3A+PlwGx3IGIa6u7DEzN/YRQmlgKKlNr4PjwmPsLziqrN6w+wH497fVY2\nsljLVwJP/MVgq1yT+Ta4TN+jyeJYh9WQgnp8hmhfn4T+pq7M8yPknmYa3NxM\n67CFYLQ9hpOrcX1xc78PMZknugvKX4+554C/umLv33utuk/ggPjzJgIAcP8w\nGsR1YGO5S3HUHaMEvs5UUUyyx3f4QvPzpYj4tVwcG3ZmJ+HemOQdgqV+phsF\nmQW9XMovFO+/jHsvHw505f/gdXcat+61idkoQ2Qp6h+z/QyrF7KuhxswqgNg\nyOjVOcU1Uaz2NAQcb2hUl+4o38DHeAoaE5/l06xN4LNzRNDUEL86YOdUuk/n\nUjyWT3kHZxe0gC8so5ksReBQ+cPVGP3G+XewuocWNqTS+xYnNhabo0O1lbWd\nrT82SlDLVv596Oa5n+yvLf5xvyNocTCUVm6mFlzUwH1f9ttEV7qDqQO7rNkz\npC+bMjtc3vFL3aqMpe21ZcYmiWTmbE2SXQwPmxXb1pT+xXPSeqEYT2adlx9u\nctQS\r\n=cDQ+\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\n[![Publish Documentation](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml/badge.svg)](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml)\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=14.2.0"},"gitHead":"af928af414b47622118d5fabec959e487c239a76","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc -p tsconfig.build.json","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.13","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --fix"]},"_nodeVersion":"14.17.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.3.0","@types/json-schema":"~6.0.1","@balena/jellyfish-types":"^0.7.0","@balena/jellyfish-logger":"^3.0.29"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^27.0.5","sinon":"^11.1.1","deplint":"^1.1.3","ts-jest":"^27.0.3","typedoc":"^0.21.2","depcheck":"^1.4.2","typescript":"^4.3.4","@types/jest":"^26.0.23","lint-staged":"^11.0.0","@balena/lint":"^6.1.1","@types/sinon":"^10.0.2","@types/semver":"^7.3.6","simple-git-hooks":"^2.5.1","@balena/jellycheck":"^0.1.1","@balena/jellyfish-config":"^1.3.3"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.171-remove-package-lock-af928af414b47622118d5fabec959e487c239a76_1625013847164_0.7812577364523294","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.171-remove-package-lock-d67f39497e4a4ac45ddb27b03369a3c4e053c30d":{"name":"@balena/jellyfish-plugin-base","version":"2.1.171-remove-package-lock-d67f39497e4a4ac45ddb27b03369a3c4e053c30d","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.1.171-remove-package-lock-d67f39497e4a4ac45ddb27b03369a3c4e053c30d","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"14573a696abbc09d4995fc0158340e685d3647ec","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.171-remove-package-lock-d67f39497e4a4ac45ddb27b03369a3c4e053c30d.tgz","fileCount":18,"integrity":"sha512-MUOHWwjIrrtgIRAVO2sLxJM0+v9w1GmVUeOOuvMVUkcHIUFeLSVqFtAFY0M74pcwOFaIKFFeMakNFO6kvcr2tw==","signatures":[{"sig":"MEUCIGMPX/aZGqFEbzGziN8cklQCWwqf2vyTtK83B4mJ1B5eAiEA5JPUuaR+xj3u1p7qxEMSgQxWR5WyAaUg+gORZGG3oSo=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":57126,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJg28CuCRA9TVsSAnZWagAA448QAIPWlAyk7FmGZF9SsT2d\njN7bD9LILvx77Ynn9PhP2TWm3QwTXAZ02zT6eSRN1v9ozSeRzb65+vf4cMh2\nhulrBEuiSaGRoph0TtIclijFvfZsijE7Ve/ytOQ0YwmhQR9U8k/cMU2f7vK6\nn9JTva6CWQdaw0lxJvDC42mQeizC2Nq1sl49RD42Acrbjse6U5fRz/C9N5Z+\nG3ONZPX1V3dxLGhSplUwsLKEJcwY09GXdtxhQ5izqX3JSdJSD14IaW6qDLUK\nbO/Xd5V+4L9RT8l6jG8IlbGFxl0HAU+vSGHmta3t2+3cPzxSW+NJjol+fqoi\nArgJDGbir3lUaA1JhmS0sl10LqCBQ1hkxxgjjHzGgA/Jac3zK+8HucR8QnE5\nuG39s5vJRj/DYDMbcK5Up5WNl6qsYLYNSUH/nLZw7kEo/Ft2hgEPAcI/jNh/\nRXE+A2LJYvqyCFTsiEGvrlRzMUUOGDCewam3AsAu5VG8SOuizxeczoo74M7s\nyPjdF+/QFxTVq6yJfcqJZDB8SylY3Tdk47IQloN0+IBYmu5CmxT4rm7kqoal\nmq0elGgcfpP/6CqCrXoTPZgMP+uorsAgisB+HoBwETOYKHQjyF9dqxHzF1oy\n/eT7w/MsU/QTDdpkwojSfy0uPnMqymE3TXiyjHskHLbtIbnOeBi/bzgw9l/I\nnVn0\r\n=Samz\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\n[![Publish Documentation](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml/badge.svg)](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml)\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=14.2.0"},"gitHead":"d67f39497e4a4ac45ddb27b03369a3c4e053c30d","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc -p tsconfig.build.json","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.13","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --fix"]},"_nodeVersion":"14.17.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.7.0","@balena/jellyfish-logger":"^3.0.29"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^27.0.5","sinon":"^11.1.1","deplint":"^1.1.3","ts-jest":"^27.0.3","typedoc":"^0.21.2","depcheck":"^1.4.2","typescript":"^4.3.4","@types/jest":"^26.0.23","lint-staged":"^11.0.0","@balena/lint":"^6.1.1","@types/sinon":"^10.0.2","@types/semver":"^7.3.6","simple-git-hooks":"^2.5.1","@balena/jellycheck":"^0.1.1","@types/json-schema":"~6.0.1","@balena/jellyfish-config":"^1.3.3"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.171-remove-package-lock-d67f39497e4a4ac45ddb27b03369a3c4e053c30d_1625014445731_0.2003662060831337","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.171-remove-package-lock-137c9e20eeb22420b0b6d54103f23d34190cca02":{"name":"@balena/jellyfish-plugin-base","version":"2.1.171-remove-package-lock-137c9e20eeb22420b0b6d54103f23d34190cca02","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.1.171-remove-package-lock-137c9e20eeb22420b0b6d54103f23d34190cca02","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"084fd10d79416d72de8ff23d570471c9736a6c84","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.171-remove-package-lock-137c9e20eeb22420b0b6d54103f23d34190cca02.tgz","fileCount":18,"integrity":"sha512-ot+dDPcZdtt+A3Va2cnV6O4HAGuJhJIMDk1wr2bPmNu5PT3nX9npfRGVKXwvgnEo6h/AYP7gTtuUsuE9Ejr7pA==","signatures":[{"sig":"MEUCIEA6DmeQGyVH8ovRiQrj47Z4Ad5PlYheKJGpHsifpJeaAiEAxavrdkk9qRP3Z52B34P0FJpQAEkkUElB+xynWqZ5B9s=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":56978,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJg28YBCRA9TVsSAnZWagAArYcP/jMYeZX9TikRjFUXaRRG\nGJO0tqOompnvZGm6H7TAzYESRsZLNlYbjOUEm14DrhZNlz66LMpDjz5xJ7ne\ngXC3B919GzlS/dSoFOthbYT5crWqzTjSxv3qFax9u/DxsvIdjllS3RFgJF81\nh2gzMH5E6pZeXUTkJW5xy5Sp/wmGVRthKjTYef4oJ4kNU2tbamq/wVnYJ33a\nCqnLfVwhfn+qIc/MklrsH6W0nu2CXXSqdDssZgRil8IHxrHjLmdVxUoileHR\nR36eqkWzO6SDRXO7/zjGL15Iuh1WcJl7Dzx94wL8teeRnK34oHC1pqrnLw/k\n6TxeEy6zSUlQLh8gaul5BGMBmm3/UfGDjOxFijUqRy0zA9ZeTmP+De4pdrAW\nwVhPuM9Io6dDxvV1qwD5HfS+FTVXW+iXBAbwSw2EgGRuq8FWJHvs5h0Zvb9x\n225D5fdJYS1QUl+NaW6zUP58katlNUYB35B1Ovr1TX2FGmlad2YMLzAjS33b\n9+AmcTIPxDxAUfbPRrlJpYgiK7FXJT4UxCArxq1PHcHadpL2IKbOAheYnUWH\nJ8cDSS0sAo/e+WC2rl9YVeFZ96ruOy7ZEmTQgDDurEgFHbyS6ALCqh375GJH\n1dcZtxj+5sUh1u3lbXNtFd7K412b3N77lstIHF36X2RGGSHIJpdhgdk5qIb+\nMPlN\r\n=J1Rx\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\n[![Publish Documentation](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml/badge.svg)](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml)\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=14.2.0"},"gitHead":"137c9e20eeb22420b0b6d54103f23d34190cca02","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc -p tsconfig.build.json","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.13","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --fix"]},"_nodeVersion":"14.17.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.7.0","@balena/jellyfish-logger":"^3.0.29"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^27.0.5","sinon":"^11.1.1","deplint":"^1.1.3","ts-jest":"^27.0.3","typedoc":"^0.21.2","depcheck":"^1.4.2","typescript":"^4.3.4","@types/jest":"^26.0.23","lint-staged":"^11.0.0","@balena/lint":"^6.1.1","@types/sinon":"^10.0.2","@types/semver":"^7.3.6","simple-git-hooks":"^2.5.1","@balena/jellycheck":"^0.1.1","@types/json-schema":"~6.0.1","@balena/jellyfish-config":"^1.3.3"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.171-remove-package-lock-137c9e20eeb22420b0b6d54103f23d34190cca02_1625015809496_0.6508423718240328","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.172-renovate-internal-patch-3ec5a76c35322d8c74ffb078e5dff00247725972":{"name":"@balena/jellyfish-plugin-base","version":"2.1.172-renovate-internal-patch-3ec5a76c35322d8c74ffb078e5dff00247725972","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.1.172-renovate-internal-patch-3ec5a76c35322d8c74ffb078e5dff00247725972","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"4ae22cc9743cdb9857e91af74233e1edd4a2ee30","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.172-renovate-internal-patch-3ec5a76c35322d8c74ffb078e5dff00247725972.tgz","fileCount":18,"integrity":"sha512-R8yo1rrQlxSOL2z2QPzbPTKHSYfcejk4gLf3Z5NoddC/h4x9FPDjdAqwa2lFdkdlN1S6Wloo0mx/B+qbLD31xA==","signatures":[{"sig":"MEYCIQD1PmCES2HFTImaaeHOUonO0jsg2D2Q053zgOXdwhevIQIhANqrfZg7CNE8JOUxP5MgHRGtgY6hrRCtBrUYZ13cSQUv","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":57131,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJg28dICRA9TVsSAnZWagAAyZIP/Ah0Wa6/H9sduYcXITLV\n7lb5oGPzkFyqPpQe70swToovPjNQpTNUXZLddrL81LwEsZBGZuA7/7NYDaBg\nCHaqE+8+9/Jy9v6uPRlj+YfKAQBFrDlU+N2mai5+Uees78gps4XlBeS8YxDX\ny5VJNRW+0vWIzei/+Tre2c/D9a5d0ieudMtzX5OzBhy2WfCNMtWnhVb/Himn\nT+CU/YRqeCTieaOCWrJxZJl2FrH5415r4vMG4aAeN7h9sODwhrTbSbl83I7u\nsYOWIonovLbc+OWqZninUL4Pk/NM0sniz0r/uprUIdvR9pyTjXccNHdJ0Gv5\nl6uSDQjSaLtJvZgGghK7akiy2CCu0/3TCBFRhho1/b9Ei1nD7mkydY+aYEJ4\nn70ecsJsvV+tmk4CCAAfxxOJq9meeUOwPdchtnFneqXQXKeD/DZrmRV1U2YN\noAGIgczu8edVS9XW706dHgch9Qjt0w5I4UHl0fOCHXQEkBAY5k+gAxKkJDfL\nFjUQUu3G7+m5Z4gOF1PbIdEBz8HKYd3wtE8wtcwMy5omaS33zpUT2gxm/Bsa\nDwHmDcgJWwx3SlPMBqDsrvO1lg/QqqgENUX40RTSj1GlA4onXBmT8/aEFPG9\nsTdU4AiLH2nMwZRJ6ZQ5mY1TKfyo+SfP6qf4jOvNxYH4ODWyyXTr6WOnSq9e\n053M\r\n=uKnz\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\n[![Publish Documentation](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml/badge.svg)](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml)\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"3ec5a76c35322d8c74ffb078e5dff00247725972","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc -p tsconfig.build.json","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.13","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --fix"]},"_nodeVersion":"14.17.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.7.3","@balena/jellyfish-logger":"^3.0.32"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^27.0.5","sinon":"^11.1.1","deplint":"^1.1.3","ts-jest":"^27.0.3","typedoc":"^0.21.2","depcheck":"^1.4.2","typescript":"^4.3.4","@types/jest":"^26.0.23","lint-staged":"^11.0.0","@balena/lint":"^6.1.1","@types/sinon":"^10.0.2","@types/semver":"^7.3.6","simple-git-hooks":"^2.5.1","@balena/jellycheck":"^0.1.1","@balena/jellyfish-config":"^1.3.4"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.172-renovate-internal-patch-3ec5a76c35322d8c74ffb078e5dff00247725972_1625016136403_0.557698839402373","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.172":{"name":"@balena/jellyfish-plugin-base","version":"2.1.172","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.1.172","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"9a45e81cc0f57e9fcda7ee23a84655df46dac8c5","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.172.tgz","fileCount":18,"integrity":"sha512-F86VJ4Qah6sq5HV3nJIkFIMv7xqAAmmZJWjuBGqOG2Agv5IBNV0ovnUwSMZ5tFJOTNKfGJYN1tWjH2ovYqsDjw==","signatures":[{"sig":"MEUCIQDozNP/OW7hszVBLz/pkKP125cmZ5Us7zyryDLOznTkrgIgYpfvTm8mLnN4fHsBAuS/hqfvcC60FgTM14v2khF3Ztc=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":57066,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJg28giCRA9TVsSAnZWagAAXUAP/iYDRifOYmRrSOnbU39l\nCc7l3L4MUIfHKtlhutOVPcmAX0sx6gSBU4oOgaWZRM2W+TyGgZWHd0GKx+ED\nbSH0PEcUV8IOtiOOkQXAUW2UJAK2XRQn9Ufw/HzyxvxdUTFZ6LXAGAO7mXaw\no0Z8VVORcCQmmLZ+6CwTn/2BaUWEZYeQaK29mCUq3THaI6Trn0MjgypLj9z4\npJyF+gmEOm+hp2IA4F43ZamJP8nEEFdjokD9/NNGJulgr1aGwy863qzw7cAY\n3bDN53hHN6oCegyG51+dRq2jCzkKDQ+bf1xaZeQNPia5gjv09nizRoGGfLf8\nDGCozoGlRzfcaUbWCTh6L74nrV2C2kgqyaXuNvwsll62G6gUBDj4E2BLMpCa\nn/jsjc1KH78CT+o71RSMc4ocSGIHwwuQ5asHlQN4LR2P5Jx4/BDF4GJWh1Zr\n9VAyj5CezsbO91WgN1jgioOC7wXvzdiL9QyeSP1RNwQBOwFOv7ccCn2xNTqq\nCQa2T4bnUsOqwFcWbeJClf21zLnruXxpdL0hXNDb2+Dhlcxo157uJzErYVqx\nNDkdBtWCJ5wlSMM94sQ61aTMGX4RE1yjO6FSiToW19qwQQPYOVYNh6lEKaxY\ntJi4jV1G7csGfq+YG41PHJBKGf+T4ps3gIwl73VP8BjxIglNZc1Tf2TYeFXr\n1pom\r\n=elz0\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=12.15.0"},"gitHead":"ce829321832a845b66674cdba8e0cb45c1cb830a","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc -p tsconfig.build.json","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.13","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --fix"]},"_nodeVersion":"14.17.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.7.3","@balena/jellyfish-logger":"^3.0.32"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^27.0.5","sinon":"^11.1.1","deplint":"^1.1.3","ts-jest":"^27.0.3","typedoc":"^0.21.2","depcheck":"^1.4.2","typescript":"^4.3.4","@types/jest":"^26.0.23","lint-staged":"^11.0.0","@balena/lint":"^6.1.1","@types/sinon":"^10.0.2","@types/semver":"^7.3.6","simple-git-hooks":"^2.5.1","@balena/jellycheck":"^0.1.1","@balena/jellyfish-config":"^1.3.4"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.172_1625016354451_0.991212597747148","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.172-remove-package-lock-5732f6ec0168ad1b741908ece983ef0ef30abf77":{"name":"@balena/jellyfish-plugin-base","version":"2.1.172-remove-package-lock-5732f6ec0168ad1b741908ece983ef0ef30abf77","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.1.172-remove-package-lock-5732f6ec0168ad1b741908ece983ef0ef30abf77","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"f23188a339f76bf23c4e7c1069c3f01548cd099e","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.172-remove-package-lock-5732f6ec0168ad1b741908ece983ef0ef30abf77.tgz","fileCount":18,"integrity":"sha512-ylcEHHL3kNm6m3VjTaxz1xdsFDJKgIoyQKB3pyOtkcIMcIXecZm7rUrHF8Q2NJH70b8wt5+g1mOeQ9tjKUvbjA==","signatures":[{"sig":"MEYCIQCpaHvW7Oa1ZXcnP/isx/Cc3eB/Bb6eQhMbSZkNgH0t7gIhANC6fW2Dl8VdQb+1TrI6eZxaVr9vKgvSAIuaSwRWI0iY","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":57204,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJg28iUCRA9TVsSAnZWagAAIbkP/0fh+sz+SlQv5NbxQ5d7\nh8u8a/FZFGdrJzdw7hx0+f4vAtmQJMSeZajm/Exy8q1+TeD/syh2t1K9ZtUu\nFMOS5OonPJ2brRO95M9lyQtt3Mi3d7ylbBeihrNw9hxKe5s1RnGe4N+/EQlk\nKU6FwO3I9ZA9vw8CsDXbwnsiX91WUNnQPw/LrIx/mpnezKvzW+6dowOWmtYX\nHGyuvjT3VrCkbml/S2bV/VF5kM/V3qgmmt+Sg3atd/kHsFLKyy+6Re7RLXLK\nqglXT9AqJF5R3d9La/cSvwpmhCgPP1gT135D5fgzBLEl04VYm9AEM8eBuxZg\n1/K5l+4vRFd8ziO3W54jAq4D5FZFyPwO0gRyVhCfJsnt7Z1/4+kWtzsy3G+F\nXO6jViAbqWGWaVBQOn3OmT2kf/oXJgIYFbJrUttZi7ekPGeyJ1A9BdUdSGIJ\nc/I+lSzYuCadT1CTXhqL0dzOW5bvRljNXIfVkTg3Hou0u+f57qmGI5qDFVFa\nxsub4z6BG9YxZYhZYjKd8ZiAkRfdUOX+Me1+DXqIgq2lfPAwiLr6lYMOsuRe\nzl6/pQU6RW5OMNZQR2+RCwm/1opfdcBs9hk5B3i/mtEP85JSvPkaUn0s7ggJ\nJaqj37v/bFa4Aj6UpZiF4EDzaW8iDK5uvYrZnOxUUfJ9+tUIw3RKnYDIwemc\nTG4V\r\n=zJqw\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\n[![Publish Documentation](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml/badge.svg)](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml)\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=14.2.0"},"gitHead":"5732f6ec0168ad1b741908ece983ef0ef30abf77","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc -p tsconfig.build.json","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.13","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --fix"]},"_nodeVersion":"14.17.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.7.3","@balena/jellyfish-logger":"^3.0.32"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^27.0.5","sinon":"^11.1.1","deplint":"^1.1.3","ts-jest":"^27.0.3","typedoc":"^0.21.2","depcheck":"^1.4.2","typescript":"^4.3.4","@types/jest":"^26.0.23","lint-staged":"^11.0.0","@balena/lint":"^6.1.1","@types/sinon":"^10.0.2","@types/semver":"^7.3.6","simple-git-hooks":"^2.5.1","@balena/jellycheck":"^0.1.1","@types/json-schema":"~6.0.1","@balena/jellyfish-config":"^1.3.4"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.172-remove-package-lock-5732f6ec0168ad1b741908ece983ef0ef30abf77_1625016467927_0.6802292262917116","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.173-remove-package-lock-1673d7e31f4b229160307bfb2fafd48b3a1a2471":{"name":"@balena/jellyfish-plugin-base","version":"2.1.173-remove-package-lock-1673d7e31f4b229160307bfb2fafd48b3a1a2471","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.1.173-remove-package-lock-1673d7e31f4b229160307bfb2fafd48b3a1a2471","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"c6d29220f4d8a8acd35492b2cc98229e497d1646","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.173-remove-package-lock-1673d7e31f4b229160307bfb2fafd48b3a1a2471.tgz","fileCount":18,"integrity":"sha512-MAiRc0h2GYPb+oMLThkw+7GDo4qOsF+/tfJmBdElxYYRYeFHzqwDDXcKVVtOAMHmUG4fqOtHTB4kiknFCCW0bw==","signatures":[{"sig":"MEUCIQDY4z8THTuBokl2h4oaxcCA349YBqm/ZZnQommTVDU4AAIgIjsiXH7Xy6dYbQ5bYobjczUJkuXrd4Ir2f5Ng+x2Yp0=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":57230,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJg28vWCRA9TVsSAnZWagAAShYP/2owgYtVvV9LjuPgySuK\n6bq5gHrGS/BrNIwoNGuqcbtRkjLDUut7MN+QvzJILn/qyZJUoyuXR2sAIFKq\nkFW5oEHeFTJpU5s4SOb5l1Qw3DKF1pAWxTx40/Gcs7C61jpUq0soqgZffByg\nUPxQG4ckBDnPtikjHnTZc+n6TmccaehOoWu8yR1D/MzTwsP36robTEv0hzC1\nGIo5cl6LdB+2q6xVMviUck2KRqtpeySuuwc6RbWJh+OsLxu+5zxb82IbCqQQ\nT1g9BlCcCuyMjCoSTRzTOk4La8LjV1j/sh81HQc0AqUc9Xg2cpqjjhzp+blk\nqVMTy+HcIy0vt83H+n73n1LdARPphAqvJqeSM3hcnZViBAcT4vRbWgImxEF8\n+GZCVFUXTqilMhSKfCrgCrJgKryzvgRwLgkTA8Fgcp7KgyxzOpMgE/WBv6AV\nSW9IkkVLOEAGxse0YGWFPp0IvLYYkYryd6MIV9524AKbFlMXNRmx4WSrDbAL\nlasPDsqBFvVOkxtaabLuWNWxcN5PveeY8MJBRe8g3F9ZuNxpE9whZYyVFayS\nj9PwxOI0Q4pdyEGwkPIRIb6kMkYmFGEb8+/4XakNmcYXp29ctn8sQ1K0j9qZ\n3UQY/9evbH5FVdEIaPyndjF85ckYA/hY+zQ6I7RwbRPsCdqo3bvNyMjw63qG\neAwu\r\n=Ui0v\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\n[![Publish Documentation](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml/badge.svg)](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml)\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=14.2.0"},"gitHead":"1673d7e31f4b229160307bfb2fafd48b3a1a2471","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc -p tsconfig.build.json","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.13","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --fix"]},"_nodeVersion":"14.17.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.7.3","@balena/jellyfish-logger":"^3.0.32"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^27.0.5","sinon":"^11.1.1","deplint":"^1.1.3","ts-jest":"^27.0.3","typedoc":"^0.21.2","depcheck":"^1.4.2","typescript":"^4.3.4","@types/jest":"^26.0.23","lint-staged":"^11.0.0","@balena/lint":"^6.1.1","@types/sinon":"^10.0.2","@types/semver":"^7.3.6","simple-git-hooks":"^2.5.1","@balena/jellycheck":"^0.1.1","@types/json-schema":"~6.0.1","@balena/jellyfish-config":"^1.3.4"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.173-remove-package-lock-1673d7e31f4b229160307bfb2fafd48b3a1a2471_1625017301744_0.3170133134910842","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.173":{"name":"@balena/jellyfish-plugin-base","version":"2.1.173","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.1.173","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"0e1688230176c3ac8c7b55c1174f67168b44f944","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.173.tgz","fileCount":18,"integrity":"sha512-1nc4MR+V2anepjfnulmwshTXkFOx/9fMQIeazglB53lDmO2nAVd7Fw6yXteC1qCuUQe9QnxMWuScd7rEtvMKdQ==","signatures":[{"sig":"MEUCIQDwUUrXrSgoFtNB5wJvbIZCmKWdVjp9tdiQ7U+2iR4FgQIgIlYjWa/wQjbec5J4NazmcATXWCpflxMb1MqvHmtw8Yg=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":57169,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJg281MCRA9TVsSAnZWagAAtQEP/2rnBbLE5B+GX24VuE9G\ncXROyYuovDY0Y6PHsczSa5mJBzBYu56CgX10qPwMgNhW7lbdm6QGqtL3LVEl\nenEctyXsCx725fTKfKo00h4gm/z8yubNf3NH/qyfyawg79ybcsGjvajVuUkn\na/fU7bjJZOmKuA9Y0uvAyToJzZLyTs57euDIPGsR0RYsK1/ugSnPFLNcW4WU\nBDisGAeLScaoKa6L1Jkb4ej0eaoBgR+tWJ8MWuYWyiNAsFHffSzc67X4X5A9\nYB34hCG94cBbpXXx1Jbd/9Pj1K7yEflHOTYCSe1Vc2CbbPwa5uqh/1UBEkTK\nGKJFzYw+ZEt69OqNbnLQkrWkO9XtfYPfJ1VP/OHWE1lZLOyEt5MDanOUsswG\nEyhQhP+gj8tiOWm35RJFoe2vXlaf8qoLb/imaobqKHjGjF0q1l6W54HN/vfZ\nb+M/dL2bya6CoGA/ORs3A3RSNW9O5M0piM03PbkRacVPsfFK6zhWfytroXmO\njXenkmDzmbm69zsoTnK9Irn+X8s9zD/89q6HL9Ta2493hoVA+lk8a++XskQC\n57s8++UO4d2BSUZDmReYHIAxNtNV+VUIRy6qt2SJgtNfh3AuuqzXANeXcM/y\nqaTZmTaM+ZiEEb2nfcx0HozYGlJ87X9uIfHnwUyo9XZO9MhWFi6TQ3aJ2vz+\nSITo\r\n=UnTw\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=14.2.0"},"gitHead":"b0a2c4d1e49bca8c8e934bca82b4a422b91eb2c4","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc -p tsconfig.build.json","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.13","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --fix"]},"_nodeVersion":"14.17.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.7.3","@balena/jellyfish-logger":"^3.0.32"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^27.0.5","sinon":"^11.1.1","deplint":"^1.1.3","ts-jest":"^27.0.3","typedoc":"^0.21.2","depcheck":"^1.4.2","typescript":"^4.3.4","@types/jest":"^26.0.23","lint-staged":"^11.0.0","@balena/lint":"^6.1.1","@types/sinon":"^10.0.2","@types/semver":"^7.3.6","simple-git-hooks":"^2.5.1","@balena/jellycheck":"^0.1.1","@types/json-schema":"~6.0.1","@balena/jellyfish-config":"^1.3.4"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.173_1625017676003_0.8562116383789709","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.174-renovate-internal-patch-2ae48a0e02f75191e7e119a1356cc1cc3b0a11b6":{"name":"@balena/jellyfish-plugin-base","version":"2.1.174-renovate-internal-patch-2ae48a0e02f75191e7e119a1356cc1cc3b0a11b6","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.1.174-renovate-internal-patch-2ae48a0e02f75191e7e119a1356cc1cc3b0a11b6","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"3d93c0fcf32fc415fd6e37da3bbed1461649631d","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.174-renovate-internal-patch-2ae48a0e02f75191e7e119a1356cc1cc3b0a11b6.tgz","fileCount":18,"integrity":"sha512-FGAM/QoV59PQ9QLWOJavaQbyHCV+fZoarYqCmVpSflOzcH35ky3ebdGMH1I5odnsKzqTXsPys6rxzf/ZMDaqeQ==","signatures":[{"sig":"MEUCIQDrx63D3KUJLvo0hUKy+n0h7lNLRf1sOjIvPNdl8yW2IQIgJ1qK8/apz1eu44ILmRbZ7a61/o5HnL09Im9d19eYV8E=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":57338,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJg283bCRA9TVsSAnZWagAAb/QP/RJBp3OOxp1IfH0folqq\n5jDV6VuurAT9hgBpll/HSgWbBJGDuLnU3lkbDj5MvfiZsBIkSzLqqWyPH2O+\n6Ijxs6i77H2Fn9XX7isON8o9l+2qBxA7NuQM0VoGDJMjhDWVaFXqDOz5cVvL\nt0T8ygeJWvM3hMbJTZ8XhejsoktTmuW4QL7+n0v+6rw6qXGf27E570o+dVOV\n0oCJMb1Xb3EU2XQJoXRHLa0kHR3uQR6Nl2W8nlPfjewwYBjRHYgSQZCmA9GU\npRxSE15ZnXv0sxnPwjGMOuYykDmoJZ8rBPtr5vpji7qQBw3jxApdB3cZq4kv\nOjhQhqzmdfUTrHAv2abc3OsrDalW8smort9L9ZJIbtH1y7U0NoDbHFWPB15T\neu33eWxbYZJxma60QOIYNnooqQJWg4N7HcX+3ZcARBnltP2P3glgIx9fLkO4\nWyPQv6QmIgCEZrDNMSIiHm5lhNc/qahboLIocOmW6FFrgj1fTrM7jDTccnHc\nvQSYjRoKuemRwkl6pHWsN1oUOfcof2HTxHhx98VI5wFiM0jpszP1sOik6ADa\n2n1hyTzcOPSg0oQ0xPQu/FJHNZxCGoQhAxZ2UFLQSGCvr3Ns/THxwc1zqqG0\nWsKQfscZ/WUovV7fEJ0oCwNlEaciCAIMYkKCyUaD6dT3Ompzm0vChi7ER3po\ndeHW\r\n=ovIh\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\n[![Publish Documentation](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml/badge.svg)](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml)\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=14.2.0"},"gitHead":"2ae48a0e02f75191e7e119a1356cc1cc3b0a11b6","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc -p tsconfig.build.json","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.13","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --fix"]},"_nodeVersion":"14.17.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.7.3","@balena/jellyfish-logger":"^3.0.33"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^27.0.5","sinon":"^11.1.1","deplint":"^1.1.3","ts-jest":"^27.0.3","typedoc":"^0.21.2","depcheck":"^1.4.2","typescript":"^4.3.4","@types/jest":"^26.0.23","lint-staged":"^11.0.0","@balena/lint":"^6.1.1","@types/sinon":"^10.0.2","@types/semver":"^7.3.6","simple-git-hooks":"^2.5.1","@balena/jellycheck":"^0.1.1","@types/json-schema":"~6.0.1","@balena/jellyfish-config":"^1.3.4"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.174-renovate-internal-patch-2ae48a0e02f75191e7e119a1356cc1cc3b0a11b6_1625017819248_0.24642673813049565","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.174-renovate-internal-patch-d0610f39997fef7c6fa7c00dcb97963fec6b2dca":{"name":"@balena/jellyfish-plugin-base","version":"2.1.174-renovate-internal-patch-d0610f39997fef7c6fa7c00dcb97963fec6b2dca","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.1.174-renovate-internal-patch-d0610f39997fef7c6fa7c00dcb97963fec6b2dca","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"572468f647d980437c2a44c9c09202bc68814c7e","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.174-renovate-internal-patch-d0610f39997fef7c6fa7c00dcb97963fec6b2dca.tgz","fileCount":18,"integrity":"sha512-3SnnX7y5GBN+kUH9Od1pJ76Eh5Ak5ToeCmKmOfprjW+GAdH1tTAB0N9Y7nno3Zq39bkNZLbBUlv/C1YNiJnxCw==","signatures":[{"sig":"MEYCIQC4CcxEDAcK7/SlmyC0XAEe4aY3Kbykk1kCCXRbhEPkUwIhAPFvqn2OH+Lzm9FqVSQIEDKXuODDzRzuYlcsElR8y9k7","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":57338,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJg2+qoCRA9TVsSAnZWagAAwW0P/RgA1lVnohI8kpQ+EB0L\nMjSQLDBNSxLwDUkoRtAvIGLaJUXwDcw7laburDS6aIu7bfuBED2Z78RxaT5s\nPVnXBFpq1bXODL9VkaQ08CU84fDd2MXrbP7AWl0Uk4NBjwiYLzULvZa3W1j0\nUadkU2C6Ws5oQ6Uh+vVVSyOwwc1OSalzRW2j1AcS1PX7+x5pWmEw+V32gUq4\nL3QUUcGItM2l+f8AypQxHT7M2L9aWoZgC71Ep772KkM+3uc50VPm28IEZYlf\nFHiojBNJyqwq7PvdIXZUrmWdYIKp32EwwVwybGtKpOoGDq8QuuS8PvcMYy36\nKalEOfQZthXitIHX09Whl1kH7aCyCBs9wFAOelCCFzKbiNNvgeue6WFe2WAN\nZWbIe08x03bLEUw8YOJOz7LqSpj2tugPpJFyV3nXBZpemdiZLzjQ49kN0mCj\nOdHZWloq4rdNBBWulWTWGTVnRcwUMJhNXuTRaZsWw+PXSTA1ttEOpez1LvwC\n4cNiZ+TvgVNRVMd7OG+hrIHutPjpbnGAsMYEor299/JvPAnTO+M2dKVC5UMB\nA2UHhwFF16+/qj4797olDFOU0QdN6y1JLBew4t+dsWGEpK1hxpTIEMP2lh20\niLNIpdE2hx40dJF1d29nHEl6AsQ265jblmVdvohCwMb4PAOw6CyOE0KWIFy+\nqYKO\r\n=1JIc\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\n[![Publish Documentation](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml/badge.svg)](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml)\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=14.2.0"},"gitHead":"d0610f39997fef7c6fa7c00dcb97963fec6b2dca","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc -p tsconfig.build.json","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.13","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --fix"]},"_nodeVersion":"14.17.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.7.3","@balena/jellyfish-logger":"^3.0.34"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^27.0.5","sinon":"^11.1.1","deplint":"^1.1.3","ts-jest":"^27.0.3","typedoc":"^0.21.2","depcheck":"^1.4.2","typescript":"^4.3.4","@types/jest":"^26.0.23","lint-staged":"^11.0.0","@balena/lint":"^6.1.1","@types/sinon":"^10.0.2","@types/semver":"^7.3.6","simple-git-hooks":"^2.5.1","@balena/jellycheck":"^0.1.1","@types/json-schema":"~6.0.1","@balena/jellyfish-config":"^1.3.4"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.174-renovate-internal-patch-d0610f39997fef7c6fa7c00dcb97963fec6b2dca_1625025192391_0.3787528577610184","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.174":{"name":"@balena/jellyfish-plugin-base","version":"2.1.174","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.1.174","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"9f9e79cb45248b3cccb350c62ca076d1a530ddf5","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.174.tgz","fileCount":18,"integrity":"sha512-LcWWRYBZ4xnWqCLV5RPpdW5YljTt+tk6QfRPUL1let38/hYIIWgonK3273qkSw8S1q2CVd/yM1soYzOF6IwTYw==","signatures":[{"sig":"MEUCIQCuYlAFrBrjhv4UGa7InYkQYlNzVmvAkhUhQJSZamGixAIgcSsWaQIMuNy4SGK7PtV572MMj3IWOfqSX+IY46wy3ks=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":57273,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJg2+t8CRA9TVsSAnZWagAAh2IP/RneFXb7zb0RCIllx4Yw\ngOcwBnYxd2HUL1MisKw6WamLn/yZGsSODrOcxHa9rBAhn2EWGVsdpo9HQYVe\nXT90ZaOpKoYH6wybaNigu9IqjEdLV7mk8LmBVM9Bolbq48Tj8cobgJ3sAE80\nK6DYWCgpnPYwZ1wT+B/L8psZfn2IArofuHSsEI3c/rh7Hixn/gpxjW7dH1XK\nkOoiV9mKagSJLNhWsnzyat7SQo6R4yKRWaaIvOTObd02EoJ8V78qYBFuEO70\nW8EkswVimrV1NhBUOe5BHC5C/m4lmp2OVEvDBaP3EEiV3CMv5ApGHiJDnf59\nXFJq+JRQ8qVhDR2PQMJ5pDObaYc/cgph6LQpvR50vfM1S/GxO98VyGIAo4xh\n9JC1syzsnaqZF3nKNqaGE2txBdfRLT+dNC/9I3jf3N/0PKdXYRjOSgr+xgqp\nrS//uV/HqCEDn9swNAZT10UqephCPSegebTNPKOuMWaeuSHpKKlO7d/U0N2U\n4WC10nrPDa0vYy62ve+JT440mVAZz3fX7gopnq4XumoJ7nzZqCe+FlPtHDbh\nf2xn92S4knki4F09fvB2gruuKpiSH/PLcEvJmD6P3/g4KOWov05QDDuMIh2P\nngYClgbcFL9kz6re25SE0BgZA6CJzpLYVEf7VIi3TebKug4BlNjTwC4EjNTv\nhGCJ\r\n=JmY9\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=14.2.0"},"gitHead":"e74c69a52bc75acd22449da56d23cedb804e5133","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc -p tsconfig.build.json","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.13","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --fix"]},"_nodeVersion":"14.17.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.7.3","@balena/jellyfish-logger":"^3.0.34"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^27.0.5","sinon":"^11.1.1","deplint":"^1.1.3","ts-jest":"^27.0.3","typedoc":"^0.21.2","depcheck":"^1.4.2","typescript":"^4.3.4","@types/jest":"^26.0.23","lint-staged":"^11.0.0","@balena/lint":"^6.1.1","@types/sinon":"^10.0.2","@types/semver":"^7.3.6","simple-git-hooks":"^2.5.1","@balena/jellycheck":"^0.1.1","@types/json-schema":"~6.0.1","@balena/jellyfish-config":"^1.3.4"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.174_1625025403926_0.9476068645283262","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.175-repo-sync-jellyfish-config-default-888cdf4568ed389c209a2371ba70cbdb2a712379":{"name":"@balena/jellyfish-plugin-base","version":"2.1.175-repo-sync-jellyfish-config-default-888cdf4568ed389c209a2371ba70cbdb2a712379","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.1.175-repo-sync-jellyfish-config-default-888cdf4568ed389c209a2371ba70cbdb2a712379","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"2fc45334fd2fc763f32204ee9cf7904fe584d434","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.175-repo-sync-jellyfish-config-default-888cdf4568ed389c209a2371ba70cbdb2a712379.tgz","fileCount":18,"integrity":"sha512-0GQDa6jw/GiobOVNkJ8COuNJ6MeqcIQf5WQ+Q9YAUHiR2WtkCJo8fzUJZ+oCFtR29NreoLY36RZB2YWNmUg23w==","signatures":[{"sig":"MEUCIQCZYqrBUz7TT+LpDzYZVZSQX2EKwfdMfj/cDLvlOo/4BAIgB4V6RIdJcTQP7Ir9Jstg6YzxT/3fczbn+OctfE1exrs=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":57492,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJg2/i8CRA9TVsSAnZWagAAIMEP/A13urle2lmOZNa++8pp\n5FxM6YXkEf/xk93na15TdVzNwrLFGwAjKhglFNoJieXOjzPcG482sIvGHn95\nmnROhFns4Falvw7HhglLra+Y5ij3sq+DWSZKloQb0lDHT+OI9/EL4bNV0PXB\nC6GC6v4I2BnSNRqA7NdigkKBi3ly5KBCE++IDgp1gHcmMmhsvwetKbkVxgFe\nFPPp8331WUX5dUST/G6T0i3yJ8A584FLQH01E4vBjJ2JzOw+XrCN81AeeKxQ\n4/xW405CKwjYn99suKccrjujCCogMs9YORgCpbYCF5VtHsMAixtu3Flf9JNB\nldzMgU2QSXBco33ns36NQt5m1AE4JtBGjTdPl+SfpY2S4Ag5zDpTaC26BALG\ndpplhJQ6siVkrCX+OruEQtwuYuOl36efqOBI1zBm/5c2JhfDC+DKogARVthh\nCRRI60Tw0CV0NOvseK8c2mMRI9vYTYdxdvxUbALMNFOlU9wNHtSH8OHO+1l9\n104hxzK4LzZNe4KlN5ZB/j4qG3nhHwjSlFlXuPv3A4KAGHh00OEeQZynM+dV\nwYuQaebFoygVabLC3zdQJM7zIeCIV7OFiiK76ftXFLvZjI0q9/zy93HUgW6P\n+TpA+24jJ8/voZiThNKT1LE6l5s/d3abk9yAF/p2qlA/8rTc0NAo0LIwg3DV\n1qZh\r\n=6IGQ\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\n[![Publish Documentation](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml/badge.svg)](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml)\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=14.2.0"},"gitHead":"888cdf4568ed389c209a2371ba70cbdb2a712379","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc -p tsconfig.build.json","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.13","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --fix"]},"_nodeVersion":"14.17.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.7.3","@balena/jellyfish-logger":"^3.0.34"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^27.0.5","sinon":"^11.1.1","deplint":"^1.1.3","ts-jest":"^27.0.3","typedoc":"^0.21.2","depcheck":"^1.4.2","typescript":"^4.3.4","@types/jest":"^26.0.23","lint-staged":"^11.0.0","@balena/lint":"^6.1.1","@types/sinon":"^10.0.2","@types/semver":"^7.3.6","simple-git-hooks":"^2.5.1","@balena/jellycheck":"^0.1.1","@types/json-schema":"~6.0.1","@balena/jellyfish-config":"^1.3.4"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.175-repo-sync-jellyfish-config-default-888cdf4568ed389c209a2371ba70cbdb2a712379_1625028796296_0.6611563271799508","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.175":{"name":"@balena/jellyfish-plugin-base","version":"2.1.175","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.1.175","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"6b0e911205a8f90151718c2f08479599f3d00333","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.175.tgz","fileCount":18,"integrity":"sha512-mGcyjkd0Wfgy+TyPcyz/u9BDT/VKETpnHLnEQ3I2zCAjOotPcuDtW8aK1IN+y17rGAWmbcy7XTTen8A2p1Q+tQ==","signatures":[{"sig":"MEUCIDG36nxgXbRQIpjdgGeTTtkcYdE1OtGtDLu5JP8F4kNWAiEAy8qn2AW8iTN5f6aS4dt6mO1JKr4oCf8VtSswJwPi9hw=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":57416,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJg2/l3CRA9TVsSAnZWagAAoAMP/2bETlqdHNForQSi+Nru\ns9130sL+txA+yze83QTnTjzuVj3u8VWTu0+UNiJVXUK+z2gO7C5ms7/Gu1Wk\nJxL3TCz+NiRSdsDdgv0beRJN7U3KE7CJ1TCchvQIXTaDEjdaeKC7BVozWV/Q\nfwLkEB8nwE6h2p6V4oleYXoZ85HI3Oe9IpGKihdGwzrGYXO1Srl9WvkBAJ5C\njkB432y/Vqfol2oe/3fVLj/AGDVBfL5jiF9yS0PllrjBQva4aJhjOHEpPURS\nVBVCSR/u94Y999HoYxncSlcgoXhRi/5JdbueW0rH8Gih96fjhGgLV3F7RXpD\nO8ApgO02UogERK/MhGdPkvzRrJkqG8w31aQo9EEShXTtuBjWEjRc//SUaIBk\nCFr8FiakTY0w5JxQeKzkN71UYPiFnjKcb9Q3eb/nK9wPile6kLKzE9Eb2woI\n9ZF+Q2mCoD7AMPAb3GL+9JyVZggCBduJmg7rp43M+d8F/hsFt8ITO6p1s+kF\nEFl4L+JPzs+j+c8m5sza0r+S3ZjDM9ezmNh6slmAm6xZgmUQQ+nXwIez7UWo\nOJM1rpEYfgmwMI8tBzoVnLqZ4Msw/JFxRHwRnwrc/XwlIbNp1O2Qrgk4qV2L\nH+OUKf0Sn06JpyhYYOr5wp92j9DZvkOUBtM2XBV+ov3z7MZHqRBUyujAiBaL\nYdRc\r\n=OIat\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=14.2.0"},"gitHead":"3628801ddd3367012a9c3e408ce7606cf8552a13","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc -p tsconfig.build.json","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.13","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --fix"]},"_nodeVersion":"14.17.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.7.3","@balena/jellyfish-logger":"^3.0.34"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^27.0.5","sinon":"^11.1.1","deplint":"^1.1.3","ts-jest":"^27.0.3","typedoc":"^0.21.2","depcheck":"^1.4.2","typescript":"^4.3.4","@types/jest":"^26.0.23","lint-staged":"^11.0.0","@balena/lint":"^6.1.1","@types/sinon":"^10.0.2","@types/semver":"^7.3.6","simple-git-hooks":"^2.5.1","@balena/jellycheck":"^0.1.1","@types/json-schema":"~6.0.1","@balena/jellyfish-config":"^1.3.4"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.175_1625028982784_0.11972131837463129","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.176-renovate-balena-jellyfish-config-1-x-31bbbec1e7a80f176427e5d47e5051af1b2a4919":{"name":"@balena/jellyfish-plugin-base","version":"2.1.176-renovate-balena-jellyfish-config-1-x-31bbbec1e7a80f176427e5d47e5051af1b2a4919","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.1.176-renovate-balena-jellyfish-config-1-x-31bbbec1e7a80f176427e5d47e5051af1b2a4919","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"d5a3c6c72a342b34cf1e4535e900d8b34886f609","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.176-renovate-balena-jellyfish-config-1-x-31bbbec1e7a80f176427e5d47e5051af1b2a4919.tgz","fileCount":18,"integrity":"sha512-MmPRqaadU0rJrrK7DYdxQaAcSr6K8OwgFLeOObZs44lR9zw8CzXqKU2hBCmAOYCxzY76Cb1ZeLrZECGYRRSJYw==","signatures":[{"sig":"MEUCIDGAAWTj42zM1qQ+hoWgo9iF0n5OmPAbsrAG3pQwUgWJAiEAs8c/deeysjML6i0uNVU48aClDhHMy390JzQnOWJPEbo=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":57597,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJg3rl8CRA9TVsSAnZWagAAb8QP/1EAlgVk2seoRo87MmPY\nKfJ/LDCGxUe5hiTct/OYa/rbIuSr4Zb4ne0MftFF0ViO5PFKnhEa1rdQSuZG\n4Ho5Dh4PrCIV3y79oJKPlF+Zvek8o1PdRxA0QVyRf8mugAv8QuQldl8dEv+3\n3G/X4JgFXmF+OCz0uDiCfCalMVXIueoVtcXxsTvbIw1gBa5Lh6bDiodDfeCQ\n+K9OgA2tjez7ySLBDudlezzLE/ULwYtVevLLBD0CRdXeQPbLuERaCoJLTNEp\nVngm4DVqrDDnhef2uwUCENfEdXKkD6qqswRf9EWUe7hV8NEakMRc3xGKoXtT\nxw+2H+1DBGIkMEJIXI4xEigRYVe/A3YNfFxbv9xP70VriP7SEJqBEPl/eo/k\nTDntHa8UDGzgGKMGb8ifA+gMTgd85LNpmK2g78kQHBr3HSr/B3TOUrThEuI3\nPhy0Aa/PXdmP5j51JEheZLy+sC6+SbDji9JMxHCNqa7CvV9fkuL+LvlM/ZR6\nVUGIvwQc/S3AF2xuk2yb/ODDzlEShAfAJe7lwo04FABr5gEQFUboK4O+Ndp8\ncR30qMfdy4IgKhSKJFiqeg+JKT90k8emuu57D6Zbr8DiHMqnrEbkkv9VDV5D\nKhnN7GfCtt350ROgyuEFvtmH9y5E2dtSauy/FVGmEbfpVtyxDkEzkATGAKWm\nyeqw\r\n=HFih\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\n[![Publish Documentation](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml/badge.svg)](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml)\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=14.2.0"},"gitHead":"31bbbec1e7a80f176427e5d47e5051af1b2a4919","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc -p tsconfig.build.json","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.13","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --fix"]},"_nodeVersion":"14.17.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.7.3","@balena/jellyfish-logger":"^3.0.34"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^27.0.5","sinon":"^11.1.1","deplint":"^1.1.3","ts-jest":"^27.0.3","typedoc":"^0.21.2","depcheck":"^1.4.2","typescript":"^4.3.4","@types/jest":"^26.0.23","lint-staged":"^11.0.0","@balena/lint":"^6.1.1","@types/sinon":"^10.0.2","@types/semver":"^7.3.6","simple-git-hooks":"^2.5.1","@balena/jellycheck":"^0.1.1","@types/json-schema":"~6.0.1","@balena/jellyfish-config":"^1.4.0"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.176-renovate-balena-jellyfish-config-1-x-31bbbec1e7a80f176427e5d47e5051af1b2a4919_1625209211856_0.06226695713318664","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.176-renovate-balena-jellyfish-types-0-x-0c21e4d356331b1b2f19838d321a0ddff7654389":{"name":"@balena/jellyfish-plugin-base","version":"2.1.176-renovate-balena-jellyfish-types-0-x-0c21e4d356331b1b2f19838d321a0ddff7654389","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.1.176-renovate-balena-jellyfish-types-0-x-0c21e4d356331b1b2f19838d321a0ddff7654389","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"3bf3a6410211aafcfb2a8666a9ad3d07ae0badd0","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.176-renovate-balena-jellyfish-types-0-x-0c21e4d356331b1b2f19838d321a0ddff7654389.tgz","fileCount":18,"integrity":"sha512-D5MOjcWvUJARFInp8ShM2i1ZjsfwqGISuE+954mie0GMeubjQ1HyIMoEBFOKYBUoRYjlalmUQQVJE9bf4pDCMQ==","signatures":[{"sig":"MEQCIGyR3KqD2rmdtrvnvbDb+TNMgKQLN9DeMQ4yGUOzaraVAiB4xJfJ0rWv7/QAkh1hwh2HE2MOMhu0DKSmwXwJZRDEWg==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":57595,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJg3rnICRA9TVsSAnZWagAA/NgQAI4jRL4cjPSGN+MJ74HO\nK2J9vU+tg6Fv7LapHO6onaYnV6zLgDQwm2cxcWV21N2RUY0Kvcs2k4CWJzFi\n/ew+CqlC3iOfy/qPPcR+X3J5bDbz4MXVYKmRloq/x+irjzr0Bh+6xReNsN0B\na0rt2zJk4ukTX5uj7b4QPX/5sC0M26MPqrjDDhQDdmq/Mnp19X7hcpltEMsM\nJiDC5EDbSACGoWv5nMKtbf+n87Uv7ZbTHlUB23g72WjK4NQqXh5FgqaVM0yl\nTaz8dHIIBFge8/uVQ+wfXlslokOaWGKs0PlrZdJTHQUxAuu/oLc8PTdbrZnV\n2GZ7bgJlD60w9OCtunC/cw7E32mrYENTovieGaFBzgt+wcwDE4tatWwDhcQo\nVDlTCuNVH/7RdKihSb2HzeVHQeSEhYDLAf47y6bCqrcy+0BWCR4o+Y+C1klz\nXxi32NtZL37O4P4WL8oGdY8slFbkTW8F2luhaIulJakH6pnKamWLlWb9kNXA\nCmpwbFh6Z2zOCA6zMODz8pDHZRv+gMFnA9gEpKW5+zy+FSrDX2yug5WevVR+\niUukfeGYJn2+z0t1uhEQWBWpkhJehaE6DxRQ7reLHp9r02tCHyIDcm1SjCz3\nZCcqWsWVUdrXMENtK0/9Y2NxpG0shXcuDItGiImMaYBpiM2sSx2asTmabtwu\n3ITG\r\n=IybN\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\n[![Publish Documentation](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml/badge.svg)](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml)\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=14.2.0"},"gitHead":"0c21e4d356331b1b2f19838d321a0ddff7654389","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc -p tsconfig.build.json","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.13","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --fix"]},"_nodeVersion":"14.17.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.8.0","@balena/jellyfish-logger":"^3.0.34"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^27.0.5","sinon":"^11.1.1","deplint":"^1.1.3","ts-jest":"^27.0.3","typedoc":"^0.21.2","depcheck":"^1.4.2","typescript":"^4.3.4","@types/jest":"^26.0.23","lint-staged":"^11.0.0","@balena/lint":"^6.1.1","@types/sinon":"^10.0.2","@types/semver":"^7.3.6","simple-git-hooks":"^2.5.1","@balena/jellycheck":"^0.1.1","@types/json-schema":"~6.0.1","@balena/jellyfish-config":"^1.3.4"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.176-renovate-balena-jellyfish-types-0-x-0c21e4d356331b1b2f19838d321a0ddff7654389_1625209287583_0.4093553592612593","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.176":{"name":"@balena/jellyfish-plugin-base","version":"2.1.176","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.1.176","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"6b44f319c62cd30e5f9f631eaeaa53222f204571","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.176.tgz","fileCount":18,"integrity":"sha512-dUaJXvIczgE3zm+TByIqKXEdU+ssNpmprHhog/xasSCIH9ZcNC8UpUzGCNAfotip16Rr3A+L2SuLgUgocel0uQ==","signatures":[{"sig":"MEUCIDsgCbu8JxMrZKPO46K5qMaIbW/aqw2HCnFpwngwEW7pAiEAwj2Znn5uKqoAEacmDJDt5kQ8MTLo20l3WFnTu0sjEx8=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":57519,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJg3rpJCRA9TVsSAnZWagAAqq0P/iDQiJqZJXM/Vm4TYppf\nqdGZo9icYBmTxuMbWV7lifzqqBGDkZerhwffdRJX0WP8AbQpp8CggvDb5zDU\nSQ/fPQ5Z1mSDSjlHNXdmlHfyMmgYO3gKqlhOQTppyBT6BjzLocfKVp8Wndsr\nb4Q0Nw1omlsd6qTIIiFDLOJJzCi/npswTNy/NZWCbpwSf/6iI2WZlbMGkPwP\n/xsW4u3Wj9RIEqjK0wWB6lW67Dwo8JE/xhYV3IEQA0NJ9gg1VJnqCDUGMF01\nhPcbLfsaHIhWdXUebdNyjisl/WyMi2h8wJEXhZOjHp/Sdzs7SXTKk6jsL3Zr\neaiVUURtXEUJTAPzjyeWmbS01aW6Ugj9ze3FKWncz5rxrNzGrL5CpHmPXxy+\npqWacmezNVPSYsVIXUyDTA4YIsAj0zvj0v8Mo8hJwG0oGIfv98b+YCnV1arX\n9ry6M3SdQU10BzV7ypy/yStjR+u1zEfILo31ThSMPw27Aqqo+wKqv1Vf0P3o\nIKZZF04wa7VgSCSB2MXuQcdmem+F/xxaCWZN44MzAx0wp3BRThZAp6Y0Y0bt\nitL715OeOoXHCILVhLi9EbZvKjobeWXnQdI+R1Q0EwsGsUZc+oobdB/wSpE+\nLXxkH01gUXnf0R7SjBF6Ho6FS+qk1gq8DFnZKVQHyswq+WTkkxZe8eT/tpVI\nsn2A\r\n=W5GT\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=14.2.0"},"gitHead":"d66c3a8453d0df8b98248cf8feb5c762f90fc2b0","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc -p tsconfig.build.json","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.13","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --fix"]},"_nodeVersion":"14.17.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.7.3","@balena/jellyfish-logger":"^3.0.34"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^27.0.5","sinon":"^11.1.1","deplint":"^1.1.3","ts-jest":"^27.0.3","typedoc":"^0.21.2","depcheck":"^1.4.2","typescript":"^4.3.4","@types/jest":"^26.0.23","lint-staged":"^11.0.0","@balena/lint":"^6.1.1","@types/sinon":"^10.0.2","@types/semver":"^7.3.6","simple-git-hooks":"^2.5.1","@balena/jellycheck":"^0.1.1","@types/json-schema":"~6.0.1","@balena/jellyfish-config":"^1.4.0"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.176_1625209417069_0.5183632678967367","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.177-renovate-balena-jellyfish-types-0-x-eab9179a25f93e93d34d4445896a7df8f9f5e84f":{"name":"@balena/jellyfish-plugin-base","version":"2.1.177-renovate-balena-jellyfish-types-0-x-eab9179a25f93e93d34d4445896a7df8f9f5e84f","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.1.177-renovate-balena-jellyfish-types-0-x-eab9179a25f93e93d34d4445896a7df8f9f5e84f","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"bd8d1e9bef1a1fe0b38c50c50704ac1412a2e750","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.177-renovate-balena-jellyfish-types-0-x-eab9179a25f93e93d34d4445896a7df8f9f5e84f.tgz","fileCount":18,"integrity":"sha512-UdkLjgHP0sE17u8puUoAqck+Jh0Z6L8roAS1UFOEmIiiz1gkM4waikPyTJcMpg5YGumZb3RNfwTTlvP/P6CGlg==","signatures":[{"sig":"MEYCIQD+Gg7rcs8xolpLMPOXcE7R1Z8Fz1PxCfzsbBLuUUGCjAIhAOpv32KUt0Olv2P0UGbDLnzAgGXQ3SpAk7i1ybUWNNoj","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":57698,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJg3rtSCRA9TVsSAnZWagAAB6wP/inqQWSOekjkJs5UZCvI\ncJEGtvPlPsGgwNdQ16IoB33JefElKIDAmt7d4IAtuTrXQkU93qwm8ucvRS++\nt+Iu1RFISDfctmMhtWrHT1yoO0Dq6wlykP5NxnO4Oy4PZBc9ozuf1xUb6z9c\nAXjNyCGDbbyh+gZSVM+itVXlsd6QvlPeBaG0qd6/foA0IwNdXgj/pzdoVWoW\n67OAGML7TFZdEqVuYlBa56M6KPIOKOn120JO+A4TxHfcwMB9tvnObP1ZNXzI\nCsmOn8TB51vTlp3LVTI2agbLZEdLeG5HWvjyog1SZzb1n34CEx8DWX/itCEQ\nSWGCL7k+e0ZriHMzI3E4aJUiprl8yxus+AxhImThccMl4uEJxniPrkAfqX+s\nwJhHLzSa2ul3wclBZaYIwqu+Ro7MTelmsDjGFtxEZ6vZPRACeeE0mVtoOTH/\nUrIy0XYtXHF52BxdPHP3R7h5f6SVk55ZnecTUhXrkqEkWgFeN7kL9daL9jWx\ntmTx2536yVWNKaplfnlMUQeUmoBj7yoUL24V9Eqaxkf4q4/sBxYb2XnnqKsE\nbJgZR4k+BNRtsGUyILo0Te2jmPgotB1q8bPN4LW+MX/gW/UwSt4hS/lvk+j6\nONBu+hwEf7sMNAp7W5ZmN8Miq/6WcGy81CLz+QZZrk5CojeYcZxa9muUFb0B\ncxaz\r\n=xpyE\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\n[![Publish Documentation](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml/badge.svg)](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml)\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=14.2.0"},"gitHead":"eab9179a25f93e93d34d4445896a7df8f9f5e84f","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc -p tsconfig.build.json","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.13","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --fix"]},"_nodeVersion":"14.17.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.8.0","@balena/jellyfish-logger":"^3.0.34"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^27.0.5","sinon":"^11.1.1","deplint":"^1.1.3","ts-jest":"^27.0.3","typedoc":"^0.21.2","depcheck":"^1.4.2","typescript":"^4.3.4","@types/jest":"^26.0.23","lint-staged":"^11.0.0","@balena/lint":"^6.1.1","@types/sinon":"^10.0.2","@types/semver":"^7.3.6","simple-git-hooks":"^2.5.1","@balena/jellycheck":"^0.1.1","@types/json-schema":"~6.0.1","@balena/jellyfish-config":"^1.4.0"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.177-renovate-balena-jellyfish-types-0-x-eab9179a25f93e93d34d4445896a7df8f9f5e84f_1625209681516_0.8714248301724823","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.177":{"name":"@balena/jellyfish-plugin-base","version":"2.1.177","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.1.177","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"8ee646db71f7e3864ed0d026afb5f95196946201","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.177.tgz","fileCount":18,"integrity":"sha512-CoVkXm7vUvtpb5/g6UcLugG6OxwFcwDbQGK/Go6TWr0P/0yf6Fr7HPvvIhUF30KOL0KPs0682aiaVfItYYdP3Q==","signatures":[{"sig":"MEUCIQDITjNnrOVE0SJ2KKvZw+OsMbKTFmSivLCx1MjPAgrVggIgdmAEFio4Yd3362Br4y+PPgCrF7yTKCvIXT9YqOGI9ec=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":57621,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJg3rzACRA9TVsSAnZWagAAydUP/27bu1tsecsVtiPxcD2p\nmCsyA8hB//3yBTkou03HlMqGIiRXCDUc04mpGxAVGKv+io+lpUvMzKpob/eS\nXCyHdee/x7pT9OzIgeTNokjt9fbN1MDdIbYOI2LH/M1LULn9Pojx9ERiywaH\nXm9a4sXz2TObS5sXQS2SHGLawrWorFERleTb28Rbq90Qo4G/nO61jvM//Gf/\nDxuV9e3Hy8sEz2rpQBkJK1lpvFo5tvOiK03U/gZM+AfokZVr9yCdZ8LBP3u2\ny/MA0n2GwdvuBbVfo8yd8Nro7smJJK5/ZTlnP4ZhoqwtHGO0+/4OKPXX8Jbe\nVafyE1Gic6gyfvCX4GfOEU5sfXxo7Hkuc8b6yp2B2y7b7WMBfgfWjpedsy16\n8163hW0RgBmMf3E7ltFt48OYjayXKduZxZ4V2O8EuFufqkOr1AeuNjEV3mWC\nG70oK9yRWEauzTLHTqH9IT6H3ig6ipNhi+dJUs79sMXWIswyJTjIdDGthL8/\npDSwZz5FtzmBo0Za3wDWw5tin4MiLRZPThoXEPALxFpYlT1ITV6TnOpJJWDE\nl6gPRrtW0DrMREEbz/Jbz2YkNE3hPicKh9ZQsaD92S91WSbrOoywVmjryRpg\nSb7Rm0NpuuwzpFiEV+glKBXFexgkNTAde5++e7nESvimjFMkRkglU6mBu68X\nZVNQ\r\n=YpCp\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=14.2.0"},"gitHead":"2d86745496119ec6665702dc6ca4743a0ba31945","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc -p tsconfig.build.json","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.13","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --fix"]},"_nodeVersion":"14.17.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.8.0","@balena/jellyfish-logger":"^3.0.34"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^27.0.5","sinon":"^11.1.1","deplint":"^1.1.3","ts-jest":"^27.0.3","typedoc":"^0.21.2","depcheck":"^1.4.2","typescript":"^4.3.4","@types/jest":"^26.0.23","lint-staged":"^11.0.0","@balena/lint":"^6.1.1","@types/sinon":"^10.0.2","@types/semver":"^7.3.6","simple-git-hooks":"^2.5.1","@balena/jellycheck":"^0.1.1","@types/json-schema":"~6.0.1","@balena/jellyfish-config":"^1.4.0"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.177_1625210048060_0.8502238056884013","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.178-renovate-internal-patch-17391164314f2603331c402efe4ab656a08f4d48":{"name":"@balena/jellyfish-plugin-base","version":"2.1.178-renovate-internal-patch-17391164314f2603331c402efe4ab656a08f4d48","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.1.178-renovate-internal-patch-17391164314f2603331c402efe4ab656a08f4d48","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"4b5c55fa2e6156e88e9cd6817e449c7168f81df5","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.178-renovate-internal-patch-17391164314f2603331c402efe4ab656a08f4d48.tgz","fileCount":18,"integrity":"sha512-rRazBXIBbgvwkgaT7Wcu7Ud0tALRndD0atOVSi7XXIvRUzB/AzqmTXRpxAC/C0GgIFfZXP8X6L3MBwtpvm/uMQ==","signatures":[{"sig":"MEYCIQCW+4MH9YKS6VQiAbi+WYDuzv36XbQFW9qgqR3k+A6DCgIhAMyTA5qXcMHSZNYBvrERzwlD2r7Z6QioJNw1xsn/bAg9","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":57790,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJg3r3CCRA9TVsSAnZWagAAqkgP/3n65u3gYm3BOiv2/Ad3\nXO8WXuqreo5EKKxctB1QGUoUy0/VXMxxXA76cPEB5kT43qFjfKoWg7MVesK8\nuq+Tway5WHJVTzE3ysBUE9MTx7Bhl1pwYlsoB1n/dgVgo809MH8xRo1fERwM\nZNfK4+2wfkZoY6XkU37aWjdnPcWjW0KaQIDLCp7beI5PFOXAAxukjqy7Wk8f\njgR2z84CoIfqL8guKCO9UOaR44mujC3Cursi8K9pRI3oAzoDeWVtIrDr6t9w\n5PjWOFAy/S7uSMUTpqUmXMnt6/t19lZlSwbw4WcIaMv1wwQl5hZmWp4Qtp3P\n0hl91KbouABWxYx8VOL2SyXUxR5b9Q6a0EfkjyL6B0Vxm3PTKMqs5G5rTDpI\nJ5UFPIRfzJH6MnKyHTSC8lHLsGQ/rbTbenAVIFINckH80GTzs4VvwykAjVPB\nX5c+PPWGB2kU69f38FYtea/tnTRF1i6P6JS6NNou58vD/26PJAfUMZrDCixf\n0wZeObTQRsp4zjX61+7z4tNHueihuaopwoAUx/n/0eU1EVmVKwqAYcTIuc8k\nhkHnsrxoqSbCzxKoKq//G9RhysEPRvnceFfzzqMyUvpwlmFBQd8fqODXfZ3g\n+nl55DAKNIt0dqP+9kA1Cn6Owg9r0W0ClHsIdlgGAGTyMIjxmPfdnPcnOWE/\nKZoV\r\n=JCnM\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\n[![Publish Documentation](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml/badge.svg)](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml)\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=14.2.0"},"gitHead":"17391164314f2603331c402efe4ab656a08f4d48","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc -p tsconfig.build.json","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.13","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --fix"]},"_nodeVersion":"14.17.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.8.0","@balena/jellyfish-logger":"^3.0.35"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^27.0.5","sinon":"^11.1.1","deplint":"^1.1.3","ts-jest":"^27.0.3","typedoc":"^0.21.2","depcheck":"^1.4.2","typescript":"^4.3.4","@types/jest":"^26.0.23","lint-staged":"^11.0.0","@balena/lint":"^6.1.1","@types/sinon":"^10.0.2","@types/semver":"^7.3.6","simple-git-hooks":"^2.5.1","@balena/jellycheck":"^0.1.1","@types/json-schema":"~6.0.1","@balena/jellyfish-config":"^1.4.0"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.178-renovate-internal-patch-17391164314f2603331c402efe4ab656a08f4d48_1625210305593_0.340824471281139","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.178":{"name":"@balena/jellyfish-plugin-base","version":"2.1.178","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.1.178","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"a41f66af240b07127ef45638672b9a7972249fd7","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.178.tgz","fileCount":18,"integrity":"sha512-W8wjV2h0Xnc+BrDd6SDRSzMX0AJe1OFdW7iSy3lsHIzMXjTrHgQOAh2cCRtEkOmD1euWrfsNsavOi4R8X8Cn5g==","signatures":[{"sig":"MEQCIDnfmGVWiWzL6fhPLwHlWlK1xVPr67pr0cxEz0yOnIj6AiAmwE4BrxneNF4C2GllMSGsAir578+ZV8gbh1pyZVmurA==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":57725,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJg3r9YCRA9TVsSAnZWagAAz3AQAI9oWV80O1HKz+LbL+e7\nQGde0GKGixE7MhUDDOgvlEYFrStZR3erranOD5JK0euIXFQkt8iquvFV2UV2\niD3Oc49uti84km9+kVguu6osIHQcdurOXJWMT6kkgvjg3AEhRxbJXSx3Guin\nYhttIwkFRTO4f1XqniL3Skbq8qS9o5NgfOVHRKT6pF4LgBkbEf7Y4ML1G2RJ\nbkeJYGPq3JB/lCPjs9ON554Nv84eQefm0LR5CMF0Vk74zCy9vZqPo/B05zK+\nudNFRRe1ZhLnvV9YEDYP+1+DP+rgUdfIpoJ2TjQPbjqBpORGmprWawHtAVnq\nCE9Z62pR4R7teKJ9h33hUbLmovimLWGE/k9vsU0BaPsbG9zP1zGM0MjTMm1h\np7bfrMXpiUtWDs7zbcRFkH3PwZMEf10hWOyjZ7d8WzfAVXUXHWmCmY4guzt1\nlwzv9Wz1P+MLSoVbCFCw/LV29cU10xjzUvdXckb/Jd0reu2ssXojP3yQ/xKV\nPdgRujYsEBsSXRzCBKYMOquJeKMB8ZlnwPN23R9tRTMN53xWHA6kE2oR3kPU\nM3uBYkhTtXOwboYs5yNQe1cyv6x0aE/YqUcjDGq4QSryryno8fDDb4mqyFSO\nmZWw0Xff0Gofw1jBpBzQSvina9BwwBCTGRcbWf8uvn5slBaep5f+jSYzTKTI\nwbCk\r\n=DkW6\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=14.2.0"},"gitHead":"689e52fe6ee2a4e635fbca8ac578406f5213a8b2","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc -p tsconfig.build.json","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.13","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --fix"]},"_nodeVersion":"14.17.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.8.0","@balena/jellyfish-logger":"^3.0.35"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^27.0.5","sinon":"^11.1.1","deplint":"^1.1.3","ts-jest":"^27.0.3","typedoc":"^0.21.2","depcheck":"^1.4.2","typescript":"^4.3.4","@types/jest":"^26.0.23","lint-staged":"^11.0.0","@balena/lint":"^6.1.1","@types/sinon":"^10.0.2","@types/semver":"^7.3.6","simple-git-hooks":"^2.5.1","@balena/jellycheck":"^0.1.1","@types/json-schema":"~6.0.1","@balena/jellyfish-config":"^1.4.0"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.178_1625210711630_0.9624420603314563","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.179-renovate-internal-patch-2fff28b41a01ae02878fcbb17ab8e0551fc9e502":{"name":"@balena/jellyfish-plugin-base","version":"2.1.179-renovate-internal-patch-2fff28b41a01ae02878fcbb17ab8e0551fc9e502","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.1.179-renovate-internal-patch-2fff28b41a01ae02878fcbb17ab8e0551fc9e502","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"09a481eb5cd771041ed776c21466ef8b67228bff","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.179-renovate-internal-patch-2fff28b41a01ae02878fcbb17ab8e0551fc9e502.tgz","fileCount":18,"integrity":"sha512-9qC0AyzFoJWTClLlZZJ5RQbJm9XFyXVRMbS3lmN3GU9+HRZ4jUaAbPrLroBjps/xQbzVRFhYHj3OhduPEKyxRA==","signatures":[{"sig":"MEUCIEg3z5PfRcNlDC96uVAWWlBB+z6JqKWyHa6kvAWJkWVIAiEApoVchwgx6bDQNOq2KRdDZ3IeN+fgiVlyJZmj1WIvP8k=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":57892,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJg3sCzCRA9TVsSAnZWagAAg7oP/2mQP71hoSgwlCPusnTi\nBSAXeFZ0d/Qf8aT2MnmH8RaFmonDYJ5SXWGS/zGOnUb6Z8gzQzHd0q68nWaf\nW0bisgN5QbAODX0dKGbToEkNMgRJBfhnFAHJ71WNrRrLUredj9+3Vd2giCb/\niIdJS6p93ksym/+lgM5oWNYECxpCN6zxUMiPDIxNdhBBO0ZmMAapGTeF01mC\nWOC/b+q1cLXkEKlwlmfRhHSYizyGZciqs8pBfBdFG6bflXLQMRnOo0XGYe0t\nrz3EKC1JyUzDJpi7r5tRCBuYtD2dGmViIZ8L1dzvPEETVVfW9Io2roORCRPV\nnAqnBYSgFpORi3hQ4su/XJ+NfmRfXjPX43P36wkA3a/8GUvgvjXF92Puq75H\nwNDHdM/f1C+cf3+19PVTDzujUMDCQOrxHX3ygYOQQZX5ED6ir919hsN/ZK6m\nyWzWHIBa/NaKw0GnegoLaaJ4NdSKkcQWh4g8NvgtjrHGZXfE3FarG6uUsd5M\n4sipaeU+baw1Vxe2BYZp3BQyqm5NuGqPGRc12cgK3LDvshyXk4D1Lp+hb4o5\nVJpkocnnnn+6VR8QAKCmwGCcn6NFNUPyJTDgQLPLE0W/wkEUeTBVexLXRCIG\nLcRE0knW/0JlHNOI2k/Zh4uCbmkOZa87JfJslco03DUO72u63GvhgRQX581K\nc1Lm\r\n=dWje\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\n[![Publish Documentation](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml/badge.svg)](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml)\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=14.2.0"},"gitHead":"2fff28b41a01ae02878fcbb17ab8e0551fc9e502","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc -p tsconfig.build.json","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.13","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --fix"]},"_nodeVersion":"14.17.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.8.1","@balena/jellyfish-logger":"^3.0.35"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^27.0.5","sinon":"^11.1.1","deplint":"^1.1.3","ts-jest":"^27.0.3","typedoc":"^0.21.2","depcheck":"^1.4.2","typescript":"^4.3.4","@types/jest":"^26.0.23","lint-staged":"^11.0.0","@balena/lint":"^6.1.1","@types/sinon":"^10.0.2","@types/semver":"^7.3.6","simple-git-hooks":"^2.5.1","@balena/jellycheck":"^0.1.1","@types/json-schema":"~6.0.1","@balena/jellyfish-config":"^1.4.0"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.179-renovate-internal-patch-2fff28b41a01ae02878fcbb17ab8e0551fc9e502_1625211058963_0.7651979287390327","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.179":{"name":"@balena/jellyfish-plugin-base","version":"2.1.179","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.1.179","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"acb97a4973074810fac468008872a598c5e1bf19","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.179.tgz","fileCount":18,"integrity":"sha512-1aSrI84m7CzA84GjLfzNhW8TZqvnKCRv+RPOmW26kuKRpQpp3BWZG0xZG/4QErGgoLYGuv5tgjXngr9i+xDmxg==","signatures":[{"sig":"MEUCIQCIZTz8Z6c7z4ehnRNklrNAbunEgz0IYUvKHaprAUo2wQIgR3gzxMzSd5jubkFd12JnIS58oGQLCiPek6PORH7YHkU=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":57827,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJg3sH2CRA9TVsSAnZWagAABGoQAJ8x8/mRXb9QqyWwePal\nz2eVKcJ4Mytod4tU01fskcrue/kEmBglPp4wE1iI155iTvqkPOGBPN1go2/J\nWDnfprieWg/e2J1nofqwLmVyhrWxihApNWCjALng340m3EdEavGW/16Ag4sC\n4+tB2GEldWHclWxOCylV7S70dx404YEie5XRM+XEu5NFu54+7nnPoxHtAgpj\nKHEaivD6bVtT5sDLq0SsbB9wg4TRVChjFMuw00RDAAN0eMORnYUpfvseLW0W\nrqLq9VGtllIkYoSimzThyKTnd0jBJ9AJM3XseaClNaBdrM2N03L2uYdgOjUe\nczS8M0Lj3rlWYYszTxCZsy8B05ni54f6G6lVL/rqmnV4iSoSjPljES5DeIKY\n6TtV2vb3HMzvsTfJ2eWxQYFflYQbACEcPwie3+vSmpYPsNvBNfga77WVrZDO\n1MryafnX0Jg331lyncoLO6oqX/XBhzOurKcQTbpIe+haTkT45dNc/QCJLkK6\nYMHcekIJkxmBV1kSkeSWCDzVei4EKw61vqnkpkm5RtUwuXdFdPkgtkn9Djm1\naeGGE7DcOTvQAX9uPm6gChQht8tUNlcjQUel+wuN3cXZK160GG8NXVbVOdh5\nd1M0+nWYvvjxl84xuSdTCC+TgyQb8FolROd3BOfa10j68byM5CP7d/tKWs+A\nwK3v\r\n=R7m9\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=14.2.0"},"gitHead":"173427d944e0a0e6ae168bf0007952c6f9a298cb","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc -p tsconfig.build.json","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.13","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --fix"]},"_nodeVersion":"14.17.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.8.1","@balena/jellyfish-logger":"^3.0.35"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^27.0.5","sinon":"^11.1.1","deplint":"^1.1.3","ts-jest":"^27.0.3","typedoc":"^0.21.2","depcheck":"^1.4.2","typescript":"^4.3.4","@types/jest":"^26.0.23","lint-staged":"^11.0.0","@balena/lint":"^6.1.1","@types/sinon":"^10.0.2","@types/semver":"^7.3.6","simple-git-hooks":"^2.5.1","@balena/jellycheck":"^0.1.1","@types/json-schema":"~6.0.1","@balena/jellyfish-config":"^1.4.0"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.179_1625211382443_0.07697411526159637","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.180-renovate-internal-patch-45524ec0bdc539a6d07ea1606aa705cd5f737e0a":{"name":"@balena/jellyfish-plugin-base","version":"2.1.180-renovate-internal-patch-45524ec0bdc539a6d07ea1606aa705cd5f737e0a","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.1.180-renovate-internal-patch-45524ec0bdc539a6d07ea1606aa705cd5f737e0a","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"3490d74733c5eb430964be5f63e37aa8f9797ff1","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.180-renovate-internal-patch-45524ec0bdc539a6d07ea1606aa705cd5f737e0a.tgz","fileCount":18,"integrity":"sha512-SvSlZw0bGwvYM5RiuLSPtS5hj9uqzvt/08MlQtLaEV8zffUyq9dzzZN+F9uqYUjurueYvbmTqAxJ7rDkHCrCBw==","signatures":[{"sig":"MEYCIQDqSD9vkk4nI+PjqGuFHa1ZGyCC/OkRTWJPrJRebBEPkwIhAP6bVWY3+xVsYiOh6HgQtsHRH7US/WOoi/+usUP5khml","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":57996,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJg3tfcCRA9TVsSAnZWagAA4kAP/1Zu+mrIEp9IwUgJJH2G\nf66fzSPkQJ4XRqr01mz4P10HQFaHAzfRFgqho3UmdDy3WVXIARRozyF/rwXo\npaVsi0CAQYA5Pgom09Kr+9xOgjb3dizU/jD34I6szpmlt8BuyCEnKhq21bNU\npq6I4/qe5WtS3loUQMDlzxggh0ETm18Kb4e+tOwoac1kjWN8d1cs8UNWswxQ\nVvWfQ68oQaJ5MxmaDTI47i5L35/2HF/w3O0Rf1axK42BOWe03cWsoZgWP0YI\nm7+qu7UkQvztfnEvRBls1odFSQ8NhPqADbgdVyPb5xJJwsQOSdHb+O9y0W3C\nevU1zCbYaabw2AckwCD8ahZQDQWLISMST2rSVkY9+BjgzaP55qMirY8fF9nP\n74wn3MX6tOY0jv3GE2kGW1O9LCamZLRensFylKlQpybeSd3FYZwQ92Tel9mq\nSgf4sX2DEButc0keAJvlTPTeySJgp9p0MMIVgCnI0PmgupGKAoOHk/Vq9T0k\nuv2dLqvfd2SmJgNsplOjdRXTg/TLpsFvFNe/CwgP+pHdEZhEGjIBTFONYsgv\nLrkeK2NvYKUlmPJ05QRrTLAkVE7GHSKjvrZnJn5s636/RVZ5y5Kvnp6iRjo0\nwPXfggp7TtM8DU86P1BOtDtY6gePttuR9KMj+Gtga4dkAF2KPaFJKHQz2t0g\nhuPB\r\n=IyGA\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\n[![Publish Documentation](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml/badge.svg)](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml)\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=14.2.0"},"gitHead":"45524ec0bdc539a6d07ea1606aa705cd5f737e0a","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc -p tsconfig.build.json","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.13","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --fix"]},"_nodeVersion":"14.17.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.8.1","@balena/jellyfish-logger":"^3.0.36"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^27.0.5","sinon":"^11.1.1","deplint":"^1.1.3","ts-jest":"^27.0.3","typedoc":"^0.21.2","depcheck":"^1.4.2","typescript":"^4.3.4","@types/jest":"^26.0.23","lint-staged":"^11.0.0","@balena/lint":"^6.1.1","@types/sinon":"^10.0.2","@types/semver":"^7.3.6","simple-git-hooks":"^2.5.1","@balena/jellycheck":"^0.1.1","@types/json-schema":"~6.0.1","@balena/jellyfish-config":"^1.4.0"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.180-renovate-internal-patch-45524ec0bdc539a6d07ea1606aa705cd5f737e0a_1625216987915_0.9259612018504462","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.180":{"name":"@balena/jellyfish-plugin-base","version":"2.1.180","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.1.180","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"9dfd24589c1ed38d3756981e61b3851f92362129","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.180.tgz","fileCount":18,"integrity":"sha512-YgqFLw2CzvQGpZt0ttWbR3la7JTl9Gmmuu+fXoymL5Or3xKOW1zB6ea4it8gTeQvEHxXiD9CgnJN6AZRy35cIA==","signatures":[{"sig":"MEYCIQCmiHWqclf8RqzwUk5wOTqVCDACpdFf3XVrMV3SNwRQqAIhAIccrB0wIxnFto3J4NPtetLM6VrSXhoBY9PaWagZRZEA","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":57931,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJg3timCRA9TVsSAnZWagAARxgP/RUc3FNouKwkum3hfJbe\np2UyWw6qBN1ozydRPPGH44/IMZ/er22cU9bQimbVVGX0/rmB1rVn/WkBcRMv\nMwJYAJ/GEp29URVvkmKxV48D2X7K98SeGbEENdXyMAteRvTDeAlAJLvYo4Lt\nN/ROrj0zrrjLeS4in8FjzjzrJsvUImCiUneVNt4d5fydwT/h0t5cmgoiDs2a\n0HwT+bBeppAVKNy8O5VL9RN8NYc1jd/Dna0q230VZZgWfgpIR9XMMOn5OHNo\nRdGqjm0iW4EOSlrfnsbK0cxQ3nnWIRvpKiCvQepqI7zeJic9PGlIgHfFalEe\nOInmD9XP30m1IJrhODzTuOnW34y0RyFGtTmIptRGIKUdpCsdfrFxgCdth8Ga\n+En8U56OXZtMp20kaLXO9ooXhqw5SSHDPQsiqfZ5SUqXefg8R6jym083eQjJ\n53mXl+QQcyYPc/1DfbejBMGJphUml5zKuZMmyvzbsJaM7VH45sk2LbqPCo5D\nxwxt2wgRJtnrxgObBLnjNOAnnL91PQIc1egRErXzf5vnFzevvvhXn52q78E/\nO8Yy89NT99sQoknkyOG1asssJOyFs3BNYead83fjh8K/XFFyAjU/r3437z6H\nk9bAeHpmh7cvHOYv1YKd5GdLNz6dajmlc9ZL7mKRTdLCSFkMa8O1cC5VVa8X\n4n75\r\n=HbZa\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=14.2.0"},"gitHead":"1003da5f50cbc4430a5a7dc1fbc7923a03fa3618","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc -p tsconfig.build.json","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.13","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --fix"]},"_nodeVersion":"14.17.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.8.1","@balena/jellyfish-logger":"^3.0.36"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^27.0.5","sinon":"^11.1.1","deplint":"^1.1.3","ts-jest":"^27.0.3","typedoc":"^0.21.2","depcheck":"^1.4.2","typescript":"^4.3.4","@types/jest":"^26.0.23","lint-staged":"^11.0.0","@balena/lint":"^6.1.1","@types/sinon":"^10.0.2","@types/semver":"^7.3.6","simple-git-hooks":"^2.5.1","@balena/jellycheck":"^0.1.1","@types/json-schema":"~6.0.1","@balena/jellyfish-config":"^1.4.0"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.180_1625217189963_0.14945905785998326","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.181-renovate-external-non-major-6b8fb249afb7b97c06ede22b3b561012bdeea40e":{"name":"@balena/jellyfish-plugin-base","version":"2.1.181-renovate-external-non-major-6b8fb249afb7b97c06ede22b3b561012bdeea40e","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.1.181-renovate-external-non-major-6b8fb249afb7b97c06ede22b3b561012bdeea40e","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"e29d47aba593af810a1b263ba07cdfd4801722b1","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.181-renovate-external-non-major-6b8fb249afb7b97c06ede22b3b561012bdeea40e.tgz","fileCount":18,"integrity":"sha512-Nad9mS2RBuSGS4OizY4JaLzbAkim1BcdOOnmhPbqGANfUUGk2YTDOnWWNbGrgygQzDVZpRfDGtEFTmTHJfvRIw==","signatures":[{"sig":"MEUCIQD5Qs29MJY9cNm4sIxLpGHrEx/0gf/+nBAwMWse5S3QFQIgZ1ji1XI/1j7SVKRvpACAEgilTr78uAMR6h1kHJ6n2C4=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":58076,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJg364XCRA9TVsSAnZWagAA3pYP/2/brtE6SK9jejb+0zFU\nFVKRw14CfWMUaeshrCUy8jfko6Dz2RaiNQTGMX/5gQf0PvKvQMd1Wc2iMWT8\nQPAIrd2lRm5JNUoQW/4WF/5ZUeunDYmGi0El1JzOYsredms193xzeDEeYxXD\nymkWuXjXoVTWGEWwP6dRiKjFIYjj0nPBg4vuJ2UYO8fl1+JgUd98h3BEr2it\nyo+up3X3wNLA7f/2DsRkb7sVleCZaW3jE9ImzWY5pj5il8uYG317LMv/oI+o\nVLofjpftfyiJh+aHNb19xCNI9LoG4zdSAJ9cMMb9xoSydh8IHPR8lv2roVqW\n3wpP70A+Z10LFImWdP/RZvyuSw1hcXe3GJJk5LOTBR8sF+DJPUJ1utA4V7Vs\n5xqCHFH+iKpu2gbCleyGaGbXBh+3LEnKInlQk8YJkE1dJIIJ6xzmZiyf9b0t\nhgs3zKB2nIZ2J1N5aFkjI08W6tJQxfi1xVP8o7QcJzd3l3I4jcRBCmlYotr/\n2RKllmK9phBivWJuO9M4mcZhVDr5k6vcoZcH3rf6u+WTPGk+f8BHYolUJJC+\nLwPRhSSJaUTqTfk3i4EZQcpKfDNZtUBx4nDgwkVoM5A10T+6VmgquWYi1odr\ngqxlg+DFjZdaLbolQl6jvdBSs9lD58bvD17leA60d/CgtnV6iexJ0JkwooHY\n0BUt\r\n=pIKc\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\n[![Publish Documentation](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml/badge.svg)](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml)\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=14.2.0"},"gitHead":"6b8fb249afb7b97c06ede22b3b561012bdeea40e","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc -p tsconfig.build.json","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.13","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --fix"]},"_nodeVersion":"14.17.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.8.1","@balena/jellyfish-logger":"^3.0.36"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^27.0.6","sinon":"^11.1.1","deplint":"^1.1.3","ts-jest":"^27.0.3","typedoc":"^0.21.2","depcheck":"^1.4.2","typescript":"^4.3.5","@types/jest":"^26.0.23","lint-staged":"^11.0.0","@balena/lint":"^6.1.1","@types/sinon":"^10.0.2","@types/semver":"^7.3.6","simple-git-hooks":"^2.5.1","@balena/jellycheck":"^0.1.1","@types/json-schema":"~6.0.1","@balena/jellyfish-config":"^1.4.0"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.181-renovate-external-non-major-6b8fb249afb7b97c06ede22b3b561012bdeea40e_1625271830644_0.10707315111027982","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.181":{"name":"@balena/jellyfish-plugin-base","version":"2.1.181","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.1.181","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"89f31e46aafa386a6c6e151b053149a8d93097c2","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.181.tgz","fileCount":18,"integrity":"sha512-98iJcV2rIGHsFWT3HZvsvTqTI3g25U11T6f//+o2gzX9v+lR2K8Kd4rxLqozWVYd6mrI07yOONo5oJChfIvIWQ==","signatures":[{"sig":"MEUCIEbAwf6n0PJw0VI1H5zXQH1P8dOVqta0VtlCQYKR+2l6AiEAoJL8HFsGUZ17fnzJtmRJkhaZOI6OkzZK+yqcO+5xncM=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":58007,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJg369OCRA9TVsSAnZWagAAbJEQAKMlAuaXlmvYNn7a+0PZ\nzT0VM83vh6aw1XbtRyRABCs9X6ttIpMUqACpwPjrjBXhXKdmWyiwx9boubmF\nvylIQy8T1T4l+AuYgQWZORRR8gXy4qYQnPEhfJPcyy++UxKxdM76tEFUQT49\nRrjD56qEAOVKGVJfGS/SqLPrHW/jwEYngnyFOwV/f59UJlCRBZMcsSJnjTGz\nFTmhfJ33p5HHxj1Fpr0fbAM8ySeswKWo05rf6xD+u/t47vuyvHQr6RxtU4yM\nHOcDOw/Kbb1k48fiptYlY7PnH1FzFPQ20+RUaSr7vcaqpdqEYBgsIIzPAo0+\naUkyzRXIxrccvqdKYp/BYovhnFfGSSgHLVvjHJeqbSUqogKA0aoFoO80BZhJ\nAsUWU3xwgGH9iWBiFRW/MqojFbMtsFFNNpT9W0FLW/OLPVJTucZZ7T9PPbFu\nNmokF7LHuC7Sq/JkBQCX8XrIE0B665eVKYGYBXkB4ge5QEio3qfHa0WZ7pVY\n8bC2C2GS3wg84ymmOaRoI5cyaPbgZsgDFt/Eu4/or5/N1auetEGQiB7rLgVo\n5yucdZlTmC1ALRumFpj64EmsVx0yB/unz1rfJ5nBPNDhyE3F+IfIy2cCwKMM\nNPc8PmGTAN8+NodvHPfQesqJyRE9Om8ElnCYGNx2b1Ff54vX3oHeCjIea0er\nwXlI\r\n=/QfF\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=14.2.0"},"gitHead":"bbbae5ea68b599033c58601a2944d75fbb6bc122","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc -p tsconfig.build.json","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.13","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --fix"]},"_nodeVersion":"14.17.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.8.1","@balena/jellyfish-logger":"^3.0.36"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^27.0.6","sinon":"^11.1.1","deplint":"^1.1.3","ts-jest":"^27.0.3","typedoc":"^0.21.2","depcheck":"^1.4.2","typescript":"^4.3.5","@types/jest":"^26.0.23","lint-staged":"^11.0.0","@balena/lint":"^6.1.1","@types/sinon":"^10.0.2","@types/semver":"^7.3.6","simple-git-hooks":"^2.5.1","@balena/jellycheck":"^0.1.1","@types/json-schema":"~6.0.1","@balena/jellyfish-config":"^1.4.0"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.181_1625272142297_0.47619694296428894","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.182-renovate-internal-patch-4a0079744da701a0978a354a81aa5148b4adafba":{"name":"@balena/jellyfish-plugin-base","version":"2.1.182-renovate-internal-patch-4a0079744da701a0978a354a81aa5148b4adafba","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.1.182-renovate-internal-patch-4a0079744da701a0978a354a81aa5148b4adafba","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"b91a3097a3c75bd6d110beed9061413f4821f6c9","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.182-renovate-internal-patch-4a0079744da701a0978a354a81aa5148b4adafba.tgz","fileCount":18,"integrity":"sha512-/tQFDYMMSYAPQK05mh7Zi//0O5+95gOLfA+L62kWtzz9quwhBAM89phgX/mEn7uxWGhiNd34ymg869IYjRF8Kg==","signatures":[{"sig":"MEYCIQDzjeh0wwNxdOpuhfGfVbXlZv0vMoHNzrp4j8QIMIv9LQIhALbKnoNuqW29tLp5D555C4bdh+iYMCerPgzmcuTXGqIQ","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":58144,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJg37BlCRA9TVsSAnZWagAAk/oQAI525iJxgJ4zXk+ub1RK\n0mfpvqH+O5MO1Ff26KwVjwwpJandSq+cLvfYaGBYQ+qa0bYtMDOg3rBBHP4+\n46pJJZSuQlWKAqyjZFAuipJK7mmlohA8sq5J7u1WO6aLmtEeAEolaHPf96tF\npgaPAObT0YJlx/d8rPvIZI3XWslAILdXP/69UqdQZbGOOnM1eoPD7s1Wbq6g\nRYTiDm2+jYzAsCTWNEq6PlEu5YY9h4zCcAZDxAZdPl/IW4mT9GAwkqCbhuv/\n46bzsaCweZQ8KD3tweri81qZluW0cIP6KbdLJU5XJ86cC2OzDTyUPxBPzGt4\ncBgEoyJ3zj6zQQtI0yqjLDTBxDRogQG/i4SpEE3caa5Jl+Oc3vi8Ihj7g4GE\n7a2rZrw5ms2kLcIJXCLvVFerMozeSAfVoMwzNbqbqj/q2ab7NmbAcCHe1buG\ng2QUh8WnzRZyFUzmGEJ58qkDTEa5w3Ie63tEGHmWuNfYLczoRMdY8brKR4YM\nS7sdiKOAQxCL4mQ7NUoFDSqc/8n6kZJDuUDLGv4fPal4iMokFkUBW8WaHY/y\nSmJcnfgqVhJi8ulBHwwaH1FpkE9/SIFcNkBPWFAkYt1IozJoQE1rsqy7kJvX\nktlnnmxZX8xnnu5uQ75u32OCwdIhgnRW/2jEMisLOYM26fb0hTZjmHsM6X4s\nL8iu\r\n=fe+Y\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\n[![Publish Documentation](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml/badge.svg)](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml)\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=14.2.0"},"gitHead":"4a0079744da701a0978a354a81aa5148b4adafba","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc -p tsconfig.build.json","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.13","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --fix"]},"_nodeVersion":"14.17.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.8.2","@balena/jellyfish-logger":"^3.0.37"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^27.0.6","sinon":"^11.1.1","deplint":"^1.1.3","ts-jest":"^27.0.3","typedoc":"^0.21.2","depcheck":"^1.4.2","typescript":"^4.3.5","@types/jest":"^26.0.23","lint-staged":"^11.0.0","@balena/lint":"^6.1.1","@types/sinon":"^10.0.2","@types/semver":"^7.3.6","simple-git-hooks":"^2.5.1","@balena/jellycheck":"^0.1.1","@types/json-schema":"~6.0.1","@balena/jellyfish-config":"^1.4.1"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.182-renovate-internal-patch-4a0079744da701a0978a354a81aa5148b4adafba_1625272420761_0.46892801371892134","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.182":{"name":"@balena/jellyfish-plugin-base","version":"2.1.182","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.1.182","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"9d38c129539c1415d7c0b5bb0b092d8a7e154d90","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.182.tgz","fileCount":18,"integrity":"sha512-2nvEJgesuDMAfxGVfuBnYiHnm1ui2baosp/aRMpvda/zv/hgXGmz+RHahb7asJPNNRIlmhgeFD9oizcq/8ixMw==","signatures":[{"sig":"MEUCICXGSFUQeCPwBb330Tp3hXvF8rAbVdrS5sK5qj93VvHsAiEA0BQ60GvVs0GlZGYtgQvnJ+OMpKsoTXxr5svrOy2sJnI=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":58079,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJg37IPCRA9TVsSAnZWagAAgTgQAI060LqnFawDX+CfzTDK\nzZwen1in8VUGJ0DGxrxPT6f4JFtYDwFTXGlZ5v8h671muVUW8MkSi9pAHCtt\nTPS0yyOE5qnT8Yu7OVe1jQZVR+ps5lRVjQx47mfPyXnJoU1sQaSqK8jXcY5e\nxUy2gPEYOZY4qD3TtSZLCthSoBsOctn/1quWOEqGNH2gsqvCZo22b6shV6OP\nPLSy+0EHQZg0pTdVl1fhQVAlPkXWkofNe3lMNMMqsKAqDjgYHNmyuYAUeXhF\nsQJnSG2E2Vt0kYEHKbr/MxC3HkZpOOrjGU73J57lBG4zlH/Jf5gvCxerQEcx\n1r0sgb1jVGDuaiWoVyUNPmv6nu9O95g/zRKtzkE0dLtdL4q6hBCI939NK7dO\ne0y4HaP4xSMG77RxUg5XTY9qHLB23BUYI4HTwemi892SRq7uf0eNhWTjJqjo\nCPif0aGBD+PYdRmrLYzuBuIs3+nqa9jyu7kSR/tq7fV636P0EN5pjXDT2Asz\nHofvjGLFnHOIDlkfQPFUMrwXWUV6O1mHqOYRjBFGvPgaxeFtTD757BR4vmv+\nWqNrN8H2gYhcWZ8C3Bw6N/i73H6atcanSSYE1isHnAGsLD/XgWCbVCRkY8wv\nYmFA2xnBIYfLY+nv4vjKbNx6LNrU3YZyFfLzU9FQIpIcG7+0KsvdvMh1lzQC\nFsHU\r\n=Mr/P\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=14.2.0"},"gitHead":"c147b89f453ff3bc4de56cb1c31445ef64975042","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc -p tsconfig.build.json","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.13","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --fix"]},"_nodeVersion":"14.17.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.8.2","@balena/jellyfish-logger":"^3.0.37"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^27.0.6","sinon":"^11.1.1","deplint":"^1.1.3","ts-jest":"^27.0.3","typedoc":"^0.21.2","depcheck":"^1.4.2","typescript":"^4.3.5","@types/jest":"^26.0.23","lint-staged":"^11.0.0","@balena/lint":"^6.1.1","@types/sinon":"^10.0.2","@types/semver":"^7.3.6","simple-git-hooks":"^2.5.1","@balena/jellycheck":"^0.1.1","@types/json-schema":"~6.0.1","@balena/jellyfish-config":"^1.4.1"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.182_1625272846741_0.5940172182531882","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.183-renovate-internal-patch-2ac2ae82444edad873d43c582543a8797d754cff":{"name":"@balena/jellyfish-plugin-base","version":"2.1.183-renovate-internal-patch-2ac2ae82444edad873d43c582543a8797d754cff","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.1.183-renovate-internal-patch-2ac2ae82444edad873d43c582543a8797d754cff","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"f322b30a89eeb8e84a12a839b5562afe6b2d1371","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.183-renovate-internal-patch-2ac2ae82444edad873d43c582543a8797d754cff.tgz","fileCount":18,"integrity":"sha512-VrjhW2EdfxV+4CRtcZ23xzzBsEwbYaxoeAbYJVv6Xb9EuN9jDAM31pFCIohKkv3y4UhQmfoELzvMRgo6upmupg==","signatures":[{"sig":"MEQCIHqq051+FBGisvSMoig4000/7nTlAfPztcfeC3xic7wyAiBZw64e4vHF9j9WzFqq8nREIePGMxdKsPpfYgJrXQQOpw==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":58216,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJg3875CRA9TVsSAnZWagAAKmUP/RWK6ATclqP/23wl3bti\n6m/+w4ymuArNrpl7F6gcvCEhI5VAxReJgrI0FnkTtzjVQTMxIS92zzlWmisK\nSZggTYNeklxyXnX26RbpBIoSfK/lh3/QAZP7ApL9Y9Gdq3pzhCimz6bEYdgR\nVyhmp6MVbpcb/vM+XWoVjG+7yg7IDW2ogOjFxncCI6TTX4HO33OML+zRpK9z\nlh7zc1LUndWc9QCw+xysUqzGIRxBEpaApifEkajRJvZHX6hQ+ljuSh7Ey3yH\n0Gx6x65qbveNfSr0lDbltz8R4SjYVaa4McbDYqQosPBUzpa48jImy8a/dhZA\nboOSRds26vHDiTdkRPmHrFsSIt5HlSKzqalMydAKHeioLcVR4I+SvTjAR7Tx\nQBzlKZAJd109rGAo81XVywJ7owzUyBY/sS6Jjr6DGHf8YrM6EBpgBDumYMHt\nhJ6swIxv2EhNLq6fGuuiCJVytIcp6TuQKp1tuTJGKNMTx2LmuLAMQiZep/F+\n6SKEnkxBN0PWMi0F94dWtouSrjb8hT6UfmiMsAHtXoMYcVoLMDM5hrkEq+Me\nuo9Zkx97QioWrf6KG3b4sANxGcwcxsUOWAMCqnNl16sICVJhPZRthKFr2olA\nUv4Op9TwCDJ3v0S2i+FHRwlG7AF1jQnjwXvUB7m152peuEasFd7bkfwgeKz3\nOtnu\r\n=DfxR\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\n[![Publish Documentation](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml/badge.svg)](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml)\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=14.2.0"},"gitHead":"2ac2ae82444edad873d43c582543a8797d754cff","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc -p tsconfig.build.json","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.13","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --fix"]},"_nodeVersion":"14.17.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.8.3","@balena/jellyfish-logger":"^3.0.37"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^27.0.6","sinon":"^11.1.1","deplint":"^1.1.3","ts-jest":"^27.0.3","typedoc":"^0.21.2","depcheck":"^1.4.2","typescript":"^4.3.5","@types/jest":"^26.0.23","lint-staged":"^11.0.0","@balena/lint":"^6.1.1","@types/sinon":"^10.0.2","@types/semver":"^7.3.6","simple-git-hooks":"^2.5.1","@balena/jellycheck":"^0.1.1","@types/json-schema":"~6.0.1","@balena/jellyfish-config":"^1.4.2"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.183-renovate-internal-patch-2ac2ae82444edad873d43c582543a8797d754cff_1625280248988_0.7328539788579886","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.183-renovate-internal-patch-877972ac18ca6970aafecdfae3f2432b1439292c":{"name":"@balena/jellyfish-plugin-base","version":"2.1.183-renovate-internal-patch-877972ac18ca6970aafecdfae3f2432b1439292c","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.1.183-renovate-internal-patch-877972ac18ca6970aafecdfae3f2432b1439292c","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"3fc2aa9f82677df877275046f170e9cca1b245ed","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.183-renovate-internal-patch-877972ac18ca6970aafecdfae3f2432b1439292c.tgz","fileCount":18,"integrity":"sha512-gRCndB3zBXir+PaZZxdSTEjMqgRxhjMXbkCHrpfvpn2WCkj+4ljhLF0gbncxUsyF2Xd4Efe6zcDqzphx8iPOOw==","signatures":[{"sig":"MEYCIQClA4cR5lHArHbdbgOXiwBf1l1SQqw0+q55lon2KWjuFwIhANoU1R4ftfCiBYF7FSZx3gPMhUbP6MyGGVGWWOCzfSxa","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":58216,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJg39BdCRA9TVsSAnZWagAAE1kP/RHR4pc+wIEiMSbxA4kI\nH/CBKtoEH11+bbSWvZYkNAXHf8atsS/EjlPKfeDKv4radRLwzNdu5bmbVM4v\nQDTkrTOr9Bp2XvW0BSmGEbGo2uY7KkcAHIOjmePsULP84z1tzU164IeMy87f\nwXhMCZrVAeaZumTH1vxiJFUGyCSXRvyqrNOpF+0ae2kk1nOG3bH0H+jiC0vI\nBwXUjU01BW5ZeRqAKO7NRM5KHOey60FxR0klfiRc16k0N4qKRVqTzKKdTRl5\nG/0VIKBse8qJVrCQESwEkfvyUTL8OXwpFJuURGIBnK055seVw24gsKtzmGkT\nqcaxS24Q2vl/VEe7YHAu/SUEzZU4WotZ7mTb0OLDZEExmbzWgwSvM67gQEHL\npNfPFQMiBKfJ2vNp1b98mVwzxt3OjNV16xY0NoPtab68i/yUSMoHxfr7V4RE\n7VGpJPH4TPlsYiXm2zZeXT0wP/niXLwEO6rSy6R4V0DeWQY3GFuFzrLLFXrn\nraFAJesYkV4RMngm1zH18Htwyh0WouDpv2rnALLxcOoHiLqOup0YEN1eYwcs\n8wZapXldoQuSFf+xs3b/sRAt6SC5W/FQjyhm0a5y1b5yhHYkX7QSflTK69kG\nYWhJ6YzcGB6T+UzZIbJrvMK2DRTwvWmM8kwqrl7JDxhM4C1Vhk40PqttUX8f\ngq0F\r\n=vta+\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\n[![Publish Documentation](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml/badge.svg)](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml)\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=14.2.0"},"gitHead":"877972ac18ca6970aafecdfae3f2432b1439292c","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc -p tsconfig.build.json","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.13","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --fix"]},"_nodeVersion":"14.17.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.8.4","@balena/jellyfish-logger":"^3.0.40"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^27.0.6","sinon":"^11.1.1","deplint":"^1.1.3","ts-jest":"^27.0.3","typedoc":"^0.21.2","depcheck":"^1.4.2","typescript":"^4.3.5","@types/jest":"^26.0.23","lint-staged":"^11.0.0","@balena/lint":"^6.1.1","@types/sinon":"^10.0.2","@types/semver":"^7.3.6","simple-git-hooks":"^2.5.1","@balena/jellycheck":"^0.1.1","@types/json-schema":"~6.0.1","@balena/jellyfish-config":"^1.4.2"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.183-renovate-internal-patch-877972ac18ca6970aafecdfae3f2432b1439292c_1625280605227_0.10961756818128587","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.183":{"name":"@balena/jellyfish-plugin-base","version":"2.1.183","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.1.183","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"aafa5899e2020cc831c32d2988d723d3999bb08f","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.183.tgz","fileCount":18,"integrity":"sha512-irUAHByTYeteSIZylQit2+zletnvWARIEeZQUjvTsE8bU/YveeuOMHXn1Go5ESp2xYkdepcr2B2jL4ce4IEW6w==","signatures":[{"sig":"MEUCIHUR3D7Wuf1py2y9bKPiJQd5zI1SGzG+6FF2Wa8NE870AiEAr2gKofdm5awR2RrCVB/E3LQnA2B6BeW5yv2Co+3cvIE=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":58151,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJg39FaCRA9TVsSAnZWagAAvmEQAIrQYRDpfUen8Dpt4SAB\nK5RjDOMhK2wpWolJpoBgN1FvJTANuLdUwtY/P7vJI6+2Q8IiciijE5l9ZlO5\nDPc5UzEeStWZOkmUpwR3xWO+brxUNm9Jye4AcUvS/lQMwEMHMZXzUgtdMVVL\nTIG8fjGeeOr9EiEIqyzGrvfh/xpAPoSL/cDfoNFzcmRTjrEjqXvX5H8LMBHd\nHdU0wSktwVfuFok0DkyBuBvBsgnqmMR/j90dmPF0jofvEViSb0QfPMwPpSS3\nUcPvR3K5/kWUb/DQqdqjduUDCiy81rHmPOSRg1fwhNAZQkRCtBkHDi/4HAro\n24aJ505y00zq0Kbw6OPSpBUJHT1X15Siw+b5wLLXA/C1FV0M8aX3UK6pT1gL\nfdwOLSuD4i91SqWPXJtJXZj26lHonP+nlWHpuo5Rgwh/QacknmhjQnUNyTqh\nKimVF0XWHPyUT3kEb5EDoLdB4gGw/Bo9KnhvtbH2468ws6VAl06tQFoDLEHh\nTbeoyRqyrOiR1d1HAV5Jc9/oL6q/WZplGVHoGB8JiN2Lsqs2dBlkj7Atgfj8\njdoBLuQooAmImpxObSN4w9vjMQF/RQXgc0M6chIpFKVIoAVqilshj1Oi+wuo\ngtzPeQVPnVLOrdcBWrANvl6LAI4NXWm2QQSaZH4xpqjBaYVb/YdIjF3OS14y\nZecT\r\n=WVQ5\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=14.2.0"},"gitHead":"ad664d7e68f3f01ba2f90fad774e1b1c115830a3","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc -p tsconfig.build.json","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.13","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --fix"]},"_nodeVersion":"14.17.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.8.4","@balena/jellyfish-logger":"^3.0.40"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^27.0.6","sinon":"^11.1.1","deplint":"^1.1.3","ts-jest":"^27.0.3","typedoc":"^0.21.2","depcheck":"^1.4.2","typescript":"^4.3.5","@types/jest":"^26.0.23","lint-staged":"^11.0.0","@balena/lint":"^6.1.1","@types/sinon":"^10.0.2","@types/semver":"^7.3.6","simple-git-hooks":"^2.5.1","@balena/jellycheck":"^0.1.1","@types/json-schema":"~6.0.1","@balena/jellyfish-config":"^1.4.2"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.183_1625280858439_0.20852798641373593","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.184-renovate-internal-patch-249a6455dece2b37665a0d7f3f9f264b738787d7":{"name":"@balena/jellyfish-plugin-base","version":"2.1.184-renovate-internal-patch-249a6455dece2b37665a0d7f3f9f264b738787d7","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.1.184-renovate-internal-patch-249a6455dece2b37665a0d7f3f9f264b738787d7","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"c395e0d2452bdfba6e9701f1e9432ceed98821d0","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.184-renovate-internal-patch-249a6455dece2b37665a0d7f3f9f264b738787d7.tgz","fileCount":18,"integrity":"sha512-zMi+7rlEbFK3Hx0hfKHJAD/hGX2nXGTfsPZmobfY2m0RZtkBDNoTFf4QoqiYnLuZhmWY4br9lqFRE8LnHfHt4w==","signatures":[{"sig":"MEUCICVje5fdNIfB3YfexGWPhCGY6KC/LzTegPn3a9ZA3b61AiEA27RsW7KE0SsGEI2v3DBByYwVMdbx7Jja/iIWV50+kC0=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":58288,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJg4m0GCRA9TVsSAnZWagAAZJ0P/A9Kim2OGlVIQUC2Br1+\n3Md2odoXd2+hBVsOHIDYgKmQqB8wF7vCuggX/6QHIZUvLZrPvCP/vynycg6y\n+NUPQEFYG4sMBn+n3ZZBnjUCTvTZUIoe6KqvBtWE1CG4KcpVQ9eRG8y8+LHV\nxaD3Y77SXqdoOloDOSxT0FCO7ZBBSshcTYn6olhCQKnqt+nQpElw1OAh6rHI\nQINMZYRs0E2P/V39cJWU+3ciO7g8QAJbgMx03NXOMWr8XsLJYDFGQYls0wun\nY4Y/d8zLFxqLBI5Y0MYIwZMOekCQjdBcOs8v1witCEeG/mf4rqsKwq3zeopt\nW9MDBZYEOcMw6AbLwmbUAgsWDHSZZ1c+s34Nb0CorVOieoWSfLIQORi+1BT3\n4vIJrv2LV83B9ImLvKZgaobN3I/qlncS4VE91AWK2K9bA8/mbuDdsGzSLtde\n+j8qekJRnzzyniUN1osRkMiHBKad7PRrxOgBZEG/cZ8B2cBaIXe00lgVk0Xb\nFe/lRoLb4LYjr/6YBWZ+GA6USFX7RXLUgzJgCrEd4ATZbgfrbBFlGr9rSrY+\n3zBZ7AVB4AdGEHPA7/zRU/r5AX3g09It9XblgBkyKpOzfVnLpxRDvxxmskMO\nt2eYREHAmHAQG9iW2arX1lz5PPoFK71SxBolMienBODAlY1Of/NvnHOaxRjV\npdqX\r\n=hSRO\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\n[![Publish Documentation](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml/badge.svg)](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml)\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=14.2.0"},"gitHead":"249a6455dece2b37665a0d7f3f9f264b738787d7","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc -p tsconfig.build.json","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.13","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --fix"]},"_nodeVersion":"14.17.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.8.5","@balena/jellyfish-logger":"^3.0.41"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^27.0.6","sinon":"^11.1.1","deplint":"^1.1.3","ts-jest":"^27.0.3","typedoc":"^0.21.2","depcheck":"^1.4.2","typescript":"^4.3.5","@types/jest":"^26.0.23","lint-staged":"^11.0.0","@balena/lint":"^6.1.1","@types/sinon":"^10.0.2","@types/semver":"^7.3.6","simple-git-hooks":"^2.5.1","@balena/jellycheck":"^0.1.1","@types/json-schema":"~6.0.1","@balena/jellyfish-config":"^1.4.3"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.184-renovate-internal-patch-249a6455dece2b37665a0d7f3f9f264b738787d7_1625451782410_0.6415984727590396","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.184":{"name":"@balena/jellyfish-plugin-base","version":"2.1.184","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.1.184","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"a8bfadaa4d08eeba4bcd0912c6a2b519619f1660","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.184.tgz","fileCount":18,"integrity":"sha512-0tHhIM+J/c/FRZXJyPdmwGiubeSc1qXlxk7o8+GtDMjTYZQ/j0Z/oraYDYkPazk5LK7gDrdiO5hT1E2y8prtzA==","signatures":[{"sig":"MEUCIHqU+Q89D/ruxkFq9nFU7nJXuxx+bVZZ9S7NxiXpnGOfAiEAgkCrgyr1v3dGx6ziu+jczb2Xv592MxiUZMtaeGzhB+Q=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":58223,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJg4m3vCRA9TVsSAnZWagAA9osP/jgQtqBKq0uS/aTyJ8xK\nJfdtVIk6GxP7crjhO3u1lb3USgKatIvwalYcdGaGR1R+zfmejYVHQ/0Jwu1o\nkm26c0wgH4ejCaEXQIOXlkuW4Lh7ha70VtFlvJ+Kz7d6H99Rga/Jk9RmX9mN\n+wUciWc/WNpjjRv+sp8WABI/dQ/3XrcbfA+gqIJ782vKozVis8N9H2QifLMa\n64GrJcciQE4xcrV1uL/VPI3YkXjug5oq8zjycq9sCvFKj4mFKaIqwt5sfJZM\nHH/G452cpVE+KWlK48MZsQ2GQGrIXSqlK0HOW7yAqsbnJNH0wOTEEzPaHuT0\nfIk8dD6GhTJ9q6bHawafyOjpLzIWQg7h2p9Ki7aammQ6WJ61iM+z8lnGp0zU\ncFcNpbmmPfCvcG0M9rtVF8EsJw+qa4Et9GNidaKvy1Zg0mlQA172J//HAQlA\nqmfz6UHcaQqffmAmGr9Eiljk34B4rbah4T7ruDbytM4xGBJSGnrdReOV/jTt\nGrJm4ALHZa/AFv34/qpaIXWfWD8XNhXdzWJrxi7OmHxoCROqDrmhcAtRjlPo\ncetaRaI9mTKvLY9ZldcvgfU5JzmDNYTz+ueJtldGv2vWt0QOdfbmswf4mEPt\n8VwmNpY2tSI0oywMojIq4diF+ngkQ0aqieKPdFC6lVI985OlhD5hj58EID+2\nCTIa\r\n=Ubfy\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=14.2.0"},"gitHead":"8ee46d591423b4a050a2b8e451463eabad4ec309","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc -p tsconfig.build.json","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.13","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --fix"]},"_nodeVersion":"14.17.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.8.5","@balena/jellyfish-logger":"^3.0.41"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^27.0.6","sinon":"^11.1.1","deplint":"^1.1.3","ts-jest":"^27.0.3","typedoc":"^0.21.2","depcheck":"^1.4.2","typescript":"^4.3.5","@types/jest":"^26.0.23","lint-staged":"^11.0.0","@balena/lint":"^6.1.1","@types/sinon":"^10.0.2","@types/semver":"^7.3.6","simple-git-hooks":"^2.5.1","@balena/jellycheck":"^0.1.1","@types/json-schema":"~6.0.1","@balena/jellyfish-config":"^1.4.3"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.184_1625452015457_0.2861640164103698","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.185-renovate-internal-patch-bb00057665d1c45d11b2c71a38f5b60092b785aa":{"name":"@balena/jellyfish-plugin-base","version":"2.1.185-renovate-internal-patch-bb00057665d1c45d11b2c71a38f5b60092b785aa","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.1.185-renovate-internal-patch-bb00057665d1c45d11b2c71a38f5b60092b785aa","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"3eaa7003662199f31e4ebf7dcf95be8ac5d1976f","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.185-renovate-internal-patch-bb00057665d1c45d11b2c71a38f5b60092b785aa.tgz","fileCount":18,"integrity":"sha512-IPiaKeMIcuQznVY1Ai2Ad5tedy5UkSkz8Otg2yfpsO0osYQsYE6WCzCkYQp+wACeuPI3eKEIWLfyCuh+/CwQPQ==","signatures":[{"sig":"MEQCIHpam3A+KlFYiv8QDpW2uw26dI58SCgEEBbXpFdi2FIwAiAhtRXwllAA9w4rEC3v26GMgM6Q3eQHg8hfyFa3ajhg3A==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":58392,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJg4oRKCRA9TVsSAnZWagAAYZkQAI5IjcgRM95RYUrVZSWT\nMUZ01IYAXX1TrLDhUqa9OSGqtH8pJdyivB25WlC6wwmwvHlsgy1TzRzFPK7N\nwpFBJdXQCSI3kcWffu25E2sLISZ1BSWjFTBlFur/cLjoBsOu+F9OiksNJJAH\n24UqzMHZV7gkhsHIuvTzzwLju7vCri6LTTNeug4Z/jfkHXGSDGVAoOwAVoY/\nLlhkyKQ4g//uy9xh9jRwpu8erMad410G0o69ggY/iBwSZ8kvD0kki0OyWwCg\n9fjFDnyz/KqgvYB+eSD0UzQKf4TF7iOMs2FdI4fdg6u3uDTWBDO4ba4bs7nD\nXAPkl1lOrR7NTv/eeXGk7lidUfHVlhKVBgI6QOfacW5By7XVCP1kOwV5LvZ2\naLSW1Mj7TvBOybDOZdv8cT+rYG8dEMGJUaQGafjJuD8OohRuCKOnmIOxy4Go\nbSl200vUjhmkOkCB8dr5RwWkdXDpPCBiH490LlItttZ58l2y84YhmJpPMpq0\nlVl5pRwD+VhDn8Mz+R4cn6cyM1x+SxZQ1qC8nZpTK+x9R1X8hedLJrBpPpl4\njU07qN5YCFwLyUYCpMLEs6H809iwMr6AFDHv0VtqKiTwBEMIBvDYt88SDLbE\neI8AChOsDObHJHIrXDR45UY7VnUZ38/XaRzuXcxTl/534l2EwGgsrJRGl7YG\nMcfK\r\n=kuDm\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\n[![Publish Documentation](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml/badge.svg)](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml)\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=14.2.0"},"gitHead":"bb00057665d1c45d11b2c71a38f5b60092b785aa","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc -p tsconfig.build.json","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.13","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --fix"]},"_nodeVersion":"14.17.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.8.5","@balena/jellyfish-logger":"^3.0.42"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^27.0.6","sinon":"^11.1.1","deplint":"^1.1.3","ts-jest":"^27.0.3","typedoc":"^0.21.2","depcheck":"^1.4.2","typescript":"^4.3.5","@types/jest":"^26.0.23","lint-staged":"^11.0.0","@balena/lint":"^6.1.1","@types/sinon":"^10.0.2","@types/semver":"^7.3.6","simple-git-hooks":"^2.5.1","@balena/jellycheck":"^0.1.1","@types/json-schema":"~6.0.1","@balena/jellyfish-config":"^1.4.3"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.185-renovate-internal-patch-bb00057665d1c45d11b2c71a38f5b60092b785aa_1625457738156_0.04287538842558125","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.185":{"name":"@balena/jellyfish-plugin-base","version":"2.1.185","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.1.185","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"612104cb8da8a28a9d390b6acd89eb5bd8c2844e","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.185.tgz","fileCount":18,"integrity":"sha512-sdeUcWdL57BjSxspyJcI4pi8qF6JTQDHOJx4UTjNkkjqZlrxCVmusyu6Uay6b7SJZiuheU6P6hIC3bKu6WnSnA==","signatures":[{"sig":"MEQCIDDStQMPSZE/KQSqL4H+M4k73ODFmpoX0q/kLog+HHOdAiB3hVQmq/g6SlW9PxzljAosSnV+aOeZiO/3AZOR3EWM8Q==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":58327,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJg4oUYCRA9TVsSAnZWagAABvcP/2L5bVcIiQ37ZOUePD5X\nQFCPu05L/8ghEvcTKF4t7gZ9AIrdlPKkmo8k+Xig0EJbFOTsoUZzXplrrl/Q\nrypToZcQsNuJ+PkdFcff0pat3xSwY2Gs+x3dY1HKCH6hahN9b79H76aH258N\nPU9htHL5Wrd4GLzoUIMtc75BS7xhIFgonrco5kWU6iPoZ0DBu++2iNAkqjKw\n8EThcUWoGSB6RTS80/RFZkUEnIo/MNa4DDCFPteBMDJ4QoaiapfSq+IyHceo\nSPlY1rnm5H/TEhokXoarYAAoVgVkliPQHnpIU2AVw7rbv5Q42isHOSkmXFh0\n77J2GvAiTKBkZfT1qZLnxhnQi8NvmXK6Hx3ly9027D+2GgD2DMKyG+hTDFZ6\ng0EH3HSTN6/Cl/w11HP5azxgg55VXukV4FDueSwaxU254r00730RkZCcZ3No\njNYkT2MbWJ1QUNUb4sFx8i/vYtxOH6n8mGDajeJuUWWdQ53PRGthDChMFnwx\nH7tRUck26A2ojZWi0mYjNJyMU021use8hTnmbkze7K09QO+Ac6n/4Y1xNsKS\nSGe8vCyJfpHWFCKTj6FqGnq8e3o109C5NOdZUlOtRd79funeDNcAfCUkbBh7\nmhzSTqRastFmf73QQddRSvPkHOCCGQgX9ij8wpquv8VWCun+2oYeRn3WBuf0\nuSWp\r\n=xx6o\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=14.2.0"},"gitHead":"eea1431ad989aa6744d50a755d17a636de30109e","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc -p tsconfig.build.json","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"_npmVersion":"6.14.13","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --fix"]},"_nodeVersion":"14.17.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.8.5","@balena/jellyfish-logger":"^3.0.42"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^27.0.6","sinon":"^11.1.1","deplint":"^1.1.3","ts-jest":"^27.0.3","typedoc":"^0.21.2","depcheck":"^1.4.2","typescript":"^4.3.5","@types/jest":"^26.0.23","lint-staged":"^11.0.0","@balena/lint":"^6.1.1","@types/sinon":"^10.0.2","@types/semver":"^7.3.6","simple-git-hooks":"^2.5.1","@balena/jellycheck":"^0.1.1","@types/json-schema":"~6.0.1","@balena/jellyfish-config":"^1.4.3"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.185_1625457944302_0.2110337713222492","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.186-renovate-internal-patch-350272e42e354846875b44659864268dff830201":{"name":"@balena/jellyfish-plugin-base","version":"2.1.186-renovate-internal-patch-350272e42e354846875b44659864268dff830201","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.1.186-renovate-internal-patch-350272e42e354846875b44659864268dff830201","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"329c730faa5ee30db39c716506837f1c5fc7577f","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.186-renovate-internal-patch-350272e42e354846875b44659864268dff830201.tgz","fileCount":18,"integrity":"sha512-cgHEJdraQNCIzEmwMKMCWuEav0xDWi9c0y1V/8XfaoYbvkwnEUWMr+y7y6CRZssq5EXUL3xleHC9Cv3M67wxgw==","signatures":[{"sig":"MEUCIQCuXImRdbDPsMzx0g9QroEeP6tInvGt25qocTYucTHcowIgYE87sdOeFexjwbQqEZLl1Gn0SZl5y8Gx5HGTbYPswX4=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":58565,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJg5QtMCRA9TVsSAnZWagAAuWAP/A4WHZFzyCeBEliA9E8i\nmhV/cz26aNLSStUlb38wZLr+753NAenzlBfN4TL7HHYfX4lQ8bZLLqbHNr7E\n24irBCAoyy2bTTjSBZ7dxghyJljl27ZFDJnyU/gVf2KaxTjCb/tTpmIhXs/l\nDwDha8Vqy1gTwCoEL9IBw/Fmin6hFe2NLa/0FlU+ZniZ2mXuw4YfGDLXaoY0\njWAWNNJkJh3eTCvRzPp42rpy/O5HyE7kms3dJs/CHeZ4r6Z8e5WKOHyTG9q5\nmZFfCyaAv4fk8s1Gw4LhiPDnFdUdXYs/WRSSo60JExWipjRgixk1XqbYafIe\n0Td/GVKd8EiUlfURS3yi8QVIIecDAvt0MO8a9jzCZlnkqyUTpBwBDpOqw3eB\n0J9HMkJkpwOEicJJDj2wyKcF6K17JHve1/3iq2nuKxwj15AIgPI0lqxQlnvw\nsxsrg+GTTy+EgKzHe7HrHFX7doqZ7V+NVXlPxJq21TnSdJbG7y6+gL92DWdp\nVxwSeofqNMYDE2encDr6W1iJECcFZuSy4LPlNf1DO4lDk2453kWHujCfICPZ\nnRbsQgUQAm3QLvaLJzGRvR2M8ZqZUs5pvlGPOtgnw3SrU6SFRK092fAvybBi\nvvqC+C2JVzV4XIYb5VPQxVXD4Z5Y4tlCLriFxC05WzcosorseuuLh0lfAQ7Q\neika\r\n=A+5p\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\n[![Publish Documentation](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml/badge.svg)](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml)\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=14.2.0"},"gitHead":"350272e42e354846875b44659864268dff830201","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc -p tsconfig.build.json","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"versionist":{"publishedAt":"2021-07-07T01:59:41.265Z"},"_npmVersion":"6.14.13","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --fix"]},"_nodeVersion":"14.17.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.8.5","@balena/jellyfish-logger":"^3.0.43"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^27.0.6","sinon":"^11.1.1","deplint":"^1.1.3","ts-jest":"^27.0.3","typedoc":"^0.21.2","depcheck":"^1.4.2","typescript":"^4.3.5","@types/jest":"^26.0.23","lint-staged":"^11.0.0","@balena/lint":"^6.1.1","@types/sinon":"^10.0.2","@types/semver":"^7.3.6","simple-git-hooks":"^2.5.1","@balena/jellycheck":"^0.1.1","@types/json-schema":"~6.0.1","@balena/jellyfish-config":"^1.4.3"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.186-renovate-internal-patch-350272e42e354846875b44659864268dff830201_1625623371526_0.7363614354334409","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.186":{"name":"@balena/jellyfish-plugin-base","version":"2.1.186","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.1.186","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"89c7d89ce527aa118c46ec403b88bba129de9069","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.186.tgz","fileCount":18,"integrity":"sha512-Xv3gfYcPxyYgeSbVV397mcnj6PK4dnIz5wpvzjp38s1LepcujET7OnMWfIGTAPM1rPZjmHPQYO1/W7LQO2LT1A==","signatures":[{"sig":"MEUCIGgQwY/iuP0nT4XZt05hL5u7LbXU70SVLA3Y0TcrN07FAiEA+DfN9T4jd+lhKFuNg8/IqDe415d8wnYKlTQD9pNmMX0=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":58500,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJg5Q3BCRA9TVsSAnZWagAA1OUP/AicpetxjHnslH0v0kag\nznxUNG1yHMcrS5NO6hgF2GT3xZcegf444iqUxc1wQTBRx/OFHjkYMRewzFpK\nhFs1Vgh/k/AN1YTnpxf95j28BW5MBDbPYGwPiv17oM2YCQTbRO9w2BOOp/iY\nBlzw8xoCzILXnW7J4Dts0ITU4kK/htQAfDssnLNqF2HKYzj+AIvEtV+AqDA9\nRJrzys0nkPWcIDQ9lkdvgj+DgdFdl1iuCHewSmHGZYOLkHaG5xZzBqFzLaW+\nPkdaY+v/+OTHe+GEhx6n1uHUyULBl1rdbdq/U5YTWhuswyUd4gukaDfdTQeH\nIPGI+8XlmxiC4a4PBsMtq+sCUII+jJm8w1Ibl5mcbLRSWCPgYhIaoJAwSo09\n8taEvNeDm+c41nzgSxVBZ8jWltC/G1taHcU+zlmq7GVJrzKy0MCfqz5hlo/v\nYnKAaDwVgiSusiPtXNuWtsT2hNcc0uhfjgDOH6QTeowJGBOoBAvwuVM8he4f\nM/ZVqUy+8/7BQd7VqltVa+dJ41qqhdF7VLMhpNRF6sDZ+avUKKo73+M1d3ET\nN+eQlym8ydrCiLKLh8zJGWEpaMWzfJdb5FfoGjY52gPp91nRiGI3ZDsX2HTA\nl4fIG/Cr0UlRJebRG5SMnZl4cvvUyB+qAAbxrUbNmpbjp2YZ9d7AZOUovLUu\nGNNL\r\n=9A2n\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=14.2.0"},"gitHead":"7ec534752961a1a02877c1a7bf16ef8b90f6d968","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc -p tsconfig.build.json","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"versionist":{"publishedAt":"2021-07-07T02:09:03.904Z"},"_npmVersion":"6.14.13","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --fix"]},"_nodeVersion":"14.17.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.8.5","@balena/jellyfish-logger":"^3.0.43"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^27.0.6","sinon":"^11.1.1","deplint":"^1.1.3","ts-jest":"^27.0.3","typedoc":"^0.21.2","depcheck":"^1.4.2","typescript":"^4.3.5","@types/jest":"^26.0.23","lint-staged":"^11.0.0","@balena/lint":"^6.1.1","@types/sinon":"^10.0.2","@types/semver":"^7.3.6","simple-git-hooks":"^2.5.1","@balena/jellycheck":"^0.1.1","@types/json-schema":"~6.0.1","@balena/jellyfish-config":"^1.4.3"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.186_1625624000720_0.3925280355201666","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.187-renovate-internal-patch-67765aae89ec8656cc252a404892210578034103":{"name":"@balena/jellyfish-plugin-base","version":"2.1.187-renovate-internal-patch-67765aae89ec8656cc252a404892210578034103","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.1.187-renovate-internal-patch-67765aae89ec8656cc252a404892210578034103","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"e4d3b83c5ea19c8bcbff0bc24c58b0f10c2ad680","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.187-renovate-internal-patch-67765aae89ec8656cc252a404892210578034103.tgz","fileCount":18,"integrity":"sha512-cGQAy9sxvfI6TXu2gJzilxe/bX0PQMD//OM/SCxfSGHkcNUG9/LXEwzhSUN3ffSmFH2XOBznayauXfs+1d6EjA==","signatures":[{"sig":"MEUCIAJCgoBVJ1cRMhv0TXzXf8hkrPXz/bH67TlGLmHwnwNEAiEAv0mL2xLvbF/wfIHmXN2qs4KsJw13aj3hrvwA+V3E+Gw=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":58637,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJg57AoCRA9TVsSAnZWagAA54wP/i3uf7JnNviTwwAzcnzd\ntfyuyy+U+s4vQwSeH3wHxfTsK5BoiNJG8TZs8ovXbvZMQWgJITQizNmPS1Fi\n6++S3toSMWTMW31Cu62xRDfu++snkjeBggttvPrVoQi8pf907TcHs1Cru9w9\npKGfIiQlPj5Rwl84dTHTfP3XBRf7fctutX848ZXFmXgW5jtNP0eFuw4iHM3z\ndkCUrJD0RduccRN5AmkIGccHMbud1JL1ekxA/TW4NYqXR+KSZhNbBR0Lo88X\nRwEHLVU90mfALt3s5yEkw6PoYrZekKk0GbeVtFBYmfFDX8C9KgelP5CSCuUM\nF+XTv3qeX4cy5p2x2XXk+clnxlPpeTQfPI2Actc152utVQ8thjBhjqvnQQeb\nly30fZxFQbXr0M5+zlz2JN7LSAHF8iy7FmSb7oDamufzj79x7feDOgEt03I8\nl/xoBjopysiN+hm7442LKnYAukMKmNJdkbt+eH/Mev1uCfUFobMNRjuxGpRZ\nvQjfWgLL7KtyjtXx8m85U0UYJkCBn6lJY5FZO190H368CfxpYtRcgVrOaU+g\ntIz91bPsjOfhPY/7QyF/iTHdMUhNRamM7fnAqhOFJGx2hFx1Y6xft5T1v0lT\nXYGWqFvfgSCHPw84PPoWdczfkcjbZ/vwWgBD72IKbhV8Id/AKzR6GzM9xVvB\nZ1D0\r\n=BM6J\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\n[![Publish Documentation](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml/badge.svg)](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml)\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=14.2.0"},"gitHead":"67765aae89ec8656cc252a404892210578034103","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc -p tsconfig.build.json","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"versionist":{"publishedAt":"2021-07-09T02:07:25.581Z"},"_npmVersion":"6.14.13","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --fix"]},"_nodeVersion":"14.17.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.8.6","@balena/jellyfish-logger":"^3.0.44"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^27.0.6","sinon":"^11.1.1","deplint":"^1.1.3","ts-jest":"^27.0.3","typedoc":"^0.21.2","depcheck":"^1.4.2","typescript":"^4.3.5","@types/jest":"^26.0.23","lint-staged":"^11.0.0","@balena/lint":"^6.1.1","@types/sinon":"^10.0.2","@types/semver":"^7.3.6","simple-git-hooks":"^2.5.1","@balena/jellycheck":"^0.1.1","@types/json-schema":"~6.0.1","@balena/jellyfish-config":"^1.4.4"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.187-renovate-internal-patch-67765aae89ec8656cc252a404892210578034103_1625796647918_0.2979684423737776","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.187":{"name":"@balena/jellyfish-plugin-base","version":"2.1.187","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.1.187","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"72ac066ab2b303119192258fa1bf44c30cf4bea8","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.187.tgz","fileCount":18,"integrity":"sha512-+wgrHuxRMooRsQBbAo1JCkR1Iwiuw14pC9cAK1Y2RauZuEkQ1JXfa4SXdI3Y4Nd5YBwItZzHAtL5P66zIrlkmA==","signatures":[{"sig":"MEQCIDFvkIfVyqt7WnYYg6vPlZh9zYt/TCoWNlt01cNGPR9tAiB+VHDLJZ81cLWO0XumWMGEcYozqG1qlY4d6pvj+u/fUA==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":58572,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJg57EECRA9TVsSAnZWagAAmEYP/j8TweFBc7578ctMrfKA\nGusnaxs6kIDAlxLXTiiYT7EWQuMGe86xOA6HmX8dmPwX3DXdYWHee+C7qWuk\nH1sph+ct/tijs4IixWRQvqKUVOPaWbyYKh+5NjhyTxxq4XcqkZ3oieoJWyQN\nZBfFnGKlI9C2zWqzY4Zwe4rSwM0aWspQNOoA10k4rfGC6ybHcnc0twYZJlMK\nphEknLU3FG29C1RXsjcOr0wooN/7bUl/pejCNxF6/nurJgf5PdRXMNr+vC6b\ndRsuU6AwHa7d0sdmAg3sJDeIIo/lpbhsH5YXu4qqhiVVZhLJjgVsy8HgXsr+\nucDCQvqIKr+jlUXZt7KbHn7Zem4hlbu89j4am+QTzf35PoOAnLb1kYPJ1C+w\nJG0imlV1911jBZz9VNYUStDgTTiz7GB+efL69wtyfO+lpJ3/fKwi3D8Lf+CS\nEIzro6/MB/bOdCGRlkIKLyAw8wbzOK+UsJrnZmCJw/KlNXoGC4YmSauXHSEb\npZGqJh5LFK4Vhghmqx91V5tTGyU+1NWHuW7AxoCkXV1nKba/TRXLxD0vK9Zu\ncKepQBSvPDh5Bfq5Bmh6W0WiHGKbIASjk49bMXWU+QUoUiI/xy/Hf+IO9MFY\nKDL/36dhnvIbMZCre0hVVVjy82f7nl+qxyE0uHgpCSiBblXByrAkp4e/Zr8h\ncI7E\r\n=/dsX\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=14.2.0"},"gitHead":"f60c5bd2f322f4a47237813504f26eb8e0a7860a","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc -p tsconfig.build.json","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"versionist":{"publishedAt":"2021-07-09T02:12:42.024Z"},"_npmVersion":"6.14.13","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --fix"]},"_nodeVersion":"14.17.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.8.6","@balena/jellyfish-logger":"^3.0.44"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^27.0.6","sinon":"^11.1.1","deplint":"^1.1.3","ts-jest":"^27.0.3","typedoc":"^0.21.2","depcheck":"^1.4.2","typescript":"^4.3.5","@types/jest":"^26.0.23","lint-staged":"^11.0.0","@balena/lint":"^6.1.1","@types/sinon":"^10.0.2","@types/semver":"^7.3.6","simple-git-hooks":"^2.5.1","@balena/jellycheck":"^0.1.1","@types/json-schema":"~6.0.1","@balena/jellyfish-config":"^1.4.4"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.187_1625796868093_0.9670137097505733","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.188-renovate-internal-patch-2141f869d4fa196af8c419bb54a8299c958c17c9":{"name":"@balena/jellyfish-plugin-base","version":"2.1.188-renovate-internal-patch-2141f869d4fa196af8c419bb54a8299c958c17c9","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.1.188-renovate-internal-patch-2141f869d4fa196af8c419bb54a8299c958c17c9","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"67f42171fff766f27b987e63c65a31d3f1928c72","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.188-renovate-internal-patch-2141f869d4fa196af8c419bb54a8299c958c17c9.tgz","fileCount":18,"integrity":"sha512-CMAVBRkAVfnQnOpjRIdJ1X9ysp+zYjgfoqgcrR/VvEA6Zox98kTYsZaRtaCulh7GrOsVlK1F7T9Dhw3uB6kysw==","signatures":[{"sig":"MEUCIAgPQiK7IpeXKz/auii7GlCZyzqEzBCWIk71eWpSgQjnAiEAmUWZ71MDHZHF82XTZUcz35bnw50fJISVuP4KSBkse8U=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":58709,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJg6P5/CRA9TVsSAnZWagAAweUP/2mzc/AQ627a3opmxORI\nFhhYUXOUeYxp3+YRQQMXa5DCGSrqS1as/hLs6OeY1EJU7Xl2JiIbdCZ6c8iY\n/yMnMktt1P/zscJzmbsJQyJLd2n6ch0hLOPV6yqqnVkIwu5n59JP9BTtJTBM\nci/kLJZKJUOWPTthgAjRdFt+Rzc9UCPDtliZT9wY1EM5mck1RFoq8tIYRC0E\nZykcgz1oqes7uzpGMLokWtgxtZj0v81834GZ1TXj9wN5tw8mX6vPVydJgwUD\nCTzsVBk/xFS1VFGuyHhQb9JOZK1pRBC8VtoJAo4un3ZQI64QEE6B9pIDI9SI\n0Uc4fvvICjHze0FDBdmw1e/hyxxQxRbIYnyZ5Un2EP2BF8ZAsyEojokzS5ZX\nCblULhDch2uVlpp0ffi5/LbIhs2/eVUgTbdtvQlUvTq2Ew9UO7zYSFlydRrj\n2iMytzzNF/unU6jCq2YpriY7aTgPM0Ue/lvByeU2wxY3ByPaQC686UhbclNt\nRpBPU/aMvkiK/UCQ3rOM0qCOKux9TwwNv4TDfqhNxp26A+5hOoW86G9t911Z\nwkib/ekMnELpV2dDA7WDG3LhP6y5pQLQ7967VZv4i6q9rZQnsykdGp4ZnQ6y\nnyYwPtwC1F8YYaQS1Phi/bJ/Z5fuSXgZy3z/mNHLvD8mzM0LjRJh/SifsUQm\niXpN\r\n=ynxI\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\n[![Publish Documentation](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml/badge.svg)](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml)\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=14.2.0"},"gitHead":"2141f869d4fa196af8c419bb54a8299c958c17c9","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc -p tsconfig.build.json","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"versionist":{"publishedAt":"2021-07-10T01:55:01.189Z"},"_npmVersion":"6.14.13","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --fix"]},"_nodeVersion":"14.17.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.8.7","@balena/jellyfish-logger":"^3.0.45"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^27.0.6","sinon":"^11.1.1","deplint":"^1.1.3","ts-jest":"^27.0.3","typedoc":"^0.21.2","depcheck":"^1.4.2","typescript":"^4.3.5","@types/jest":"^26.0.23","lint-staged":"^11.0.0","@balena/lint":"^6.1.1","@types/sinon":"^10.0.2","@types/semver":"^7.3.6","simple-git-hooks":"^2.5.1","@balena/jellycheck":"^0.1.1","@types/json-schema":"~6.0.1","@balena/jellyfish-config":"^1.4.4"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.188-renovate-internal-patch-2141f869d4fa196af8c419bb54a8299c958c17c9_1625882238854_0.5268182075890488","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.188":{"name":"@balena/jellyfish-plugin-base","version":"2.1.188","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.1.188","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"a89494906f39a30fba5cb1ed34f730b2a03d8e68","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.188.tgz","fileCount":18,"integrity":"sha512-d8Z62yXkaMUhqM1Wfj7UOxAHhMTWFkUmbfSLbLxG/NS+ubClaqovlnsFJBgLceBd6p0CpxpgUFdKXGg5xXVLQw==","signatures":[{"sig":"MEUCIQCIvxdGu3+Dqic19JQXThBuTs8RQHm9U3bQNEiTGbuJugIgGqgY3MdC0vAyrom1c4NBAtpdZ0Zcn+2IzWLGjm/uX4o=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":58644,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJg6P9ZCRA9TVsSAnZWagAAs0wQAISUX+skAGkunXlf5i7q\nKdKYPORPBzOs8NLFSCRgJcu9jC51vgukaWnDGOoemyACFtDphb7L+0itKkYq\na92zLDNAhFmRU76b1rX+8psPSiIVb+MGV7K+vqOE9nC3q3IbZBuI+13J6cA7\nfR/ldh7imlROUDnRY5Xas3UG5yz4ZYhbWWlaBBFsOBqlj5ZI/Q4WTTlWxtQe\n31vCY5JeHECuf6mYACK0CUwCcsoK1UCYsFg6YcjJJoUV83LIH+bVswpCc4I8\nLz9TJTyTjHPkvCBzXOAZDAU15aNFty60lBusZLJfkWOfjXXh/1yu1nUMgXlh\nFhPwiC12BBfom4rhnmsKvUOpdoTR0ZPzlpe7AAHJ7K9V3SnX3+lLrKxgEJjH\niEOBmgezw9hrRrApFoR4WywEfM8+w4rSclwWB8SRus1hCK2PRCaTKH5VBq2P\ns63qCD7zkR1LDtHQ20OVo8pdIU+0wsV0UoHIZwis4999oEjCDoeiKXj2nrz0\nIZZDG0xoMWawNoVIPaWLeoc6Ji59Bc9+RMyP04P1pYKaqUdiXuZ7CItoB+5o\nLsHtcmM060BEydXXjxwARkTPAlNjohnZjTFwJwKE7HTL6bp6C6dt9utAIdvR\nElIwR0V0La+QW2b+zOAFbvfmBPH1YcVD9K5f9TESk8/Vc2CXha8r4VwBIbGY\nMCW7\r\n=dQ+v\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=14.2.0"},"gitHead":"f937551cb3a9083a1fd1ea03c8ab8b928c9de4c4","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc -p tsconfig.build.json","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"versionist":{"publishedAt":"2021-07-10T01:59:01.699Z"},"_npmVersion":"6.14.13","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --fix"]},"_nodeVersion":"14.17.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.8.7","@balena/jellyfish-logger":"^3.0.45"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^27.0.6","sinon":"^11.1.1","deplint":"^1.1.3","ts-jest":"^27.0.3","typedoc":"^0.21.2","depcheck":"^1.4.2","typescript":"^4.3.5","@types/jest":"^26.0.23","lint-staged":"^11.0.0","@balena/lint":"^6.1.1","@types/sinon":"^10.0.2","@types/semver":"^7.3.6","simple-git-hooks":"^2.5.1","@balena/jellycheck":"^0.1.1","@types/json-schema":"~6.0.1","@balena/jellyfish-config":"^1.4.4"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.188_1625882456611_0.26926482062170987","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.189-renovate-external-non-major-9728d1d51a1af890ce43837e7c6e1e6915dadf2c":{"name":"@balena/jellyfish-plugin-base","version":"2.1.189-renovate-external-non-major-9728d1d51a1af890ce43837e7c6e1e6915dadf2c","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.1.189-renovate-external-non-major-9728d1d51a1af890ce43837e7c6e1e6915dadf2c","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"e051e23fe2fe638e373d20f612bf4065093de7c9","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.189-renovate-external-non-major-9728d1d51a1af890ce43837e7c6e1e6915dadf2c.tgz","fileCount":18,"integrity":"sha512-JDlNZinODcp6LDgiwEGSh88oIwKA0eLtEmY2JGNJeC/KPrPcruY8fmyhUikhLRsqDnxf64eAwP0mu+M2XN6wog==","signatures":[{"sig":"MEQCIGJc5GfQZe6P01e9ExEhKEPMeYwW2MOeH4HpQPcOavj6AiBGgJPT9YaBYrl90eEnU0CUewbYKMgP+RLk4CYW59+0lg==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":58789,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJg6QBYCRA9TVsSAnZWagAADvoP/3aHD9loyxHJ0CoiAZdK\nv7lnA2KaXk7+s7kfZOfBUAzvKzzP1hK/r4BB9eebH94aofh1bHHmdS8PiYhm\nxkWuP33Rea6o6guf6yw6QNGrLtYmqxrAw2ZkdND1/g4W80HAhEJg9iy+neAS\nmQteyxekhK/ugD03GRc4VUyZAw4iOxIn01i3U0rBULB7eC7cEhJMyNhnrqv6\nKdJvXkhDate2M+xEPSF1yLcUloFjBZ/VcPQ3dxtnqVjIGeeu937aZl3Nw6zM\nFJWeh15TPnYjVTi/PG7q0jqIG1cj7CjQj5ZKpTJLkwI1dLXtACJKJxYmmrS4\nK1xJR1gUTgEvqlVOVuiAQpN36JjJpSjvkTFX6RHBmhYLwqISraHow8a2B4RY\nA537byWb8QbMAQwMW8RefmdcCIySsZ6mIIdUtE/FVCifLWNveovJJejgtzPY\nSY4k2A97mtDPDvvsfDVSNDEh6iyWX2CDfRDqwFZa/E7Srrpsa/Z0GTv+DHI5\n2ILVAufp0CumEy3sQi+IdWXj8jIF/dks+8CeuhQONIHkTUkGNngSxaNdQGeT\n/zfb3NvWsdPb7XVsrTJtga0wz82ZTw8gT7acCAR/dg6Mz+TE8QZIP4z7ltXb\ndHtS5C93CvnPMSAtSjJQd/Ej/HF/uGforXOHa3hTGSkrelhEhvOFsBuUkoo8\np6AM\r\n=f7P+\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\n[![Publish Documentation](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml/badge.svg)](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml)\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=14.2.0"},"gitHead":"9728d1d51a1af890ce43837e7c6e1e6915dadf2c","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc -p tsconfig.build.json","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"versionist":{"publishedAt":"2021-07-10T02:01:03.756Z"},"_npmVersion":"6.14.13","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --fix"]},"_nodeVersion":"14.17.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.8.7","@balena/jellyfish-logger":"^3.0.45"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^27.0.6","sinon":"^11.1.1","deplint":"^1.1.3","ts-jest":"^27.0.3","typedoc":"^0.21.2","depcheck":"^1.4.2","typescript":"^4.3.5","@types/jest":"^26.0.24","lint-staged":"^11.0.0","@balena/lint":"^6.1.1","@types/sinon":"^10.0.2","@types/semver":"^7.3.7","simple-git-hooks":"^2.5.1","@balena/jellycheck":"^0.1.1","@types/json-schema":"~6.0.1","@balena/jellyfish-config":"^1.4.4"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.189-renovate-external-non-major-9728d1d51a1af890ce43837e7c6e1e6915dadf2c_1625882712435_0.06138725149185098","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.189-renovate-internal-patch-11409a26fee137f7205bf7b3214eb94b56b76342":{"name":"@balena/jellyfish-plugin-base","version":"2.1.189-renovate-internal-patch-11409a26fee137f7205bf7b3214eb94b56b76342","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.1.189-renovate-internal-patch-11409a26fee137f7205bf7b3214eb94b56b76342","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"c3d71cad198ac2695672cd77c3d4ac7b69ab6ac4","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.189-renovate-internal-patch-11409a26fee137f7205bf7b3214eb94b56b76342.tgz","fileCount":18,"integrity":"sha512-u991TXy0yjhw1y892KG6xcW4gPeGblKC5C+iTOxsDgsf4lxrtSOqzNqdRl5WAJqQ+Z6RH3i79EcSOf0oTAUZEQ==","signatures":[{"sig":"MEQCIF7Ebyz+FzNefn5dZLBr9djG2PoaUyiPHmO/vWvx99sKAiA2QtMg79fr5pmmpVDp7vBY7kA8qnIgvZ1SDx8JsTdfuA==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":58813,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJg6V9dCRA9TVsSAnZWagAARuoQAJh5XHd2vwm4iZYpYMmx\nvmVypHzXh7ulT2Gdk65a46AR1T8DDzVz6h3C0VxrzqboyaF7Yorg5XIAk6Wd\nFvujYiVSuicJ5fKDQhQ5IrTwwEEmYhNtASyduRFLiCx5/3jqARkApHTVe0Ul\n8Wg3BNvND26/sgRjYbLCdABTVRqLWMptlc67zWzaNuH+Xp4CCKEO1fXz7REb\nAIaKkbYUtDUH2phwkzfKJ5sEZPEehg0CIltarcJd9ozFrhfp+hbgvsse+W0z\nlS2oYVR3Vih0aMpY+6eINfXsoO0c8mGGRBFHXxR6GMFfEJo5eny6Kw+r5LZ1\nkMP4tE+DjMMrot/a2nLC7lOrlvhCWZb/cNnR3lp0PAFqHMWqfY+JHXsm8GM9\n6Z4KQc778xWG9WkYBU9xG1/3eWn3TZ0e1XDBscYvXugNSeXjLZ6FqidGeRKC\n8RvdGbAmYhLbi/7xc8BtC9j/6k2YPSOV1ELGTHsldqaTrS9OBr2toDMSglWI\nuaoFwnlh3c67MqtuAM/IMHOnraqekNEQEedXMq2KHPXuVP1icWL0A4rDHOY+\ns2E89TxmqT8zBn9bLsjpB4H43C9Ua+JUgBKvattEvw+3qsVjUeFNQAdi45p2\nw2zkX/Dz0Sjjhp9P9zTNA5yHf/+dKFvoUDE//nGwYBATIOVGqycNzu/DY90w\nEGCN\r\n=Ddz4\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\n[![Publish Documentation](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml/badge.svg)](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml)\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=14.2.0"},"gitHead":"11409a26fee137f7205bf7b3214eb94b56b76342","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc -p tsconfig.build.json","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"versionist":{"publishedAt":"2021-07-10T08:47:41.746Z"},"_npmVersion":"6.14.13","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --fix"]},"_nodeVersion":"14.17.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.8.7","@balena/jellyfish-logger":"^3.0.46"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^27.0.6","sinon":"^11.1.1","deplint":"^1.1.3","ts-jest":"^27.0.3","typedoc":"^0.21.2","depcheck":"^1.4.2","typescript":"^4.3.5","@types/jest":"^26.0.23","lint-staged":"^11.0.0","@balena/lint":"^6.1.1","@types/sinon":"^10.0.2","@types/semver":"^7.3.6","simple-git-hooks":"^2.5.1","@balena/jellycheck":"^0.1.1","@types/json-schema":"~6.0.1","@balena/jellyfish-config":"^1.4.4"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.189-renovate-internal-patch-11409a26fee137f7205bf7b3214eb94b56b76342_1625907036613_0.9201565328009289","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.189":{"name":"@balena/jellyfish-plugin-base","version":"2.1.189","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.1.189","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"568a507d9868d464e0ef5b6194c55adee93d4191","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.189.tgz","fileCount":18,"integrity":"sha512-DLORIHrU1F6zHnj0u+NMbwfAErrbCZPQbNJaPgezKg05vs+csvC8X5M+ZtadRV0yF7jdqBpla4B+02ARsBHXuA==","signatures":[{"sig":"MEUCIG2mX9e41j7882oOxybay/KNy4QKzxttvKQBG3QH7wtuAiEAyB4iesd8+ES4F2px2RqPDrOvVJg0Rx4C3/aBzuHMw08=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":58748,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJg6WAXCRA9TVsSAnZWagAA+GoP/3rtexVoxkHpmR+VCdXD\nLZ5v1zmDp0XhIY+iXVzntHTxlDm8EXNCreellvbTQTVOXnI3vo2jB3n68pbk\nlYHtc6YKBqD9J1aS7yJpPqn+iVtVF0K+UaB0eC/qvgMT0LlUtG2ng2EPL2FV\nEhbpfbyvq5REO1jm7FHgXa6pyFCHxmcx1S9yX6gz6lb0av1TF1tuMQD4PTtO\nLM6pHZkBgs7mEdY2glUZmcIw5dDvmVkMP+kARPj5ClY/caG1IsvXgkl8hjyK\nNunMM5c4aEDty3K7ZkZQNAtYKOykQnoaiSBF7xOLdnA1vDP33QnfP5j8chWz\nju5a1a0qNQbMxHB3C302+lpY5cPExs0caXmC8zItI1WT3Uc+fo8p3M3Vyn2h\nkYpd0vLM3WhukhUD+ABGKUzWIUx6SjATZSyM1FwOh+O3E/t1fCzabIdT9lG7\nhKisS7qGhJ4PS2g/aNtJKdPeB4LVIAcvZPPBizddBM4LYiVxPCbDdypB6x5Y\nwitnEqhZ2LWkLdjCuf1eAS0t/XYDNcGod75DF85NGPW5MK28zdZGT07XoBIJ\nfCVZbyu5o6sUlajBneT/AlrLCoU9NuwR+gahHCJ0jdfVD4JRebH+UtfeGjLp\ny4D7TxzLCX7DvGNQo1T1Q92nc8yusEYA0gHYEN09FA7OJImKYqtXnbolryhE\nhgHk\r\n=cRPg\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=14.2.0"},"gitHead":"bc7903d3394408750d39f41f44170633348288dc","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc -p tsconfig.build.json","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"versionist":{"publishedAt":"2021-07-10T08:52:02.721Z"},"_npmVersion":"6.14.13","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --fix"]},"_nodeVersion":"14.17.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.8.7","@balena/jellyfish-logger":"^3.0.46"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^27.0.6","sinon":"^11.1.1","deplint":"^1.1.3","ts-jest":"^27.0.3","typedoc":"^0.21.2","depcheck":"^1.4.2","typescript":"^4.3.5","@types/jest":"^26.0.23","lint-staged":"^11.0.0","@balena/lint":"^6.1.1","@types/sinon":"^10.0.2","@types/semver":"^7.3.6","simple-git-hooks":"^2.5.1","@balena/jellycheck":"^0.1.1","@types/json-schema":"~6.0.1","@balena/jellyfish-config":"^1.4.4"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.189_1625907222791_0.08907014873272612","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.190-renovate-external-non-major-04f7922fd81b69e0fd599936c7a2a11ebe87f2ef":{"name":"@balena/jellyfish-plugin-base","version":"2.1.190-renovate-external-non-major-04f7922fd81b69e0fd599936c7a2a11ebe87f2ef","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.1.190-renovate-external-non-major-04f7922fd81b69e0fd599936c7a2a11ebe87f2ef","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"23890b804d283b25885c17c34cdf065f233c8d14","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.190-renovate-external-non-major-04f7922fd81b69e0fd599936c7a2a11ebe87f2ef.tgz","fileCount":18,"integrity":"sha512-E6i0qwHnZ7YEdxKEnJVhoAREjiMi+fK+LwS+tYCXPkBLdVIgaNjDRjvvK8oqkfX4w3WH6QFnD68XUksfngHCZQ==","signatures":[{"sig":"MEUCIAt8hCPAPjXPP+XNNusNkcKBzhfyX5OH6m3M8aGuQc8cAiEA1mTYo1wiOqQzZP5EUXQZ751ZU+78ne5iYCdNxjqrkDY=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":58893,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJg6WDoCRA9TVsSAnZWagAA1jMP/R3eLJK9X1dliEU3sHKt\n7gEg//bONsmebvPnjE11pgUhFMeqjmwqXYEPgQopuDF86wNazel1R/pUnBtf\ncSeDX79ixVM6WHwkbGjuJyGzdGr8aWyRxNBoVhEElmpGNolQMuCtaROOgXvg\nJW2281M+CAcKsyG+QkegJXSUXfI2/4ox49O65UKMShS6HYlH4o+ew8/lWmVa\nbHDwc/6eD3eFcJlu5YKhh2BiUHrwEPfer6Fz4XQ44A0VAfn19DF3EMwGVYZH\ntCor6s652dY5ifT9SMHNxzTznvg9XpEWbkMGGsjUJIPTGQUobvjGwOUfZNqq\nABdJQidv+KOqWIVqL4SxlB2nyJctVJQGqM1LZMDPSzwZiHZyjliYKlhu0UIG\nJqJ5+v5l1aGz/sm/KP4KULfQdVBfvcrFWhlpyleImwqwODVoAnxpxFr1DCps\n17exlIyS6PiQjsftTV4Dnxpi1jXBVlxXbK+Mu2kc7D8p1vi/2eip+KR1RoDb\n44R1VsxdeEg5Bm0BP4sUxtfyYP1RoFUQijMzB/oKUKcj4brjuRilswyw9Lwa\n8STPznqAV0RDvuK9Ag8c4NC8cjWqQZB+JXRyLXiCQnLN/QtN98Q1tYtQHRWv\nRXNxvUWbKJV356bvkjz9vZ9IXnTmPqSDAAzmhyp+3vfoGYWy+TvGtwttTifD\np0Zj\r\n=+Sse\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\n[![Publish Documentation](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml/badge.svg)](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml)\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=14.2.0"},"gitHead":"04f7922fd81b69e0fd599936c7a2a11ebe87f2ef","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc -p tsconfig.build.json","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"versionist":{"publishedAt":"2021-07-10T08:54:03.047Z"},"_npmVersion":"6.14.13","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --fix"]},"_nodeVersion":"14.17.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.8.7","@balena/jellyfish-logger":"^3.0.46"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^27.0.6","sinon":"^11.1.1","deplint":"^1.1.3","ts-jest":"^27.0.3","typedoc":"^0.21.2","depcheck":"^1.4.2","typescript":"^4.3.5","@types/jest":"^26.0.24","lint-staged":"^11.0.0","@balena/lint":"^6.1.1","@types/sinon":"^10.0.2","@types/semver":"^7.3.7","simple-git-hooks":"^2.5.1","@balena/jellycheck":"^0.1.1","@types/json-schema":"~6.0.1","@balena/jellyfish-config":"^1.4.4"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.190-renovate-external-non-major-04f7922fd81b69e0fd599936c7a2a11ebe87f2ef_1625907431752_0.5680004644821455","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.190":{"name":"@balena/jellyfish-plugin-base","version":"2.1.190","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.1.190","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"2a338079a7322743854799dbabc25d04e112fe6d","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.190.tgz","fileCount":18,"integrity":"sha512-54r2ekndqp3eu7QAxWdk8jprsnLPeg9hZP7wT+NmoyXHj/IzkxGygdkBV9AdlIz2vPfpmvYBAOHryKnpRVXxgg==","signatures":[{"sig":"MEUCIBcnlmI+v8/oKtcf8hjs9LIJXMzKItsk92WJPJGLvoC0AiEA8KGo8uj9VRlqXLORG6JnnaFAQ1Fuo8udIDkHW92cqDk=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":58824,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJg6WIVCRA9TVsSAnZWagAA82oP/0uCLOPil55kTL5cYA8B\n6Okj4tNbwMx+hMlpyAKmnMO25tnUQ8W3n8LbgfnMqf2o5ntcJXnw4AV7l7Uy\nkNg8DdobaAuwGRuEzWUlcy7xEGBhyjRCLUPsq70REPgn5HOLUQNQgxemqb+M\nn3dVaVvS23lfKZg+WaH6Prf15TLzpkMP3qO6A5F9cQk9RjMzVehV3M5XkDU7\nbTezAN4Mt809HHHFaXKyqZ+f4Czm7HXdklYhTnM/zP1Dh1HkXIdC+7OzYbP4\nnhTsz0y7dGrIeJuEcnZiHzRaM2b/HmzK2DsZxffY1bn52klA8vVkVye2eFDc\ncRZ4yp8o+RIb9VdqT5G/Z5ZlzhgWtZ6d+SEJumNPBekqFz6dwKxLrb0pKGFm\naH/xgYpHfPY37dmc4KMFK3FbKrLXM7YvlOKMfEl33RuocAmF2SM6HVq9IGPU\nI1uEIcohVUmqKApAU/WRHRuC+2nm6xzyEg36fRFGRRbyUtQE+wAK/SYVLSFN\nklk2hi7L/c8U8+rUreFeDekmBuNeOZ43frYuTIaXIa/CkuCuatFfQdUf6FOv\n4EU696QuNQJZ/Xuj7tCk95iOyis6zgEHc1RPq8Pg4t8J6KPqAi/F2lTGj59v\npHBoNu/vnqqhQesxZnvOlQKLKuv9t79+ibrYDtj2bROtFUn6WnuX+N4wicpk\nkgCk\r\n=4z08\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=14.2.0"},"gitHead":"d0cfecf79a6100139e829e7c1ebe2699d2897916","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc -p tsconfig.build.json","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"versionist":{"publishedAt":"2021-07-10T09:00:31.215Z"},"_npmVersion":"6.14.13","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --fix"]},"_nodeVersion":"14.17.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.8.7","@balena/jellyfish-logger":"^3.0.46"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^27.0.6","sinon":"^11.1.1","deplint":"^1.1.3","ts-jest":"^27.0.3","typedoc":"^0.21.2","depcheck":"^1.4.2","typescript":"^4.3.5","@types/jest":"^26.0.24","lint-staged":"^11.0.0","@balena/lint":"^6.1.1","@types/sinon":"^10.0.2","@types/semver":"^7.3.7","simple-git-hooks":"^2.5.1","@balena/jellycheck":"^0.1.1","@types/json-schema":"~6.0.1","@balena/jellyfish-config":"^1.4.4"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.190_1625907732984_0.2697394509343516","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.191-renovate-external-non-major-117e8fecf4a24618f4df97dc9d8a704c8f582696":{"name":"@balena/jellyfish-plugin-base","version":"2.1.191-renovate-external-non-major-117e8fecf4a24618f4df97dc9d8a704c8f582696","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.1.191-renovate-external-non-major-117e8fecf4a24618f4df97dc9d8a704c8f582696","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"340fbf596c8ebbbbe072de35ae7b6e9bd8e78b28","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.191-renovate-external-non-major-117e8fecf4a24618f4df97dc9d8a704c8f582696.tgz","fileCount":18,"integrity":"sha512-4HTzB8+xR/YFWtY89+cS9ZUyU5xcKWi4Zojsxj2FRX+hoPB+wpTJuisTrZwsrL5iolM4Amay/Hh+YKrpP14p2A==","signatures":[{"sig":"MEQCIBCuDR4xnZ0oB6wNQxkc2IYtTQOmSnV/6q3zGKU7GDBIAiAz7C/N7zbeSNgGWNoL9iwnriA43znwIqB6uRa1bjPjPg==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":58980,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJg6gCbCRA9TVsSAnZWagAAUHIP/2cP0zTFCfRP4kYLYqSc\nU5QIKafUFqjxRt15ExgYUtBXzzVkkzxyc+B7BhG9oChiT6W30+uzQO+utYTa\nfjgEry1IMl3re3inS9ghajwvHCaiydbtiVX/AC5jcQGroJzhG6ibRkFB3onf\n/ZThIwjJt9uKf7N6xJUWCJrf0AnAVX4naGEsW4PnRB/QgpkM0Llwgy5G2ETp\npGiOBsyLh+CY8lEf54bDrrZRb2hsPCk3H+PKRdEIs6Hvwybpi4hmlg8pRZ0q\nuRRiD8COofnwEVrUBoLtn5cPILqr2Gpcb5Zg6TU58xw0bJoXXGr0zA8IQOD3\nhCWWkcPLRGCs4QQxUgnyqBmAgMZOF02A10AjTlCbXXe+0Sxfdp5HsWgn4AmQ\nXUYoFPWBFk+LPtlCD2eajdRLTzrPFuXQCXNnbIhnEZpN+z/vDWI7p5IN0dFM\n3qIxMTIZBp016fq0JTWgEw80aFBt3FtA2w9jtokia0lONLUclI/UIRc8blou\nU38A8HAs8Aloh/NpLxFpwO7S0Lwb+9QdwqaL5vSJXBfRldNVz5S1aAmH0/BB\n45IlXaO9dtGW3yIRiphZS8SKHGpIHqsEB/C06M/4XRi6Q1fxz50PAqKh6BIU\nN803pR2P6TojK5a0BxWL1AuV8ZR7L4/gH3fmaaIcMSqdAhrjnNAXKU6jA4IR\nep0x\r\n=4SmF\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\n[![Publish Documentation](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml/badge.svg)](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml)\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=14.2.0"},"gitHead":"117e8fecf4a24618f4df97dc9d8a704c8f582696","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc -p tsconfig.build.json","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"versionist":{"publishedAt":"2021-07-10T20:15:41.082Z"},"_npmVersion":"6.14.13","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --fix"]},"_nodeVersion":"14.17.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.8.7","@balena/jellyfish-logger":"^3.0.46"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^27.0.6","sinon":"^11.1.1","deplint":"^1.1.3","ts-jest":"^27.0.3","typedoc":"^0.21.3","depcheck":"^1.4.2","typescript":"^4.3.5","@types/jest":"^26.0.24","lint-staged":"^11.0.0","@balena/lint":"^6.1.1","@types/sinon":"^10.0.2","@types/semver":"^7.3.7","simple-git-hooks":"^2.5.1","@balena/jellycheck":"^0.1.1","@types/json-schema":"~6.0.1","@balena/jellyfish-config":"^1.4.4"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.191-renovate-external-non-major-117e8fecf4a24618f4df97dc9d8a704c8f582696_1625948315455_0.9074575647291603","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.191":{"name":"@balena/jellyfish-plugin-base","version":"2.1.191","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.1.191","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"3269362bbca6c03ff43525a35ec85fae110e6add","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.191.tgz","fileCount":18,"integrity":"sha512-aUhEa/8shLJZd5QL64LycgduLDQii4RFLP6GYcXdjh8tT63ZLsORE24h83T75CIMMg/4A8UgUwKezvdqgxwxIg==","signatures":[{"sig":"MEUCIHaEs4TVyfZM117WZ4hAjYZM5EGMbFs7KxNv8v98ODWOAiEA0gVI1AR1mYw45VQ4HG1dnUCfnrzyf+YY2BrFSneKT/c=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":58911,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJg6gF8CRA9TVsSAnZWagAAg/AP/1LCYNrPN/fpqkOG/yvB\nSVx+GCgwkP2rWd1S63Mn0XmwkWWPk1K7sm5IgLFzkveSlqGglstPS1qdYQFM\nONQlEGGqYf5DnYLMh8L7GyWonlemeaGIe1ytK7+9rt8aHdpfCmNGkgLNRbwo\n4U/FEQdRlDt3d037DxuvgnJ0jGaovq8SVldhhRXJmhsV2pYDEm56UsTAB93T\nvfXGxEOUWGfdNx4P6UoFUlNGq5Qc+CEom+orLM8kJe2g97T9u2m4UVCxuaZt\n1NhKqS6hQmCEkS5LMTynIwGWAKxDI1aCQVVTAZ9/DSk1RYhUHFcaFjGwcxfj\n30aQs3HKArsb511HFMlN0ruC+Phg3tPCAcWW29nrqUWN5X6r1x4tkIJbIR8L\nhBDkLP9q9Y++5GU+yleQYbnh4LrAFM8VDGzgGybdylYv7dqArRmgPl8sPRDM\naUYj4y6BA5oowYzFhnFqXgRvoWxeWOHLmdjVfK6KPHIzBPBbq9YaZkvOi384\n8fL9eEsGZ9A0LjARQ4WHHGvVGTvOvNY9oXfjhEav2c601DQzjmVTTtNoLz0p\nV1CciADmosfN8Uis5MvSCopXXCYBJIcMP74IoEZ9msAiU2PJtHCyL3GxjheF\n5cW8qB8OBQmoEjhmKItz2Dl0sr2kor17e/JhGg2OAZk9ZpS2JKZ0r+fWmNSa\nP1qF\r\n=Hh31\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=14.2.0"},"gitHead":"faf151ecd9e9332e239bd8e14163dd128eaa7874","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc -p tsconfig.build.json","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"versionist":{"publishedAt":"2021-07-10T20:19:57.111Z"},"_npmVersion":"6.14.13","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --fix"]},"_nodeVersion":"14.17.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.8.7","@balena/jellyfish-logger":"^3.0.46"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^27.0.6","sinon":"^11.1.1","deplint":"^1.1.3","ts-jest":"^27.0.3","typedoc":"^0.21.3","depcheck":"^1.4.2","typescript":"^4.3.5","@types/jest":"^26.0.24","lint-staged":"^11.0.0","@balena/lint":"^6.1.1","@types/sinon":"^10.0.2","@types/semver":"^7.3.7","simple-git-hooks":"^2.5.1","@balena/jellycheck":"^0.1.1","@types/json-schema":"~6.0.1","@balena/jellyfish-config":"^1.4.4"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.191_1625948539923_0.4785160348156008","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.192-renovate-internal-patch-f36bdd6dc54cb35dbe382585c8c7b31e98fd5f33":{"name":"@balena/jellyfish-plugin-base","version":"2.1.192-renovate-internal-patch-f36bdd6dc54cb35dbe382585c8c7b31e98fd5f33","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.1.192-renovate-internal-patch-f36bdd6dc54cb35dbe382585c8c7b31e98fd5f33","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"ce4f17b907a3b319dbf9530150fcef737afcfa99","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.192-renovate-internal-patch-f36bdd6dc54cb35dbe382585c8c7b31e98fd5f33.tgz","fileCount":18,"integrity":"sha512-Wq4b293cClVAvVLzYO4BqE/VuLLnMpCsmDQ3trXh8167J99nkUYmHs4/Oj6IBpful8HJX0w+NjGnyQsMH+5hGw==","signatures":[{"sig":"MEYCIQDq5yuIfhilCXa5i2keiwh3eNRigAC36EctG4MYpFk3HgIhAOcys8WskyIf/M8CEzXzId3WbqrZ2a4prfb8ZjXAGUiX","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":59080,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJg6hmyCRA9TVsSAnZWagAAkqsP/RemD/SwQey9FOEnpFek\naXbqIOPY30rRD//MjhR3hsXgegaHKIl1k+lXn4+Z7yeOY6a+KHiBUfQE2KkA\nojmR39uxDX8UIU6sHqRrSqixdyUXJIQB9TCoijmnlCxlYtyB28D0wsfPjUxK\nPLqFdBrl9KbEarWrKzhfF/Ahg0ibErg5dw124Fb431UnvrsX+qaU0CCA5r74\n1k/A0A0ZdMW3ibslYpcLUcS5s7geYZDaDq3g+XQ48iJgyzdRBIiLC6LUh7IC\nRZq7B7y2yPlbAL8KvIndF83Cb2lrX9wUube4LZTn1eWmafigMAhs/iKlL8sW\nkOHOOdkEEgKWhRjRbpaG3vGTGL7INRVR9aW35zMq/lMTVKboDqmyUCmiM8A4\nlnI1tmpfhDd281zKglDoruD5aLGhLOqZjXXcV5Fukkd6zJMEDq6mFslcMLZS\nyeQe6QNyYDKq91PEEdyOlLt5ae1Ps9ILlVdzL2ffpzacfgEqisI2lYBVXgW+\nB/8JPKGK3zlHeEVk7wLM2S2c7QPEKoQtfc5aBsKNvHkSWkjuDZy+xGylo/X0\nH6iOOMlo6ukU6F/JuZc2LVfUreZsu8EkSL1M4Wh9M18UhwrRlX5QU3PQg8Dl\nfZR5hhcayMfmN2ful+djXw6oGD+Ku5WKxwzj+oGxDDvhYG1K+gW4hH1x1nWY\nX2tx\r\n=Wp68\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\n[![Publish Documentation](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml/badge.svg)](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml)\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=14.2.0"},"gitHead":"f36bdd6dc54cb35dbe382585c8c7b31e98fd5f33","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc -p tsconfig.build.json","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"versionist":{"publishedAt":"2021-07-10T22:01:31.290Z"},"_npmVersion":"6.14.13","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --fix"]},"_nodeVersion":"14.17.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.8.7","@balena/jellyfish-logger":"^3.0.48"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^27.0.6","sinon":"^11.1.1","deplint":"^1.1.3","ts-jest":"^27.0.3","typedoc":"^0.21.3","depcheck":"^1.4.2","typescript":"^4.3.5","@types/jest":"^26.0.24","lint-staged":"^11.0.0","@balena/lint":"^6.1.1","@types/sinon":"^10.0.2","@types/semver":"^7.3.7","simple-git-hooks":"^2.5.1","@balena/jellycheck":"^0.1.1","@types/json-schema":"~6.0.1","@balena/jellyfish-config":"^1.4.4"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.192-renovate-internal-patch-f36bdd6dc54cb35dbe382585c8c7b31e98fd5f33_1625954738390_0.33593684254847833","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.192":{"name":"@balena/jellyfish-plugin-base","version":"2.1.192","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.1.192","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"98bad23ac4efe76f8a3f0611433e5da31c67ad6f","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.192.tgz","fileCount":18,"integrity":"sha512-Vop4omekGHMyoOtbXI6ZoxJ+Z8nfRtJsYpm6Y0FVAAOyOgNawkAlRkjhO36cCtikKckVOx3CD1WxsRIPvY8i9w==","signatures":[{"sig":"MEUCIQDQsczXhKRed0vkkLkDqkjxc159J3Bi/kbqmmdfkR+kBAIgCNk12Zqh5XdE+MzWPieBVUfRNZfTlD3L9HxGv/XnC1c=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":59015,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJg6hp/CRA9TVsSAnZWagAAd4YP/1rdvjaoutXlJ+ow/ByB\nyB76iYHg6MiLcvfABRsCRat8PATTp0obtiwb4cYukffglnhaE3HQOdT52Waz\n/QfSzYKYOk1gWPRoJgygDZCnX5l9SRClVVSa21ZFuK9rdppijuZICh806/tt\ntRh5wAUN9qsAVjB2X3z3NyhJb7ya4Gvacs6ExHej5G11jtO8vJk8WTjDw19O\nA0u5POJM68hcF0ollYVL03UGQI+sjWlM215inFK5TvD7JlluxEZDuweguPJn\nS9lc6ZuQNXL2puWRrosA9HueL4Aj5R2mXM2fCezjozeMpx5BqEplrZTJNDxh\nyEnoZBgG56czxLXdwihm+96YzE2MqulMurONoxQodtx8umLuiWG9nqVFPasa\nlZEZ6BF6ucWIeRDUflutNrbWUzOx/f2dzNl0bM9ES7+V8+rR9O49A+/Ig7CY\nF3EkRUOZiq4fvGKTU/CyG5ZVFrNPWEHnTY9X+z5VzUU0fZOtU0i00zJWQhSt\ntsjPzRZP0Wm+lsInuwom6BCD6CPkuzXyVt4ghfAWhk1VONJgffb7kagcii6s\no5SaIXr42gR7imZ8bTbza//xk2gvO+Z3pskbkdyMTsTnvwpk+6lNPSyJXLpn\nlxbH7od+e7TtpKvIgRIROr5jmrVOBqGI/0eU/lta/A6v/yDE4AtFCVpI4WE5\nRBDa\r\n=qBF/\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=14.2.0"},"gitHead":"10f6192305f9392e70b521808ce8f4a27c3aca59","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc -p tsconfig.build.json","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"versionist":{"publishedAt":"2021-07-10T22:07:21.584Z"},"_npmVersion":"6.14.13","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --fix"]},"_nodeVersion":"14.17.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.8.7","@balena/jellyfish-logger":"^3.0.48"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^27.0.6","sinon":"^11.1.1","deplint":"^1.1.3","ts-jest":"^27.0.3","typedoc":"^0.21.3","depcheck":"^1.4.2","typescript":"^4.3.5","@types/jest":"^26.0.24","lint-staged":"^11.0.0","@balena/lint":"^6.1.1","@types/sinon":"^10.0.2","@types/semver":"^7.3.7","simple-git-hooks":"^2.5.1","@balena/jellycheck":"^0.1.1","@types/json-schema":"~6.0.1","@balena/jellyfish-config":"^1.4.4"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.192_1625954943001_0.3472129852397581","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.193-renovate-internal-patch-53700d9e958d424aa2a393cd5d4cfc7d47446e91":{"name":"@balena/jellyfish-plugin-base","version":"2.1.193-renovate-internal-patch-53700d9e958d424aa2a393cd5d4cfc7d47446e91","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.1.193-renovate-internal-patch-53700d9e958d424aa2a393cd5d4cfc7d47446e91","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"b7c966a0d1d64cfdae60eb0cebe843c1a12cc8c8","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.193-renovate-internal-patch-53700d9e958d424aa2a393cd5d4cfc7d47446e91.tgz","fileCount":18,"integrity":"sha512-/5wA9bHX0M4eCnNFAAN4tDVqucE9mlRVxj+eYLRuyB9epx3kxPQTgCcOz/daiZ0ZwFYcYPuzBvwyOz2Ox8ZTmw==","signatures":[{"sig":"MEUCIQDjB8Xc3zuww3JgDdzPXhxJZcyG/PUpFvQMPQ9wgY63PgIgTPtyeSyBENeYdXAvGtuEA7j+a8jbJIHbJDGiOPN9RzQ=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":59184,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJg6lJNCRA9TVsSAnZWagAAU50P/2zleleTPiPergXUiZUc\nXM28QE1GLUutFxdoVd7Uw+Q/wOhema67int5nQkwFysJSj7lBy3Za/9P0ZY5\nwwyqCfbBSq4w2fqDcV3H1YweVQmmJSosJrfO/73HPVgadQz5wqLmA1B9zCgQ\nJKsTNNJj4X3bDVutMpdW0gws3hfkkWQh2gwZuN26NSf4Oon3SCL7ETNu6400\nCTtrEwQGqyrHcNSROvVkbYEnsDO8rPZ9IqmW1f0PLm78SN5oh6/+kbTndosr\ndIOPky5BlzSsmfJ8ohIlOd9EFn5A9rH9NELL0hyqq2zb+QbORFGu2EzlweuH\nIZ1z9YpNs27hAQYe508981vcIz4nhKo6cDJrfxigEA8Y+NKsBZ0G+aERWiG8\nvj7DlnJeB9jnp5P17utRAR4SZ6/IKHHPkbGbhQdMWffX3h5bdkoiTwwoqmLZ\nJNwWyNtuNmu9xxKanmiR1JdsFXLbCjZZONSWfudlguMmrpP+IKRYzOD9vg44\n5TGWrpCtuhi8Gtb8JVJj1Wt/Bp7AxGEIWdKGwD8fdHq85hKRY9W66Hk6RB61\nBBpp3Ajr2WJZEPZpT5kYH+F+uWzPNurAhOTo0zh4n+njqyALB42L41/sVDOL\n41sK0EIkGCyqPoK9QP1P2qL4MquVHI5+O8+dM7ahHytgpgzgTGz81+uUW7HR\nXtNY\r\n=A+Lo\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\n[![Publish Documentation](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml/badge.svg)](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml)\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=14.2.0"},"gitHead":"53700d9e958d424aa2a393cd5d4cfc7d47446e91","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc -p tsconfig.build.json","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"versionist":{"publishedAt":"2021-07-11T02:03:27.739Z"},"_npmVersion":"6.14.13","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --fix"]},"_nodeVersion":"14.17.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.8.7","@balena/jellyfish-logger":"^3.0.49"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^27.0.6","sinon":"^11.1.1","deplint":"^1.1.3","ts-jest":"^27.0.3","typedoc":"^0.21.3","depcheck":"^1.4.2","typescript":"^4.3.5","@types/jest":"^26.0.24","lint-staged":"^11.0.0","@balena/lint":"^6.1.1","@types/sinon":"^10.0.2","@types/semver":"^7.3.7","simple-git-hooks":"^2.5.1","@balena/jellycheck":"^0.1.1","@types/json-schema":"~6.0.1","@balena/jellyfish-config":"^1.4.4"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.193-renovate-internal-patch-53700d9e958d424aa2a393cd5d4cfc7d47446e91_1625969228320_0.8138971116129863","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.193":{"name":"@balena/jellyfish-plugin-base","version":"2.1.193","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.1.193","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"e3fd1932bfe1fe05e1e4fe997deabf8aaf8122d4","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.193.tgz","fileCount":18,"integrity":"sha512-EHFGKhtCLGGeUaTNnN5KHRAi4LcWvNcieDWgsfZf1pipE7uAooaj0QWEOo/IwWmtSgdxfRaDiclvV7idllS0nQ==","signatures":[{"sig":"MEYCIQD04OtS3myN2ocrS/HYwG7YsLVAjx42xkWZXG3nLK5p1gIhAJAxcWXecM/lHIeZXaSajci5KtKNVcG2DQIFzpcn4j92","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":59119,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJg6lMyCRA9TVsSAnZWagAAc9AP/iFC78RCCCcAi7I1NwgR\nM3xARwPj8C4rLKskkymHIVN0OBk9Tb2A/syjNpVC6Z/XHYK+OimncaCoR+2Q\nViP7tuiqUY+heUA4iVqcMZjoZi/1YXs6F4aWx4O3EiPuPtaTFqS3PGk3u11y\n+qe9brzUaOU63E7Ty/A7yc0CpHFS6NOA1k4SxV937TFgDGYtQeCoOtVCdVim\nC5D+G41T3w5fhZnwhouhnnWZRbd8D5zIaZPI8w/t+YaB6mYfOscm19giDb/N\nDrbhwfb/+wQeUxWxCLgz02n649LJxhhVMfQi3o/I3Zc4boqEeHZIXiMC7HN8\nF5GYwPolMr8ZQMPTo1t0lhcbZ0Arx4FUdrs2ib2JXIGIUJsDd6Ix7ymd4CAM\nCdh51gC96nUL5ALzg66TzlrhwKKKtyBgJKiKpGijw4hsbyS/QY2hi7/zUiUo\nc+QsDev3Ka/FWosaJwo1mgWAv9E6eUeShBVg6wXLucxnUIutuOD0EiWolusU\niqbQxmCtJvYHeK9lxv0dXp0vnfVlXmksN8SpEp2pAk57f7pYJI/VAxLrLFyZ\nhDgIsWQAFvFMRjlmOruY3XPRYJ3TA/Lvn+dHv614ntd3p98QsE2+G2Cyr/PM\n4f6lLhN24G7Hcbxpgv4slP3Yd2UFvG2Z/fXtOvIHwMto2oQscWIYsgvnOTo5\n7pL6\r\n=jBlE\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=14.2.0"},"gitHead":"b125aa2c409cb9f48473ff37a0c0878db823e795","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc -p tsconfig.build.json","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"versionist":{"publishedAt":"2021-07-11T02:09:11.181Z"},"_npmVersion":"6.14.13","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --fix"]},"_nodeVersion":"14.17.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.8.7","@balena/jellyfish-logger":"^3.0.49"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^27.0.6","sinon":"^11.1.1","deplint":"^1.1.3","ts-jest":"^27.0.3","typedoc":"^0.21.3","depcheck":"^1.4.2","typescript":"^4.3.5","@types/jest":"^26.0.24","lint-staged":"^11.0.0","@balena/lint":"^6.1.1","@types/sinon":"^10.0.2","@types/semver":"^7.3.7","simple-git-hooks":"^2.5.1","@balena/jellycheck":"^0.1.1","@types/json-schema":"~6.0.1","@balena/jellyfish-config":"^1.4.4"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.193_1625969458448_0.6739790006921325","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.194-renovate-internal-patch-6f24af1c738129af5d5d3bb59a9487e0d47a1b6e":{"name":"@balena/jellyfish-plugin-base","version":"2.1.194-renovate-internal-patch-6f24af1c738129af5d5d3bb59a9487e0d47a1b6e","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.1.194-renovate-internal-patch-6f24af1c738129af5d5d3bb59a9487e0d47a1b6e","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"cf9d9f76a38ac50136ab492879dfa8a4a9688401","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.194-renovate-internal-patch-6f24af1c738129af5d5d3bb59a9487e0d47a1b6e.tgz","fileCount":18,"integrity":"sha512-N4UDQAZWgWA3IyWTrhNkFtOo8OZXzwJTE118CDQVvCzZXHc+2L5MCI9j/gXicKo4LKyTwYEReJYpxB9ONT2pWg==","signatures":[{"sig":"MEYCIQCIkjVdgLnym56vDIGX41fWDdAB3rZmc7d54jNW/EuA9wIhAPIfmQuQns9tneaalMReiDs1i6MDOD5K+tOowpORcnQL","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":59286,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJg6p1OCRA9TVsSAnZWagAANMsP/jcaXg10Ik7WZ2KcoRWt\nbLEGe1gsgS8oFSjQSU0VGE3FsKrgCYVqLqCMZM/Nm47nL5mh3woFFKtPTx+c\nmzCy/wFwELDW9KmofHcSf5B5a/T0SHjqAJ8F9skiAEPXWIp6CSIbGwbrurSN\nHUHQoQFLKa86LnvMtKClyfq52kLBUB/MSd6jgtdbnbli555ERJWXEs4GjOj2\nr3Oqvi4DyPpROYbpN8loqd5I7PlQUn5vJhBvwa4mUHN/ZyP7wQTmTq7V09RI\nlxlX5Bk0QmzKPfcMR+iW/N48/TvqgtVSeuiuOGgBkEmprKbIm2L7RkJbIFPW\nr2kPqmvbXNBT105UnT6tcWgfUjxVqBXAGgw6inLadMe1mpMK3WZzniUT0E1w\ngilRvG3pjn2j2q8YJfRM83i9eNmCdhZKjlx+5ywgjrf9RAtEWyzKfw08hKl6\nq5aTgk72/WXJDxJ+hr2ggs94WEene1kYBsBHV2gps0guPkwIE3Ep/h+blec7\nuW5EvtZ2ZN0pMi2ZpMMf0v0WodiyPDMwoxLd4OpLOThL91TSX01spcuaj67k\nZay+ua51kU6M+PmMKCFz4A77F4wyVO6fUKPEdOVNrLUAMScFAbtObXd2L7cv\nXPkaDC2U6quhXQK6tFAxi98JeJMlX9BcHU53qL8YoeCkTNdIQYppCpogYx5H\nm01e\r\n=2Znc\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\n[![Publish Documentation](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml/badge.svg)](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml)\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=14.2.0"},"gitHead":"6f24af1c738129af5d5d3bb59a9487e0d47a1b6e","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc -p tsconfig.build.json","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"versionist":{"publishedAt":"2021-07-11T07:24:23.485Z"},"_npmVersion":"6.14.13","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --fix"]},"_nodeVersion":"14.17.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.8.8","@balena/jellyfish-logger":"^3.0.49"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^27.0.6","sinon":"^11.1.1","deplint":"^1.1.3","ts-jest":"^27.0.3","typedoc":"^0.21.3","depcheck":"^1.4.2","typescript":"^4.3.5","@types/jest":"^26.0.24","lint-staged":"^11.0.0","@balena/lint":"^6.1.1","@types/sinon":"^10.0.2","@types/semver":"^7.3.7","simple-git-hooks":"^2.5.1","@balena/jellycheck":"^0.1.1","@types/json-schema":"~6.0.1","@balena/jellyfish-config":"^1.4.4"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.194-renovate-internal-patch-6f24af1c738129af5d5d3bb59a9487e0d47a1b6e_1625988429758_0.41952586847729","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.194":{"name":"@balena/jellyfish-plugin-base","version":"2.1.194","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.1.194","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"24e32481eea71fd0fd2317b0bfacbd24dc3cab77","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.194.tgz","fileCount":18,"integrity":"sha512-8IhrZTJE0GpWIeSFhZmHnQxR3Ow0HcrqT2d0oPQS6x9S4u8LqaUZaZb4A/9coKwWQoBbe/n3XoUMgdq8190ySw==","signatures":[{"sig":"MEUCIGY9eIKosT9gttrSXSRZZWl89hXtNMR4Fr6zZ8ep9m8TAiEAryLT6fmQTclKaO9UpB0LnotiIpqA7ejyPu9Ekg9t0gE=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":59221,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJg6p4LCRA9TVsSAnZWagAAbaAP/Rjz0HE3z48BzAxKzHXO\n9pZ91jYQkR64Tv7Jwj9G7yF5rLqY9OWtEiT0Hor8lCJlif7tfIWyk62/C3LX\nZBDDvgfvT6vxlaKpD/w1d/y7HvD67RJ6mMPA+swhRpH2yyKu+zEQxGnsFVLM\nmX+fGUUSGknhWjvvoq0eR0EtysRiq2WQkmHajQg83ZHp8MVELq1VGFDMLXFm\nQGksZAxoGsQbyV0dr4ug7pS1EC2exUw+BAt4vKAq69463u+GnSTxcDkKiPKa\nIBmV58edz/TyduZZbVmNfEXx/uXilInS5QZBnQQUm6w+KO68w5djyuLFY1G4\npAxLh1PetZjeJi0imKMR95L5fidm1iSo7Ecy8t3sGNZw+cYlVbsq4CkFZNak\n2ZeTnxFMd4vgscSiCpIDJhOV1gBIKuKo7wg3KOB6Uq6hvBZCuUH8yB5wGiiT\nLcng0dfgCIE5j6hza+4fpq3a3xgcrtHAUmeQkqPqner2qAwuB0ywteUye243\n4UDKCDICrobvcg8Elkc2pxvaYA4uOsmWMmnu4FuLX3pL2uQZXN1/9LKb1HxH\n2nxrmUGTikCzjReKp+7swKctnKgVkDuZ61Ec1umTJg+G4Qb9hsC/GQuvUXGi\nKXwoRDtBsnnKxHXTYG7PvECY9VPfTPa7LhHx8jPeTgB67/yihCTBt7iN+bfH\nsRAo\r\n=ji3a\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=14.2.0"},"gitHead":"71d225ead6f38ca7aa00e9495c0395d11e103dea","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc -p tsconfig.build.json","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"versionist":{"publishedAt":"2021-07-11T07:28:41.055Z"},"_npmVersion":"6.14.13","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --fix"]},"_nodeVersion":"14.17.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.8.8","@balena/jellyfish-logger":"^3.0.49"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^27.0.6","sinon":"^11.1.1","deplint":"^1.1.3","ts-jest":"^27.0.3","typedoc":"^0.21.3","depcheck":"^1.4.2","typescript":"^4.3.5","@types/jest":"^26.0.24","lint-staged":"^11.0.0","@balena/lint":"^6.1.1","@types/sinon":"^10.0.2","@types/semver":"^7.3.7","simple-git-hooks":"^2.5.1","@balena/jellycheck":"^0.1.1","@types/json-schema":"~6.0.1","@balena/jellyfish-config":"^1.4.4"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.194_1625988619447_0.25509687743190623","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.195-renovate-internal-patch-b09408ccb6a543311f7ec99a8e90882e944bbc76":{"name":"@balena/jellyfish-plugin-base","version":"2.1.195-renovate-internal-patch-b09408ccb6a543311f7ec99a8e90882e944bbc76","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.1.195-renovate-internal-patch-b09408ccb6a543311f7ec99a8e90882e944bbc76","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"60c05edb5da2b622cf0627ba54552d150483decf","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.195-renovate-internal-patch-b09408ccb6a543311f7ec99a8e90882e944bbc76.tgz","fileCount":18,"integrity":"sha512-SefNhTkJ9FqMAIehP9dJzNZj1HSOR5+VVhNm+1J1mNrLr3DBaMUJ0o7zHCq+DZf1D1WQhkmHCtFIUWvVEQVtdQ==","signatures":[{"sig":"MEYCIQCOz1fyNAmpyNiUY983Hz+RRrFqk1SchzCnXWpxQCPV6AIhAO95CAgULW9MYPg4w3H4OzZmFwHHQxNI96GtMlsKA09Z","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":59358,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJg7mh4CRA9TVsSAnZWagAAYQgP+wRLIR13mm4Iqvj7UL5q\n46w7GRBm2lHtSsqGP5HK2NFrEl8cFtdWPjbciZD84QeDnHhU8m8zh9BJONM3\nuBSY2G+BGE5+f7JClWSGMolRV2HuzxiXh44uGR92JHLkzUR+/ylPmOvYAJJH\nisnloDTjZRrOHvj6jtTwVamitmvvRKHO91H8jP2bo0u5UUDiNuz8l4bJeMvx\nMWKNvNIVoe2aexf2pBfXww9Wq3961g8MENOkQN6YXhUBwWz6jDwbGAAv52De\nGvRCy08glaoZJqXtZUAXTgUBIv9VafPQXwgp1X95VdD9gFYLxbmyuWPfm9I8\nJ9+bn9d5hnlke4vWMdl/Ykg+OTilzQ/WuqVjqtN6zaAQiWQD4+UGbnWtqsbz\nrTDCbseYRMqxK/xiWOqOT6gKzlH2PSdEohC3zK+6j2O34NRmrA7uiipQzMSp\n5TGIqAdURj5kTyVX/vStQnC6slsN81odyFarEMtBBtdjsFqDxx93edv6zGiw\nuumqdWhDjlsgk5HJrX/z5Ws2HWOWqTqoir0mcyVkgbhFmaeZ0oTf1QnyrKda\nAiOXu8l9zFFxxwQ3wgrzL9HysBQ760Pd7i4cHvNnF4hiiRO8QtbzGfycUFG1\nGccb1qnUDLv++X8rjJQ185pHzVNj2xq0YgN17WcnFcZBadRwdDbgZJ1CiAbl\nE1eY\r\n=BwB8\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\n[![Publish Documentation](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml/badge.svg)](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml)\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=14.2.0"},"gitHead":"b09408ccb6a543311f7ec99a8e90882e944bbc76","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc -p tsconfig.build.json","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"versionist":{"publishedAt":"2021-07-14T04:28:31.371Z"},"_npmVersion":"6.14.13","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --fix"]},"_nodeVersion":"14.17.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.8.8","@balena/jellyfish-logger":"^3.0.50"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^27.0.6","sinon":"^11.1.1","deplint":"^1.1.3","ts-jest":"^27.0.3","typedoc":"^0.21.3","depcheck":"^1.4.2","typescript":"^4.3.5","@types/jest":"^26.0.24","lint-staged":"^11.0.0","@balena/lint":"^6.1.1","@types/sinon":"^10.0.2","@types/semver":"^7.3.7","simple-git-hooks":"^2.5.1","@balena/jellycheck":"^0.1.1","@types/json-schema":"~6.0.1","@balena/jellyfish-config":"^1.4.5"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.195-renovate-internal-patch-b09408ccb6a543311f7ec99a8e90882e944bbc76_1626237047919_0.06445004745977001","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.195":{"name":"@balena/jellyfish-plugin-base","version":"2.1.195","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.1.195","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"9aa10827bf1b330dbc2b433905ce27885916466a","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.195.tgz","fileCount":18,"integrity":"sha512-iRyfPuIjI9VjI4gg9lNBxUH2Y8bR2keFd+G9bPxD0CJQqtY7uzSXU7Z4J7aw9Sbh0OXd9xDKPBcvPyHaNqyuiQ==","signatures":[{"sig":"MEUCIQDXjyza14tFm+ptSAMLSZFfaqk2YM7dHn2GsoK95q+FkAIgU8FmDtTk+cuNmk4NAcc/MQbNA54Og774Qqko1Kw+BnM=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":59293,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJg7mlmCRA9TVsSAnZWagAAi/UP/0/Z6LT5MIiWeznlK4Yn\nQaF5u0TjiW5M71uRrY/vu1EjtOyC5PS9cXiFaI/vrbR3d4VEp1nsMAwjuwpv\nnNIgnNuyccEhvf3FE70TRFdFmfj8aC/h4sItzHvxVS38xZb1MaxPMBn8ND7J\ntRoou/5uYZ0TfszGYGvt1Ka8LK8Q5ATYqUtT/rHl6S8to1uZHr9DR86SOHD3\n7h0K998/57ts7/JffjjWAh7qahyz3NDOk4FINk7pslRh8RgVKqVP6W21iOjd\noLNHqft7c9wvml74U8BFgNWotmejdbIrwxf1f69VBH7NAoricHoRwGfSg2Bo\nCOzkk3oqksiwTH/33Dhg9eVFe1opyMFFRBzNautjSze05ITHFMvvrWy+7CjS\nADAB9hWl/4Kh4VrTv/zRuemVWUh3g8SBFeue8pZ2aMpow89ylc9MMPSoK4l/\n4oT4acp54mCNJFWDuloUxyUMNqSqG0AY2sO4vPZaAUqN5PLphtkJYVOtyt9Q\n+rByGBk+r27BOXqTqsboOELgJ+gYb8PZVEyYg+sXwHnkqKJ81ZQ49rJHcHKs\ndVvMZ2QFi7OHzbgP4GPFG0Ze0nX9cq+XK3XIOgq20qVo1xtEcVspTzbqwWpq\n/z0olm7DqUFm2Zk/hCJe/KOhCrPKGBZWt9642qwW5qlLg1PYw+thUSDmcJS8\ncUql\r\n=761s\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=14.2.0"},"gitHead":"a9d5f857edaf7a72d806b8777702f9f4c343636a","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc -p tsconfig.build.json","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"versionist":{"publishedAt":"2021-07-14T04:32:43.913Z"},"_npmVersion":"6.14.13","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --fix"]},"_nodeVersion":"14.17.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.8.8","@balena/jellyfish-logger":"^3.0.50"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^27.0.6","sinon":"^11.1.1","deplint":"^1.1.3","ts-jest":"^27.0.3","typedoc":"^0.21.3","depcheck":"^1.4.2","typescript":"^4.3.5","@types/jest":"^26.0.24","lint-staged":"^11.0.0","@balena/lint":"^6.1.1","@types/sinon":"^10.0.2","@types/semver":"^7.3.7","simple-git-hooks":"^2.5.1","@balena/jellycheck":"^0.1.1","@types/json-schema":"~6.0.1","@balena/jellyfish-config":"^1.4.5"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.195_1626237285678_0.9416049069282204","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.196-renovate-internal-patch-48d6db5352b76bbde268c85a98fb8908fc23cbd9":{"name":"@balena/jellyfish-plugin-base","version":"2.1.196-renovate-internal-patch-48d6db5352b76bbde268c85a98fb8908fc23cbd9","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.1.196-renovate-internal-patch-48d6db5352b76bbde268c85a98fb8908fc23cbd9","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"1ad1c5d7215f6a83a8cba804acecab90703d6d77","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.196-renovate-internal-patch-48d6db5352b76bbde268c85a98fb8908fc23cbd9.tgz","fileCount":18,"integrity":"sha512-9vX/jMWlMfH8lqHhH7C+lnJ6XnfbF8AI3/1i1BcYAnCM2uDozyHDDd7k3+EsHQZG9g2Lx2OjAHnoHTqQW9cUXw==","signatures":[{"sig":"MEYCIQDgjQVBkLQK+2RNY6LOs5e80/EGJfy64prRoYD9mPJBhQIhAOsCjM7VtdT7njhoC2V6CtCYV+LdfXq8fheTVlZLXwXN","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":59431,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJg7p4ACRA9TVsSAnZWagAAFeMQAJz72cQX0llSpHn130E0\nS4PgR3Y+hdAfYKtXUUjRpz65FWZ7UdUO8psyoe4mBoFtp4wCJOb9USeKeDiA\njSD+hXdz8ktwx85OQsChKMrk940g6TxtToNwGxsMVauuRj/RRJhiIstQa0EB\nZTlumSoAgT5iCf4OVFltue2TGCEpw4GcPvITPrXZY9gIG7DOcCX0PWMOHJ6g\nRnETdVoDKrLcOtGo8cKxZ3Whsk7pLO9QAnHKnq5S+ApR11PG3FfAXh4lMQ3L\noYppJTI8iYV33fDizLqBsDhWcbvC2/eXgJmbBupWW9+BriKraLii+F6QvrQm\nngDZ7sVMQA5pckTBtb5m3p8FtckrUtadm4ep7uz6OpK0xbBGqh5yBlBnBYS/\nVDnab2wBbY+DnDrlPKXMKJtHxtWxgLS7YZ9s7gVDGit/PJQJOvZqF63tJfYb\n/54jE7ay4YftEq1RTldCnNVY98ZWN+8ayy4FFiQ0cS7STj5Xj5DU5zSTP3MT\n5OpomKfAwUX4I/ppm9X5UsZrJ9synwu3MQn/xntt9YLPPKsuvxlyPwYeJZIb\nVoo/h8CF9HluyPvleKlAXv9Nv5H5DrcFG7s+nzM0MVXTrZCkSsqEEpmkv+HG\nXiUjvRX7wGaRL6vNISOK8370B4oYNeQUAnHpaxTZ0Esj48sqyUfwH8jp3fhX\nsVcQ\r\n=oTFJ\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\n[![Publish Documentation](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml/badge.svg)](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml)\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=14.2.0"},"gitHead":"48d6db5352b76bbde268c85a98fb8908fc23cbd9","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc -p tsconfig.build.json","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"versionist":{"publishedAt":"2021-07-14T08:12:34.716Z"},"_npmVersion":"6.14.13","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --fix"]},"_nodeVersion":"14.17.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.8.10","@balena/jellyfish-logger":"^3.0.51"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^27.0.6","sinon":"^11.1.1","deplint":"^1.1.3","ts-jest":"^27.0.3","typedoc":"^0.21.3","depcheck":"^1.4.2","typescript":"^4.3.5","@types/jest":"^26.0.24","lint-staged":"^11.0.0","@balena/lint":"^6.1.1","@types/sinon":"^10.0.2","@types/semver":"^7.3.7","simple-git-hooks":"^2.5.1","@balena/jellycheck":"^0.1.1","@types/json-schema":"~6.0.1","@balena/jellyfish-config":"^1.4.5"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.196-renovate-internal-patch-48d6db5352b76bbde268c85a98fb8908fc23cbd9_1626250751954_0.8744355315087513","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.196":{"name":"@balena/jellyfish-plugin-base","version":"2.1.196","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.1.196","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"382a74a81016e04bf594150b4ce5206257ba3f1d","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.196.tgz","fileCount":18,"integrity":"sha512-V7olFAZYmVNaTtgDsXCqTioq8369Atu5ITTy3k7hfLxnUsFKZIzj2i6apfcEEQvGVdgcp6dtMZF3MKVqH0R9lQ==","signatures":[{"sig":"MEQCIAtoMfu4rStx9q5ubJdsq8ld97tcOwWUrMZB3x5gAUKKAiBGJSlXv5ExU9J4XMyPVn2prVwVKo9satk8X1aiHRPzlQ==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":59366,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJg7p6+CRA9TVsSAnZWagAAmCsQAIn+gMByT1EvDRsxMkCC\n2oEIbHjKNtCKivx4tEIltqzgX5GRB8KQna3DJNlUIkvTpBNIufk0z2UfPUUW\nAH3QeoO6AtCgv3lGTdA+t+9rxz6VbDK85VqQRsq+koIxBlsNY5lg2qlIv5xm\no9BxGugi66doO+Au9tXvN64Wqz5avzyOYLG5Q48IhM9ihV0rBPT44d3FzVfL\na5c0wG/U3i1PM4fY5v7qyW+1HUAz4I8eXw5N6KYMe3FjRJiycC5/ZNt5sPWU\nJnbyREk/xoH5n6VgK44nG4c+DHqdwt9QxBOboO7mQK4Ax7y/xdcrjARS/PzT\nEbIV6LPHWOyM3bD5hRnjUnj1RRXnXieyAMIbj5ieDCAviuoIbTr3mCjgYTtO\nDZKciQLewgx3fTOCy7W9Ien4mwZ/LfNG/hBGd4/X/gWsZ9ZYt4jXEG/R0hPM\nhCShtAQZt1HYS4YffdteTHSL1GTUynhF0Ln+a3UjKC5m7kgasmOnVxQIVXOc\n2QHbl/xS4KJNvKjWIwEWZuhT8LOu+0BEfsMdrScov1SGbF+Szy2mtS1gAqtQ\nbtslENenDRagAeiOQOvv5bLXYj0CsJeyJMVQ+XyzDIeinvXpQV92QSY4uyeZ\nAR7nT9jTAP8oR+dN+2YNT/7jA4/a27y8Xw1P2pdCRhbT6jGOAFEy+rszI6bq\n5tpE\r\n=nwQg\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=14.2.0"},"gitHead":"08f0b75833df7308700cabdea02b54043663a26d","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc -p tsconfig.build.json","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"versionist":{"publishedAt":"2021-07-14T08:20:40.833Z"},"_npmVersion":"6.14.13","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --fix"]},"_nodeVersion":"14.17.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.8.10","@balena/jellyfish-logger":"^3.0.51"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^27.0.6","sinon":"^11.1.1","deplint":"^1.1.3","ts-jest":"^27.0.3","typedoc":"^0.21.3","depcheck":"^1.4.2","typescript":"^4.3.5","@types/jest":"^26.0.24","lint-staged":"^11.0.0","@balena/lint":"^6.1.1","@types/sinon":"^10.0.2","@types/semver":"^7.3.7","simple-git-hooks":"^2.5.1","@balena/jellycheck":"^0.1.1","@types/json-schema":"~6.0.1","@balena/jellyfish-config":"^1.4.5"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.196_1626250942558_0.5047792634735977","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.197-renovate-internal-patch-6f4238f5a6913992c3a67f92879de9f3c7106050":{"name":"@balena/jellyfish-plugin-base","version":"2.1.197-renovate-internal-patch-6f4238f5a6913992c3a67f92879de9f3c7106050","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.1.197-renovate-internal-patch-6f4238f5a6913992c3a67f92879de9f3c7106050","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"e3c333b4183ec522d54cf8187297de3bfa162cff","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.197-renovate-internal-patch-6f4238f5a6913992c3a67f92879de9f3c7106050.tgz","fileCount":18,"integrity":"sha512-z26ysuJwLmE7zeaoEfVnI8v48YN12oxjmnL+rRpzdQSQRUuGPHzTPDYnoyC/5NM4XSsyfupP5em8Ucg7uWgBTw==","signatures":[{"sig":"MEUCIQD6uwpkEMv7CGKuPQdq2NSqS//QDsLC7bKB2NlQmRSCgwIgX/SMuusPv/nnl2Om2jvVpZvs5xRtSdyqBwAoDILI7JI=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":59535,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJg8h5kCRA9TVsSAnZWagAAjScP/0s3gFk+mJdZ+b+tGaKA\n8l3237EYznvsp5Lk1prhBxLiFhuhHV1ZUmdVgi35PgLAG2McHYy/IzX7Q1bq\n36V0oIW+5VJbvm14FkkHdgLboHbIcUEdzjQQkTqkL8JTFZbbny88kKNCccQ0\nfNei3LcSB+7/TcKSXO3LQZkgyO7BEGvQx1kueBHay1vGS1Py92yllgqRGY7N\no377OlrRCUvL+TJ3h/w2muOlhzWxo1oGj3hVBIZvWJK7/Al6gBcbnPVu3dVl\nPrBZhNSyxRwoBUW6tlpzliM6r2kEPuzGEByKFA0PWRRpbTJl/dWrZZaC+EMr\nuoeDZezEOhyiX3Lukj0cAva+mZH22MuqI2P7kr9iO+WZCj5CrDFZF+4x6txA\nYgQVFUVigj0m+qlcupAhvLOXZKQxGtkOkkrfVXoz2wl/epmB6PfXoxLlQJHt\noIsl0UVfelpnARk0KIqd2l/DFvqZ5QZiXTfkQCKhlHiCnGBcZ4ZF0ob2+bfm\n6Jx2K5qeW9FWi5cxYj66cvnsV+wKsv/owqiQpNxbYG+uhjLBQIzV1rg1bfkX\n4E1ktd4yy6mePi4qNAABRU+GpeU1LAm1m+oolWof5SDYwOmtWAz/1kVgqt74\nY6pbQtTITHrfDuI1/c7LZ7WEH+wBJkqjpNHfZwCYjVFqzpld3v3pdbxsP9Js\nN3rK\r\n=OYRC\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\n[![Publish Documentation](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml/badge.svg)](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml)\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=14.2.0"},"gitHead":"6f4238f5a6913992c3a67f92879de9f3c7106050","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc -p tsconfig.build.json","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"versionist":{"publishedAt":"2021-07-16T23:59:58.656Z"},"_npmVersion":"6.14.13","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --fix"]},"_nodeVersion":"14.17.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.8.10","@balena/jellyfish-logger":"^3.0.52"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^27.0.6","sinon":"^11.1.1","deplint":"^1.1.3","ts-jest":"^27.0.3","typedoc":"^0.21.3","depcheck":"^1.4.2","typescript":"^4.3.5","@types/jest":"^26.0.24","lint-staged":"^11.0.0","@balena/lint":"^6.1.1","@types/sinon":"^10.0.2","@types/semver":"^7.3.7","simple-git-hooks":"^2.5.1","@balena/jellycheck":"^0.1.1","@types/json-schema":"~6.0.1","@balena/jellyfish-config":"^1.4.5"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.197-renovate-internal-patch-6f4238f5a6913992c3a67f92879de9f3c7106050_1626480228823_0.4683934761362014","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.197-renovate-external-non-major-ff6231ad0637818c6b95ddefd36a57a5df5db5b0":{"name":"@balena/jellyfish-plugin-base","version":"2.1.197-renovate-external-non-major-ff6231ad0637818c6b95ddefd36a57a5df5db5b0","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.1.197-renovate-external-non-major-ff6231ad0637818c6b95ddefd36a57a5df5db5b0","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"c107388c7154c3572ba7ab242c4b244ab2a5f764","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.197-renovate-external-non-major-ff6231ad0637818c6b95ddefd36a57a5df5db5b0.tgz","fileCount":18,"integrity":"sha512-FDtgGBtRqyil4hEktaQTQCf7OdG43PtR6pTP9ftFxyctgD3tGDqyl2hrZGVDiGqyxv3Qil2z61WjYDipBSGW8A==","signatures":[{"sig":"MEUCIQCSoCAm8wgexKGKwSV7LjSkVqwUBl/iEjpfH/P3oMrPHQIgC7w0lyal/3V3oKO+tgU+nRdydxM9DlRhA5akQ+7FhaQ=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":59589,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJg8h9vCRA9TVsSAnZWagAAVw0P/1KdYxD18BJdP3B65EtT\n+at0wZ/xwIo+Q8nrnCoqOhksPW+cwovT72QQWiIHAniBW89kGNsSrI1SGoCL\nu3oRnSC3AE+bjuFZhX98umgPs0n+UkdOQqU0lWL7G4acQVTTNFPWVNtY5miN\nq4TaeSr7oTyStB9qeir1bqpPfoQ8wxvPM1CWc48k1S51MTh1pKgyDl/lC097\nC7D4cQf0mo/7TJ6xvf6O8R06sUVtKpx2hK4oNgvBOZZWRB2a2lzgULbu7jWB\no0bf7Y62R+4Y0VK1q4olIInamxxnHXIbu3Ua/cS/6NtFd6K2g+nspCF1WAa5\nQCWHnR+r5SXtr/s6xtm/1e8v2lPa5L3XH+l81+FInAEUo0Brqh3qFc9oFTlP\nEV/854E33o+qZOEXVv9AM0mJbvPzC5emwFIiKAfauZ8T4NlKAyM7foK5+MhI\nmE+EX6Xuw41amiMMxTWBU12JiwcgwwlOfNxo6+eFlVNo2yPSJsDB9yNZVrHo\nU5f5618xeniLRC5gWpoyWmqmWLSyidxOyKZn/CdAaoFgbcOMkU6g9FiGWBIg\nRt5Id0s1H1LC3gDTQd55LJ+Y/gDB1cqAMBsv9/Ego0ks1dmUF+W0gldqTdZx\niFTbm+BiEh8rx46rPYJkbYCMwNvGJdQqmJK2akY3m7Uy7FofzplisR+KISQV\n7y4G\r\n=akO4\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\n[![Publish Documentation](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml/badge.svg)](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml)\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=14.2.0"},"gitHead":"ff6231ad0637818c6b95ddefd36a57a5df5db5b0","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc -p tsconfig.build.json","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"versionist":{"publishedAt":"2021-07-17T00:05:12.114Z"},"_npmVersion":"6.14.13","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --fix"]},"_nodeVersion":"14.17.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.8.10","@balena/jellyfish-logger":"^3.0.52"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^27.0.6","sinon":"^11.1.1","deplint":"^1.1.3","ts-jest":"^27.0.3","typedoc":"^0.21.4","depcheck":"^1.4.2","typescript":"^4.3.5","@types/jest":"^26.0.24","lint-staged":"^11.0.1","@balena/lint":"^6.1.1","@types/sinon":"^10.0.2","@types/semver":"^7.3.7","simple-git-hooks":"^2.5.1","@balena/jellycheck":"^0.1.1","@types/json-schema":"~6.0.1","@balena/jellyfish-config":"^1.4.5"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.197-renovate-external-non-major-ff6231ad0637818c6b95ddefd36a57a5df5db5b0_1626480495545_0.2229115965333821","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.197":{"name":"@balena/jellyfish-plugin-base","version":"2.1.197","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.1.197","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"fd35c61e00726724ff7bbdd0fc19f0112bde1a0f","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.197.tgz","fileCount":18,"integrity":"sha512-3dWifhJwHUbr9PN46s0YLY5XgqFb8ZlhsyWRizZ1vT7oSIYHQX6tntySy9p5F1rbBCbQ5DwsXGi9a77CnrEHPw==","signatures":[{"sig":"MEQCIDUx9B/DuAmXG8f2QJVUobiFMbc9Gfx1uwCrvVhZIc4iAiB7ZPoOvSrzqYJvAslzF4S+N/9caUK2Fa9kbAAfPtSIfA==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":59470,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJg8h+XCRA9TVsSAnZWagAAMAUP/ih6IR4fzTWwIxbNecqf\nTFIybU+SWW03i11slAaD3c8bxGhjYP3IZL5RuOe2d1JAANbTuTgsnkydtEoa\nZJe/S98lZkD/8tw8fAIDWRkV4Fe3WKSWm0S5mqQLgD5qVHmNsmVRtICF4XJa\nnJsJfkcZBPdDMPZROb8/3M4TnHoYFAg49kajZBoaflUaPvtz2YFN7JKdcdVh\n5nHRGBr8W1DWXo9+Pt6+cus5zUtWOdHFu19psB5+6Z2w7WRp+VrRHHyH9KSo\nADnr8IvQepJ/pvWBGSIT5vDTQnR9/CMCIl0Gg8ONUR92lGLv/U2DNhJJmGYy\nTCxCkxfChAW/ZdlrUs5hMHjU6LIlJFwSsbS7tjSxgIN5B7UKWNn3mXGLUzL6\nngfwTTxgKpWCaD3wQDpQ35tk7Pa+WVS+3BMcoBnDpZFGi63OpR3Uo6stxpfj\n7bnUNaj3cB3ZVfh0rFY8sJSVa2sFgG7bpW6W9UOCCWedezt5Zm5wYrq/jr0h\nUYGK4tQKlxgKxe0kEAiQJxfbSZQl/yIKh3ZH/EO+FEf5lT4Lhr3NxRtLC/1B\nKHMCz/6/XBIfjbU+ulqc7GNK1bI5dTILGA0TrQFoQ+l0PBO5YXrqBCHAb46M\n7qUNZh5HHS+aGWjuGvE9eo9ztNGkSSA5Y7aLXgLYLKIzBcvEaubHUGAWoWhU\nCI38\r\n=OfMV\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=14.2.0"},"gitHead":"143d19362473856b0546001ebff4b6c393dafd9a","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc -p tsconfig.build.json","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"versionist":{"publishedAt":"2021-07-17T00:07:01.499Z"},"_npmVersion":"6.14.13","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --fix"]},"_nodeVersion":"14.17.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.8.10","@balena/jellyfish-logger":"^3.0.52"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^27.0.6","sinon":"^11.1.1","deplint":"^1.1.3","ts-jest":"^27.0.3","typedoc":"^0.21.3","depcheck":"^1.4.2","typescript":"^4.3.5","@types/jest":"^26.0.24","lint-staged":"^11.0.0","@balena/lint":"^6.1.1","@types/sinon":"^10.0.2","@types/semver":"^7.3.7","simple-git-hooks":"^2.5.1","@balena/jellycheck":"^0.1.1","@types/json-schema":"~6.0.1","@balena/jellyfish-config":"^1.4.5"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.197_1626480535473_0.40586508783733777","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.198-renovate-external-non-major-d7b0803ffec73a1d0aa81774600bba4a3f0efbb5":{"name":"@balena/jellyfish-plugin-base","version":"2.1.198-renovate-external-non-major-d7b0803ffec73a1d0aa81774600bba4a3f0efbb5","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.1.198-renovate-external-non-major-d7b0803ffec73a1d0aa81774600bba4a3f0efbb5","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"de741a1c913f6fd725c0b6c56fc882f4e771e713","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.198-renovate-external-non-major-d7b0803ffec73a1d0aa81774600bba4a3f0efbb5.tgz","fileCount":18,"integrity":"sha512-JJbbTr127xG2m3u41oPzYmb/DH2P+eBeac7dKG5uaVjkd+wHQB5GCUYAEG8u1MDyNi2Lo8vJWj7r3Jug3ursyA==","signatures":[{"sig":"MEQCIETwL0KUMxR9AzIPe0WLP40KM34dRWsLBbp9KV29oqMIAiAM0DPv39z2pNn2eGWsZ68fWrd5uA3GxxpKPYCRqHTRwA==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":59615,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJg8iBeCRA9TVsSAnZWagAARawQAJ2ShI/5iKNuiaJw8NHc\n31VkGaCIXfC7PsavX6xs6qfo+saatVKlU8cYAQ+yuSGRTxvBM9tEir16Mw1+\nEMNeHoSMrgt9TJot8t8DvSmFSh5utT3omSSTm1SmwQI2BMthHSqP2zTctHOj\n1mfBuIvYx5aQvbPJGHwbAhY/7mHPxfY1Phjf/hFRziNBugOxBwm8gX2QLPz8\nK2KugxXZ/pd1FfFzbVuFGbCk1Acrbqb+jyoTMGPI+2vAWCCC+vcZHGbfcaUJ\nt1CD9chKtiQsLuoIpM+dWThIIRxQXBWEqA6I26S/r2Ih5rKFlKe/XOGV/aAb\nmDjFKv+gzl+cr852J0CNlvDe9HBdTWv8NkT5i1xeTNyAni0sQ7wHx30GLPVv\nEMFgmDZoJAD0Ipy3bZ4n7qSVcpORJhQEkxHAexFsF/sKb1abJfckl9UShn8t\nmUoK0mO4UhgCncbMfKBpoooorgGWl16/vq/CvxLLT5lnMhVVjfGAMkCS4JXD\n8g2/Du/YN7Hrld88iQOxGoykSska3SBspV02tPpQ5Dg81n5cJJpooLM37TqO\nRpaZ+Ei7I6VbCbOKyERbYoyh4WFX282vOTXc/0ZIDQ9rLK1nQdl4NmQmxhMg\nMcMtEOsv904iDeJa2rI+mkdn61H5nLPse0jB2TJXZ6mJR0LhyJ4YmTFPKUwW\nF7NS\r\n=n8o6\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\n[![Publish Documentation](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml/badge.svg)](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml)\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=14.2.0"},"gitHead":"d7b0803ffec73a1d0aa81774600bba4a3f0efbb5","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc -p tsconfig.build.json","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"versionist":{"publishedAt":"2021-07-17T00:08:28.428Z"},"_npmVersion":"6.14.13","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --fix"]},"_nodeVersion":"14.17.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.8.10","@balena/jellyfish-logger":"^3.0.52"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^27.0.6","sinon":"^11.1.1","deplint":"^1.1.3","ts-jest":"^27.0.3","typedoc":"^0.21.4","depcheck":"^1.4.2","typescript":"^4.3.5","@types/jest":"^26.0.24","lint-staged":"^11.0.1","@balena/lint":"^6.1.1","@types/sinon":"^10.0.2","@types/semver":"^7.3.7","simple-git-hooks":"^2.5.1","@balena/jellycheck":"^0.1.1","@types/json-schema":"~6.0.1","@balena/jellyfish-config":"^1.4.5"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.198-renovate-external-non-major-d7b0803ffec73a1d0aa81774600bba4a3f0efbb5_1626480734596_0.09430971152200751","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.198-remove-whitesource-48cef9de58ed70e4cd231ee2ae91747769c4cdde":{"name":"@balena/jellyfish-plugin-base","version":"2.1.198-remove-whitesource-48cef9de58ed70e4cd231ee2ae91747769c4cdde","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.1.198-remove-whitesource-48cef9de58ed70e4cd231ee2ae91747769c4cdde","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"3d12d2297b861037b4b4f3e3baf818bdb8755761","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.198-remove-whitesource-48cef9de58ed70e4cd231ee2ae91747769c4cdde.tgz","fileCount":18,"integrity":"sha512-35nrY0xMeyZTzLlSFoLBgqBEpP6kIAHhutj2EpR2dbMRRCkSPJKn8+vEA4otPTym8dE0FrqRb/wQ+T9hWnGp+w==","signatures":[{"sig":"MEQCIDdsepoVEwVeYNKeuVuoMyBoX+1hlwCHdk+8pDePRrlRAiAkktkkyJALwNYozkqxVyfL+ud7yvCpniVC2T3w91jxOw==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":59599,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJg8iHCCRA9TVsSAnZWagAAcUkQAKSDlh2I/T4Z/lEia81Y\nBGF1LQXBpCNL8adZwzznMk0SUuxLXMNECc13m8bCMF2BjOu9dw5ViB8SD7AH\nBXlA/4QNOtuWSsc1nBkjIXA70VXLleBRrFz7UrMUiuFCRwk/sMcO7pmgPdga\nyNAFom7n++rbHOLMbJGRGBuxpeLK8zUHcGRgftqQDNKvVV2GaSR1YRMRTadv\nXneAoGQvXRe0fakCAsG2NxaXiMJi5REHFd+0LqddegxRsKtA/TMmnKISs6oK\nLiZt2kiRZRCeT/xUfMzgfLX4bMebFp9an6hZ8M947rZcS2Py+0J45wWcW8o5\npWy5n8PyEJmuWcZGEW2juG4yRfo+vKGmeswg15UlKlN1hwDrysgVnP+NM7g4\nKYsHdM1ITg9wRAyt76v77p/R9JCcAtxXxVjg+vZD6deypT1m6tPfzqzH2wl8\nDctZKdXC+5OmY+kgF1015hLUsjX6FatAhNDApncLIvyE7/SuDLnmK1M8AdMF\nLWt7lV/WMJGPPe6OS15YKKitTXBSmxe3ulwNwp5f0nP2fPqRdPlJjdqhER6v\ncFsXJ0zOlF2lQt3+10RFhEMnWBrrgJmi35U6peeb/UdXZDA6sKy03el6KY7Q\n1HxLoNa5p2Gr/4dKuvYqAxAbmztblkeL8z/0akekezet8CbbQewcYQtHIqlp\nJx2K\r\n=NEUK\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\n[![Publish Documentation](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml/badge.svg)](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml)\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=14.2.0"},"gitHead":"48cef9de58ed70e4cd231ee2ae91747769c4cdde","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc -p tsconfig.build.json","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"versionist":{"publishedAt":"2021-07-17T00:15:33.539Z"},"_npmVersion":"6.14.13","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --fix"]},"_nodeVersion":"14.17.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.8.10","@balena/jellyfish-logger":"^3.0.52"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^27.0.6","sinon":"^11.1.1","deplint":"^1.1.3","ts-jest":"^27.0.3","typedoc":"^0.21.3","depcheck":"^1.4.2","typescript":"^4.3.5","@types/jest":"^26.0.24","lint-staged":"^11.0.0","@balena/lint":"^6.1.1","@types/sinon":"^10.0.2","@types/semver":"^7.3.7","simple-git-hooks":"^2.5.1","@balena/jellycheck":"^0.1.1","@types/json-schema":"~6.0.1","@balena/jellyfish-config":"^1.4.5"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.198-remove-whitesource-48cef9de58ed70e4cd231ee2ae91747769c4cdde_1626481090686_0.8545869481828983","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.198":{"name":"@balena/jellyfish-plugin-base","version":"2.1.198","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.1.198","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"7654776e19869d0b9d1ea20de51dfb1573c24cfd","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.198.tgz","fileCount":18,"integrity":"sha512-2Yc9Pd8DEJvB4zeVpZJCiVoLcA4gJzFy34KVA8MDRcTmM6j2/djaWtZnAqnMdnoaVwrcUjKVEOqkyxXYFCqCeg==","signatures":[{"sig":"MEUCIA7AHlxZxhy9VJMbjEPgIa+JGRIbbnosMXYNM+TdNzRMAiEAsP85dQGUaU3CMbbgD1uJ7TYTyFEMfoPsp8Toi8ZJ1es=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":59546,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJg8iIRCRA9TVsSAnZWagAAH/UP/3l6Z118rtcjAiNV+1uD\nAdnLLbQqWZQoCpgq/Gvs1bgszkLzJ2LqybqZKCpi34fzwtrHxagVk3DtzRQk\nd6diqNo6cgXxRJ4+yM3IoSqNoBQt/7B8fk3X0MzXMigCcRSdCHAegXKQ5kTJ\n1RhUa0k+gLECfdcpzapGvOwUqwj4JGkLGlcNHHhNaPyK1SMv38j5A2zNmMBh\nPnrpFEsmrTslnyWgQy99/EjmJ3xUZtn7Q/Ay7Dw6kykJGoQlTIaXmIDP9fpo\nSQbHkuiaBTST8SZqLB3fazWC0fJDnQy36p+9tXSUQkEcHPDPMbCLXyTgjPA5\n1WLCd1K693hrAuGX81p6+plxBxW5KEHpmNUBp+Xn+95QDq4b+vE14yu2Yexm\nabfho5S2GWBUektPymEJ14gyxbskzN5O8vswOrelqBYjYrXfmTanefYNvmqa\nAmA/pXOUjVzpDL3t3X6JBOdGqw4iNL/y5mQ9Un11574j5q4q9k7ZKUvcPExL\nf9lZ1cfWVEgaVaAosSERUK/z13g0jfOW29VB9QsK2VQA2Q8nU0mzv5HGlKAl\njVrBzHKg0kSy7ZFLizqQvJZQiteFGDe78nVQzL2sNOnTx7XqOmRFh8DfNq4M\nb7gIz3qRT93vPpnOScA3/tWCpAVs+7PON/ZHO2SLnExyI5/1GPV+2bbpqhOE\nsd36\r\n=5dCw\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=14.2.0"},"gitHead":"72f2a633f33684f8ccb1ea9d262312b3e1185099","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc -p tsconfig.build.json","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"versionist":{"publishedAt":"2021-07-17T00:17:42.672Z"},"_npmVersion":"6.14.13","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --fix"]},"_nodeVersion":"14.17.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.8.10","@balena/jellyfish-logger":"^3.0.52"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^27.0.6","sinon":"^11.1.1","deplint":"^1.1.3","ts-jest":"^27.0.3","typedoc":"^0.21.4","depcheck":"^1.4.2","typescript":"^4.3.5","@types/jest":"^26.0.24","lint-staged":"^11.0.1","@balena/lint":"^6.1.1","@types/sinon":"^10.0.2","@types/semver":"^7.3.7","simple-git-hooks":"^2.5.1","@balena/jellycheck":"^0.1.1","@types/json-schema":"~6.0.1","@balena/jellyfish-config":"^1.4.5"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.198_1626481169746_0.4539991438213773","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.199-remove-whitesource-f45714c77799cbd79eeb90090ddf6c9a2d546ab1":{"name":"@balena/jellyfish-plugin-base","version":"2.1.199-remove-whitesource-f45714c77799cbd79eeb90090ddf6c9a2d546ab1","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.1.199-remove-whitesource-f45714c77799cbd79eeb90090ddf6c9a2d546ab1","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"9c27ccf522da713fa4ba5941e1470ea8ae7ab8a7","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.199-remove-whitesource-f45714c77799cbd79eeb90090ddf6c9a2d546ab1.tgz","fileCount":18,"integrity":"sha512-XxFG3S5bKXtJg+xc/c/ysuBmv8nFMgLsoHIYilH5fPaYd3Rnsx9m8yGc8CXAycM5U7Khdc+BJ1N/Zgt133S2ZA==","signatures":[{"sig":"MEQCIDB1XBRkeux7L3CQzEgAs2vbTnLK46HKz4en4Vbn8tNQAiBcUtU5oFSUyngstVWqoG/COEELC21XJOfyj93VC3sjDQ==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":59675,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJg8iReCRA9TVsSAnZWagAAOx8P/igcAQdwzyv8uwYaOwfT\nvuTwuAAvrclZA6JBW20syw+T0wT7/SuLTu7Gc+RA06UTbbSSIjmLUTw+cJjj\nMiEEiYc1D6bJ6+2ZOscmvgHL5gNeg/26P8Gi18cNvPnf3jwF9IrCzKkMu9uc\nqimQHZirLJ9OhDsqVVIFPgb2rtria5zSR9g4kgBxDsrUVn2xJD/YwfphKQkp\nFenR4BhyaUPvRu3ImnHVupLLYYqcXbg5Uwn1KW3HJ72qU1yCYiinnECWTDaZ\nEeKSqcFfbFENHJLk7IuTfDe52DTAB8A9FW+5gOXDGLxQSQvBGZbeKWqOq988\n/BcCL/gdclGTw8kn5RStbewLDUoxw0XzYASY9jzb/gwRYTDYXiH+cjTkmo4j\nCpqULXfxQQ2HEr4UeslMTxYEruZMvwhD+ad03M5/cPwoD1UKxdDbERNo8tPV\nEy7c6VvL8bgOqiV/DpboK07B9Jj5ALm7jYh6QrP3CPIKt9oaINxRRoG9Xi42\nW+E4LCkJqw+O6U1bHjI4dKLOIrK5Phrqg5P+PGm/A3gIAftUdBGhp5CmHSLt\n4V7ePoXSzLlVaS3AMreXOy5qo8H/dvRyJ0xxVcD+yEQEblOkgwi7VAbxfHyr\n1s64sjrTXDOQoPQ2qC2LYQ+pfv9HkikCV1iyuYtOSCnDgwAeBsT8RHdu/JXA\nXiZ+\r\n=cbw3\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\n[![Publish Documentation](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml/badge.svg)](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml)\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=14.2.0"},"gitHead":"f45714c77799cbd79eeb90090ddf6c9a2d546ab1","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc -p tsconfig.build.json","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"versionist":{"publishedAt":"2021-07-17T00:26:07.093Z"},"_npmVersion":"6.14.13","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --fix"]},"_nodeVersion":"14.17.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.8.10","@balena/jellyfish-logger":"^3.0.52"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^27.0.6","sinon":"^11.1.1","deplint":"^1.1.3","ts-jest":"^27.0.3","typedoc":"^0.21.4","depcheck":"^1.4.2","typescript":"^4.3.5","@types/jest":"^26.0.24","lint-staged":"^11.0.1","@balena/lint":"^6.1.1","@types/sinon":"^10.0.2","@types/semver":"^7.3.7","simple-git-hooks":"^2.5.1","@balena/jellycheck":"^0.1.1","@types/json-schema":"~6.0.1","@balena/jellyfish-config":"^1.4.5"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.199-remove-whitesource-f45714c77799cbd79eeb90090ddf6c9a2d546ab1_1626481757991_0.2818287964778037","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.199":{"name":"@balena/jellyfish-plugin-base","version":"2.1.199","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.1.199","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"ce826fa7fb372201399764676aa444b8ec685baf","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.199.tgz","fileCount":18,"integrity":"sha512-pqTfUzJFq5BVprZNwC2RiMlcitsZTXf9qG4XgRp/lhl90ojMieQ3ATqDiHcYNfQR3TOjYGVftRABnlglfDwuvg==","signatures":[{"sig":"MEQCIDxjW5Zr9m211Oc5xRNhmHMGgNApsjLhcx2r1tu92Wl5AiA7gllMQErcAPnoCv1Vcbs8AP6rzqHuwEhbkW4/LWrpig==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":59615,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJg8iUwCRA9TVsSAnZWagAAE/QP/19PfjnroaoyIVxRsBUK\nf7+FZxDNPQ9pq+5n/kRI/nzYpEtUx8a4JS7+6WSGHC3C8kOw43ukxeCmEokB\neUpaKpSxanJvKBymNjhMfuHuDNQ1f/u+315kOVvnrn4BLSBlUmy2QJKUSnJ4\n+8QcURKcSzq0cPmbCScZRZdhjiWRQNEkF8CiwSJTFs3nPPr3hmy4ZVO560qq\nnAoLX051JteFNIs6boKSHvlO0BCn14ah+C4rz0qYDa59q+THqD2NjwXj+cMU\ny07hwHbBukqf5bkHqIxzAAXlHqYENZbm6JTGFc8hLPPD05AgUgXoh9BKFqha\no55uNoKKRxjQgM+FVdHXokeUFE50gXHjI1a1KM1k6KN0OQpqb/UW+wIxXsxM\nfPYkQ1X5FXYh7zJVlllNylt/VQdlM5S+lLCLpuN8tZXDY3Kt+QfUU4ZCsNn8\nclfPDsNIwFdjnuXzCj57vxFiS5Ay5Ly4EBhpvdF1ZYl7p7pwLo0Voy2OSRNg\nO5iAo+QvMVKdjZ4LwsfpFDucMuDPVq0SmS/q5M9HSO60xbsvxSSqx4xCpY0R\nxuf9WYViEbK1CjNJFiJmoyzLL1e0tUUxxYHbUQj70eVbqmnDqWpNIyS4WnYO\nxNo9dJFOVVxjOpw2nsFELzn0AQgUSH0ZDvZNQYuU8UJtt/V6rlK2ggkJrluV\neOSe\r\n=JYfR\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=14.2.0"},"gitHead":"8ed94c12135ad626626cb6bdf6a890115f4bb0a6","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc -p tsconfig.build.json","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"versionist":{"publishedAt":"2021-07-17T00:30:52.595Z"},"_npmVersion":"6.14.13","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --fix"]},"_nodeVersion":"14.17.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.8.10","@balena/jellyfish-logger":"^3.0.52"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^27.0.6","sinon":"^11.1.1","deplint":"^1.1.3","ts-jest":"^27.0.3","typedoc":"^0.21.4","depcheck":"^1.4.2","typescript":"^4.3.5","@types/jest":"^26.0.24","lint-staged":"^11.0.1","@balena/lint":"^6.1.1","@types/sinon":"^10.0.2","@types/semver":"^7.3.7","simple-git-hooks":"^2.5.1","@balena/jellycheck":"^0.1.1","@types/json-schema":"~6.0.1","@balena/jellyfish-config":"^1.4.5"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.199_1626481968601_0.4494579306615891","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.200-renovate-internal-patch-b729c2b38ab939995ff92d2268701eab4a8ddfcc":{"name":"@balena/jellyfish-plugin-base","version":"2.1.200-renovate-internal-patch-b729c2b38ab939995ff92d2268701eab4a8ddfcc","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.1.200-renovate-internal-patch-b729c2b38ab939995ff92d2268701eab4a8ddfcc","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"26664d3e530fa27ef3a0ea75c4846f6e198bc407","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.200-renovate-internal-patch-b729c2b38ab939995ff92d2268701eab4a8ddfcc.tgz","fileCount":18,"integrity":"sha512-1HSV+RUDTWpwfvYxvxvTB9iaAfQbbEmS6/3uJbNCWzXqmtm0jUegzxEJbv3Lb0P6m3KPhmzrL8lZ0U6BtGwoYg==","signatures":[{"sig":"MEUCIQDATDEU9KkqHhWkcPVvzYHqfIf4sosIhOlGRRoVaJ6AuAIgfXJE2648dSOO4nf+D0mi3z5FD/Tr0a2WYwOEv031y6s=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":59783,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJg8ibdCRA9TVsSAnZWagAAdw8P/2jTs0lkYCXyTXglhjEx\nIKEbpH4qC8UkRu1p6drXADkNPa7DtkEnOO7e//1XZKbBKvK1F4ss/gpAi1pr\nuoAHjcisZ1dMi5tH51smkABQj/1e4yCQGIde94bwa5VBfapfL+RYbrl0G6Mj\nrrqVVNcvCIuqa4Q66M5hZZa8hwuNfbt7qeWjDpbhgimTW7FECcxC8QqZnjmi\nKiSEI3+VeKytc1a1+wiZtvv/ZUNcvcc30U7wRb5ea34Wkt7EiM2LjODEwC5F\nsW1tpsBs2//c6NC989vjB75oEWLsdfvXwItzpXvfSp1qBqf2K7c95W3DIbh7\nWWAdWmMTItbKwfAzn42JjY5SPnGPHRoRBmmiOnYuBu7LcqlVhnaPbz9V0aSi\ngP+M5qQ4Z5CqrU2MMDP6ia7ZCqA0XyV/Ubrr1qat709bofDl7YkIHu/yw9Gr\nvT8u3RZd9Pf2/XYGnb34HAvxMqBJGRE/RhuR2DqRDxoBNKM35xxB2mIRlCz7\nOMR2l6oQ8Cjx+XV/kyWgn80bPhYPNuvH4IkrJX3bZ0vWw7QaIcojnZTQEXaK\nlLToJ+5xILL0DKwds2K9BXhSsYC6p8cF+fjRl/psAKmQnZRJ/OIKmW3rMoxw\nRn+9UlDH6W1gqmIm8Jp7o8YjkG/XCzGsTS8HKlq7Jp/w/k2V7uDFIonjxIoD\nNDtZ\r\n=cMaP\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\n[![Publish Documentation](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml/badge.svg)](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml)\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=14.2.0"},"gitHead":"b729c2b38ab939995ff92d2268701eab4a8ddfcc","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc -p tsconfig.build.json","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"versionist":{"publishedAt":"2021-07-17T00:37:11.339Z"},"_npmVersion":"6.14.13","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --fix"]},"_nodeVersion":"14.17.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.8.11","@balena/jellyfish-logger":"^3.0.52"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^27.0.6","sinon":"^11.1.1","deplint":"^1.1.3","ts-jest":"^27.0.3","typedoc":"^0.21.4","depcheck":"^1.4.2","typescript":"^4.3.5","@types/jest":"^26.0.24","lint-staged":"^11.0.1","@balena/lint":"^6.1.1","@types/sinon":"^10.0.2","@types/semver":"^7.3.7","simple-git-hooks":"^2.5.1","@balena/jellycheck":"^0.1.1","@types/json-schema":"~6.0.1","@balena/jellyfish-config":"^1.4.5"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.200-renovate-internal-patch-b729c2b38ab939995ff92d2268701eab4a8ddfcc_1626482397124_0.8825713444710328","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.200":{"name":"@balena/jellyfish-plugin-base","version":"2.1.200","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.1.200","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"70bd7157fa25a31dd40c70c854f1db4002269fb7","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.200.tgz","fileCount":18,"integrity":"sha512-yXW79SAg57c9rZqu2IAO7ZJHyvZr3hgl3/nJ3jDr5nfHrUDpf7lXX7EIon3RQ5wwfqFce2k1YzTO1ppWjzQyqA==","signatures":[{"sig":"MEUCIQDCqjiVqcKszloD/n58N9EGvxasyrAV3uOhQolJ+0RG3AIga8dYnlrc99Yf8W3H1lvsYRdvLvGXAu73VsAMvIPAV54=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":59718,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJg8ihHCRA9TVsSAnZWagAAVBsP/iJ4qU3XGnDVzfdT1Z6g\n9c+VTCJCsgkDa0CR8vfS7SK8Nv3iQNuw4mqVGPh+aPvLWeaPgSf0iVGODwZu\nnTvUWz32LOvZLQAggTcdI8vJW54aTRtVB/Znk/JEAry0EVmaLdtgkf+lE1se\ncUF8bB5GI8s8/H5mNNC15JC+2fc3JqsRDT0MmoIumfWBX7oZIymt56rbNY9Q\nClgYa2AVtWdiAHqmEKVC/k6794PgtIxURwSOXlXipdnCuPhvice+6jmI4jkG\nqRW1u/wdMQr0Z/mCK+5rXdFyWTxVXU7xurO+OtSZ/5GTfr2P3kBOKlaUdOxr\nxzLrUAfd7KGaaYqEGF5kA63l4SSG2Rd7CB3fMFIp2sWwPHc0HJpHZtyIKKEI\nNA4tkKuopul8mj9NBK8bRd938GvYn0a/WpXB4H540XH3aVOl01+geByYkd1x\ndbNxRNPswPXiCgNdMqPh1AdEtN0/35ww2YcaSZ6PvGUMEGAp7I4hD03MoMDg\nC2kEVSCwkrAb+LxdyRS+FKPCnS0KDagB2MgDXeJSwTtf2fKVHAjK87oc86R1\nn/EvFHkvaAAIJHsABr0xp+yRn4PYRLkL2PGaW3ql5ymietDp5U+1ohIHwREJ\nHR7VHx3srtwTdQx0aGHeHYKHELiqlohj/iIx1CL/wM1sL4dsna8d5te6pi62\nhENL\r\n=gOsr\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=14.2.0"},"gitHead":"972953c266e6cc98364f61867a695bf9e4a29f97","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc -p tsconfig.build.json","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"versionist":{"publishedAt":"2021-07-17T00:44:11.640Z"},"_npmVersion":"6.14.13","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --fix"]},"_nodeVersion":"14.17.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.8.11","@balena/jellyfish-logger":"^3.0.52"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^27.0.6","sinon":"^11.1.1","deplint":"^1.1.3","ts-jest":"^27.0.3","typedoc":"^0.21.4","depcheck":"^1.4.2","typescript":"^4.3.5","@types/jest":"^26.0.24","lint-staged":"^11.0.1","@balena/lint":"^6.1.1","@types/sinon":"^10.0.2","@types/semver":"^7.3.7","simple-git-hooks":"^2.5.1","@balena/jellycheck":"^0.1.1","@types/json-schema":"~6.0.1","@balena/jellyfish-config":"^1.4.5"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.200_1626482758902_0.8419235898587272","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.201-renovate-internal-patch-0f429d45981bf91b967dc4519efaae6330f55157":{"name":"@balena/jellyfish-plugin-base","version":"2.1.201-renovate-internal-patch-0f429d45981bf91b967dc4519efaae6330f55157","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.1.201-renovate-internal-patch-0f429d45981bf91b967dc4519efaae6330f55157","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"504800000a0e24c757330059bcf43cbd7bfac4cb","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.201-renovate-internal-patch-0f429d45981bf91b967dc4519efaae6330f55157.tgz","fileCount":18,"integrity":"sha512-cUmYWzmhbeTa3PisQff2asSyA39vmkbf3JLz1ZOttklo/zysNJsaa+O4+9GUVFtS15jwQEjAFtRjjQ04d3UtJA==","signatures":[{"sig":"MEUCIQCQbf/0MkP10PoHvnL2pnyKo/UjRas2E/TS9vHp/glMNQIgN4Do8myZwXu5OJoUCaPskSUDwaH2iMYD8UfcsRUiDlI=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":59886,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJg8in9CRA9TVsSAnZWagAAT3IP/i0hiWL5eJAhTyIBHVec\nmFaz10zGpQV4jTLXoxDSz0sSSkABa90gpTHXwj3Lmw6h1Bsxuzm1QVW8u34M\nS3BLjpBe+5AsMOtj0slbxtT5ANsWgJxXxtUTc30dv+qNBbuX4ElTMMyxd/dy\nK2e+0E5CKqqat+4VU0nCVDgKQd+JeX1FykGozuS3S7ECN8fVm9gNMRWike7b\nXCiakG1lO4WBtn9s3fzKoN0Q41Mr6g+n/aKOXLrqK/wyHqBNmvZIEFIH6J0h\nevnJ2rdMXLLrMrxd8ZdJmIiA1kUk5qdhA+dpxSqFM48HVmUdYDAb0gJKujQU\nplPlPcxckLUjt/nYhcKrIMzz5M6ZontJpYHIknG29POSfEIs+dTRy+gtZiWS\nAV2BBgOw2MxSMcMoYFXa7cS3HxsW9qY6opmbLCoCu8LgTvKnK1rf6WuvsDs7\nwf/325l3W3IkNrofI+taVRwSq5+1arnSjS4OSmC41YlDwTGbtnlwd1kz3GNP\n95QV3U4PaFNAkbwADrE8Xl6m2BSILwEghqCLWKDkXR3V/ueEIrSrzleEvHlp\nhxBK3X2Ri6S+6PFr/OsQqDrOo8upUvC+lGnlDvEkl1qGABWZCD4GIpx7DcCU\n2fCi1zMUE3jqM2H+rkUIebV/MHbK8GinIVyTRU8c/Pm1oI9LNzQwmwlCi9Ns\nt6HS\r\n=uiI7\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\n[![Publish Documentation](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml/badge.svg)](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml)\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=14.2.0"},"gitHead":"0f429d45981bf91b967dc4519efaae6330f55157","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc -p tsconfig.build.json","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"versionist":{"publishedAt":"2021-07-17T00:50:01.998Z"},"_npmVersion":"6.14.13","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --fix"]},"_nodeVersion":"14.17.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.8.12","@balena/jellyfish-logger":"^3.0.52"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^27.0.6","sinon":"^11.1.1","deplint":"^1.1.3","ts-jest":"^27.0.3","typedoc":"^0.21.4","depcheck":"^1.4.2","typescript":"^4.3.5","@types/jest":"^26.0.24","lint-staged":"^11.0.1","@balena/lint":"^6.1.1","@types/sinon":"^10.0.2","@types/semver":"^7.3.7","simple-git-hooks":"^2.5.1","@balena/jellycheck":"^0.1.1","@types/json-schema":"~6.0.1","@balena/jellyfish-config":"^1.4.5"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.201-renovate-internal-patch-0f429d45981bf91b967dc4519efaae6330f55157_1626483197489_0.8535821563802211","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.201":{"name":"@balena/jellyfish-plugin-base","version":"2.1.201","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.1.201","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"3fe3c821a0933c98d539692d22ce213c795e58e8","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.201.tgz","fileCount":18,"integrity":"sha512-pgyFC2cJiaKNltPM7hxNSFwnrNSf93rxx0GyQKI63wZ9LOvtRrpxFIoDN+1/lBIel74k/rQgKQ37fCjfTI8QTg==","signatures":[{"sig":"MEUCIAv2kLgvIcEVuu9znDO3BkMo5/CP9oUB13f5hehFAQhGAiEA2HZfmDKyHbmAubBSBf6EZ+Iew/nDtZ2BdgDXvoLog2c=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":59821,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJg8iroCRA9TVsSAnZWagAAnYgP/RuINZ3RyO2IAexZHYJV\n1sKu9E+8LPSU9oJL5STUVw+Up/kkJGpqUmoKHaIHU+YcV/el9d1aW1uXYC+a\n09UW2bnCq4QSXhV0fRGf8JdHDu9mntHJAjunLIlW5l8AiBuDwySFjUVaE70i\n6/3nmUfkDbxB6NQsMpT9tfSjlEEVRcdQnAU1ywEELbXBe6Kv8S0j8VJiIpsU\nHvzAacoIMwYI+s9P55K8co00zzhKM/L5vZ/tLF5tRDVyAS9uFpRubkXXloOO\nzO+GkNoSKORk+AuE1TF1fQpV9zRUNhbS6AfN9p/bDsyTLnNhYxImVY5s7SxF\nloZPuWWXAQs8CNHfK5lNlqJwTWa4TCGbNr+rgXHcG4GgYT/MvwNsGDLKs2ul\nCaknmN7LJWRCfIZVBfqN1uALxsdgMdHV7pNnyZJ80hOuTuVcwsnlgOvhvOWb\nS5H43T1xmdfrqZGAVAamFy+aP49Ad7vJWvTGk023u0PCloTZ+1oUesB3sL83\nIr3nn3ULYv56X2QYjtd/dH0Gg0L7ZajCXxMvPaIq/KMN2xUldQFApsWxzORt\n4zmjcA4KVNckwTjdbFJcO1D4j5Gocf1u/9gG+gc5pjwIyWYJ+yQR392+Az1i\nGGMwy1nHw+aDiQQW7mJqK+b7xGw7WjYT+DcDkuHaUylxd84DXu4r+y33OyO6\nzG6I\r\n=N307\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=14.2.0"},"gitHead":"d3c5cb469a22f37812e3d383602c5e966920f9c3","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc -p tsconfig.build.json","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"versionist":{"publishedAt":"2021-07-17T00:55:22.366Z"},"_npmVersion":"6.14.13","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --fix"]},"_nodeVersion":"14.17.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.8.12","@balena/jellyfish-logger":"^3.0.52"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^27.0.6","sinon":"^11.1.1","deplint":"^1.1.3","ts-jest":"^27.0.3","typedoc":"^0.21.4","depcheck":"^1.4.2","typescript":"^4.3.5","@types/jest":"^26.0.24","lint-staged":"^11.0.1","@balena/lint":"^6.1.1","@types/sinon":"^10.0.2","@types/semver":"^7.3.7","simple-git-hooks":"^2.5.1","@balena/jellycheck":"^0.1.1","@types/json-schema":"~6.0.1","@balena/jellyfish-config":"^1.4.5"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.201_1626483432838_0.2712567103480297","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.202-renovate-internal-patch-f3c78b8705cba4f4d89f542b09b1a64ce75d3954":{"name":"@balena/jellyfish-plugin-base","version":"2.1.202-renovate-internal-patch-f3c78b8705cba4f4d89f542b09b1a64ce75d3954","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.1.202-renovate-internal-patch-f3c78b8705cba4f4d89f542b09b1a64ce75d3954","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"69f4acfec336906b944833864bbec2273bd36e81","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.202-renovate-internal-patch-f3c78b8705cba4f4d89f542b09b1a64ce75d3954.tgz","fileCount":18,"integrity":"sha512-TznCyqE6UF8gg/EtW4aSEovSl8o5+jNc656pDkmn8R6tVM0km1B32TJVCovzF9C+5+Rlb5RlokfdNUfEGlqaHg==","signatures":[{"sig":"MEQCIBHUL9olvk5nnVpc4RmdaXUtZsjyUx/5LK8diVnJAd1BAiA4i7VhgR4Nj/r7HjaLjUdgSYV/gxTHsJgBUIj/xbzlyw==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":59990,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJg8ivPCRA9TVsSAnZWagAAfkcP/2SJRj7GbDoiO5EnByv/\nry2+2Rz3tT04/XaWlFUW7i04M1r151KRz0DOyh3NB0fONvxZiqrZFPlUana6\npBpp2ZzpgiTR/Go5ieSz2u0zPdW+ZhXLVgF/2Y5ZQR9DcN4HxlgCZtcbif9E\nUaJ5udRpfAWbYsl7J7JTQRE5yq5UPKOhBeex2qb4nLp8FdKRBM5lFWeiSzgt\nE1DeBj8oqH3hAb1af+/+WqOA6EnCphhtRyGQpRTLZHmcO2ftZOKzb9rtycwB\nrH6eBVfwXH6En0sKPb+Q31SVjPM8/lXcblc9XKq5W77RVThhEsVlp4RgejWD\ntkSB3/0sWUQfMWT3spUjYbwYQ1nansG77c1Lj39SLnd25AYXKI5QTQ9Uhnya\nq4aDvnqoS1YofyxN2VgIrFAzzFe3y1mCa/2Q4nnQA9Z+FjX0KnsG+LymCA2T\nAivuhZ5yppALabtyT58p6uE+p+vx+jcEkPkBuducKcMG80s+C3Zi7E603n8z\nHzubky4dFtlUJVoKYDklyf/Z2YKYuHgkqTGyVb4d/8nByidtCfPHlzK4EIw7\nOTg6Ojl4MApnTDgYtrDXBdFO1PwdxBEz5AuTyp2ZnnX/ATt5+sV2YFHU39A7\nGEirgcz2botOd3gwf7savatyQyeu+jZatHUFkRkdmHwH7GjYIErzGtOkEabG\nnZST\r\n=vTGt\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\n[![Publish Documentation](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml/badge.svg)](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml)\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=14.2.0"},"gitHead":"f3c78b8705cba4f4d89f542b09b1a64ce75d3954","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc -p tsconfig.build.json","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"versionist":{"publishedAt":"2021-07-17T00:58:02.680Z"},"_npmVersion":"6.14.13","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --fix"]},"_nodeVersion":"14.17.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.8.12","@balena/jellyfish-logger":"^3.0.53"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^27.0.6","sinon":"^11.1.1","deplint":"^1.1.3","ts-jest":"^27.0.3","typedoc":"^0.21.4","depcheck":"^1.4.2","typescript":"^4.3.5","@types/jest":"^26.0.24","lint-staged":"^11.0.1","@balena/lint":"^6.1.1","@types/sinon":"^10.0.2","@types/semver":"^7.3.7","simple-git-hooks":"^2.5.1","@balena/jellycheck":"^0.1.1","@types/json-schema":"~6.0.1","@balena/jellyfish-config":"^1.4.5"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.202-renovate-internal-patch-f3c78b8705cba4f4d89f542b09b1a64ce75d3954_1626483663755_0.5361295302838287","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.202":{"name":"@balena/jellyfish-plugin-base","version":"2.1.202","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.1.202","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"cd26971f9979ff5a8659bd5460a84a07a5349cc1","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.202.tgz","fileCount":18,"integrity":"sha512-o8nPrlPDzuwfwVoKu1U21dKC6lrGUmB5q6xr5Rtjqj0p4SDZIhs4WZeDuq6jMsWJbnxOtQ4Innq6ipm3OdENGg==","signatures":[{"sig":"MEUCIBCElgLljkUqHriGIeIgBU2fUeteWUSwWActPt/2E6jDAiEAyGofW0lJaZ9lbHLvHapNUGXi3ZhrL/Npf4Q1UVolrEg=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":59925,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJg8kCdCRA9TVsSAnZWagAAIPUP/i9SUq3glrG6IKv6xIIf\nlRLZk6Ac7Omk+GtkqZcaZlV/A7jIzZe29lpqOsiNtYzm1fTqZ8gWuao3nF//\nrwHy2BZCs248O1xIXWNLKzT8vKkuerspsHwPVgUXKIjDK7v18un+9YdGe03e\nMV4/GfqRe1a0GwOyOBcLwghrLjVWU4rtXf8URYHz+H3tcMLVPVEuUMAhyIlz\nxv0+znZNz11gg7eRz7Ra8nPrVWw++iYI9qqSEmN0PRSxn9sxTsdqcQSwXCYC\nEoIT8TmCjRXJTemRGyUpFzVYIF3mv/oKtHB9YM2CFlsCkzxK95WsJQhygMh3\nfVl0g0dEvrJ3+vo2u/RV6IVEarf1KkelcigWW+DYyB2sImki0p1r0uG1ibRH\nAWa65wshU3I++2A1TSxfDtnxsV4ecz4S64zJ8wpi4ovQc6X20B++jbujc8UG\nGokGODsPLUwz0g/P+Cl/W2Zc+FF/mc4RbG97es/Mv9T34GHEcAsWAgypgKwm\nekfkAjZ5Pn0RDlLwcDovY3kSeFlK83mf9CQK+Kan+kacIM1eWbml9CwgvQuO\ngpfc7sA+E6tjSqkaXwOPR4cFb7TDBHBN2f03okROrbgRGlAwVQjzTyKdgitm\nE2g4lrLmc405huSoDc+L89p7fJ1RNv7tHixAwFMJx2X7umBmKcr3aGVIHSmd\nSJY2\r\n=G1rl\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=14.2.0"},"gitHead":"bc063d23827f48ba9a7d021ebc963aed903f756b","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc -p tsconfig.build.json","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"versionist":{"publishedAt":"2021-07-17T02:28:11.685Z"},"_npmVersion":"6.14.13","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --fix"]},"_nodeVersion":"14.17.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.8.12","@balena/jellyfish-logger":"^3.0.53"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^27.0.6","sinon":"^11.1.1","deplint":"^1.1.3","ts-jest":"^27.0.3","typedoc":"^0.21.4","depcheck":"^1.4.2","typescript":"^4.3.5","@types/jest":"^26.0.24","lint-staged":"^11.0.1","@balena/lint":"^6.1.1","@types/sinon":"^10.0.2","@types/semver":"^7.3.7","simple-git-hooks":"^2.5.1","@balena/jellycheck":"^0.1.1","@types/json-schema":"~6.0.1","@balena/jellyfish-config":"^1.4.5"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.202_1626488989747_0.7772371742479431","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.203-renovate-internal-patch-7dcd4c7435cffa111ccee954664c838543286657":{"name":"@balena/jellyfish-plugin-base","version":"2.1.203-renovate-internal-patch-7dcd4c7435cffa111ccee954664c838543286657","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.1.203-renovate-internal-patch-7dcd4c7435cffa111ccee954664c838543286657","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"eef8111b2d6956fc63c415407c979cda3ce0d42b","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.203-renovate-internal-patch-7dcd4c7435cffa111ccee954664c838543286657.tgz","fileCount":18,"integrity":"sha512-gNjoEiJuyg/tfO9Z3EBcCIakSB1BV02iVvrN3d3lCMadsmuGRF/NG3EOfP652QhNJ8kGTAE297unE9Prwq2OGg==","signatures":[{"sig":"MEQCIGfSl96bTQ/X3WWE6huefxUTr3Gxmc+5FXO0V4Ery6Q+AiAAhyitozkAXMkfeaEHe0bvkklfpfQSHDIS8XjFERu/5A==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":60094,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJg8nuxCRA9TVsSAnZWagAA9GkQAKEibYfcaggzMRXyXPHH\nt3jPZqKwfFINuCu47TkYEeJWZ5WfIJYBP+9QzeTys67YHSoo6sVGdOVckj8I\nhAIYGnggiyWEzOjIPHrKgi8uDcIyFCVUjYsXB61T4t2ODOoF6ZN6DrJy8rFB\nIiOD5i58SGuI8GgrjWj3rGx4YpfbONL+s3t2CelbnrhXQ3guHbjIR7KPaBxu\nHxu7rwoQKl5LYStsLQbAnNwtzJfcFfFv3F3Rbk9x3AzI7aiWVIudaUVVKEKu\nAofh68arIwfBVK2awbl3tBIR5TDppzxdtVRZevuz1VQbKpQi8uVtu+qs6Rts\nlEXfpt2XqnnappdEk/4FSxb9vJ99eax4IAwYNtg+OTf4evq5sX8i2JxgG5qB\nRIgazPsG/H4DIoEeAnlgGWqQIIypGE+abSspgWrlhYmoNgf4G1OG0iwOHoOT\n6KBgvx0Y6p+7zAzVXT7ShViaW03/Q05zGEHBSXOq6VbKNKoyePkT6VIULmqV\nk78Ft442TI08frBK6j3D4AdS1vsjlItmDji5baENUkF8UMBGdxs0QsbNwqgw\nE+2e6DhNK+C3F74x/8weaT3NxHyEz2EfTuoKrcaergv3Gi/UsOonc4vFeQpI\nbdtSfUlSAbby2LdgV1MZX7yLGRuaQ1QOWQtagA3U82cwF9LLnmahyYouwPrk\n0psI\r\n=EZdD\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\n[![Publish Documentation](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml/badge.svg)](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml)\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=14.2.0"},"gitHead":"7dcd4c7435cffa111ccee954664c838543286657","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc -p tsconfig.build.json","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"versionist":{"publishedAt":"2021-07-17T06:38:25.862Z"},"_npmVersion":"6.14.13","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --fix"]},"_nodeVersion":"14.17.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.8.12","@balena/jellyfish-logger":"^3.0.54"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^27.0.6","sinon":"^11.1.1","deplint":"^1.1.3","ts-jest":"^27.0.3","typedoc":"^0.21.4","depcheck":"^1.4.2","typescript":"^4.3.5","@types/jest":"^26.0.24","lint-staged":"^11.0.1","@balena/lint":"^6.1.1","@types/sinon":"^10.0.2","@types/semver":"^7.3.7","simple-git-hooks":"^2.5.1","@balena/jellycheck":"^0.1.1","@types/json-schema":"~6.0.1","@balena/jellyfish-config":"^1.4.5"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.203-renovate-internal-patch-7dcd4c7435cffa111ccee954664c838543286657_1626504112914_0.08289657266137795","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.203":{"name":"@balena/jellyfish-plugin-base","version":"2.1.203","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.1.203","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"c69eb01108afe00152001367621820ca61a15459","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.203.tgz","fileCount":18,"integrity":"sha512-1BUiMVAIpFv5VFoTjEbvuHpHlaDd6TyK4Hq4GbgFSi7JR1KbbHrCgb0eW3bQ6rO9y8E25M6qEwmERV6V6scw7g==","signatures":[{"sig":"MEYCIQC31TW/SMv4555nVicZBqQ6F01K8HSdJiG7iQLbRPwguQIhAMHDV9Qlkh7jaBipBghXaJ3nPwkXu7xJ+AFdTfwqwTHV","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":60029,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJg8nybCRA9TVsSAnZWagAA2h4P/0dKNn+oIk2tS5fp5+VT\ntB/oDZGc8sWhTTaKYIfdxlrkcxeWsZxxXio8bhZpvtLatOxfwctsJtxOnn4n\nEsLkGuW2AF/pT8VBqN0RHu8YJRUNa+hDt1tFxu0dd8kroVdCg+vcb0nA1BYT\nE6RvQRq/Zg4H/UZimkTFiCu15bpBzEHUi+qQB7M17ao0SYk3PgLKulIAwnCb\nmBT+EGmF0z7xt4geslgKnI/enzP4vd67unj6cdiRgICXgTFmVd2wQMzMoYK6\nHyFvZDYv6iM1qn0IVgw5fE/fSOVgxlU3TVPXA+1kg43LXsFz8VQk+2qd3DAh\nxxz5MOe8XTKyRSBIzlZG5Y/nabRTi/1TIxy6EF6XYTfJDXI2fExPexjwiEvz\n6ven7zUXaLyQprEE61kQGuwfvK5sEWXp29dLhotVqTJ32jQvBnAu+0MvgjOp\nM6AN+Fr5eaDue/6FBApMkTmGl+3XpEw4yxfZ1T7F/sTtdo9ovkc37ri/vGur\nV+AxgUqeHcAmCxHM89c0S8QBqfsDhlLLhXMqDrpuTHQISuPwlcQqlcRAsSD2\nakag4JxsFlR1r8CZIx4NoaTKbfq+Pyj7HBEf+YxdFj5GlUzlF5new3nOLqqn\n6UjIwnzO3kFN4yH1xucja0g8Awo0DtttQBtWXvXHI8E5AuBalXBO/v/Awadn\np2e9\r\n=m4AO\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=14.2.0"},"gitHead":"2441ca15fc40aabac993e56eadd89d43e30dbcba","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc -p tsconfig.build.json","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"versionist":{"publishedAt":"2021-07-17T06:43:26.208Z"},"_npmVersion":"6.14.13","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --fix"]},"_nodeVersion":"14.17.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.8.12","@balena/jellyfish-logger":"^3.0.54"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^27.0.6","sinon":"^11.1.1","deplint":"^1.1.3","ts-jest":"^27.0.3","typedoc":"^0.21.4","depcheck":"^1.4.2","typescript":"^4.3.5","@types/jest":"^26.0.24","lint-staged":"^11.0.1","@balena/lint":"^6.1.1","@types/sinon":"^10.0.2","@types/semver":"^7.3.7","simple-git-hooks":"^2.5.1","@balena/jellycheck":"^0.1.1","@types/json-schema":"~6.0.1","@balena/jellyfish-config":"^1.4.5"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.203_1626504347607_0.09831628700134876","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.204-renovate-internal-patch-de650629d15c3e60b456e06400c4b52b1f31556a":{"name":"@balena/jellyfish-plugin-base","version":"2.1.204-renovate-internal-patch-de650629d15c3e60b456e06400c4b52b1f31556a","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.1.204-renovate-internal-patch-de650629d15c3e60b456e06400c4b52b1f31556a","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"98a632b76d95981324826dc7e41df1a4a75cecd3","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.204-renovate-internal-patch-de650629d15c3e60b456e06400c4b52b1f31556a.tgz","fileCount":18,"integrity":"sha512-uL3P0DrXaX9TM+x0fvreJa2FqE/+CbBsNlUEpbaHWaphPYvEZux/BQ45piMPyVCOVVMwA0sEVcMPBgym/fBB6w==","signatures":[{"sig":"MEUCIQC/uNdhic+LxtAP+mhaiEPaXaT8A4FmM9O3swbVhb/B9QIgfYPKQ8g/G+1aNUr7N5g7TUdOb+VsABOj0C22juM0diw=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":60197,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJg993jCRA9TVsSAnZWagAAw7wP/3rONVYSKmk/q5nmeTFm\nu0cyN4V0Zb/J2U8SvtPrxtJysdmq4oiqYDH5ib513qWIzb99Ap8JjLOQVacr\nSw28eojFMP+8iBviipxWGK3U36/9dGDCprrw86lj8uIhy8V8sEAk1r5eq3rD\nE2vn9D1gWUbnLaGUZgfQMD7ZMyQhkIWm2gCO68sPHd5eC3u/kjePRFP4aRSI\nu/7GGo4qJsuBbRy+51OnMcMXLfQAOun8GoSbVEAV6YJoDEtOD27J852bkyOV\nzmk+CvGM+vpBKkCAb8A6rEJ4imOcpxi4G4tv82XhPnZpslgCZNlYripc3hTE\n/vEz+8sTdPSp2gZeO5YRuDmy9vrlazKouXhtx3l2azdzmvKMQC8hcN04fmNp\nuvZX24gL8IW2iVrvTP/z1pJJdDAd5AmOeH6uq0WUoze1t+U6pxp5ycK0cfKP\nnWagBVfx83vqWWOsX76DBqo6ZLUCfz5fD8Mb5KXzzXPc33/7lRWahdsMKC1Y\nrrDy1ap4+CE8B8GTNsVynBNOcN7l/FCZYBFvNcqWLPUvGBGvYiC2G/+UhBpE\nlrB4cQz3rLyKYGVWsnptzBB/7VRnAsPlA8BacnA21XjwlPsFbaKHGGddUM/Y\nG1rWIR+jhJ7vDMFqZ08zGShT8nXY5kxDQhcOnIxlMveXRpF47wU/ZjeY9jnE\nIkq0\r\n=CpDy\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\n[![Publish Documentation](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml/badge.svg)](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml)\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=14.2.0"},"gitHead":"de650629d15c3e60b456e06400c4b52b1f31556a","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc -p tsconfig.build.json","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"versionist":{"publishedAt":"2021-07-21T08:39:11.714Z"},"_npmVersion":"6.14.13","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --fix"]},"_nodeVersion":"14.17.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.8.12","@balena/jellyfish-logger":"^3.0.54"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^27.0.6","sinon":"^11.1.1","deplint":"^1.1.3","ts-jest":"^27.0.3","typedoc":"^0.21.4","depcheck":"^1.4.2","typescript":"^4.3.5","@types/jest":"^26.0.24","lint-staged":"^11.0.1","@balena/lint":"^6.1.1","@types/sinon":"^10.0.2","@types/semver":"^7.3.7","simple-git-hooks":"^2.5.1","@balena/jellycheck":"^0.1.1","@types/json-schema":"~6.0.1","@balena/jellyfish-config":"^1.4.6"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.204-renovate-internal-patch-de650629d15c3e60b456e06400c4b52b1f31556a_1626856930611_0.011638150974393913","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.204":{"name":"@balena/jellyfish-plugin-base","version":"2.1.204","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.1.204","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"c21ad5d2b585ffdfcb240af4b823ed88e5c1c3b1","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.204.tgz","fileCount":18,"integrity":"sha512-/X5FmLkk6HFFOUQrZ3uLk4/sd7uNZ1UsluwG8MWiG3t9bk6N5jqnXzFTBlX2LSPgXJY6oVoVOr8LDu5S9e5PTQ==","signatures":[{"sig":"MEUCIDDzXp7j6D2aCcLiD/iZEe3Nw0AMTwIUztynrnrezhGyAiEA+suorv/TZo/aODNoByqPO6W5na4Ej+z185mYTEGMUx8=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":60132,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJg9961CRA9TVsSAnZWagAAn2cP/RI2jOzcWDLtOST3jJ8s\nAH733cb3Nq0obsTdIILAi0ZfkAY2SVLwlWX5wRZdkgehNlDRS5y9agp7uuQ0\nB6kC2oy+7mDv6K2FCmF31G9jBnzbWqTDnky3xZC+AyYBS2AQaUMKm73To2LR\nlKhnkWXKw/tMRHwPPCZGFowEd3FJ/uXJAObY/Wy/MLNYpoFRkbfzKQJtchA7\nVuMTgKi4x4eekiTGwVg1ND7JYKJmHpDxFyepEosMfdcOlD+nQJMoBlfa8ENp\nKbX25G500HjPKEt62+RPvs68vbG/QpOKB8rJECiWoVX7zxJLLUcbfvP8Owa1\nUF/jDaO8khj1sJUI16X6Gjvu9P6nol5ddxhmC0XF9i+hUITTIsMRgUPDaTjm\nzHR9MyhwYsSAjbISR741RS3BU9N+2jGbG3lAiZkx+i6RcLYs9AzI3lLci1L8\nMEDhnDOII2QLVd12iAM99A9wnMlJ2v6a8g7afsNUqPsCJj939SaQZ6jZHP8w\nxoGQV8di2vL+mAgUKp0hQhjaEMyFexdYQqyJQsoR5DC7vCc/fnri0nIj+h6x\n8knUCMSsjyayN5d8CZIbJ5sSBtu96DQcYp5qMcPV+ZUqRMHzdPHrEN8Cnsci\nFuudTekxsMUZZjPUAKUL0TtvBI2jLlIq0/4b+l/49cyX5P5tz1jF037m1rM/\nnw4E\r\n=cIEH\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=14.2.0"},"gitHead":"3444b350e54a2f2c4b59062073e4f85d8e8847d9","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc -p tsconfig.build.json","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"versionist":{"publishedAt":"2021-07-21T08:43:24.843Z"},"_npmVersion":"6.14.13","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --fix"]},"_nodeVersion":"14.17.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.8.12","@balena/jellyfish-logger":"^3.0.54"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^27.0.6","sinon":"^11.1.1","deplint":"^1.1.3","ts-jest":"^27.0.3","typedoc":"^0.21.4","depcheck":"^1.4.2","typescript":"^4.3.5","@types/jest":"^26.0.24","lint-staged":"^11.0.1","@balena/lint":"^6.1.1","@types/sinon":"^10.0.2","@types/semver":"^7.3.7","simple-git-hooks":"^2.5.1","@balena/jellycheck":"^0.1.1","@types/json-schema":"~6.0.1","@balena/jellyfish-config":"^1.4.6"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.204_1626857141768_0.7891735004064468","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.205-renovate-external-non-major-1f25238480081c2f8b2987d51df68ada561fd173":{"name":"@balena/jellyfish-plugin-base","version":"2.1.205-renovate-external-non-major-1f25238480081c2f8b2987d51df68ada561fd173","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.1.205-renovate-external-non-major-1f25238480081c2f8b2987d51df68ada561fd173","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"d2fcf2cb71a2771ebb03f1a9ae7abd1909b71f73","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.205-renovate-external-non-major-1f25238480081c2f8b2987d51df68ada561fd173.tgz","fileCount":18,"integrity":"sha512-mneYlwLUw2YjJ59/uWYtDMtoFto+Z9EOOy2GmSoy1gJv2NVDj3y5FBVwiA2vWo5t3Xsx7MhXNCs1qfdlFNEovA==","signatures":[{"sig":"MEQCID64cBuW5H+X9/e6NfRovHNaKAKpMb2Rqu6k9xPpMgbZAiB56VHi5DimdeAhQ7DRbo3f0qXjPzhd7aLSLrMxEDCrGg==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":60277,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJg+20kCRA9TVsSAnZWagAAUU0P/3yGrMC5HHsok2WZ6ACp\nhyWNYdL/Woc/S0dEyh4C6Jztc8NfPUhfrfYgqO3obzIdgF+KZ3MlXWHjVIvb\n8Dxh/KPoTO/qhk7NwVlzhs1XQ4/9KBN7T4F9aU8vQr/ZmwU+JRl5mAjLsD1F\ntJqyG3e/4Z4s9S0vgP+C2b1d8bZvtwyhCrU4YGIAzGIfjuyltyvqPu1Cro7P\nocSiN66sUtGqkypQ7Ze8TmMWp1LL2Q1tIBGu9x4nBTt5LR2MnwlU0Sj8CaTv\neTAoS7exWKas7+Ew+JIvQYjXKYQfOUZnizlYKEvuCj2R0/ZCCxkxAmEGspQ0\ncfCI6LST4TU9mF/VgIMXChV/J9AP+xPxjj2XBAzIO8gNFhadhuAqYu7Hkzjw\naJrhVd549ukVTce8cyLol0WQcVwPAhXA3jhu3OdqRddfLwmN0nmjmMzGElWb\nwBuLS9PfYc3fLCgfER80LymNXdCCvh3GyO3kYb2XdHwl2oGG7INDkld7fS46\nvJLjmTPmiTDTErD6EhMLj86+8BM/9L+XS3o/tmfGUsCIkYwSLnTxVYmkJyS1\n86NvwYet1naBME5mJl0nUtpzDl2m4CG0m/lyjVeH69lBGXp/HXA7KVK+HC7h\nObaFZ38Cfy8FmZGLFEysNtuSDPxln76Kb9i3k3va2yztEoNg2sp5kfcqJY3c\nu5LD\r\n=vFe+\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\n[![Publish Documentation](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml/badge.svg)](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml)\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=14.2.0"},"gitHead":"1f25238480081c2f8b2987d51df68ada561fd173","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc -p tsconfig.build.json","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"versionist":{"publishedAt":"2021-07-24T01:26:20.271Z"},"_npmVersion":"6.14.13","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --fix"]},"_nodeVersion":"14.17.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.8.12","@balena/jellyfish-logger":"^3.0.54"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^27.0.6","sinon":"^11.1.1","deplint":"^1.1.3","ts-jest":"^27.0.4","typedoc":"^0.21.4","depcheck":"^1.4.2","typescript":"^4.3.5","@types/jest":"^26.0.24","lint-staged":"^11.1.0","@balena/lint":"^6.1.1","@types/sinon":"^10.0.2","@types/semver":"^7.3.8","simple-git-hooks":"^2.5.1","@balena/jellycheck":"^0.1.1","@types/json-schema":"~6.0.1","@balena/jellyfish-config":"^1.4.6"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.205-renovate-external-non-major-1f25238480081c2f8b2987d51df68ada561fd173_1627090212356_0.8677076013331781","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.205":{"name":"@balena/jellyfish-plugin-base","version":"2.1.205","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.1.205","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"e0ff17b9f689f6fa0723d0aa323a1ce584022e6d","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.205.tgz","fileCount":18,"integrity":"sha512-UOwLvRzSQIUTtRdGDvangMbHlXS5zOL0aeM7cOloVUc2BKlZrEZn7YH8sfNIOh3pPSc5E3U3LFllwyJLYZMXAA==","signatures":[{"sig":"MEYCIQCFczLlCGWr3mbOvdkUAZhYBy/egmmNdVeQRiE4/Z6MDQIhANe+CKyKZQtVRk2iVl9/AEBpLqzoANK4QtNdDoIiuWJT","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":60208,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJg+23vCRA9TVsSAnZWagAAN9wP/32IF7GkPB/Wa7H2xs8S\nYCHub2yrlWR0bCa0g8vZSgD5p3gGtHt1RZXptdYU+c2u2oOtPbUawMmjg6w7\nFp33FoU9soqqzGSzTclWWIJzDycxLYplEhor0tMud9Vc6wZ2VGvYjmCHAClj\nacDadm4I1ZYEOw7ojIHQys64yKMw9e7RNqGtYLFEoRtHDRvwyRizpX7jI7qO\nbH4buKyJenrY2f3CekbElEBruDCd6WiYxWqdI575jNlOcPYUaPdH05AG4FNc\nnU0qEbjgVkFF0ECBP5coEubCfklK6VrwFm/DRkVCEO8KwWMovTWapNkkCAGP\n0KjQrObCphKOxrR9vRJ1clHH3KomBvopLRBcdpd6OYw22zFP3MWxUh92n/gO\nQggAnMYoSB1MMH12kENqO3Q9JyZHe4M8HhsaMG2o5x/isCF8sDiQoRG2cC9Z\noLxhW5oIdOnrKIBjHm/KSai88fHRn4cVaMOIIed6B+4C3NCo+/+cUPi1Su9t\niCU7KC2DowHGdYJTFW8nn1g1IiuY0iZA4JwRLFYUiIKeUHB25dmgxXOi8vuU\nlRdvvj6mKMJzBBGCebduk+ElD1H2hbmOtMt4F3dwFElslzSu2eLv+C+1c1fW\nSGP2U66iKGwcUOIyDR9vqfUHtqa+u+Njz/OBnSWyZ5UFbbbiPnhduPUe6u7X\n2RD2\r\n=gNUt\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=14.2.0"},"gitHead":"89625153d8a094339d39b36025cbf4d2590300e8","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc -p tsconfig.build.json","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"versionist":{"publishedAt":"2021-07-24T01:31:52.170Z"},"_npmVersion":"6.14.13","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --fix"]},"_nodeVersion":"14.17.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.8.12","@balena/jellyfish-logger":"^3.0.54"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^27.0.6","sinon":"^11.1.1","deplint":"^1.1.3","ts-jest":"^27.0.4","typedoc":"^0.21.4","depcheck":"^1.4.2","typescript":"^4.3.5","@types/jest":"^26.0.24","lint-staged":"^11.1.0","@balena/lint":"^6.1.1","@types/sinon":"^10.0.2","@types/semver":"^7.3.8","simple-git-hooks":"^2.5.1","@balena/jellycheck":"^0.1.1","@types/json-schema":"~6.0.1","@balena/jellyfish-config":"^1.4.6"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.205_1627090415074_0.6662233786701452","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.206-renovate-external-non-major-f600dd519371d461969a4ae48b478a981d14b9c3":{"name":"@balena/jellyfish-plugin-base","version":"2.1.206-renovate-external-non-major-f600dd519371d461969a4ae48b478a981d14b9c3","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.1.206-renovate-external-non-major-f600dd519371d461969a4ae48b478a981d14b9c3","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"2e4343a27fe6ca42b0a7b8ae9d8678695adedf71","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.206-renovate-external-non-major-f600dd519371d461969a4ae48b478a981d14b9c3.tgz","fileCount":18,"integrity":"sha512-qcj35wKm0xPjybieEAiwhWvd5S3J1LWvju7v+Z0IoRV1GNqA62azxSo/lZu/P56D0ROMGwxswPyF3qmwl2PEWA==","signatures":[{"sig":"MEYCIQCIPvcGW8NfKg/F0dLVagHYH9NRyFYgsQ6xP/QhwCAgYgIhAO5mfAHq/TTUBKk9GjJ5iDztDgKu3BV6GQLbd1lLaYZk","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":60368,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJg/AIKCRA9TVsSAnZWagAAxaUP/1vX0aiE0lrazI0togRC\n1ZAXE3K8JzJQiF9jHPVTJ5k8oUMRF107XQ9dDKdNRylGGJQP7NhszlIOTXJB\nUm1NL3Ku6Z+QoyuIGHMVqSkyU3Lzm0CW/dIdkQRKVDzv3h8VMkXC90gZrBrC\nzvui4UV1bCfPGiNpg0yE67qcCx6r815oVwflrQHUJHJ7g7NKLp3Tk5dSZGdU\nT/e8fylNTetR5EiRjlSK9MiqFV25xivB0bg2Uc03mPslAuYWFYPDqkcg9EoC\n/fQsVFfaJJ6OsUuSko1kwBkfBd03+9pF2CbUlawg5T1+Ew+jqWh0+/kGbLTI\nSCPN2xFmAxgWVBIdqnw9SNGTz2nwVGzgZhn6DUzlfzBQd04OyeywjsBKuiAO\n5MvBfe94n7G38oE+l/ZbloCSHszjsigIbayLnJAQXgAOrC7Z2IcuzWD+5W/r\n6o/9RygpFLyYc6/xTCpuQWqT1lBQbWoIvIgmX3UvhVxyN35aiXCP5mKxAHzC\nEDQAUthCGi6DWXKb7PptDtHoy7gBSAeeU64v/E9FJkU8k/Jf1Z7bMkEf2ZXx\nWmiEyhZE8hHbtT25CsoCGG3hUB7YEGFcCOGCoEXOje6LgMxfpOh8AQJonza9\nAwBgaEjbLVJ3iZCNP4jOUAC/g3o8D1uQt6b3+YDhZJnh2HXAamQZHI/6o2jp\n1KHV\r\n=JfFN\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\n[![Publish Documentation](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml/badge.svg)](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml)\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=14.2.0"},"gitHead":"f600dd519371d461969a4ae48b478a981d14b9c3","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc -p tsconfig.build.json","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"versionist":{"publishedAt":"2021-07-24T12:01:46.618Z"},"_npmVersion":"6.14.13","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --fix"]},"_nodeVersion":"14.17.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.8.12","@balena/jellyfish-logger":"^3.0.54"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^27.0.6","sinon":"^11.1.1","deplint":"^1.1.3","ts-jest":"^27.0.4","typedoc":"^0.21.4","depcheck":"^1.4.2","typescript":"^4.3.5","@types/jest":"^26.0.24","lint-staged":"^11.1.1","@balena/lint":"^6.1.1","@types/sinon":"^10.0.2","@types/semver":"^7.3.8","simple-git-hooks":"^2.5.1","@balena/jellycheck":"^0.1.1","@types/json-schema":"~6.0.1","@balena/jellyfish-config":"^1.4.6"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.206-renovate-external-non-major-f600dd519371d461969a4ae48b478a981d14b9c3_1627128330308_0.34807245129688846","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.206":{"name":"@balena/jellyfish-plugin-base","version":"2.1.206","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.1.206","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"76181ee6f761dfe75b88c585223bdf4b5c854269","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.206.tgz","fileCount":18,"integrity":"sha512-IOyfvjLYAMtCis8XhWtWBpmg9idLAoPWi+sYfyrhAx568Rc/Ru8CwI8I7rG1oVa9XkE4HqznYl2vha1qEl9yKg==","signatures":[{"sig":"MEQCIECvdfLBrx5My5FX1fErqaTGG07l0s+pAp7VDkrykRhxAiB2YeyInE8c9TiVUNQdifPdhoWaISv4khzfKWOvgSzVWA==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":60299,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJg/ALrCRA9TVsSAnZWagAAjbEP/io9fFsXViVNizahsEO7\nn4O8cObslO0HQTDxxFLpQc0Cbg5ojmN7wt+Y2LpADfzpvnH2kFOCSma9AD3p\nez3HBU24mADYn+vyDmsjIB0CKIaPubNeVPM2NclsZ0dokiTSqkiLYNEBBcm5\nURyPEa+Mr4LgB46S6QAKb5VAGepFRgiQkgUgGu5NhyDNRDxB+vZGTayyMZxC\nWjeyUuFA25zEQNzCZbb76rE0tgw70WFF3YR1ID5S2uiBOqRLFz8kgTk4WjwB\nt3KT5yUK16g4TFrxYIec1VLCfzFXVE/K+gCAOPete5+GupM/40kxV2S/OViy\nGvKM23sQZrA2xR/ePqQkYDM3lHjdtMDDstZ52oj8RIVrbHo/+ICf7439u8Xb\nYMY46um8Y9wkwM+E5lwe9nIU6kVjwvQt9A5O/uer3ddX6wwgU/6Ah0ujbcfE\nqS7xLVrHJcj9gx+0PIjXsJ/9AB96lwh9QanJBTKgkTs0LhyJXgOLyzE7nHo3\nu5XHQ47McO6cLIrranJtbDhAypbjrFmpkhTG5kLIoIJgkOMlFfanRv8pk5dq\nvnDYW3WWoL6CWsmgiy5g1lpyvm/a9SfFmFVdoVFY+HQoexjX80wTyxciccfp\nVO0w9gTTlYXQqwnIAkJtxnXZp31a2s6Mm0Oax1LOP+RTV1RdykgoqeUZVKGZ\nAK/O\r\n=mlIW\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=14.2.0"},"gitHead":"a845e871824e6d863bef6bb7228c627507f103af","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc -p tsconfig.build.json","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"versionist":{"publishedAt":"2021-07-24T12:07:31.948Z"},"_npmVersion":"6.14.13","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --fix"]},"_nodeVersion":"14.17.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.8.12","@balena/jellyfish-logger":"^3.0.54"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^27.0.6","sinon":"^11.1.1","deplint":"^1.1.3","ts-jest":"^27.0.4","typedoc":"^0.21.4","depcheck":"^1.4.2","typescript":"^4.3.5","@types/jest":"^26.0.24","lint-staged":"^11.1.1","@balena/lint":"^6.1.1","@types/sinon":"^10.0.2","@types/semver":"^7.3.8","simple-git-hooks":"^2.5.1","@balena/jellycheck":"^0.1.1","@types/json-schema":"~6.0.1","@balena/jellyfish-config":"^1.4.6"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.206_1627128555364_0.8292062718846809","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.207-renovate-internal-patch-5ea8c62b0d49fde0547e11a4cd054c788a7fd298":{"name":"@balena/jellyfish-plugin-base","version":"2.1.207-renovate-internal-patch-5ea8c62b0d49fde0547e11a4cd054c788a7fd298","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.1.207-renovate-internal-patch-5ea8c62b0d49fde0547e11a4cd054c788a7fd298","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"4138caa7b22214871678a935c80515d6afcf9789","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.207-renovate-internal-patch-5ea8c62b0d49fde0547e11a4cd054c788a7fd298.tgz","fileCount":18,"integrity":"sha512-Ncihr+k5xxZgMqPIh2wFHN/KPFGi4yYFt4WO/Zfk1pQBLmd1NYSGvjXj5f6S1dn78O3bLnL16n0Fj03v9ukyfg==","signatures":[{"sig":"MEUCIAKqkP+C5EQusGhctwuZ7zG+bmNQWpLJHDfgQY7pHR3YAiEAqEXdBl7e0O9sM7kDKMzcwaq+vQdNoEoBEeH+lCuoyzM=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":60467,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJhAhHRCRA9TVsSAnZWagAAjU8P/39BMdViReYxilBWymvb\np8SyMEylIg1dc1XEsLFkVa+ntnixuPCAxrHeSmzwbr0UZ1e4OOeJfUAq5eVh\nevZEN5Wku+2KrutJGAM59TKm28Ak809qhKS7Vzxnvajs6TfaXimG+RVwjDMQ\nM2170bXiM3yE46h9+XMijnd2x0qLVvWnzLFsx9iCODcIUJTysBmO8/RtgUQl\nvS/r9Yrq4Uj0N0d3oRkH4KvuolUf2pxUzb7IK5x8AizlX+miklWsJKVaR2bh\nATeGR0/k1sqBz9/0yhinD4f9JRTGAsWN5Q4EBog/gP9lTWyxNHG0sIFqmu7l\n0lZhlRy7eSfMPgiNmg54HSjdBoqNcHJE+xAK+E3UZCXBM+e08nyO0joyCFpW\nqEOnT8e6e8sHwrYjnAReW6eGLjGZKCwKgetp2bfpT5c8Ui2MaL1kvhrDyrvh\nWqL03t+GhlgHi6dCFspq7Y61CUaJf/hh/d1V2CxuX52S8sHitDGuaSzcc14n\nj4kVV2zi0xsERC2kP4YkTgEfVBtRVX+BOA67P8eDF1u5PsvceBQr07IM74IR\nBaRHrpNQ4ao0R4xTW3ji97Cp4su03nUKijcyASqTn9GN7rjkpuOOWPEX1z6q\nDSiDM7K5N77IZDEzxkhqSzBEQWC4JjXF13hc14pF4Ga2lTlvkkuSSD0WAu8E\n3GNz\r\n=J2Qk\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\n[![Publish Documentation](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml/badge.svg)](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml)\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=14.2.0"},"gitHead":"5ea8c62b0d49fde0547e11a4cd054c788a7fd298","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc -p tsconfig.build.json","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"versionist":{"publishedAt":"2021-07-29T02:24:00.856Z"},"_npmVersion":"6.14.13","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --fix"]},"_nodeVersion":"14.17.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.8.12","@balena/jellyfish-logger":"^3.0.54"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^27.0.6","sinon":"^11.1.1","deplint":"^1.1.3","ts-jest":"^27.0.4","typedoc":"^0.21.4","depcheck":"^1.4.2","typescript":"^4.3.5","@types/jest":"^26.0.24","lint-staged":"^11.1.1","@balena/lint":"^6.1.1","@types/sinon":"^10.0.2","@types/semver":"^7.3.8","simple-git-hooks":"^2.5.1","@balena/jellycheck":"^0.1.1","@types/json-schema":"~6.0.1","@balena/jellyfish-config":"^1.4.7"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.207-renovate-internal-patch-5ea8c62b0d49fde0547e11a4cd054c788a7fd298_1627525584953_0.5017984704612248","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.207":{"name":"@balena/jellyfish-plugin-base","version":"2.1.207","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.1.207","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"8a61382a7b87ddb311e14ef682172cbcb10ea233","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.207.tgz","fileCount":18,"integrity":"sha512-PpioaeLizFkPhbastUz6JJxQa17o4fpMsPY4puaRblkWEMT4if+fX9HMWgWZC/Xv4sT0QZVeiqZYwnP9Yc6rLw==","signatures":[{"sig":"MEYCIQCJ8t+WvY+hFi0V3bSlU2C3zRvxaPaIwI3xZ86Ilq7JnwIhAPPGomCZRDeBeguj9A1qFdJAjL2+L4wEuS2EDmCTNVEp","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":60402,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJhAhKECRA9TVsSAnZWagAAZ1gP/AsEP+5+0DtsDpMC2JC6\nO9B4Kxhk6A4hgcPrFUzE1j0rQk2r/2aix1XIssF8vFEJlf4mcrd/Tgi/49mr\nbePaaT+eDdgnXOZMPnkcoBjm01Y2454JlJrbbHqZEAxziEZh8zUDQvujXudE\nakdb++oOd46nF8lO9bAfHSbypLvZuf5UuFUpON/nJkL1I5pcsv0cuDSBUdDA\nE4LslLbdUDvu6gUaz8u8tvac/BVa81Wo5dbLFxJFuUTeq+FV35g8FzqUGPS6\nD20cwMTBnegmqkOVQnuDEcdb8mGu2Hgv5mlBZ6h5ZTpTUcy1xbk+t0B18kso\nfUcn5JeT9L7MJmyo/dz4Bdbg3fFCTMKxi/ABA4oK37y1jbnsvIbBlNKuy15v\nEEFGnqsrVAxi2GqVYfH8otaEv3Ws3B0f472EKqvxBAw2CwJt6yZgrQY8ZC3h\nf31u1z25xsZ5Wciv2XPd9KwIKScISap9GUsEyogLNn05JivsxpGFDJ5zp9j0\nZhwr/8wqMNL4aMXlYwzSY6/cmlU4MfJN+CqXvzeJDEYnVlNJuxhGHX8394ny\n+iRM8HFkZ6XTVuGrwshXCzrqwgzQ8N3SvSE4Y6jeum06Q9tAD9YV3qKsuP+0\nvi4kaFjGrXiBTcJzddooNgcdKa1KZR30tPQuzO60HnB+F30rvK4fl1wvXnSo\nnMcF\r\n=IYwI\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=14.2.0"},"gitHead":"f93900dda81fb39c16458017ef09491dfddeb040","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc -p tsconfig.build.json","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"versionist":{"publishedAt":"2021-07-29T02:27:42.497Z"},"_npmVersion":"6.14.13","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --fix"]},"_nodeVersion":"14.17.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.8.12","@balena/jellyfish-logger":"^3.0.54"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^27.0.6","sinon":"^11.1.1","deplint":"^1.1.3","ts-jest":"^27.0.4","typedoc":"^0.21.4","depcheck":"^1.4.2","typescript":"^4.3.5","@types/jest":"^26.0.24","lint-staged":"^11.1.1","@balena/lint":"^6.1.1","@types/sinon":"^10.0.2","@types/semver":"^7.3.8","simple-git-hooks":"^2.5.1","@balena/jellycheck":"^0.1.1","@types/json-schema":"~6.0.1","@balena/jellyfish-config":"^1.4.7"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.207_1627525764382_0.2153847250292189","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.208-renovate-internal-patch-c3688f3bd57f0201c491ee33f2d9b7d21d5c6ad0":{"name":"@balena/jellyfish-plugin-base","version":"2.1.208-renovate-internal-patch-c3688f3bd57f0201c491ee33f2d9b7d21d5c6ad0","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.1.208-renovate-internal-patch-c3688f3bd57f0201c491ee33f2d9b7d21d5c6ad0","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"06ba7ec3cb2f0fb74b409bf7ba6c425b59456a15","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.208-renovate-internal-patch-c3688f3bd57f0201c491ee33f2d9b7d21d5c6ad0.tgz","fileCount":18,"integrity":"sha512-xCwW6/Py8b9nPamFibmjwAmEtolI2TP9m9MaU2pAeU2aDkW2btSf4yVB7s9KIhinB2o5cSiIv7bzvNqKj/Dduw==","signatures":[{"sig":"MEYCIQDCCg3CzrF0bFlhKMtYJbOfr9A79ZQ86um6bnMFAMf16QIhAMwVOlTt+x+0ZPgExl8uXg4jEdvtFaTdE+F6lfOyQRln","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":60564,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJhA3amCRA9TVsSAnZWagAA/MQP/RQh3CozB4rzLbEQ1vub\nhMNOh8O6kwEl4S5aadOwPeBQzwKZAZWWH46BXESTdxxY4KjxJT+DV1261ilB\nrk7vbM/wcgl2LY8bssKVyUMS6E4xioqZRiPHaBz0IxSRy3WnIv0Elmnf9VOn\n0rR6ga8bb7IzyiuTAoL9KHIlpRdO3jwTQ0z7PXrEV7hDacWHzKBwtq+eiPCz\ny3LYoJqRro/5yxZ49RhSx4XciLpRb/2xtOsI5J3HCnxq4vWHOuqqFmawMqRO\nsicJtzxFtCdIZw1rOthLiuzrOscQiLe0AEBnud2W2tnyNZX45J7JhjeJH0po\neBTDwyRtlsoai06EDreUthx2Fa+MLWhqVR60OjDYVAFaKvdx+cJjfZtmSteV\nRpfrt5npM1xkaMbCy3Nje70ztwcj6Jf9Qu1BvwAvpdZ+O6ELpLZgWg0awSGJ\no1Pt7f/I2dsw52RRk2LXAwuyTpLu9GbIHDY9pXOZ74HDw5bQ9MOIdDBRp2Fw\n/+oSam8ZRF2NmRihR0y5sz01IZ0Qd0V479LYtp3YIWsN4ZXYDdjvuZuSXcKj\n1acrp3DBZpPILkdjQ0zV7vTM5G1Fmq4StRvsmUntx4bAg+2jnbQofPCAga+Y\nSlPjNagxVYuyf0KwvOc5sbxXponeSyQynJ2QyaBe4X5PmmZdhqZHyTmyNNhA\n8MB9\r\n=4iHb\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\n[![Publish Documentation](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml/badge.svg)](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml)\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=14.2.0"},"gitHead":"c3688f3bd57f0201c491ee33f2d9b7d21d5c6ad0","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc -p tsconfig.build.json","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"versionist":{"publishedAt":"2021-07-30T03:46:01.446Z"},"_npmVersion":"6.14.14","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --fix"]},"_nodeVersion":"14.17.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.8.12","@balena/jellyfish-logger":"^3.0.54"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^27.0.6","sinon":"^11.1.1","deplint":"^1.1.3","ts-jest":"^27.0.4","typedoc":"^0.21.4","depcheck":"^1.4.2","typescript":"^4.3.5","@types/jest":"^26.0.24","lint-staged":"^11.1.1","@balena/lint":"^6.1.1","@types/sinon":"^10.0.2","@types/semver":"^7.3.8","simple-git-hooks":"^2.5.1","@balena/jellycheck":"^0.1.3","@types/json-schema":"~6.0.1","@balena/jellyfish-config":"^1.4.7"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.208-renovate-internal-patch-c3688f3bd57f0201c491ee33f2d9b7d21d5c6ad0_1627616933797_0.2990380692118466","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.208":{"name":"@balena/jellyfish-plugin-base","version":"2.1.208","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.1.208","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"a414b8815aac6d71daad11d135fd83c6d81ce3a5","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.208.tgz","fileCount":18,"integrity":"sha512-Qd9HX18d78quLZqE5GZ46E4LGaS6fCbTDlj02iLFnSuw9a+JXRljIpCyjt7a8Gu0ySW8r7cl4v82pL6dGp7vyg==","signatures":[{"sig":"MEUCIQC8BvjCNJjRc4bYbIy4NoYMo5tPzQXVKjPaWMStYNO8qwIgG0OBCC3DiNHeWma0twzDS4RxOcI26vSKY/KMY+Pys5k=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":60499,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJhA3eACRA9TVsSAnZWagAAMxgP/1CSlgSH3rdSINkm7Bwz\nsQ4djdcWri5OaUDBU5FA9qbByaZ/VZ1SxiCgBzVYK6WUHmqEAiuWXRzNSXwd\nbEY/M++ZmWXN3TAST1LZhY5YiYIDq/y70fLp+YWzOhDxoe8x8KMegUAoZYp/\ntQCoVNxPLGwdOuS1f/ViojvXtjci2Yg/scFRoVO29Rk0ReYgkLhd0CTamtHe\nnW6R621QhtyTTSN3o4Zc/CprlsVkwsQ3cDzzjand+CAHMbcjO85i3qMTQ+Pd\ndVvA3DPk5FaX5MX67el9L06V+nG5LZXDH6LnGUR3VsurowNd6rwMHP/zUnry\neGSegkFgxoFFWLOYHyJEqnLpu5tMlvtMtnsSKkqvkDHgTEUWrsCdu0vvKHs1\nM/cBAMMOTBxsn2TZmI9yRY+L5Yxf3viMvFRjQmkFWLYvaez0ErFTbCDRbqDS\nS3rcRY6KZksX8DcLbn7hMxVa6hvZjZn3p09PgPVUdMjvsS9lCLYtjARaz+5A\ndl/jOn5BQQ8g7pN3eWFUmuk00F6j6TQBZ7NUiqPVRR9OPY1SEIhTt+as9YXm\nMx3QMYIyia2kSLsBEpPr83F9q2Z4NmSDbYRpzTFVeZflWLxk9zAAnb7ZkKfU\nr2N+Ujd3KPZ8EKEh9ichI7iyO7YVEMrlD9owBGFzpuW7OtSR8me9djaP5/+F\n5Tax\r\n=MZrv\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=14.2.0"},"gitHead":"3d75dbe58b6acfe1e033c1fe7074e614a2283db7","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc -p tsconfig.build.json","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"versionist":{"publishedAt":"2021-07-30T03:50:51.015Z"},"_npmVersion":"6.14.14","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --fix"]},"_nodeVersion":"14.17.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.8.12","@balena/jellyfish-logger":"^3.0.54"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^27.0.6","sinon":"^11.1.1","deplint":"^1.1.3","ts-jest":"^27.0.4","typedoc":"^0.21.4","depcheck":"^1.4.2","typescript":"^4.3.5","@types/jest":"^26.0.24","lint-staged":"^11.1.1","@balena/lint":"^6.1.1","@types/sinon":"^10.0.2","@types/semver":"^7.3.8","simple-git-hooks":"^2.5.1","@balena/jellycheck":"^0.1.3","@types/json-schema":"~6.0.1","@balena/jellyfish-config":"^1.4.7"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.208_1627617152264_0.399735870488096","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.209-renovate-external-non-major-bf026652176b60ae4ce399890425520b00f56718":{"name":"@balena/jellyfish-plugin-base","version":"2.1.209-renovate-external-non-major-bf026652176b60ae4ce399890425520b00f56718","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.1.209-renovate-external-non-major-bf026652176b60ae4ce399890425520b00f56718","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"51db0978d49b14130d324142ad31f132e7eaf6f8","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.209-renovate-external-non-major-bf026652176b60ae4ce399890425520b00f56718.tgz","fileCount":18,"integrity":"sha512-sXnxa6czLpOrccTYcQ6dNwKs5Yr13Aya5MHjICeZ0WDtmZam3p6ZyNjBi6+Zmn8Y6Z7oUIKBQqYyBhkoozHThA==","signatures":[{"sig":"MEQCIChWpSYY24Lt59Mi3jAKwvdL4l/ZV+tHnHllHGi2IIZSAiA2bDX1XNORwrWydsr7GlVpO+fvoj2tXO2EMoBvCaV38g==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":60653,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJhBKKCCRA9TVsSAnZWagAADnoP/2UDtQSa7vVVjwyCGDG8\nwoCUeNHrZtt9qnxkw8fi7GUrOeIfIs6rzORe0TgmtS84hHugiR0L1wnEv+qv\nzitaM4mssDMD1pnKE7UP+5LBn2nmcoCL0qfbzCVpTR2ThopYobJ4gKB79tut\nZr6CLwpwjP6joBCrR76C8Y/IyqN75tOvgutXSZdTw8QfNgXbry22o3kJZtdu\nkZZNHOu4rzI5uZIO6I6yHaJL3lJQS/9n+6UjLfR4JRbAfFRopoy0PSrf7kow\naCiPvaDMUsKCIojslMWUODUDeIMoZJpSwut1TEpdn5834rbs90euJmvQCLwV\nrBtkF+Ctp8Ysmb9PJ6/5mYAMZovV4TKxvY6NaiyI6L/lE12bCEno41vk2ve1\nhVZr7jlYu/egq2epI06zjIfFG1XOVxu/HPP7kZoVxwAJKX8U0pjfN5IiApyD\n2ThDgaMzOsgj+lkKzy4LVnbjxFCKdbFk3HW1VWBHFsj82rrWceFqlViCyK6F\n6YzwYIDF4YzT3ajwodYf+pFRyjoGzwKqjS87hb8lR6TKRXqYRlIIxtiJlIjx\ngc75bvdeb9HJFR5zkevfvKc95ON2VcxQMKjOphGOh2R1ZiTlqhKrTXs95JIU\n38XbuBbK/9JLEd1/XPyQPK6G48Ck70Nc9rVqvIQ5QLhQ9QwFPiP2Gmhqdeqb\nrZXP\r\n=yCdf\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\n[![Publish Documentation](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml/badge.svg)](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml)\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=14.2.0"},"gitHead":"bf026652176b60ae4ce399890425520b00f56718","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc -p tsconfig.build.json","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"versionist":{"publishedAt":"2021-07-31T01:05:51.205Z"},"_npmVersion":"6.14.14","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --fix"]},"_nodeVersion":"14.17.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.8.12","@balena/jellyfish-logger":"^3.0.54"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^27.0.6","sinon":"^11.1.2","deplint":"^1.1.3","ts-jest":"^27.0.4","typedoc":"^0.21.4","depcheck":"^1.4.2","typescript":"^4.3.5","@types/jest":"^26.0.24","lint-staged":"^11.1.1","@balena/lint":"^6.1.1","@types/sinon":"^10.0.2","@types/semver":"^7.3.8","simple-git-hooks":"^2.5.1","@balena/jellycheck":"^0.1.3","@types/json-schema":"~6.0.1","@balena/jellyfish-config":"^1.4.7"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.209-renovate-external-non-major-bf026652176b60ae4ce399890425520b00f56718_1627693698680_0.5659771217745255","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.209":{"name":"@balena/jellyfish-plugin-base","version":"2.1.209","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.1.209","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"3e3e1b94c5a07609eb0d9839a9a594ec8029c63c","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.209.tgz","fileCount":18,"integrity":"sha512-5ZkIMA0QSyu29PUaUUn+jN39C3po4i0pZcNhLkydTcEA0spGqBJVgI2rdJLDoDfxYBKd+eompFCBptjmXQZc+g==","signatures":[{"sig":"MEUCIQDCK1JiJQEV3fMIHOmEKwzBFAe5DgAADUBnnx6S4l3VrQIgVSAY2gtbuSAJY17TU4mqX7lp7Ca95ZEkLCZmMqi8dC0=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":60584,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJhBKNACRA9TVsSAnZWagAABuQP/iEjMLAKg2E7kWLZYaZw\ndVzHVM4oO+Rdx5bSpuLBQVJVMy05Efz4kLP8WKVwaRho95WqU2IXHA++8zqc\nUdDNVcAFENQNvpl5lRk8sPvMHtD4/KwtggegPuAQkkfRjKHi9DsJMwydzmhc\nQaEFsAglXrxsI0TPIWjnuNxC9sWoZYRFaQshjp7X+kbHeH4dhrnubxq1Zgxt\nB3HqPDHp/dz/tufmF/4wYacJmVuI5VN3dZol2I9WkStYZ1zfYiD7yj9WXcjX\nKN7UgL4ujDPadmPXLfGIGUD0UBQR9CfA2r9JcZGiySA3F2OOHUY+B07wC/NE\nJo6y6XsGNlbxl0pxBNlXuAnP3ysn0+jDzIucnzScVmVz/u8yoF8gNntGqWV7\nzspJ5p8YzGqJ0UJmE/wq9iU6NDsx3kcIYQF4uGr2SsODlgTlH6OfggQ9xRm7\nhX0qwVrL/Qaj544l81dAErY48elm2++4CST5O8H7Gby6HMtrjbukR69I/b6w\nm84CyYRRZkK3wo01l00qW0ITUAc20t/f6Nc9G2p571mCa0TOk5Hdmhm0gI2x\n/NRzp4Z+UlRUivoK6COyKwoYxRYV4vkH/K2oPF/Yst+GHIj6g1irqIUfq/02\n7Fy1OUbwqS5fN01pGQBKFTf64hHfd/ge9SUkt8GUgAu++BCybg/sGgBrqzQ/\nRg69\r\n=sD/O\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=14.2.0"},"gitHead":"ef3e9997ecde489d93a8abebd4bed938049959dd","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc -p tsconfig.build.json","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"versionist":{"publishedAt":"2021-07-31T01:09:35.669Z"},"_npmVersion":"6.14.14","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --fix"]},"_nodeVersion":"14.17.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.8.12","@balena/jellyfish-logger":"^3.0.54"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^27.0.6","sinon":"^11.1.2","deplint":"^1.1.3","ts-jest":"^27.0.4","typedoc":"^0.21.4","depcheck":"^1.4.2","typescript":"^4.3.5","@types/jest":"^26.0.24","lint-staged":"^11.1.1","@balena/lint":"^6.1.1","@types/sinon":"^10.0.2","@types/semver":"^7.3.8","simple-git-hooks":"^2.5.1","@balena/jellycheck":"^0.1.3","@types/json-schema":"~6.0.1","@balena/jellyfish-config":"^1.4.7"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.209_1627693888183_0.14221959803858497","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.210-renovate-internal-patch-0fb0a4d9cda954cbf89c6867973dfe9eb1432ef4":{"name":"@balena/jellyfish-plugin-base","version":"2.1.210-renovate-internal-patch-0fb0a4d9cda954cbf89c6867973dfe9eb1432ef4","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.1.210-renovate-internal-patch-0fb0a4d9cda954cbf89c6867973dfe9eb1432ef4","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"ae8be54644f72c5f981977adc93ab2f5def25684","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.210-renovate-internal-patch-0fb0a4d9cda954cbf89c6867973dfe9eb1432ef4.tgz","fileCount":18,"integrity":"sha512-H5AxY2aKLwrbqH2RwoRW1TC6iB/Ev0lTVKIw8mqQhacSL/2w+ZAeDyYexcR0QdAmrBjchqUXi8giqAlsOFtm+g==","signatures":[{"sig":"MEQCIEX7vwzdQFSUzz9uG2benT0kC808J/A6jhd63clZrpHpAiBN6qqQsuck0x0JF6SCrmWedTfSiMxOJXtTHNHYpa5UdA==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":60752,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJhBMFlCRA9TVsSAnZWagAAxs8QAJTmKwhmxdrsS7oBKuLY\nSaET61x2Ia0GA3ahdYGUyxgcMnQCIEctazXYhReeOINc5PT/RSxVhpG86wsG\nG8d3a4ymbMaqpOrKDRSqRw2eUsXSceG36bX7xZEB30Igk7bhp1sKkBCKaeic\nHno+FfsyjSff2mLC2d1NBNL7TP5nFgsQjoXivIUBuWP7ib3d+WliNkWTYyl6\nibIdllLraDDJ/xM0x236EylCNqpX0NilD9OousMgG4qGJZJtx2n1nes4IdnE\nqVmUa9wJFZRffKoCevqWhx3+G3IN8Ftop6z5OCcic+HpgPLCnUwVRQ5a0hiZ\nz0rp/V1wgDhx9VTZUVhO2dktChuggZjKPvpM5at2iQLv35RWAFZ5zbYQi5gY\nY2sRuLUgW8Zjk1PdnURXu0ICtJr5jh1/tRDICSkrgF1I02C5NqiM0U1m5Hwm\nr2nc3/28Tx9i57aRxI/P+VCE4KfA52+r3E4xgQ4Y8+Ah/ZyYMzmAXl3T5cCH\nfXH1u5bhpe9AY5ZRCD7qANRN6cDq6noCWaZvnaqS+B6N07glf+TloXfrf20w\nMtSzs+dm3hpH5URwnBgQh5D5RGGKSN33iiSUGsZEwMxMF4t5WlSEMAhZV162\n+YjjVRfkTh8I32+fTPanU25V35pWdIykg7Va7aX1Nc5AS+ebM5KKWgjPRp9/\njFNO\r\n=u85Y\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\n[![Publish Documentation](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml/badge.svg)](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml)\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=14.2.0"},"gitHead":"0fb0a4d9cda954cbf89c6867973dfe9eb1432ef4","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc -p tsconfig.build.json","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"versionist":{"publishedAt":"2021-07-31T03:17:00.847Z"},"_npmVersion":"6.14.14","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --fix"]},"_nodeVersion":"14.17.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.8.12","@balena/jellyfish-logger":"^3.0.54"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^27.0.6","sinon":"^11.1.2","deplint":"^1.1.3","ts-jest":"^27.0.4","typedoc":"^0.21.4","depcheck":"^1.4.2","typescript":"^4.3.5","@types/jest":"^26.0.24","lint-staged":"^11.1.1","@balena/lint":"^6.1.1","@types/sinon":"^10.0.2","@types/semver":"^7.3.8","simple-git-hooks":"^2.5.1","@balena/jellycheck":"^0.1.3","@types/json-schema":"~6.0.1","@balena/jellyfish-config":"^1.4.8"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.210-renovate-internal-patch-0fb0a4d9cda954cbf89c6867973dfe9eb1432ef4_1627701605105_0.994146438310644","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.210":{"name":"@balena/jellyfish-plugin-base","version":"2.1.210","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.1.210","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"5fa861ff580cb890d9fc1fd5cd54b81884a501b7","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.210.tgz","fileCount":18,"integrity":"sha512-7oaGiAonozTTeTUyLZTw9636NVei8sVUON1XIPMwg58EpUkkCaYFPEuvhY5Un+T2/gRqhhfIsdRGUZc9eruUYw==","signatures":[{"sig":"MEUCIQCvRTFvWXpcDspNq6WFwlPDnipuFfbaJw6nz9o9T90rxwIgM6qnGLqUb1gqD6sUQshZzDvcVLF+a48VfMyV4UCB7nY=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":60687,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJhBMIbCRA9TVsSAnZWagAApJ0QAJp2K3TAe8V4Uijl+qnK\nd6yoswo+xbNzaV0aiG2UvI38JqxIXYEhXETUYVlmWnvm1qBB2/gcZGdMMuRa\nw/mNxQkk495rp5JP+YVvfn4a1X8Jin05CSrq2A3mlU4RtKgK0ymEhI8RPLxO\n75e4giJ1vkggrDkIHVfjHHjGeDdro1xAuEi5cJEYwWlhNWlgRWVVuLcdoKMc\ncLaeYGErkWnhppihSG9W+6YZmBh8V1KZNTja6cAdilFUdbHGN3e3tWNM9cmG\n56sGonCeCrgX0ss1CqiPOctLnS/nIfNVq18xdqmJtOTeRz6X1eQ0FENDoSyc\nuMtuIz/8b5k0YBLiYB3MX53ZERXN0/dCwDDtQsDYJ/iZ/MeK3KGW25wfoqm0\nJ8iX9JQ8hpxaG68GxelJxpbxqXMyLs8y5JvxCUcAgfd25sup7ZAcmy9qfnJg\n0d6LQnMKYp/5NAjXYzx+q8UD9zMsHzBmoTe3OTXeFmgWlC5rwrBLG6qnpa5+\nVumdXyll331SgnQiugLzP495OVWLRkHDfc/QEmfXdXeWL5dkgceWGSANYhyb\nucYGWzEYerV1AgtBZMCGupAhI6Oh3Upphf3ImNpvY2GUsaTTxFajXACWWQMw\nZ+lXlZf+NZr6AYvDo2+2STwk4FoH/SrmMbpgkmmij/dY9JaaLeJpE+LWl0xT\nycX9\r\n=VDq7\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=14.2.0"},"gitHead":"716f5bcce055c49b8230f8bfe65ce983fd447f48","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc -p tsconfig.build.json","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"versionist":{"publishedAt":"2021-07-31T03:21:31.095Z"},"_npmVersion":"6.14.14","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --fix"]},"_nodeVersion":"14.17.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.8.12","@balena/jellyfish-logger":"^3.0.54"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^27.0.6","sinon":"^11.1.2","deplint":"^1.1.3","ts-jest":"^27.0.4","typedoc":"^0.21.4","depcheck":"^1.4.2","typescript":"^4.3.5","@types/jest":"^26.0.24","lint-staged":"^11.1.1","@balena/lint":"^6.1.1","@types/sinon":"^10.0.2","@types/semver":"^7.3.8","simple-git-hooks":"^2.5.1","@balena/jellycheck":"^0.1.3","@types/json-schema":"~6.0.1","@balena/jellyfish-config":"^1.4.8"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.210_1627701787157_0.9591730267814895","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.211-renovate-external-non-major-a89267cddef7c41e7acd924f691ebfd8f33872b0":{"name":"@balena/jellyfish-plugin-base","version":"2.1.211-renovate-external-non-major-a89267cddef7c41e7acd924f691ebfd8f33872b0","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.1.211-renovate-external-non-major-a89267cddef7c41e7acd924f691ebfd8f33872b0","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"474c544c684e0ba4ff93f880c12bfab62f39c55b","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.211-renovate-external-non-major-a89267cddef7c41e7acd924f691ebfd8f33872b0.tgz","fileCount":18,"integrity":"sha512-W1Ag+h1p70R+QSPC0NZWpErTFiWVIHPdgjRxYwhY9afSVTfqI3QuYv2LdkeOU2k53PEls26QPJQMaOyULVobug==","signatures":[{"sig":"MEQCICNIOTQ90PVrTiqNBGEugMmE29ZyvrSEiPZ1dzsE5UMVAiBG69weY+VmTRBSyvhZ0m7KtHvNvNXvhUCbdMKuOIgiAQ==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":60843,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJhBZJwCRA9TVsSAnZWagAAg9wP/iLTSBZEmKNy0JvRGpEb\nrYBF2hdmU2fFd+1A7EA0OXafJk9IzpisnYteGuL94ie8uhApsgKp+m4MSwaL\nBNOAtWJG1rykhs7lGoILegwtR4F8MaZJiykrulMaTmtw+zVSBnkOVVkPOGqc\nGME9Vc63rYscwNhUQqJPpb75R574yoM4AQ4jjj4Wjy6+zOUbjSwN1JFj4Ful\nJMeMw1g9XeFac5Klj157oGEhXo6BYQhJgrGcuVfmMoitBHLremKsCugwJKlx\nQHTm7taWJzCeMB3gatdXrCZTJLFLX85Rddm8R7cYRcE7GVKXjAQtHGGoTg+0\nBwhCQSQtRdUD3BcQErTynGoRMI666H6YNvfHbvEFskqxzZ8IE0mMiaErtdqS\nK0PcNrsgSUeVEs4x3n34G95tAz7L5cQgb9nKuYQRJ9jecBtZxIdFQrPHOaHv\n77gt/TLEMmHQscKnUxGNcDENC7i3GoLtQkqcmT54angzs1mV9h3vHnRvEbJS\nedPlSKURWsr2xZa0m32Srb7I4XOvN+8XT6iK5tQr1e1CFMF0due4dhlcGRgc\neAqhszyy6it5Sqg16AICS7RKfVrlYCCDxGBP9R4XL+fju14z7nK+DjIxhWip\nz8PlIJPIYDUImQAE4MJNYFqyjO7XHVAxNt89Avi5upztzRmLpmqmn49s0bLz\njmWp\r\n=/9t1\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\n[![Publish Documentation](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml/badge.svg)](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml)\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=14.2.0"},"gitHead":"a89267cddef7c41e7acd924f691ebfd8f33872b0","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc -p tsconfig.build.json","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"versionist":{"publishedAt":"2021-07-31T18:09:20.854Z"},"_npmVersion":"6.14.14","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --fix"]},"_nodeVersion":"14.17.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.8.12","@balena/jellyfish-logger":"^3.0.54"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^27.0.6","sinon":"^11.1.2","deplint":"^1.1.3","ts-jest":"^27.0.4","typedoc":"^0.21.5","depcheck":"^1.4.2","typescript":"^4.3.5","@types/jest":"^26.0.24","lint-staged":"^11.1.1","@balena/lint":"^6.1.1","@types/sinon":"^10.0.2","@types/semver":"^7.3.8","simple-git-hooks":"^2.5.1","@balena/jellycheck":"^0.1.3","@types/json-schema":"~6.0.1","@balena/jellyfish-config":"^1.4.8"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.211-renovate-external-non-major-a89267cddef7c41e7acd924f691ebfd8f33872b0_1627755120039_0.43452759330021107","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.211":{"name":"@balena/jellyfish-plugin-base","version":"2.1.211","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.1.211","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"41028a561f42be89a709b033e676d6ab8b053fa7","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.211.tgz","fileCount":18,"integrity":"sha512-u9oTnwXTq6qMPMpwhAYz795B4vPJE7iMy0PnrGSLreKnD5nyKM4Apqb9sIpbvGYqvKdjZO6vAhWdbfzw3PL6Ow==","signatures":[{"sig":"MEUCIQCBvaD/2P3rPaE1AHHS1uQNvusvFSwjWm45EAPy/L7cDAIgI48ED8eo64qkKTqe5WyLLIYWLybXb9YylnUktRSGYPE=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":60774,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJhBZNQCRA9TVsSAnZWagAAzjMP/RtxeLAE/xUOB/u/0kiR\nAYVy52CqcrDM6JchqVhg9jjukvHqXPx0yIyIulu44g902ABLRKv7lR8iAU9T\neEeruUPsJHLV4KkGoF0RUxeSSFekz0oSnDdf6eEvj7ii8rWMWMNQzIIwN++0\nVFEV4I03H3WvjFdWKXe58sYh3qonKx210Txnhh8nRW8FdXk9Le+ULJCDzGAP\n0zAgeVwA69NLryWxCZ7EV/OyUmSUv+nvrGEzV0rcQO5l10UdSkJ2dxMIGIPN\nj1SuIw2WEdJBqMPvfBsvZfqOKPw6uEjE505VQdHtZ5K3KA5wUQRAV2HzSUlt\nDnyCbOIlphtdak0+fLHIIeczcVT8wdeb5O98npzhkbwuQ3QX135D2TEfr7J1\nKTE6mEOH5iXipReUDzN4XVMQK+0Kz7gvhPc/Z9RBcxPitBhYqfIUK7yfErX7\nT7bRSOlqR3RQTDwSpRuwWlXLrzYWl2cjgOxzq4X3vs+52C7T6V7eNbxSGXB/\nF4/FE/RSL+B5LZS6BT0ASuhbSJgLvdDfL703vqgUyRcETtvJApVBJNIitbO4\nLmcDvMJTG8kdH7dNdLMArekj4R3PGb5kqCO5rWNMwAlZxSPy5qrhIpJNfXZP\nq+cBYxUb6j55QA/fckTvGS/HCsvwp28iaUno16wmPq0/puTxTg03Eg2sbAqC\nkbfk\r\n=B5H6\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=14.2.0"},"gitHead":"44e5153718c3192215836ea014b003d3c2321a31","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"npm run lint && npm run unit","unit":"jest","build":"npm run clean && tsc -p tsconfig.build.json","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint-fix":"balena-lint --fix lib test"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"versionist":{"publishedAt":"2021-07-31T18:13:13.108Z"},"_npmVersion":"6.14.14","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --fix"]},"_nodeVersion":"14.17.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.8.12","@balena/jellyfish-logger":"^3.0.54"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^27.0.6","sinon":"^11.1.2","deplint":"^1.1.3","ts-jest":"^27.0.4","typedoc":"^0.21.5","depcheck":"^1.4.2","typescript":"^4.3.5","@types/jest":"^26.0.24","lint-staged":"^11.1.1","@balena/lint":"^6.1.1","@types/sinon":"^10.0.2","@types/semver":"^7.3.8","simple-git-hooks":"^2.5.1","@balena/jellycheck":"^0.1.3","@types/json-schema":"~6.0.1","@balena/jellyfish-config":"^1.4.8"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.211_1627755344161_0.013399917957214624","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.212-h32-unify-script-names-f4dd876ac86e5003cb8314ba3213df6c36a25145":{"name":"@balena/jellyfish-plugin-base","version":"2.1.212-h32-unify-script-names-f4dd876ac86e5003cb8314ba3213df6c36a25145","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.1.212-h32-unify-script-names-f4dd876ac86e5003cb8314ba3213df6c36a25145","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"6a182e96472a78e3b2d40c6ea09aa70e5a2392ab","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.212-h32-unify-script-names-f4dd876ac86e5003cb8314ba3213df6c36a25145.tgz","fileCount":18,"integrity":"sha512-qmQUNSaSf5BX2nIOG2e18OSGjzq/WIp69DG2LwxhiZF5zXn7U1DoKT6DKcJVgA1EivUdfqOPhi19UIyElnZ5gw==","signatures":[{"sig":"MEYCIQCm4t9RvoXfDC2PRUec107+gl3m0r2HKGy7kzFJIDNyFQIhANiHEbdYBpipbfVHLvL18JCvH3bjLz1BCb8ppdsSY+1T","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":60937,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJhCyR5CRA9TVsSAnZWagAAIkAP/iqdtMFdW/+uqwlCNNjQ\n8WKCKXpMYEDrB8sBpFzzEVXj+jch7J9b6Me7SZUURu8p4zixS2h6HmUAcpFN\n1mJqvisHgv3go5wMwqwJk3IOq5lpFkpQ8WXdlD++83Hae0hVfi6/E3q3K55M\nI9g8qSqQtyYdqNeK4PUGIjIi54VhPzKoKcDlUFGXzscH9fO895EMJyCP5JrU\neRcBf0yNNd6CZ7BMK4G2sbrwion0/2BJr9VmMhvAeLm8nyzlCnbN+nYIgfKl\nInFpgH6Hp2I31NFTq+I4E58w/54rYuu9IGQRA3C08BmYjgPF/ZDl6kVLoCVO\ngMtPefixTUMBscHUKH6mUTc5GfNgXdWqihZXO2ajg2LlrzIQp8G69EqDRflF\nmVt070C6fJ2FlXa32t/5QGTFBTsEfYxJqVv+vmWrfPKXkynRNZqEsL/SSXDW\nRe3KRSvrhbp5Xlbq6VY5uFN+13wu96sKJQUwYgFDG/PP3gX2yA9+qJJ/bl1i\n5KGqlEGndWMkEd4WEeMYCfbcU38YiVDjCbMcH559vveK3mjFyU5LgtNkXRQX\nzEVVIRvZqpN1TyoCvs/pJGtrRNPDsP2FYlekGvspTDqGJqty6N+ZJA/yx4A2\nukylZ9YNJkgUnYV+zJeQX0GApAMk+HlCMFtlJ8TWyuOwQ9rn6vqnYbR1fXj0\nbq3t\r\n=ykMz\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\n[![Publish Documentation](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml/badge.svg)](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml)\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=14.2.0"},"gitHead":"f4dd876ac86e5003cb8314ba3213df6c36a25145","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"npm run lint && npm run test:unit","build":"npm run clean && tsc -p tsconfig.build.json","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint:fix":"balena-lint --fix lib test","test:unit":"jest"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"versionist":{"publishedAt":"2021-08-04T23:33:11.789Z"},"_npmVersion":"6.14.14","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --fix"]},"_nodeVersion":"14.17.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.8.12","@balena/jellyfish-logger":"^3.0.54"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^27.0.6","sinon":"^11.1.2","deplint":"^1.1.3","ts-jest":"^27.0.4","typedoc":"^0.21.5","depcheck":"^1.4.2","typescript":"^4.3.5","@types/jest":"^26.0.24","lint-staged":"^11.1.1","@balena/lint":"^6.1.1","@types/sinon":"^10.0.2","@types/semver":"^7.3.8","simple-git-hooks":"^2.5.1","@balena/jellycheck":"^0.1.3","@types/json-schema":"~6.0.1","@balena/jellyfish-config":"^1.4.8"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.212-h32-unify-script-names-f4dd876ac86e5003cb8314ba3213df6c36a25145_1628120185308_0.8938700304973222","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.212":{"name":"@balena/jellyfish-plugin-base","version":"2.1.212","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.1.212","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"f6b697c35b68e7ec07a2a83f915053807178cba9","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.212.tgz","fileCount":18,"integrity":"sha512-BUosb9V7CZeWIrjqB+J4LzeuZcRu6L5LomCkKWo/ncKzS7kZ7xbkuHh52pR+t+7/JciwUKtp17bf7xpC4XyTTw==","signatures":[{"sig":"MEUCIQDgo2EiRqvd/cyh03l+TYMebQO2bPxhjeTpaU2Xq/L4XwIgLd8isfyuhlAcYccpu0cnjanom7R7UnIQubSvNlXgmgA=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":60873,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJhCyU0CRA9TVsSAnZWagAAtL8P/1v2PJmY4rjmgoqS5jGX\ntVPDzUhFrmrOF1h0AqlIPJuQ9Uu1ykhUscN8qqIW1Jr4S5wawafzOz+4SbLw\nREzypPormdSfDWJ4emgL2PbwQVL/d1wgpdAfhclhnw+IE+EM2lZx6DstHs4t\nWozyHhakeiOJzyYwBt4yuF1MwXkKqjrF7ClQDs9cKOGdBQjuFCwZtQokWeCY\ncWjtLBdKUqLPxv9DQoGcXNQlKdXXQh0EeVQbLNgZWYQhshSRXS7DbdZ1y/11\nw21rBmcKeIs9bSt5aRYPFzV3SlSPbx/oJxYzII7O0tDX7V2biy3GeVaKSGa1\naZc3RK0qoMNWQzfMqVXdVpKOGS5t3PBcuLte1n+ZFH2Ghv2D91CjkzIa1bLn\n0SkzkYSH+t2Al16IdnHxU0mWQGpelVbE+xe2CcBSRLQ0rtZCUmiMRCyWYIlu\nzZh9we4Wh9G+xMkY6dPZii6Nk0lB5lTO+0tyUPfFRJVW8rd0FAtZH0CxneKO\nYZqwSdhcWvmbPxypTR+qhPdMnRB917x4P9cGkB1ETH8ZPObJVDDFcnqAbvNa\n7C0lbSznkkStJgc6C9NO/2WVCr15I4lUiqkFpEh52Ojr+BC/Whs5pTgFHQuU\nY0JDMHsqhWnf9s4VPF7YiAswcDT5BuPEDZXNjEi06F+WMiWdGjQzZI5i5VPc\n39jA\r\n=5LW+\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=14.2.0"},"gitHead":"1ace1115c165e58ec154a835dbea025885dcce31","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"npm run lint && npm run test:unit","build":"npm run clean && tsc -p tsconfig.build.json","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint:fix":"balena-lint --fix lib test","test:unit":"jest"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"versionist":{"publishedAt":"2021-08-04T23:37:42.365Z"},"_npmVersion":"6.14.14","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --fix"]},"_nodeVersion":"14.17.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.8.12","@balena/jellyfish-logger":"^3.0.54"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^27.0.6","sinon":"^11.1.2","deplint":"^1.1.3","ts-jest":"^27.0.4","typedoc":"^0.21.5","depcheck":"^1.4.2","typescript":"^4.3.5","@types/jest":"^26.0.24","lint-staged":"^11.1.1","@balena/lint":"^6.1.1","@types/sinon":"^10.0.2","@types/semver":"^7.3.8","simple-git-hooks":"^2.5.1","@balena/jellycheck":"^0.1.3","@types/json-schema":"~6.0.1","@balena/jellyfish-config":"^1.4.8"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.212_1628120372457_0.24194783625007688","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.213-renovate-internal-patch-c45dd1f240c7edb6cc689b177cd49c36ab7b3922":{"name":"@balena/jellyfish-plugin-base","version":"2.1.213-renovate-internal-patch-c45dd1f240c7edb6cc689b177cd49c36ab7b3922","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.1.213-renovate-internal-patch-c45dd1f240c7edb6cc689b177cd49c36ab7b3922","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"8409b02233009b4fc9c6944e5501255d98014778","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.213-renovate-internal-patch-c45dd1f240c7edb6cc689b177cd49c36ab7b3922.tgz","fileCount":18,"integrity":"sha512-zuMyE+o4RKiafXVjr9BLo2N1xlfDylxtX9VCT+LSLZVvLp5zpJZnicRufT55Pe6jUQ4ruUrpWjrzSx1v3MJxOA==","signatures":[{"sig":"MEUCIQD6KHMgzH0zVhRrNUcR78Kbvi2M+U1tMmHKqVZK3u9CIAIgR8JAmAz8yrkD70G630pp0fm0xvXubIaW3Kl4kgbIl2c=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":61041,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJhCzRICRA9TVsSAnZWagAA3nkP/0M5+ilUpbfIFhKeG4PN\nXTRH3OCas/oZPKeu6CNLhe/FDmTa/7bFRTJXmsWGM+bE2Nu6+9WdfliJFXdJ\nQy5ZkLfXmiETDTtDjCAgPqh1a32KSY8ewwzB4bxGjC1dB3z0U7rC+xDJkdok\nLMpXyVc60GBdXaNHXtGFEFH3KoPnjwDxcVtOkuaufAvGugd6rHjC2k+mEdj1\nZAujt90va2KaVEPI9t7QIi8LJKcw75boggP7KB/LxlhaCIpMFqfA2EL64tdZ\nkZgTqRgCLYZnjHy5764saeDHcGWqswoBLV2/dgIke9ySPJ3NHcNotw7CXQm+\nyp768sX08eod47IjEMKCO/qr9veJU3n/8g1eUFyy7MtUCVYMYkAKl8R/MKRQ\ngw+qv8B5ZwjTxEkdRDVTkJ3FopdIYM6QA5TXTpJ4NlhqHBlHfdkKBdibvOKr\n7LBnrG+WZmH1U765I5yuIRKH4A7QCeE5uFOXf0ItnMM/UFbrbP3qWAIXEUyz\nQuov4Orb3V2F5twt3LujBw7vn4V/+wNvZukrOFm2v5iyn5uIeeCR3BuTw1bS\nMf9aXjxMgC7IjfuGTy8pg4GWG6AoB4Kut/xMYmRgZvFKFK0xoUQzB6XhUoKD\nwg3GKTpq/afT52ivtn8e6xxte2G9F/9xcwAzt8WFblOAjDOegoAdfTEMrtm6\nRjd0\r\n=7zFp\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\n[![Publish Documentation](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml/badge.svg)](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml)\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=14.2.0"},"gitHead":"c45dd1f240c7edb6cc689b177cd49c36ab7b3922","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"npm run lint && npm run test:unit","build":"npm run clean && tsc -p tsconfig.build.json","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint:fix":"balena-lint --fix lib test","test:unit":"jest"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"versionist":{"publishedAt":"2021-08-05T00:40:11.877Z"},"_npmVersion":"6.14.14","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --fix"]},"_nodeVersion":"14.17.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.8.13","@balena/jellyfish-logger":"^3.0.54"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^27.0.6","sinon":"^11.1.2","deplint":"^1.1.3","ts-jest":"^27.0.4","typedoc":"^0.21.5","depcheck":"^1.4.2","typescript":"^4.3.5","@types/jest":"^26.0.24","lint-staged":"^11.1.1","@balena/lint":"^6.1.1","@types/sinon":"^10.0.2","@types/semver":"^7.3.8","simple-git-hooks":"^2.5.1","@balena/jellycheck":"^0.1.3","@types/json-schema":"~6.0.1","@balena/jellyfish-config":"^1.4.8"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.213-renovate-internal-patch-c45dd1f240c7edb6cc689b177cd49c36ab7b3922_1628124232098_0.6527570397998259","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.213":{"name":"@balena/jellyfish-plugin-base","version":"2.1.213","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.1.213","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"8b734c2015f89373e21f08a9ab5ca0456bc22678","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.213.tgz","fileCount":18,"integrity":"sha512-SGN4W2wJbJWZpX51bCCHLuSo3ofJVj6TN0eKIF9Gd5rgO7i0ui6sFdspglVBwgsA+h/iA7MGa5u+t+btRl+7ww==","signatures":[{"sig":"MEQCIDC2HyoYiHSg+WlQv7+GZqqRax4rCNNtl1EjkUTBqtCgAiAL2QnWlNYeqlQqLevqBgrTnf8L/GlPjY7v+DAXU1jKQQ==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":60976,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJhCzUyCRA9TVsSAnZWagAA0mwP/itpNKCQYgF96GIog3BO\nLGwXiLxzX5jWSgsTzRJSUpivTKQ1pLvBalxpYexfliFaz8R/P0Q1dgK8oxHK\nsiMf2AeU33kelXkBpIYblgEsa+8R04hbIkfNljlnpEO6FoTWpN64/yr0WdNu\nTiHs/KkhkT0DhbqRYuehCy8V0mUzzGqCmraS4Q80hXqppBoMJnP5ZQ270QZN\nUzjSEEfiy8k4uwzxZXDtWfNn81gFLwZR5hHlYgTPAlgOORAo0xqSjJd6LxsM\nFGfzaMrenjg+5dx27MXrxNeO1RuTI8WmiV64xvlldwWx8TYVKbh44EY6tRWc\ne4XNcmHTMcczhSXyvfqEfmERzlaBZXT1T/wZewQwpZw9zGSQXhot+ursy8Cv\nboYtYfvTL4vsXicOC2T56RgmDAqi6WuUhxvlZ6mg1KM6bqd7Aj7Q2D+CMwo2\nGJga2ebvm3TMawXXDOmqqk/70dgXCnSqY+KJCje04oLVXQorL0zyseG7QUKP\nxfVkGspgusqvnZ1/Y7CZHzJzgNGGQY4ZOGbwmdPgIZbfIx/MX7P/753r8pPh\ngwN3fuptTLZc+mftO9uTTdVDulWSDhzVHeYQ3B0ogcgH/g5yQTu5pFEY9C3M\nmp5vpdXFwem0aGC6+cjJ4cuhCSCD3WVtSKkZT+Y2Dak2m7bPGypUrIDYokCi\nJ68U\r\n=XCKo\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=14.2.0"},"gitHead":"b94b2bf455611014cd30e9b0713a932084ea57b9","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"npm run lint && npm run test:unit","build":"npm run clean && tsc -p tsconfig.build.json","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint:fix":"balena-lint --fix lib test","test:unit":"jest"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"versionist":{"publishedAt":"2021-08-05T00:46:04.340Z"},"_npmVersion":"6.14.14","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --fix"]},"_nodeVersion":"14.17.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.8.13","@balena/jellyfish-logger":"^3.0.54"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^27.0.6","sinon":"^11.1.2","deplint":"^1.1.3","ts-jest":"^27.0.4","typedoc":"^0.21.5","depcheck":"^1.4.2","typescript":"^4.3.5","@types/jest":"^26.0.24","lint-staged":"^11.1.1","@balena/lint":"^6.1.1","@types/sinon":"^10.0.2","@types/semver":"^7.3.8","simple-git-hooks":"^2.5.1","@balena/jellycheck":"^0.1.3","@types/json-schema":"~6.0.1","@balena/jellyfish-config":"^1.4.8"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.213_1628124466321_0.3066559423244224","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.214-renovate-internal-patch-8c722bd204386afd9b7d90d4826c74022a6350e1":{"name":"@balena/jellyfish-plugin-base","version":"2.1.214-renovate-internal-patch-8c722bd204386afd9b7d90d4826c74022a6350e1","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.1.214-renovate-internal-patch-8c722bd204386afd9b7d90d4826c74022a6350e1","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"6dc96bd02252ffc8268456fbd1314c0b45cc704f","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.214-renovate-internal-patch-8c722bd204386afd9b7d90d4826c74022a6350e1.tgz","fileCount":18,"integrity":"sha512-iKJHzd8HIeLemFdY8zoZgUPIMR3ti5rBZQBVqIjEBCa8weFq8YWCbcBa6KvTDOPbQiTjb31rdxUIoS2jwcY0DA==","signatures":[{"sig":"MEUCIQDtTeKBqkwEqcF7WQplN4TD9tsu3/t6VyYme7JCuuOAIwIgHPwUg68lPTI5ND7mjz3qbu4tDH2b6C2ComdbVM6pV+8=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":61145,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJhDUCMCRA9TVsSAnZWagAA+ykP/1P44PsGl0zozSC9lS/C\nVfszjrwTYujSJg0cRxmqQveiTY1qg2zxTOSbtFTsKik5WACoMZaFt8wLcDae\nUuK4AG2EAeLfrMOxXMDjwf89sGND54anaSVyjUtC3pexTvQQ38WgMIIk54Rj\nlgrCcAgJW36ODhMIoMdfgdGncYGrMrVC03+qGWcE/6E7t3fqEL+H4lykNwh9\nftgCNpPwJBTjbPCYQoYL9Pi6MBuSeCgxwXZWCzhPzVOjJ/d0qTTqLJ7y1CvP\nZdWqdnhZwbvAzkI5m4O7XG1bk7iWjAmHRkbv9K4V4dbAUxarWDfcaM4oLPSJ\n8JmDltq/1g5hW4a7RGIZu6CDwpAI/SOjbJI5SR24JalLlaCPHUCZIaRsgxsL\n5+6b/2yOF/i3EOWz9DZCQnEoixGV/GvkyaxVokyBdB2nJpiu3JuCFz/isPYA\nLOHe+HcOsM38hNNXWH65F6ehcLR++fmMlmzKKxO9VjOZ36sAsd8rtChmVDs8\nKFengLdqfwTNNnOYZniKMq0v5Wjm0h8ubodJU0hT2jeM5SaEB50RYORXvqFm\nyAGUJ9BTT8otAcJzlZoDaH/HhY2WrtJQNsem7A7I0Q39mN9Hb+we7SimtarY\n5dQasT61/0C3eKYgVMoljkpOG8Y39bRR63XJWw2YqQoeOIBY134LvMGlrBJG\nZ3nJ\r\n=fip2\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\n[![Publish Documentation](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml/badge.svg)](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml)\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=14.2.0"},"gitHead":"8c722bd204386afd9b7d90d4826c74022a6350e1","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"npm run lint && npm run test:unit","build":"npm run clean && tsc -p tsconfig.build.json","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint:fix":"balena-lint --fix lib test","test:unit":"jest"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"versionist":{"publishedAt":"2021-08-06T13:58:40.941Z"},"_npmVersion":"6.14.14","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --fix"]},"_nodeVersion":"14.17.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.8.13","@balena/jellyfish-logger":"^3.0.56"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^27.0.6","sinon":"^11.1.2","deplint":"^1.1.3","ts-jest":"^27.0.4","typedoc":"^0.21.5","depcheck":"^1.4.2","typescript":"^4.3.5","@types/jest":"^26.0.24","lint-staged":"^11.1.1","@balena/lint":"^6.1.1","@types/sinon":"^10.0.2","@types/semver":"^7.3.8","simple-git-hooks":"^2.5.1","@balena/jellycheck":"^0.1.3","@types/json-schema":"~6.0.1","@balena/jellyfish-config":"^1.4.8"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.214-renovate-internal-patch-8c722bd204386afd9b7d90d4826c74022a6350e1_1628258443966_0.0100589921174834","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.214":{"name":"@balena/jellyfish-plugin-base","version":"2.1.214","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.1.214","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"c16f4c390fd44d850f537c526bfea85498615635","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.214.tgz","fileCount":18,"integrity":"sha512-R1KC4hU+hFUuAUwynPIxaHnrH4nXxwijmy7oyrwioOZbWh7+m+2Y8yWQIN85RcvZkC4v5PFdcHTx7LHHEhuo+w==","signatures":[{"sig":"MEUCIQDbEn93Gax6S4JuRhxHtpqaMWc8LK8Z830/C/fw29Y3TgIgP5f6swkiH31wf3uYa2vy1JbFcdZpafivspUHvyNAMqU=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":61080,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJhDUJoCRA9TVsSAnZWagAAMewP/ikvaL01mol801ER/LCb\nsyyubdjI1GUlHGykUHVq6lOqTXVyGROeJBh3Kn4Na3MnPuSoIebDnjUZQSuY\nH3msbmr9n6t1W4byS9ar/Okoi0SHtXlt1zRh3Eg6a1zbNB5xAPUmNC/G5bJO\nJvpbDNKm678LSOz1pXXzHU/rE/SpPyKiliTDWqrJ82s15AptDGZ+NQGK3LEb\nqD2xTTj/a5uHdsOXxfRf5aHLitl33aVTuRTmRNy7OmyGyWi+QHKuN55olWcw\nZ8mqKZvAfvdjmTl676Ymku4kobjbbQ9MQ9wMwjn9DtS9rLlt0TQp5KuLdoPi\nwXD1jYv+vXp2jaAZLss3QN6n3dlpVh7O6V2LNcjAthEgpuWPdxjK4IJDOCpJ\nooF7CIs39jKUBbWeLeNjnbbTRuLIaPJRl1AreWFm0c3e5wUaHTCxx/HLi0DH\nJcOsmwWu213l598FEHbEyZ/+7Y7JCEliOsWvZ7+oZZemtQ/GKZb1L5LGoiLI\n8wYGXr/is0q6R3c9/pfj+4tUDTByYozCDDySBLPA2Kz2XiF/VbbNv1BPDoXK\nihaILLz+iGpBbDUlZPgqfsfs94jRbJlgPSeKdsXzz2SvIdtiLBW5z3qdJwjh\nNe2XuYmlkUkGcYW7BRKGQuSzTvEPk8V/5xK/ppka5WvNXSaU9yF9TMDBrWq8\nyORv\r\n=4K98\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=14.2.0"},"gitHead":"87752101ecb1d6f868026b205edb56d4055fb313","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"npm run lint && npm run test:unit","build":"npm run clean && tsc -p tsconfig.build.json","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint:fix":"balena-lint --fix lib test","test:unit":"jest"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"versionist":{"publishedAt":"2021-08-06T14:07:01.149Z"},"_npmVersion":"6.14.14","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --fix"]},"_nodeVersion":"14.17.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.8.13","@balena/jellyfish-logger":"^3.0.56"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^27.0.6","sinon":"^11.1.2","deplint":"^1.1.3","ts-jest":"^27.0.4","typedoc":"^0.21.5","depcheck":"^1.4.2","typescript":"^4.3.5","@types/jest":"^26.0.24","lint-staged":"^11.1.1","@balena/lint":"^6.1.1","@types/sinon":"^10.0.2","@types/semver":"^7.3.8","simple-git-hooks":"^2.5.1","@balena/jellycheck":"^0.1.3","@types/json-schema":"~6.0.1","@balena/jellyfish-config":"^1.4.8"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.214_1628258920290_0.6645743180847414","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.215-renovate-external-non-major-41f2a11a2741c0aee5ce32a70490d99c84a26556":{"name":"@balena/jellyfish-plugin-base","version":"2.1.215-renovate-external-non-major-41f2a11a2741c0aee5ce32a70490d99c84a26556","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.1.215-renovate-external-non-major-41f2a11a2741c0aee5ce32a70490d99c84a26556","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"bf61f88252edb4a958a3ced0035a54df9c29d18f","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.215-renovate-external-non-major-41f2a11a2741c0aee5ce32a70490d99c84a26556.tgz","fileCount":18,"integrity":"sha512-04NhULpZpZHM+NU5ckoorOKU63aQPTaG11IT7sCa6EwasTMIX6G7+noziAyiadDHyP5saft5bWpryhdRYRqWqg==","signatures":[{"sig":"MEUCIQCF8Hj8nBFgfMfoyaMrx5uf0dTrDtEazLFO5272Tm0FEgIgWzf3fwBqpZdMJ4p56OOmvqgep0pi0EsnbNoEtrS91S0=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":61240,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJhDd9mCRA9TVsSAnZWagAAfEEQAKBrlf0cvlMdqBxIlxFX\nhsxlBfVVU9aOrgeGlj0gCyuBdo2p+hZ2uzheMiQy/tDpLPLZSvu2wDi2FVyE\nr+RENFM9wf2k2jp/MsBVZwDH47bA8164WSCKO2TEDjLo8qn8Q1nPSjNOR2a5\nqQHDzwNamtNqMuejWTgZwuzvj+9LWzidDS9HOBxd3vctrE54fQd/hfSlMBBk\n2kVN27lUONnDb3h87klj9UrBPonGDeY6teqmv1CnUrkI+cmz51x6fJPCymPD\ntbEIS9CnbnVRBAQiFPBEzDi4rcTb8pDFNQDwPCdEFMOZGyJwblssjMPIYCt+\nMV+oRDhc6agbAlIhzQAnoBxkTQ3UxR1FBCjiK+ftTeJVUtJLPsRP4QBSnGJu\nIGE0MhRwPwd8RnG7noEw9pNJqxhDtii8DMYzStrakSp93jmU+piq+NsWNJRH\n1qrcq2usM0C5ItLFPvnS29PpounmVYDM+3fVBoP1QV0NdaheIjWlSE6Rnd6r\n+PibsGekfyezWWQsalAhFwxQ3z+7nUopt+aUREhb+H577Fl4081gFJ/nO7Q9\ncP+oN9r4L5t0fl2nwtD4bMzMUfMfpLfUnpELva6jBVppKgFGs3I+w1p6sd7z\nOB5tV9zyn3esaVqPxAFxq/l0GGc2vnCLF9K/h5YbvRPiRGUuMhZh2eg6MM72\n4t3x\r\n=OKb8\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\n[![Publish Documentation](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml/badge.svg)](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml)\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=14.2.0"},"gitHead":"41f2a11a2741c0aee5ce32a70490d99c84a26556","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"npm run lint && npm run test:unit","build":"npm run clean && tsc -p tsconfig.build.json","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint:fix":"balena-lint --fix lib test","test:unit":"jest"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"versionist":{"publishedAt":"2021-08-07T01:15:17.647Z"},"_npmVersion":"6.14.14","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --fix"]},"_nodeVersion":"14.17.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.8.13","@balena/jellyfish-logger":"^3.0.56"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^27.0.6","sinon":"^11.1.2","deplint":"^1.1.3","ts-jest":"^27.0.4","typedoc":"^0.21.5","depcheck":"^1.4.2","typescript":"^4.3.5","@types/jest":"^26.0.24","lint-staged":"^11.1.2","@balena/lint":"^6.1.1","@types/sinon":"^10.0.2","@types/semver":"^7.3.8","simple-git-hooks":"^2.5.1","@balena/jellycheck":"^0.1.3","@types/json-schema":"~6.0.1","@balena/jellyfish-config":"^1.4.8"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.215-renovate-external-non-major-41f2a11a2741c0aee5ce32a70490d99c84a26556_1628299110277_0.29616963562629883","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.215":{"name":"@balena/jellyfish-plugin-base","version":"2.1.215","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.1.215","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"67b960de5e5287640e28235adb0cb8054746354f","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.215.tgz","fileCount":18,"integrity":"sha512-Ops0a1MgqLjPnNSS46MbNcsOezmIVTe2BzoeAPrg+ZypR+M4bPxQeUnO6j+Ob9lyC5FrhPPKOtM3Hl525IG4CA==","signatures":[{"sig":"MEYCIQDOBd3FyoixDQ7y+GpLMAPxsenBpL+bpsqtsHr038E9SwIhAMDgBBlV6bL1MEI2PdqK9toxzQ4goBwQrm99DvvAhG1B","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":61171,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJhDeAcCRA9TVsSAnZWagAAHAwP/AsWx1oSE86QkzbKR42O\nUqBQgBFfQbcVZ2LsPc7xG7dglsB5O9g3JTvE4y0KNiCpESzSvUa2Rp+H3g4J\noY82haP1bQCI/L1RCtPEpiz54/gaGg9aV5FIJIuWjYlAj/oQx/HXFhpZwsvV\n0GpdZqcsCZFJmNu4K5egIcdrWERt4qubOl/bT+TYcVWXqqtAGovw5R1YcSwy\nogzmEyf56MT/utRZy+LEkoEvG2xjCRrxHJpuRytehhLjHw2Tnq3R7Y05JBHv\nSL+JccNmREQZli5bf/cPBMZLBFBQ4sQn0hwQq0FhebRvneLd86NNqdmLqjTf\nEfHl3CG0Y3c0R0sGAKb4GbHOeXHCt9YN16fCUkBtvQ5S1SvV0Y90q333qHE3\nw7wa6Nczv7sEe9jq+7aulvufJmQYGMxiQu2RmdedlpuaB2WKaFhDL4daZaoQ\nUMz6DMmlvTBYIj2fxAL8qoT5+8c0RAJY3NaTAdZJb6VMmI2J5yvkbjibwJmk\n86hG/pkyf1Ye/sW9mfDMq91t94rjLjSpVqcGLazOVVGJ38pJ5LG5WZEu6hFH\nDEQQFN3cU3Zh1r6wcj21DYMmt+2/ye0uLed+LBPxMakSQ2SQBEN3ltJWv4oB\nLw8t25cf+iSczvFTuMhI65ZUQDpW+m0+Z/4V40k7UhsgJ8rLME1xNuSpwedP\nIaIU\r\n=9uzV\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=14.2.0"},"gitHead":"aa6694bf1be2aff42fdb82d4fcc62c01f1426807","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"npm run lint && npm run test:unit","build":"npm run clean && tsc -p tsconfig.build.json","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint:fix":"balena-lint --fix lib test","test:unit":"jest"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"versionist":{"publishedAt":"2021-08-07T01:19:51.155Z"},"_npmVersion":"6.14.14","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --fix"]},"_nodeVersion":"14.17.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.8.13","@balena/jellyfish-logger":"^3.0.56"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^27.0.6","sinon":"^11.1.2","deplint":"^1.1.3","ts-jest":"^27.0.4","typedoc":"^0.21.5","depcheck":"^1.4.2","typescript":"^4.3.5","@types/jest":"^26.0.24","lint-staged":"^11.1.2","@balena/lint":"^6.1.1","@types/sinon":"^10.0.2","@types/semver":"^7.3.8","simple-git-hooks":"^2.5.1","@balena/jellycheck":"^0.1.3","@types/json-schema":"~6.0.1","@balena/jellyfish-config":"^1.4.8"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.215_1628299292550_0.372998327308812","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.216-renovate-internal-patch-363afb40a0868637cf5149c8b411db56dde46412":{"name":"@balena/jellyfish-plugin-base","version":"2.1.216-renovate-internal-patch-363afb40a0868637cf5149c8b411db56dde46412","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.1.216-renovate-internal-patch-363afb40a0868637cf5149c8b411db56dde46412","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"00f6fe1f3f7df8682e5d4c892829f0ca882650b7","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.216-renovate-internal-patch-363afb40a0868637cf5149c8b411db56dde46412.tgz","fileCount":18,"integrity":"sha512-T0FFpcN0vf/Ng0+28albUjJE6AEHN5p+H1ogqGihcMEByBRoR7u1jJ2r3IdP8yaG9tZlc//65WVnbJM37xXGzA==","signatures":[{"sig":"MEQCIE+Ya/Ad4xeggPEmTv1bqEc1h57dJbFV9Lg6KK1qGLakAiBeIE2BrYChTDK5f3n5Sn3VtgUjnaawCIknXI9VWw/p3g==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":61340,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJhDeDoCRA9TVsSAnZWagAACTAP/3/afEoluvZVvzk7xCjO\n8mwwoM676epUDX7NY5lHdc+7yfgId/WncmAirgRMu+uOatzLLErH0yqsxPBl\nUX3twafHz3gInmCrxLCtyJxONFiNv1jO5XGvPC0rR2uy6gzHIDsgQgg0WZzd\nQzq68VqhiSshP3d+nJvlpAkxWe8GtOqWDHaNmE4qhiTUDi8bg8FRN2n4kwQO\nQg8iAVmdws8Nvn0lDo/Wj8l5K5RRcu7xcSdikWmueQwlvhnBRYHfs87gAbY2\ntHP5Hf62d4qOjPShkGNvP1nTC8W05X/Mh91nrp22Gm/UnlrbIG2HJgWg8/nh\nL1inKOHq9HBgtkQawnz6j0EDb/TlK3XnKtIP8LCeGrVYEd09os5wR0FrE+gW\nqcbugNC0jVw58par9ke4M9ZtoITEll8Ni68Ot3WI8awef1Kojlf8v/BeKj23\njop2VRUU8T8scnLdSoASaHpSaICEtso9y7y97vvT6fb+I609wL/jAPt2Zkzu\n9oO2zW/3/cWbxKuhOpmB/78kc3qFJtmZ10LYawV8t/El+Lcbx+l0u9B5sGtb\n6HA1cJVEGw3jtYEujvZA/ap57MRWcglIQkyUF9Wc6Q/FqwDB26ED91KSNXS8\n3BHuNRQilKstEd1+SFSw4UD+1zfWleZornyAil/MHX2zufOCqp0Gg8hscmlo\n063Y\r\n=oCgj\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\n[![Publish Documentation](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml/badge.svg)](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml)\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=14.2.0"},"gitHead":"363afb40a0868637cf5149c8b411db56dde46412","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"npm run lint && npm run test:unit","build":"npm run clean && tsc -p tsconfig.build.json","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint:fix":"balena-lint --fix lib test","test:unit":"jest"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"versionist":{"publishedAt":"2021-08-07T01:22:30.919Z"},"_npmVersion":"6.14.14","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --fix"]},"_nodeVersion":"14.17.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.8.13","@balena/jellyfish-logger":"^3.0.57"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^27.0.6","sinon":"^11.1.2","deplint":"^1.1.3","ts-jest":"^27.0.4","typedoc":"^0.21.5","depcheck":"^1.4.2","typescript":"^4.3.5","@types/jest":"^26.0.24","lint-staged":"^11.1.2","@balena/lint":"^6.1.1","@types/sinon":"^10.0.2","@types/semver":"^7.3.8","simple-git-hooks":"^2.5.1","@balena/jellycheck":"^0.1.3","@types/json-schema":"~6.0.1","@balena/jellyfish-config":"^1.4.8"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.216-renovate-internal-patch-363afb40a0868637cf5149c8b411db56dde46412_1628299496230_0.8400178316746736","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.216":{"name":"@balena/jellyfish-plugin-base","version":"2.1.216","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.1.216","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"619cbb155898c6a10405cc8d5e38f293254e0584","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.216.tgz","fileCount":18,"integrity":"sha512-axCFEnon0UfMHofA63J4vrqtMqS7R6YQYGlGxspolyZaQhtGL33padnw8WUc6zKwk2S3dLMiEHIGVuAhrl5WGg==","signatures":[{"sig":"MEUCIGC+vyb0Y2diAkH6qFNmecXtygEceaP1T2sRK3mpleWhAiEAwlh8FGltASUOIweDgJcAa+xVnKAxFipcc80SpAuvOTE=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":61275,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJhDeILCRA9TVsSAnZWagAAcN4P/iJMCs60kP3LW7Y1cOkR\njCcxAxbjRJ7VWZ0sMQeaQDKeWW0KNQP59d6eWsAFeU3B4kE6PVcCH+t8l/1F\ntzLvRUCr9+V0irWp7N4A7gvXjwgBB8zLnwsAliGJ0XnWDIPbGAJkd/sLQWDR\nrJz1b/FLe4vtzTmAU6udktDlR8lP3Xx+KijWb5kb7M9TqEFnmFW+JAnXc+Up\nZhv+66HP7j0su7P6ouLxZdMDXd/keERThCgNt2zEWwwW6CyAO1wnVVQNgcnw\ni58E4d/mXuJkcEP0zRN8tkF7Dy1IK+rAteCPOnpzzCqnn2LL+sxEBxeeEyMA\nQQ33p7uxy6N6niOFelt3h6a8/WzYQaJE9Pkw8P5B3KnqJSwSfWKOTvzJTC1H\ncQYX3Ozei41PIuSEPmjwQcq3QSe7nXBS3KkPG4cnPFaRsK10vBSSqNvKIL/f\n3AT8ml9Q496cN8v/wtTD4s6jEiRlH32tvuGDTXY/aR28YEQBvixyIVi6L6fc\nP6npB4ga+WJ4JBEyNpFUnWIq0APR6D7hzKYFfzMm3YmDdPxd8evMqZg7uA1r\n6Tb7/wmZKc8v+3eQ/Vfw7no8Jj4hVymiw7jQw7GxlCitQcxbOVvBRw51wGgK\n5fv0oIhoMmRKNf0ZlkRqwc9ACA4EVxXqdi1hQ+MpW17ETelcWyBYAEk/bBHn\niJRt\r\n=Lz1a\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=14.2.0"},"gitHead":"76c3d9769b8c0ee0b2354bbd3042d535570867a3","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"npm run lint && npm run test:unit","build":"npm run clean && tsc -p tsconfig.build.json","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint:fix":"balena-lint --fix lib test","test:unit":"jest"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"versionist":{"publishedAt":"2021-08-07T01:27:45.689Z"},"_npmVersion":"6.14.14","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --fix"]},"_nodeVersion":"14.17.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.8.13","@balena/jellyfish-logger":"^3.0.57"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^27.0.6","sinon":"^11.1.2","deplint":"^1.1.3","ts-jest":"^27.0.4","typedoc":"^0.21.5","depcheck":"^1.4.2","typescript":"^4.3.5","@types/jest":"^26.0.24","lint-staged":"^11.1.2","@balena/lint":"^6.1.1","@types/sinon":"^10.0.2","@types/semver":"^7.3.8","simple-git-hooks":"^2.5.1","@balena/jellycheck":"^0.1.3","@types/json-schema":"~6.0.1","@balena/jellyfish-config":"^1.4.8"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.216_1628299787267_0.12972782540707328","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.217-renovate-internal-patch-bc39f7e2eb928e96b268b08a68bca674ea10f4dc":{"name":"@balena/jellyfish-plugin-base","version":"2.1.217-renovate-internal-patch-bc39f7e2eb928e96b268b08a68bca674ea10f4dc","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.1.217-renovate-internal-patch-bc39f7e2eb928e96b268b08a68bca674ea10f4dc","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"ede0efbf2a0b7676f2ae750f6c5dd5ef3df36aeb","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.217-renovate-internal-patch-bc39f7e2eb928e96b268b08a68bca674ea10f4dc.tgz","fileCount":18,"integrity":"sha512-wgjIrCQ+Jl2IyFy8/Z1IOyklHJkDWFc3t1dBh7MM0Nh1xlRrf4FwAmHtbkyO3TfqHH2/ka9ssztUjCsmYoL8UA==","signatures":[{"sig":"MEYCIQDKDoF0ZljRD2IU01JR7aOHSYZmQFiYef960e+E8zCNLQIhANx3v2hUmqW6fq4Ep354aiT6cjMRx/OQI5cYVt7Kdkit","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":61443,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJhDfZXCRA9TVsSAnZWagAAp70QAKETVHYaxqrMMGCBc7XR\nVdmUBGOxBPZCl/eBrXM3oWB4NVqVnBZnbsMubhdtou9GCq02gQk44cJAwcgO\nc72+Xq+nIbhv+1cKN4+RbO/N1OY9n64tTajK4c9colamS7lZsgySHHeajolx\nMbYjdXlTjW0EIneQXqzbk5chI4RBhER3Wh/+dEacEjDnoxdgg3KxMrgNydqZ\nW+47yI6UzJFN8kd9XagnEWYN8J/4RqCTWgX93szhhX2vntChETC+vmXLGaOa\nbThUshrQyAVcGIIoicxwQc+FIBYnxxJubnl4sUbNMbElFKxPIXA3+D2URjcL\ntEuAMJ9M0oSZVxjy7iC3ILozpQiZU6ShDI4pFJzBtnDG5GNLsv826u1vQ7Hp\nROliFDF65EXOuxQJZVLJjSAJsk2f9wkvGV2dXoqJIwtc/cD9tck+JOFUe/hr\nJV8BdXBeX0juiXqn/YALE9rr/XCiXqqeyoimehl6PgUOEtaE3XwoiggBUhH1\n7JAsi9enqnBLAB0BZJyAtVuHWJy/IEJJ0x1gMF9HIbLEf711SVvNIjfE7kQi\npYIsJejpDTAZ6iEEYXKPID6GzFKVQTmyhxJaEXtEXKTgSwDeo43avy34QKIW\nKl40LSRIWTPoe04TfPqgBbtM/cl1ep4Q4JurZbpMpf+flqUH13E0GPLYhNk3\nsEYq\r\n=kvhl\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\n[![Publish Documentation](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml/badge.svg)](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml)\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=14.2.0"},"gitHead":"bc39f7e2eb928e96b268b08a68bca674ea10f4dc","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"npm run lint && npm run test:unit","build":"npm run clean && tsc -p tsconfig.build.json","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint:fix":"balena-lint --fix lib test","test:unit":"jest"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"versionist":{"publishedAt":"2021-08-07T02:54:11.116Z"},"_npmVersion":"6.14.14","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --fix"]},"_nodeVersion":"14.17.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.8.15","@balena/jellyfish-logger":"^3.0.57"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^27.0.6","sinon":"^11.1.2","deplint":"^1.1.3","ts-jest":"^27.0.4","typedoc":"^0.21.5","depcheck":"^1.4.2","typescript":"^4.3.5","@types/jest":"^26.0.24","lint-staged":"^11.1.2","@balena/lint":"^6.1.1","@types/sinon":"^10.0.2","@types/semver":"^7.3.8","simple-git-hooks":"^2.5.1","@balena/jellycheck":"^0.1.3","@types/json-schema":"~6.0.1","@balena/jellyfish-config":"^1.4.8"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.217-renovate-internal-patch-bc39f7e2eb928e96b268b08a68bca674ea10f4dc_1628304983111_0.4157799456041362","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.217":{"name":"@balena/jellyfish-plugin-base","version":"2.1.217","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.1.217","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"ba28495bf2fcc4037d3231308758c727e08f7e3b","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.217.tgz","fileCount":18,"integrity":"sha512-Bz/dNneYWK5m1UBM920ttX2Nq4qCeq6dKkTsO6DvL68IrvHYNYSBdFlDCRlTObtnNHNbuBgetAqQ9Kkr9Yf2lQ==","signatures":[{"sig":"MEYCIQDDxgyHrcuy5YLCeQ+C6hsx2m2aGd48yC5ChEY7rhzazAIhAMw2tdEXPo9j3TyCWbLt4Vj5M5CWo7ISo9UeQjrwhOlN","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":61378,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJhDfcfCRA9TVsSAnZWagAA5Z0QAIgp714kmhA4zMZy/Luz\nWvtGrz8SZLYjKKxyR14d8YaLAv5ccxhgLhmOB5/0VTZgjPM9I8Rj7jefxAKQ\nS7BcR2xSG2Mw3T+Vr1NEE9XTOws0RrwqL+RSkXCut70+aYrQ7OH7Tvhp9d5M\nOarXGcdZ3OtkTPcWFHrbwF9g+qcD35AgC//TnnMIaCzBq3r2bU0aJ/A+IveB\nR2xCU90l4sgax5f3EcTno/kJLA0ZXxFQFw172pl9CikFy2TWVOjZrfczXrdS\nX9TcnLYVJIx+TpUDt1D6aLAsHQmZidj+hlbzjDBO4o8f+awmBqAH364Poq3O\nEq4jxM/9CGZUhZymXe3RtF/oobCh0M17rwuCYBqFfZp7A7lWEU8Xx5OU/vLw\n/5oVlP1gY5Ir9kl0RhrolMvhVSpk2IjDclef9EFyqP0ieiAGXdWmjXLJGqTC\nIXwCzH1Y6hv7scjH5MubI5Lrj27a1rp7qkJD0/rarsoJPKYKb13YbiYrd/db\nNF7rSwCDP5ylg4dGgDspukSNaKaJJyfLx74HRuyAo18nr0QLrOGuZHgZnCRm\nj19ao+UchRN4p09A/dlImKr5iPQHln6vbvATDgEjudGx1N3RD64V275kdV8G\nxc/Fw/0T27SX4HllYoF4NB8bfh998oKRFEeAJYUcoFXmb5J5b85zeuHP18t9\nBgs3\r\n=nOMN\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=14.2.0"},"gitHead":"15a87d00f0d63ccc5cc519bb428f0acdcbe8f65b","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"npm run lint && npm run test:unit","build":"npm run clean && tsc -p tsconfig.build.json","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint:fix":"balena-lint --fix lib test","test:unit":"jest"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"versionist":{"publishedAt":"2021-08-07T02:57:46.169Z"},"_npmVersion":"6.14.14","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --fix"]},"_nodeVersion":"14.17.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.8.15","@balena/jellyfish-logger":"^3.0.57"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^27.0.6","sinon":"^11.1.2","deplint":"^1.1.3","ts-jest":"^27.0.4","typedoc":"^0.21.5","depcheck":"^1.4.2","typescript":"^4.3.5","@types/jest":"^26.0.24","lint-staged":"^11.1.2","@balena/lint":"^6.1.1","@types/sinon":"^10.0.2","@types/semver":"^7.3.8","simple-git-hooks":"^2.5.1","@balena/jellycheck":"^0.1.3","@types/json-schema":"~6.0.1","@balena/jellyfish-config":"^1.4.8"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.217_1628305183357_0.4125646735181614","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.218-renovate-internal-patch-6fef2758f6001374c26aa0521183a4db762fccdd":{"name":"@balena/jellyfish-plugin-base","version":"2.1.218-renovate-internal-patch-6fef2758f6001374c26aa0521183a4db762fccdd","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.1.218-renovate-internal-patch-6fef2758f6001374c26aa0521183a4db762fccdd","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"13b479d98a516fcbe93b1b37d341e702e2f286d5","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.218-renovate-internal-patch-6fef2758f6001374c26aa0521183a4db762fccdd.tgz","fileCount":18,"integrity":"sha512-KY4B1EhXZ2nZs+INAQNzAAHq3I0EJOBvBxTxP21o2L7L4HttTGkGaZQB0zrZOooKI+mxnOPoBu1Mg5li5vjrWg==","signatures":[{"sig":"MEQCIGn1E/LT9fn33b8TIU9WKgP3I1XkWw6GHlEyUcALPk1BAiA9ZWb8mlV4lNgMUzJj9sF6dzpn+RhhrcuWKeOcrVFloQ==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":61547,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJhERMQCRA9TVsSAnZWagAAhwAQAJBNvZjdWewYCKsSmLDM\nAnuI8W3+SsKQNONpvcVkCqf/x1Pl9D0FKIsB+0FGWa/SovYjCOy/h0MC0Cgm\nSJSXJXMcmQPddjF0Q0U7AlwxnzkK07tF3+LlQ+0jnxHW/8QcKVr6EZRw+hxa\n15ifpsWmZ4O7YOXa/Aw33DCbYScQctvQtq/s5+sIWwIu6Fzm015sUynktpOc\nrUx555w9zoH1G2hfn4U+xXBObqWI5CppwbNh69Ia4s2lTvET2c4cnq0Nghxu\neJSn74EfVlEKNNH6SzXj5QbLrh5xU6IHL2rM5/9XjWc9RibpqSYb2QWG5wFy\niXBEJCfd9WOPUiAyCnnaRJbCd5CCSrMFPEUPgVIDwu8Sik17rHUT4mlHONDZ\nesxAJzsznuEkZA27F3c+OQG+hS6IR5DCyTrW7lvLojk3XRKvDAycHCnpyOlI\ndfh6ui3cwjkszypj99F1iIWgS1xdTqZlfm2GLclFKk8WIjxDK76kNI6abLTU\ngyRlllo4oI2IMbk28bQOcSTmyWKQnyFHNb2QF70XXPilzuxxGJgDW+PF1RD4\nu0VN04eMFxG0iJOmX6WtmIyltvlNk2NLWEVSTS9LuyBMF2j4sFYstmaRTvgR\npaN9euocOMs/gza5iuSpBeN1Z/btYfIXtyGF0/7mweZwU+nbIVeyq+vDMnCG\nqcDC\r\n=Enxq\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\n[![Publish Documentation](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml/badge.svg)](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml)\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=14.2.0"},"gitHead":"6fef2758f6001374c26aa0521183a4db762fccdd","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"npm run lint && npm run test:unit","build":"npm run clean && tsc -p tsconfig.build.json","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint:fix":"balena-lint --fix lib test","test:unit":"jest"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"versionist":{"publishedAt":"2021-08-09T11:32:50.670Z"},"_npmVersion":"6.14.14","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --fix"]},"_nodeVersion":"14.17.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.8.15","@balena/jellyfish-logger":"^3.0.58"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^27.0.6","sinon":"^11.1.2","deplint":"^1.1.3","ts-jest":"^27.0.4","typedoc":"^0.21.5","depcheck":"^1.4.2","typescript":"^4.3.5","@types/jest":"^26.0.24","lint-staged":"^11.1.2","@balena/lint":"^6.1.1","@types/sinon":"^10.0.2","@types/semver":"^7.3.8","simple-git-hooks":"^2.5.1","@balena/jellycheck":"^0.1.3","@types/json-schema":"~6.0.1","@balena/jellyfish-config":"^1.4.8"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.218-renovate-internal-patch-6fef2758f6001374c26aa0521183a4db762fccdd_1628508944207_0.7702697209671312","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.218-renovate-balena-jellyfish-types-0-x-98ab10261020eb96eba16988f8d43accb45e5d9b":{"name":"@balena/jellyfish-plugin-base","version":"2.1.218-renovate-balena-jellyfish-types-0-x-98ab10261020eb96eba16988f8d43accb45e5d9b","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.1.218-renovate-balena-jellyfish-types-0-x-98ab10261020eb96eba16988f8d43accb45e5d9b","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"29fb849c48f2d4b086204a541b0355aa087a0ba6","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.218-renovate-balena-jellyfish-types-0-x-98ab10261020eb96eba16988f8d43accb45e5d9b.tgz","fileCount":18,"integrity":"sha512-bFYGmW/X5vgOpGeeuTPVVyY1FalXGH8XjSmce4w+yR2O0zwotFF7SNVol1NZ8ckVZMdRw3bqsz+yoCWrUk5u6Q==","signatures":[{"sig":"MEQCIFqfp72hM1i/VtflDJdxTTgEqkrDGvAeHXnOMq2TXCalAiA0itsP++UWRYEWltBL36lyJh75dd/bY5Tc71OYP6geGA==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":61556,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJhERMzCRA9TVsSAnZWagAAN8EP/RqkcfTshCx7FV590iH7\nBu5ta0miIDj4HVez1ScCySNCOjL6DXUBz3aa8k6AxiAg6LxRoWYkcWNydDCG\nkT4FgsLN82KKJei2tKbpyib8JRxeAzQZKi58GQ5REnkBAIus6Yqp0mu4ORFE\n0DAvEFjAUdlXXWQiyBQyJ+VJ5hBPiZ4N3UVRmPAyAAM0NhMbVJTkq1FksNVp\neNWWWRGk/rlfeZ/rRsLH9uAZOL56TPa8CdNnIRE8qL9gQyjiRo9Ae15D9QJS\nVSsKpxrCRzpYwsDWsJmTcZ9TlbcVzZe/hXELNB+eBa7uQvJcHXrUSxrU5A5U\njnCflUUnOXbKo09EN2NPrXjShMmTO6nVY/ya5DhfK5/LVM9ZrsQfD8ksOmfr\nP+whY0gllDTtvPbtoe3da17VJL4o7xPUB197zXlZjo2lIZMASypWtVfQbVTo\nBFznZBVka+5eKsVSY7NXMTEHvPb048SJX87ZGyjpPGXN8r88DfxrK1CB7YNi\nZeWfDPzo0sy+scS6YTqtQhpnE8k2DJ9zVhkTUC+kPmjgOR7tnzOJSsNZaE/P\npUL9ZqhgqLePhNGIOc6ni6uTlYji5pkOJMjfpkIxK1kvKjAo6kRim7XW1bIw\nPxFq7vKMi2sh7icOU/n/3Zx6gi7SJSUs6jPRjhRBNErZv5Znw6JccX6Ld9Ci\nHQUM\r\n=pnD0\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\n[![Publish Documentation](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml/badge.svg)](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml)\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=14.2.0"},"gitHead":"98ab10261020eb96eba16988f8d43accb45e5d9b","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"npm run lint && npm run test:unit","build":"npm run clean && tsc -p tsconfig.build.json","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint:fix":"balena-lint --fix lib test","test:unit":"jest"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"versionist":{"publishedAt":"2021-08-09T11:32:58.248Z"},"_npmVersion":"6.14.14","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --fix"]},"_nodeVersion":"14.17.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.9.0","@balena/jellyfish-logger":"^3.0.57"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^27.0.6","sinon":"^11.1.2","deplint":"^1.1.3","ts-jest":"^27.0.4","typedoc":"^0.21.5","depcheck":"^1.4.2","typescript":"^4.3.5","@types/jest":"^26.0.24","lint-staged":"^11.1.2","@balena/lint":"^6.1.1","@types/sinon":"^10.0.2","@types/semver":"^7.3.8","simple-git-hooks":"^2.5.1","@balena/jellycheck":"^0.1.3","@types/json-schema":"~6.0.1","@balena/jellyfish-config":"^1.4.8"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.218-renovate-balena-jellyfish-types-0-x-98ab10261020eb96eba16988f8d43accb45e5d9b_1628508978982_0.10943415516327559","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.218":{"name":"@balena/jellyfish-plugin-base","version":"2.1.218","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.1.218","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"93af25a109ef468b48a8905059ca1bb2365ea03f","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.218.tgz","fileCount":18,"integrity":"sha512-FPmjOhh228IP4c/wZzhoyoNhDlPEMrA9tBTwkb0U1O+KEme9bstcN62+3Th48d/kepcq1gockkK30OfPKuPO+g==","signatures":[{"sig":"MEUCIQDG/8iU/VoWUkBo5g0MYDX+7D95pxvwxMGi592v3+lCYgIgR1yRCLDNc08zjpm2iFUX7amv/eLQeVsw5OmEzCImjyg=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":61482,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJhERPNCRA9TVsSAnZWagAAQuUP/A+DfOknG+kbgk95j2r8\nFXGNZlBFkTFOUFKjuck0vB15zrNZXTJ6Ym/9JVViC7+TTHaBIoulfRIN3zqF\nBzG8VHnWdvcA35u3BruDAI+1PbEpmzXggeNOq6QCPotvBRCkiUT1t2Na9tUc\nhvoDtfJWjCKMQNRc+7hMnbs/OvJVXKTzy5QLVvYK9VYUcbiBiHIwfmkUHCY0\nJQdEnPK1nrT28ykl+IsLZGVHSBhHewi4VVjl2Cobi9V6a+VZAWdJcoU9Ri00\npg9U+7pXRdiUel9wJFYW0Y4S/qgghgY8IAJdgVwoopp8swNOoepHf/kb+r9I\nlCgFF7HYCbhUqI2Ce+EGeLCi18kd4zO6S+C77fQCQ8coatgUz9PqTp9/vN6T\noWNsP4g8GtPkNO3RI1mUXWqTBHgUmM4+x8TVVVAltFr5s5xX/MAKECWVviVt\nBbOk+hJfuAYXGzcgZKWpmPuLnu1/MF+lIC/ZuHS2XWx6CGlEKJhy1xxBdiNU\nHj/mLyo2E5Sw2plGVKu/KfKN7z9ONmExnirCsvdOMRZmrTsPPo8iu28Pi6L7\nBrKfqhWrgf6s/+k7BVlQ+7vwKpWIIW3nc4ltHCk2y1fZ2UeookEUJIG0R+mY\nOLuHAUGm+M7lpvYkwwVpbOi2sqIv5hlhX8Cb4AWRkw/KGomj8g2EJdLquWzx\neQUA\r\n=iYSZ\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=14.2.0"},"gitHead":"6c8d07fcc453e7159886f4dd7ace66fdaa9b93d0","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"npm run lint && npm run test:unit","build":"npm run clean && tsc -p tsconfig.build.json","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint:fix":"balena-lint --fix lib test","test:unit":"jest"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"versionist":{"publishedAt":"2021-08-09T11:37:05.690Z"},"_npmVersion":"6.14.14","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --fix"]},"_nodeVersion":"14.17.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.8.15","@balena/jellyfish-logger":"^3.0.58"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^27.0.6","sinon":"^11.1.2","deplint":"^1.1.3","ts-jest":"^27.0.4","typedoc":"^0.21.5","depcheck":"^1.4.2","typescript":"^4.3.5","@types/jest":"^26.0.24","lint-staged":"^11.1.2","@balena/lint":"^6.1.1","@types/sinon":"^10.0.2","@types/semver":"^7.3.8","simple-git-hooks":"^2.5.1","@balena/jellycheck":"^0.1.3","@types/json-schema":"~6.0.1","@balena/jellyfish-config":"^1.4.8"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.218_1628509133656_0.6129872093522122","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.219-renovate-balena-jellyfish-types-0-x-4534fc4a489dfa12612a02c9acd067383d0e84af":{"name":"@balena/jellyfish-plugin-base","version":"2.1.219-renovate-balena-jellyfish-types-0-x-4534fc4a489dfa12612a02c9acd067383d0e84af","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.1.219-renovate-balena-jellyfish-types-0-x-4534fc4a489dfa12612a02c9acd067383d0e84af","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"600d3b46437e9ffef6d75597a64adc97b90eb42f","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.219-renovate-balena-jellyfish-types-0-x-4534fc4a489dfa12612a02c9acd067383d0e84af.tgz","fileCount":18,"integrity":"sha512-N+0vWo346z2+OlbJJ1I7BoTBzrzSiES+IrH2B9+rUSbCo9p0BtRBVmBjoi52DYtqn98wyCZi4hRpysOOZyQcLg==","signatures":[{"sig":"MEYCIQC4GxBoxfhi8AnezNaqBTSHL29JZwCMS4IWGapXm0hgDAIhALGss4UNYJm3un75iWrWEhojnojdHxzuekV8Anx7vnyu","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":61660,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJhERSPCRA9TVsSAnZWagAAuScQAJXEeTdZuW3bkl2LY39F\nL/SubGJT78v3spdA9BTlBxoHuocA3oXmVXMLUet9kRFdJMHGfbkYhGZ3dS87\n3bAKkEhJ6gxWEAdVguQFkk1hdS0rE0bj93tNepAsF2YTj1RLAna4NAny3kqB\nyLVGLZ5nKsJE7nb5bLoEGGaFfJgfYXTXv07XJ+0u+KGZZDtLihQsH3hC9iJP\nrDbAnROL9/W9SbHzjSc41a8rwdJqHpp3yRqFfZ0vqpHDW66C0numEib3+HHG\n5OS96KjodlnxZrngCvS9rNbDry/3/6ZFmknHXFjK/Nu997oPbwa3NDBEJr/k\numCgFobjObFojYtmqHHu3+7q7Rw+IBEbtjvL9IPGglr7SLffXdD/XqAYpk6k\nL9wqjZL1IfpnH2Yrs5WfGuhJCXExcmxYNe+NsKYVvAxxUruL22jFHG7aXiO0\nv1OLy0PKx/yfljBoaZ8Em/QDWczu6YqoXzTHgqLhlNUIvePiurf7LpW6rVld\nlweAJubJagzP10iv2nT0gxaI67/bUUE5qUGfSn2k5rmesW1KCqUlhkURDPmQ\n+8XVuxFE8llk7sRaxQhsd6um+VCAIL2MkyrBDOX5GaW7IT9dL2vqg3Wanv2P\nBLuKUXLbBk/Ttc+fEwkdUrcN/ONCC6GgK1ltJ+T/+B0USt/AIm+ha3BBn2Uh\nqZKD\r\n=X3k3\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\n[![Publish Documentation](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml/badge.svg)](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml)\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=14.2.0"},"gitHead":"4534fc4a489dfa12612a02c9acd067383d0e84af","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"npm run lint && npm run test:unit","build":"npm run clean && tsc -p tsconfig.build.json","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint:fix":"balena-lint --fix lib test","test:unit":"jest"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"versionist":{"publishedAt":"2021-08-09T11:39:10.709Z"},"_npmVersion":"6.14.14","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --fix"]},"_nodeVersion":"14.17.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.9.0","@balena/jellyfish-logger":"^3.0.58"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^27.0.6","sinon":"^11.1.2","deplint":"^1.1.3","ts-jest":"^27.0.4","typedoc":"^0.21.5","depcheck":"^1.4.2","typescript":"^4.3.5","@types/jest":"^26.0.24","lint-staged":"^11.1.2","@balena/lint":"^6.1.1","@types/sinon":"^10.0.2","@types/semver":"^7.3.8","simple-git-hooks":"^2.5.1","@balena/jellycheck":"^0.1.3","@types/json-schema":"~6.0.1","@balena/jellyfish-config":"^1.4.8"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.219-renovate-balena-jellyfish-types-0-x-4534fc4a489dfa12612a02c9acd067383d0e84af_1628509327728_0.6341102913761598","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.219":{"name":"@balena/jellyfish-plugin-base","version":"2.1.219","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.1.219","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"f318f7bdc98ac4a3be5fbc9d88507780e16f4c99","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.219.tgz","fileCount":18,"integrity":"sha512-XxKLXhuAWhj4XBeemvDFOonu7VauLrCJ7U6+LcLYZHlQ+lwSX/zgQQ4XOW7ppWeNyqmFU5YvHujRuMFDz1hFNw==","signatures":[{"sig":"MEYCIQCm6f5Ut4fPCzadKMoHoEvUw2wXsdxGSKa1THjWjIfLygIhAMEWXpLV0pQV5jDKWMU7Ukb1xjmdVEHuGq7f8VhqY067","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":61583,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJhERX1CRA9TVsSAnZWagAAx0YQAJiFHkGkswCNgp19vFwB\njUgzzI6haFRfUfwv9IRy1u1klhcL8OzlWE3t8UNuaPD/mlzFMARnSMMqX13j\n5FR76WDqQac6VKhIn6r7WgqJnnUBuvQ8VvpKyD48vNEaGWxZ2sr3pnSxH3R1\n9a2nSkcJ5RMzBmthtDR1RMPe2AVKBScTn/nkQ1v4y790V3PIK1uQvmox0TGu\nTDtNjeQ3c6lNhLbM44s4UcjKn+nBPqJxu2uNJZKm0VK6sEu9CqApS7DupOd7\nvm+KgnkIRs/leq17RRZS0T7RTDB0T4mz2f0MThBy37K9eHvexvOet6YqzISG\n6UwcR4Cdht3QtDFMvqPfveqq3xuf4W7l9K5mtw3H/ud9Xw9+KgQ/1o8MmmMO\nnsS1lvRPKTTFKs6aXDc3tXLKzLPBfTetJATsKsFl7W/ccZlZPeo/BiOvolNj\n+L8fhMICbaQRqO/IhKsEWcqEWcIgym3td7qvTBlhpqsRdHSPpCt9YVWDe3sB\noKVY+Xh7hZbnDthfvs7pDgBNHf8DGVzD1XPDJNM1hmOdrY0TxWfpzj9ZrmQe\niy/LhlPB+nMLsbpxvkT7RBdErVJr+PQJYxmfve16Obd2rwjNeJB8Qw92/qMN\nqpAwH9dN9DsUuNP4bLFEk1UzqrK/yhT2EToQ19CLDKJOs9NXm1zOkTji6agP\n85CS\r\n=SjOB\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=14.2.0"},"gitHead":"98ed89779f6c0969b1663fbdf7e63a271e9b12dd","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"npm run lint && npm run test:unit","build":"npm run clean && tsc -p tsconfig.build.json","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint:fix":"balena-lint --fix lib test","test:unit":"jest"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"versionist":{"publishedAt":"2021-08-09T11:45:51.421Z"},"_npmVersion":"6.14.14","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --fix"]},"_nodeVersion":"14.17.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.9.0","@balena/jellyfish-logger":"^3.0.58"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^27.0.6","sinon":"^11.1.2","deplint":"^1.1.3","ts-jest":"^27.0.4","typedoc":"^0.21.5","depcheck":"^1.4.2","typescript":"^4.3.5","@types/jest":"^26.0.24","lint-staged":"^11.1.2","@balena/lint":"^6.1.1","@types/sinon":"^10.0.2","@types/semver":"^7.3.8","simple-git-hooks":"^2.5.1","@balena/jellycheck":"^0.1.3","@types/json-schema":"~6.0.1","@balena/jellyfish-config":"^1.4.8"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.219_1628509685298_0.3694191356833385","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.220-renovate-internal-patch-89a95d5ffdab3f8805f78d66b1244aadc56ad66c":{"name":"@balena/jellyfish-plugin-base","version":"2.1.220-renovate-internal-patch-89a95d5ffdab3f8805f78d66b1244aadc56ad66c","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.1.220-renovate-internal-patch-89a95d5ffdab3f8805f78d66b1244aadc56ad66c","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"f5e202557f993a4eb036c7e34bda04c870c24f26","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.220-renovate-internal-patch-89a95d5ffdab3f8805f78d66b1244aadc56ad66c.tgz","fileCount":18,"integrity":"sha512-M8Zr3hz/D/wKcW3eVcgIeyuEpBuZfCOGV2QJsAoVWZKaXJN3LiJC/3JrFJ66S+yZET/hyV2mH4ybeC5xZ1ttVg==","signatures":[{"sig":"MEUCIAxxbo8dcCM0qkGqnfc4lZ11GgADuR3gIb7rLlvmg3+gAiEAvtFbMhSM+vtIJioNdAYtqrasxS4d+Z1BsLKD+C7mp4U=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":61750,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJhEl2RCRA9TVsSAnZWagAAY8QQAJefh02CE7bQdAjLvJbc\nqI+q2Qr+N2c3l/Ypuh07ENp5En6yGiT4xRAPpLwtbHZX+Wdkj33JK15V+CdV\nv27qdUuteY4l7pT8it0sUjp88uxTKTw7844dWWNrEWKu0sYLoa2JWFYsAt8P\nMZOEsoVL5wt+fSa/bxo+HaXcPxHzfFWtG+riYP0Oiqnzu8vZiza1c/40I9pm\nWoXJ7b9f+qcgVPEaUn5DtQHUhmyjeci+FunXAVr0rkw41bBemmeo9Ir2/Dqo\nbfbxDJ/709Wvhl+wND035398xak9MQiQNEM1EfFP3rtZoTcbhThtxvwLjMC1\n02QoGLaN3tkhNYuB2X6n/G8Y7qfnjm9KDi+jKNcCVvCk9C+PUExMn85VV0zD\n2q4vCJQqlfpKaFk+IYsZJvgyXMsNTpFSywdlHT1wWiKjqFarfs/dyPC8Bvnr\n84lFzJGhR1GrsjE7X8R6gARJzu/0BW4IlbKKgxs9FdI1fYyNwSx13zAqQ13l\nSOiZlDfRfnONKHpCSct6IpWQb9WhV6PNqfvX9GdxLxCVrfdeJ02NJJ1e24lb\nR+g2aUcb4+nOiAdH68szFq/LdGG5mUKjEQNhyWlJDQ4zVpS/Eduk0xIwlPU9\nwpMi/IMUIBsrU+K9xmNEDifCYeRqBYtUlUnfPM+KtdfwQKkx8bdJtA7Dyu52\nGTex\r\n=VIee\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\n[![Publish Documentation](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml/badge.svg)](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml)\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=14.2.0"},"gitHead":"89a95d5ffdab3f8805f78d66b1244aadc56ad66c","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"npm run lint && npm run test:unit","build":"npm run clean && tsc -p tsconfig.build.json","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint:fix":"balena-lint --fix lib test","test:unit":"jest"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"versionist":{"publishedAt":"2021-08-10T11:03:30.793Z"},"_npmVersion":"6.14.14","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --fix"]},"_nodeVersion":"14.17.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.9.1","@balena/jellyfish-logger":"^3.0.58"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^27.0.6","sinon":"^11.1.2","deplint":"^1.1.3","ts-jest":"^27.0.4","typedoc":"^0.21.5","depcheck":"^1.4.2","typescript":"^4.3.5","@types/jest":"^26.0.24","lint-staged":"^11.1.2","@balena/lint":"^6.1.1","@types/sinon":"^10.0.2","@types/semver":"^7.3.8","simple-git-hooks":"^2.5.1","@balena/jellycheck":"^0.1.3","@types/json-schema":"~6.0.1","@balena/jellyfish-config":"^1.4.8"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.220-renovate-internal-patch-89a95d5ffdab3f8805f78d66b1244aadc56ad66c_1628593553633_0.8308697038633197","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.220":{"name":"@balena/jellyfish-plugin-base","version":"2.1.220","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.1.220","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"a539ff3a6545b0dc585426f357d2a6d468e7c385","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.220.tgz","fileCount":18,"integrity":"sha512-nvCXtzNM33jVPurZ2TMvhrbK/97MZAkgGIl9G477AKHRKWHVeZ73TrZmi/ZCJejKzbwE6j49AbDCxhYAjljzYQ==","signatures":[{"sig":"MEUCIQDIdqsX2Q15PV2Xthd/XyxtrMgqeUpQmkSoR2raj4mMcQIgaA9+HskuCV4Z32sVKKbW14AfoK+3iOsZl3BqUx0cfpc=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":61685,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJhEl5dCRA9TVsSAnZWagAARtsP/iTp7L0iGUNJCRCGfmmJ\ntCmeUN+b7vpr0v9t24fQihyRCKmRr8rzrfthTP5xTwOBoFawMT/wQ8IjrSDo\nHEdxAt4rQbDAuSOam8SwIU0OOrvh+IZ0fE+PejpGz/55I7quWFo8YujEjby0\ntTLfGX04hJ7EkwZ2jJ/+2zDS3p3aBAnwJfFHjZG98zj3kTw5a99wHn4nY/tZ\nArt+XFINsbjoiWroSB6hyBPRVJOvkl87/iuCb58dqfhrdTlqBPSRjtalgsiV\nzpbXEsaFdSUIc6OfL5p1uEkuIPeiFKWHNZCdCJrnd1poD8clPZfJ9HhC+LDg\naLznthdgy1QSFXfngB4S9pr+OAiBiIkvnV7cS5ew2nctLO1L8wnfv9hs8EDJ\n526GE+I70aPtB5TyviYcsHV88wx9GG+Pj2ttaDiPg/goW7hubyOkw5mx1EPt\nFQzHINKpS/jDlcR0q6vO+DcAp3KBiEoMkmeuGPd7gmTgRL+ETrb2rRbye0Og\nof/BQgFlAfTcSPCjTzzlQKDOm6x9zcK1s4H/4VxoLj6TTy566SdRlT8dkP8C\nnTEdlmXGiD7R9bVJPpwnO4NOoOlD3AxD28m6Cx7EHtm4ZnLDygkk8hyq1dNv\nQKA6tm3y255Z8ZtAyW1BFWdwvMTPZk9/xm/7hr2MDbqgkUYuS+EzwFqL3C6a\nIKXO\r\n=7AT7\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=14.2.0"},"gitHead":"ef56da408738a2ce531b3f4e073454af45dd52ad","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"npm run lint && npm run test:unit","build":"npm run clean && tsc -p tsconfig.build.json","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint:fix":"balena-lint --fix lib test","test:unit":"jest"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"versionist":{"publishedAt":"2021-08-10T11:07:20.736Z"},"_npmVersion":"6.14.14","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --fix"]},"_nodeVersion":"14.17.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.9.1","@balena/jellyfish-logger":"^3.0.58"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^27.0.6","sinon":"^11.1.2","deplint":"^1.1.3","ts-jest":"^27.0.4","typedoc":"^0.21.5","depcheck":"^1.4.2","typescript":"^4.3.5","@types/jest":"^26.0.24","lint-staged":"^11.1.2","@balena/lint":"^6.1.1","@types/sinon":"^10.0.2","@types/semver":"^7.3.8","simple-git-hooks":"^2.5.1","@balena/jellycheck":"^0.1.3","@types/json-schema":"~6.0.1","@balena/jellyfish-config":"^1.4.8"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.220_1628593757641_0.8985831069140287","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.221-renovate-internal-patch-5135e4d3aa40735ffbd15ac4f0d43e1e62d9b310":{"name":"@balena/jellyfish-plugin-base","version":"2.1.221-renovate-internal-patch-5135e4d3aa40735ffbd15ac4f0d43e1e62d9b310","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.1.221-renovate-internal-patch-5135e4d3aa40735ffbd15ac4f0d43e1e62d9b310","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"18ec1c6da147d6673c9ad1a7f3f96375fbcf7648","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.221-renovate-internal-patch-5135e4d3aa40735ffbd15ac4f0d43e1e62d9b310.tgz","fileCount":18,"integrity":"sha512-xzTe49/4cH5B2V+F1bn92PA20WwQzUVlnbGF7UDumco3TEm/N65U3qCFX3uW4ig7PKee2wE35zyAosH9QgnAwA==","signatures":[{"sig":"MEUCIQCEZX0oQBs9Gh0bi7+WObKxaSZs6QOyriU43h5mE2ueTQIgOgXxCpagVjR6QGhhu8pFrPuQl5ehyItx9M75z3r9EDM=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":61852,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJhEmnHCRA9TVsSAnZWagAAKxgP/RHAC7g0A3Pk5xl/EPSF\nMxfj08gcRnRODb7JZPoP3w1U7qHjpoAYL0FhWQ+AnX06ds5TEg0rDtcUdEhf\ngMmQKY0tKwU1+18nGNUnzBoBtiGudO1IjKGy0m8eeroTIsJPBEujJNwKXBdV\nAabYI+IpT7Rki8l6gRhlCUrfRPa71xl3NjMUMtra2iD2QmYcaZ9KldK6CJBx\nHYcLUXj/oIZ81uICgipX+EwZMh9zUplreuI/D65hYFfYUpXqfGWFaBbnbsvc\n9PuQ5bcwyDg4GdcWTQpaig/eayLGWiaGCuwUMOJ9v0OmbGpFW8aS1V+7LNRH\nxGNEFeeynwfQ9CIjiVOcU/zxqz0njabwGChqqTB8V0GU14d5vYx4ikir/y9X\nnpIca1h381ppXbSPEktBztdLezIAKP+hIhPp2FXisJbca6/CDMIFBnqKD0pX\n8B3hSYkZFBbDRJ1wfmJpijem9QXmQ2u1FmXL0jmG0lHbF3eMLWbq1Fj0au/H\n9+aq1lPsxBUxAJO4cupmFdBK0KULsTbsrx1heEE0LYPWnxgLU7+piDvh9APy\n7TIhiczkLyUU7mp6YzEf4CA35HdwozndRbcX0rQO6uJhQGaZ5KVFwW78Jurj\nT1L1Q888uh9j2xRudPTLGdvd4oXFtUR6Ys71xk7jS7vuSiZELjNPbiaKaTCJ\n7Zpl\r\n=azYX\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\n[![Publish Documentation](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml/badge.svg)](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml)\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=14.2.0"},"gitHead":"5135e4d3aa40735ffbd15ac4f0d43e1e62d9b310","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"npm run lint && npm run test:unit","build":"npm run clean && tsc -p tsconfig.build.json","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint:fix":"balena-lint --fix lib test","test:unit":"jest"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"versionist":{"publishedAt":"2021-08-10T11:54:46.292Z"},"_npmVersion":"6.14.14","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --fix"]},"_nodeVersion":"14.17.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.9.2","@balena/jellyfish-logger":"^3.0.58"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^27.0.6","sinon":"^11.1.2","deplint":"^1.1.3","ts-jest":"^27.0.4","typedoc":"^0.21.5","depcheck":"^1.4.2","typescript":"^4.3.5","@types/jest":"^26.0.24","lint-staged":"^11.1.2","@balena/lint":"^6.1.1","@types/sinon":"^10.0.2","@types/semver":"^7.3.8","simple-git-hooks":"^2.5.1","@balena/jellycheck":"^0.1.3","@types/json-schema":"~6.0.1","@balena/jellyfish-config":"^1.4.8"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.221-renovate-internal-patch-5135e4d3aa40735ffbd15ac4f0d43e1e62d9b310_1628596678853_0.6578152745505381","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.221":{"name":"@balena/jellyfish-plugin-base","version":"2.1.221","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.1.221","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"df9fdacb47aa99cdf9c7f5be3f7af58460a80df2","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.221.tgz","fileCount":18,"integrity":"sha512-Z1jEqvutF5p0h4FGAkvAg7W8xiz32+bs0d1aA7mQkuaFD1gsMtM1geX9T+JFui9b9QtqklBFJKrV8JStoxkDXA==","signatures":[{"sig":"MEQCIFaUWHpFaTkbEy7Keaive4k4Shv1YCyF4wnqCl6xofHJAiBzpZ8UoezMOTu+ZcteWxkqTjlDKu6CIvf9M7Zl3RgPhA==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":61787,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJhEmrICRA9TVsSAnZWagAAt0kP/iP0qXc3DltvPOfTCXs7\nZIaMELnFnJ9qBm+abpv3NTb0zQMoOcZkuXNtwjppgIzdNG7tmwVWQNc/7ev1\nVJ8NJSZ+FxHl+4APXpgt7+39ffzJ0Hn5xUrUF9vxjKuqdsGwdZ2VDmks+BT5\npLbL7gT4zr/nKEJXd7nnok8za4aOBJQ0VLzGRxBRS/5p6jiPaXTYARUDLUz+\nnspyZ52WWxz/fUA6yhVFtGoGOD7iStmVSzKy+Af66Hr8d591joXJbJAVXROq\nnpbD1X/rnBJkBwn6uwZ5qJGfWpIBTaFroCC0ToydDEzazOOdHtKy22i5UUSR\n0ftbY+DILVo8WtFnJITbKCZman9fERRqLCD6wTKWGC0MEnM8GmDvvLW8k4cF\n4atWpJ2IpxSfK1AaCyfQojrOOYZ7e8et/bbDYbNv1yz9tcg5VWb+xougRpv6\nulCm7XDkKiucgMNHkpYSev8WI6bmWUsOrTsVeuSbnedqO+nz7XMgn3xz293h\nj5oZrzWuWrAPRdVM42bUy7Y0ntyQ+jnCvit5AjA95zNbt4sF5rWd6oj36gfz\nHYm4hYylA53KAql7LMtsmuf+YfM3zoj2/3wq79vf8CikPv1AwJpYv1vxkcQY\nvqSQKoy61uuULEkmJFfdzJDJMzg43jI9j4ckMaIXeYRnEDY04x6O4lXoG5AZ\nciFh\r\n=A7Jl\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=14.2.0"},"gitHead":"6b5e234afe80d816447cb5d8a997b3ab1cdd7546","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"npm run lint && npm run test:unit","build":"npm run clean && tsc -p tsconfig.build.json","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint:fix":"balena-lint --fix lib test","test:unit":"jest"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"versionist":{"publishedAt":"2021-08-10T12:00:09.707Z"},"_npmVersion":"6.14.14","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --fix"]},"_nodeVersion":"14.17.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.9.2","@balena/jellyfish-logger":"^3.0.58"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^27.0.6","sinon":"^11.1.2","deplint":"^1.1.3","ts-jest":"^27.0.4","typedoc":"^0.21.5","depcheck":"^1.4.2","typescript":"^4.3.5","@types/jest":"^26.0.24","lint-staged":"^11.1.2","@balena/lint":"^6.1.1","@types/sinon":"^10.0.2","@types/semver":"^7.3.8","simple-git-hooks":"^2.5.1","@balena/jellycheck":"^0.1.3","@types/json-schema":"~6.0.1","@balena/jellyfish-config":"^1.4.8"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.221_1628596935856_0.9457850932797427","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.222-lucianbuzzo-correct-action-type-1ae3a0aa506771e6fbf37bde9fc7525be91dab44":{"name":"@balena/jellyfish-plugin-base","version":"2.1.222-lucianbuzzo-correct-action-type-1ae3a0aa506771e6fbf37bde9fc7525be91dab44","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.1.222-lucianbuzzo-correct-action-type-1ae3a0aa506771e6fbf37bde9fc7525be91dab44","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"2cb2c6fcdef4b5e03594c3990ad34111be9217dc","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.222-lucianbuzzo-correct-action-type-1ae3a0aa506771e6fbf37bde9fc7525be91dab44.tgz","fileCount":18,"integrity":"sha512-uD7QypS5vJplt18tFbzbZ3ZCuDHTXHv7Mw3MOVnhZNShrA6v9nC4Jnpph1QjfMGJCdrvi2jABapPNlrU1TdTFw==","signatures":[{"sig":"MEUCIQCE3ZVOLyrCHcbIDtr3ETWAgQnLfN5jaj6wQx4w6aLfRAIgeBTXc2F9ABylnh7lZkUYiTT4RreQyCazp54MGvVQtB4=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":61639,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJhEnphCRA9TVsSAnZWagAAij8QAJJ29p8UgNpjd/ppPwT/\n7rRZvUgi4Hhei4rBrrf/za0nThalAVVHSq1ptn6zUoxUVBxu8Zw4uypbq0zw\nY+jaN94wbh+vwD8+Gg3xf5Ycq44KeX+DegECq5wqXQZz0evdnNVwW9DRgOrf\nkPu0UTFrI0ajZRYmEnur2UCVaLjm8gSMLgRJwEVrY1Zn8S3RH4eRQkZD5vC7\nxlx09J7f7GpTJSTET36VLHwGI1YPQ38FzGB0VPAswGDMQndVZ9YlTPhZbb9O\na2ZnKBE/TPjHoOXO38Yb1KZ1h/X7hP/REVjmLWGLoVgOa1yXPhd6w0L9OOUK\ng1HrhdKf0DU0nUc+spOEsp3ekXJH6+Ecidsu4vPSxHi73+BtJ8WnrQEgT9k/\nZ/jixgjgi8BPXos4U3HTPOwfPaKRupVw7P2EguEZOjPUSW3vmaMtuytHbVLz\nzx1zJBoQM6hIyfQD7CLtZUi3K0kz5CHCo2SJ83PY/bTfoRaQsWP1qHgbmM2H\nQHsdWfbeyuyj6yVR3Jqe+yyM2oXE+ddw24x4AnUAtCSzXtUYcdQCRwEui0SO\nR6fkvxjtGcv9XUFTrV84SS/tIoflWWEHEy651VhUpnA9VHJXNcGMPQdglMXC\nWRxJGVKqonHgJPo90IJE38vKhHJ76XZiC9nUmoC1K+XC7GNIUxN3pb2ms8aU\n3Swa\r\n=RfPu\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\n[![Publish Documentation](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml/badge.svg)](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml)\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=14.2.0"},"gitHead":"1ae3a0aa506771e6fbf37bde9fc7525be91dab44","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"npm run lint && npm run test:unit","build":"npm run clean && tsc -p tsconfig.build.json","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint:fix":"balena-lint --fix lib test","test:unit":"jest"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"versionist":{"publishedAt":"2021-08-10T13:05:06.771Z"},"_npmVersion":"6.14.14","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --fix"]},"_nodeVersion":"14.17.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.9.2","@balena/jellyfish-logger":"^3.0.58"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^27.0.6","sinon":"^11.1.2","deplint":"^1.1.3","ts-jest":"^27.0.4","typedoc":"^0.21.5","depcheck":"^1.4.2","typescript":"^4.3.5","@types/jest":"^26.0.24","lint-staged":"^11.1.2","@balena/lint":"^6.1.1","@types/sinon":"^10.0.2","@types/semver":"^7.3.8","simple-git-hooks":"^2.5.1","@balena/jellycheck":"^0.1.3","@types/json-schema":"~6.0.1","@balena/jellyfish-config":"^1.4.8"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.222-lucianbuzzo-correct-action-type-1ae3a0aa506771e6fbf37bde9fc7525be91dab44_1628600929857_0.9379584634373852","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.222":{"name":"@balena/jellyfish-plugin-base","version":"2.1.222","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.1.222","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"0cc5bacfbfaabb57ec87485f2c43d022e4b42817","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.222.tgz","fileCount":18,"integrity":"sha512-J9jaMurHDRsd6h1bloklaKLCDd4JRRBVnG2NGWOEN8pkMViV44DqIK2+GWtT0XhuLA6dXN3R12ujDXgfx0xReA==","signatures":[{"sig":"MEQCIHBxL0yana2C+k7a1A+Vvm12WhIjYuk1rD6reaOjjnKSAiBLjMOhcSJakfMlfD7/HcZ8YFUxKYniIwxLR3ZS0L9HCw==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":61566,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJhEnt7CRA9TVsSAnZWagAA0GkP/Rcx4wJ3+PIHgdMQQe08\nwoQFUKSY/VEbRoWmEpInH2BEcWEJYZ6WCXmIhCyxjnZbp3vZgW3bCB76697Y\nsVEyAbvNIyHgwV+GwUjnmwoLPMSBeV8On0kyc7g3k3lyV15IO8ydY2adyIxE\n4MDYuoc4qu+xKn3naVZZIuylwW7ARPJuKMOIXPXhD3Z9go+1sSPb228ThQFI\n0TEGuv2z60LvLnOPOUo4ad2Jg180YQKcHmtpbx3owiXZZnFWEUrw1ZFmST1L\nEHuTOL7uoxUB0TyPZ5tlw5bMNrSm8ztlZ12Z0sfB2rapEAEVaIytFDd9I4hQ\nrygU9OxPoGHYya1mqM12JYZRo+46Gb2ogneqIZGDOLD5rNnhRQ6Qm/Ncylkg\nicfcUOEglDEmS5v+tGV8Zt4WaVbweMnsbzRqiOZ9hTDfEiukbYYrzCfdCpNK\nosj2F6x4Da2OsgOtW2pdKH9ik69bm/uFUgzpeoilp+XxKwQTVlo4FnucjEGN\nbFBJbTw8PCJvQM7W1f7UVu8tsqO/UU94d8KDlGf6N7iJuiw4uOvnZv5eVox+\nC0xzu/W5pLzKYmmIeEFbO4S9abLgZmOiMFtLk5XuD/hlCMxKZR9PfZpdHUGh\nBdaIPlPwbIKlisjiXJaNnUDX8BZGWUfli7LwaVpQnsQqTe01uvxpd4hi0nXl\nsS+s\r\n=Aphz\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=14.2.0"},"gitHead":"379eb58d7597dcd6764217d48a07d548dd702485","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"npm run lint && npm run test:unit","build":"npm run clean && tsc -p tsconfig.build.json","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint:fix":"balena-lint --fix lib test","test:unit":"jest"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"versionist":{"publishedAt":"2021-08-10T13:11:50.838Z"},"_npmVersion":"6.14.14","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --fix"]},"_nodeVersion":"14.17.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.9.2","@balena/jellyfish-logger":"^3.0.58"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^27.0.6","sinon":"^11.1.2","deplint":"^1.1.3","ts-jest":"^27.0.4","typedoc":"^0.21.5","depcheck":"^1.4.2","typescript":"^4.3.5","@types/jest":"^26.0.24","lint-staged":"^11.1.2","@balena/lint":"^6.1.1","@types/sinon":"^10.0.2","@types/semver":"^7.3.8","simple-git-hooks":"^2.5.1","@balena/jellycheck":"^0.1.3","@types/json-schema":"~6.0.1","@balena/jellyfish-config":"^1.4.8"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.222_1628601210945_0.11812562231881873","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.223-renovate-internal-patch-c1907a6c7eb76796fd33b7ed4d8f4d30d753d2bb":{"name":"@balena/jellyfish-plugin-base","version":"2.1.223-renovate-internal-patch-c1907a6c7eb76796fd33b7ed4d8f4d30d753d2bb","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.1.223-renovate-internal-patch-c1907a6c7eb76796fd33b7ed4d8f4d30d753d2bb","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"3b4d8fde695349df98dbca155fbf16849dccf092","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.223-renovate-internal-patch-c1907a6c7eb76796fd33b7ed4d8f4d30d753d2bb.tgz","fileCount":18,"integrity":"sha512-+yfni+jKRjPE08WJJaIWAbUehNe8mDxaCOvfjVMMz+rgk1ZZFt8UHeRTrNNsQAluDEA88voZTLFx30O8UJOIsw==","signatures":[{"sig":"MEQCIBDX/nJmbs7/7cTZ6jwvV4cxBCqxkxr+vK/2SHteYISwAiA7iKZwIyFmMDEby/b11PB0je3seusP8Uu9s+lzsNjAgg==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":61703,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJhGcFeCRA9TVsSAnZWagAA+38QAKTNmfMTjy/ihDJ+opDD\nHQAxmIq48FV8r779x0fG8UC+sQ44QaeuLlXq+7tcYVq5VWCOpV9bq5qgz25d\nGY4AAcX5wy6H9mBUw73t/Puh5gQlOqAa28ngg2wQZy5JxvTlfIMuu2jgzBeQ\nBKVtHI2lwtZ7paUxmw9SBoDs9EtZXIjQ65DNmKINgMDcg0SKmN9mvweosoNz\n//5M37k1vwsiCGnYKnySo3VqbutmUyyN0Z1+fR6oG0grk6LMu6xUQDbmvGEP\ny0sX/ISYYr+wtz+2d22lP1slEkBlgU92pcN5iOKyitpDiV6S41ILr5xbTxtt\n3h8zAk3eFDBaX3+MIzJh4UjU4Ccw6k0K1wF4yvw5DrExG5Fkdx2KT3i8XvL3\n7shChoc15Waz14lfQ/EaJJrF9DhaZ4vxynINRMg+OSbsXMw+dzDsZMtmD7z+\nBvoFY5zH6fBufMByh8w5smRKCPgJpu1fm07FJYjmX8K8mM5IPkPu4yYK+RQU\nGQyAxjD02G9IwNFdLmKQZKj4bQ1+TlCpx0tj1/rESLdH/81m8PqHUhnrygHC\n3yPKZumGHOAR45A3rM1SFSKFeL1LvDFZ5o7DOpYg3nY/VYUJdutlMCFjfc3C\nmcE6X1I/lMw8Qhvv5tbMCeLA6aQiTtbNxVsroDWNcjygoSRlfchwnmCXlIQu\nqsYF\r\n=z4ax\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\n[![Publish Documentation](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml/badge.svg)](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml)\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=14.2.0"},"gitHead":"c1907a6c7eb76796fd33b7ed4d8f4d30d753d2bb","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"npm run lint && npm run test:unit","build":"npm run clean && tsc -p tsconfig.build.json","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint:fix":"balena-lint --fix lib test","test:unit":"jest"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"versionist":{"publishedAt":"2021-08-16T01:34:16.143Z"},"_npmVersion":"6.14.14","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --fix"]},"_nodeVersion":"14.17.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.9.4","@balena/jellyfish-logger":"^3.0.60"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^27.0.6","sinon":"^11.1.2","deplint":"^1.1.3","ts-jest":"^27.0.4","typedoc":"^0.21.5","depcheck":"^1.4.2","typescript":"^4.3.5","@types/jest":"^26.0.24","lint-staged":"^11.1.2","@balena/lint":"^6.1.1","@types/sinon":"^10.0.2","@types/semver":"^7.3.8","simple-git-hooks":"^2.5.1","@balena/jellycheck":"^0.1.3","@types/json-schema":"~6.0.1","@balena/jellyfish-config":"^1.4.8"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.223-renovate-internal-patch-c1907a6c7eb76796fd33b7ed4d8f4d30d753d2bb_1629077854533_0.7760246060434486","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.223":{"name":"@balena/jellyfish-plugin-base","version":"2.1.223","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.1.223","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"a5f208af3b91c777be01100ad49f43a574a859e1","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.223.tgz","fileCount":18,"integrity":"sha512-UN1GMFCSIkPj/BJjDTqMS2DelAnAcxQnl423TRHkhKfHlSBIsS1L9B2fZFQpS38Ql7X6HIYA/pmQkVVHECmoAg==","signatures":[{"sig":"MEYCIQC3zsV7lM/fVnvOmNZ4RafvpFYN4EOEyO4afH97AtgRFwIhAPif3K09aEiayh+7vgS/yMOioKK1nN2oRs8VerKhYps7","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":61638,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJhGcIrCRA9TVsSAnZWagAAONQQAKI1sKVoK6RuM/9Fm+LV\nyELqoSdmey9cjX9igTMWiqEEverWYBqsqNqEXiVvhBou8gxpLljmeGOhjy7/\nc7FVrfPI7dqfm5MlEz38aKdg2kuU6gSJ7xJ7N+SjptFfI8z0k12Cprb009zA\nK+O+ajF/YnBIcnxrjufHf9fwAZsvv8NpV0bhCbyaGcp2eZi8djxOeQf8andI\n4C8fXmYfKHcTHSy3GSzlwXJEMzQRUvwI/QVZPrlMQjOO+tgj4KiluqTys6nq\n+8Maq9VsTEIlvZiXR4FvQPE3KudrwozAdPvE8sjWa6J2TyvHdk3HNtpwQC4S\noYmqFq3LgeJpgU3SUwxmYoW6LV/8RM9YZSUQUiZ1MW53ff0NZUWsJNgXCkza\nrPD7ayPaL97ClZ+NwWjEzSAIvZIAm8KW1/5ItXXkipNCPEdloKInX97NXjmF\n7f+LwHnTMnnU16+AQQfcfYSbK9N5UWJJCwHxYGf6q6Tp1XBtWSdDCk9zb2J9\nLCgjxoh2C7/aHH07JQdKqi+J5RSJofOvcH3FKOWxf/67gjEgtFG2TSI4AlSY\nIA0XO1MP2DNbPCMCEEfurwV+xMhQRJiZKmZ85pxa1Z486HFd3eVRfv82NJ0j\nGALaDgcxzKbk78aaN6XEYg3R4pOGtnq333zwXOuUv1MRbJilCVNd3/F89vym\na9Jv\r\n=Lknj\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=14.2.0"},"gitHead":"f34b222baf385ad36141da9a75d3d1c7ef75aaff","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"npm run lint && npm run test:unit","build":"npm run clean && tsc -p tsconfig.build.json","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint:fix":"balena-lint --fix lib test","test:unit":"jest"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"versionist":{"publishedAt":"2021-08-16T01:39:21.268Z"},"_npmVersion":"6.14.14","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --fix"]},"_nodeVersion":"14.17.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.9.4","@balena/jellyfish-logger":"^3.0.60"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^27.0.6","sinon":"^11.1.2","deplint":"^1.1.3","ts-jest":"^27.0.4","typedoc":"^0.21.5","depcheck":"^1.4.2","typescript":"^4.3.5","@types/jest":"^26.0.24","lint-staged":"^11.1.2","@balena/lint":"^6.1.1","@types/sinon":"^10.0.2","@types/semver":"^7.3.8","simple-git-hooks":"^2.5.1","@balena/jellycheck":"^0.1.3","@types/json-schema":"~6.0.1","@balena/jellyfish-config":"^1.4.8"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.223_1629078059465_0.15635292700192083","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.224-renovate-internal-patch-9c40fde924134badd31a60ea166a3fc44524cc32":{"name":"@balena/jellyfish-plugin-base","version":"2.1.224-renovate-internal-patch-9c40fde924134badd31a60ea166a3fc44524cc32","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.1.224-renovate-internal-patch-9c40fde924134badd31a60ea166a3fc44524cc32","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"5dc7fecc2af47db4f1435db0c4c8607f4ff0c47c","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.224-renovate-internal-patch-9c40fde924134badd31a60ea166a3fc44524cc32.tgz","fileCount":18,"integrity":"sha512-xFa7rbu6/doUJYMdSt5L/gPkpbum4By8yXwcOV+L0kx9EcxpzTi2V+lXDVvD6YAzv7yb67m7ppzWN6m/9z3tZw==","signatures":[{"sig":"MEYCIQCxvg8TDBVga61u5MDV7AT6D8lC9XS7zAx2PCLdddMQywIhANR4VXP0Mvu79JM0cqtEbam7ueH9cjSmY1vXmB0FqFnY","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":61805,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJhG7yeCRA9TVsSAnZWagAATEUP/1dbd7uBip8Fm8KBrFLU\nMlskePCeERcqW7JXJ4E/rJhHw3h5YjJ7EuO39w07oAk/hkJ3LMhzozy60SBz\n27GqJui66vAp1nrWgui5k+9d993Y166dQnZYR1VO3EsWjfzpWoAHax/r5zMV\ngsO9y3LZmU3NnB0T6FHFWDODVWHLIMPJ6k3CKK/XBtRExG/I10abmIEtQCaq\nAfXW3m0PLzI5tia5cKwXMe6EnfDTJwTmGYUIBmVXjtVUBv3OPt2Akfwr0QKV\nDjoAy+m5bS+4uq2svewPpipjrL8vrc3nIVOGdol30bCfXGOlaMN/GYs/ipJk\np4vsDDtip6b92AZrhR7Ydbh4HSJomtx5JyDIoDPVsOVotU5AQtmxI2B+A5Q0\nhnfnuz4sCGIsdAK0yQi/B9WHfv3HaRJbjgt/qJmU82MqMk8JEV2iTqudI6SG\nKOdDRrLUInw24TX5yj1CwvtfW3Uz/8SpXobo65TLRdS5vo4InlVNyXBlja2a\nxCYCiiqIO2r5yl3blZ3yvXuM3han9VFr/lCby2r6r7zUUGrXVLjiYVqYrhS/\nkzT0XVUxBxmzdqcn5A5p+R5hItUxuhjHR9zLq7aYfz4ufDfYBNOs/bksc5FY\nIZyNOzvf/jxWSoeqIshT5GqDe/YxpkcMAoZuXMS8AqkicQIWeQ0VynhUH4UK\nZ/nG\r\n=WBHx\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\n[![Publish Documentation](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml/badge.svg)](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml)\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=14.2.0"},"gitHead":"9c40fde924134badd31a60ea166a3fc44524cc32","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"npm run lint && npm run test:unit","build":"npm run clean && tsc -p tsconfig.build.json","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint:fix":"balena-lint --fix lib test","test:unit":"jest"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"versionist":{"publishedAt":"2021-08-17T13:39:00.196Z"},"_npmVersion":"6.14.14","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --fix"]},"_nodeVersion":"14.17.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.9.5","@balena/jellyfish-logger":"^3.0.60"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^27.0.6","sinon":"^11.1.2","deplint":"^1.1.3","ts-jest":"^27.0.4","typedoc":"^0.21.5","depcheck":"^1.4.2","typescript":"^4.3.5","@types/jest":"^26.0.24","lint-staged":"^11.1.2","@balena/lint":"^6.1.1","@types/sinon":"^10.0.2","@types/semver":"^7.3.8","simple-git-hooks":"^2.5.1","@balena/jellycheck":"^0.1.3","@types/json-schema":"~6.0.1","@balena/jellyfish-config":"^1.4.8"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.224-renovate-internal-patch-9c40fde924134badd31a60ea166a3fc44524cc32_1629207710248_0.998752705284669","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.224":{"name":"@balena/jellyfish-plugin-base","version":"2.1.224","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.1.224","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"55858cd3b095cd975b213de33d275889d0516274","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.224.tgz","fileCount":18,"integrity":"sha512-fo15mM1sEVJ6xyIIfaRUg6OOgUCntXHbFzbXkzWI0iyF5D7wfY2xTD4UjdkVCZ67NTsIAFG7wXwFMFsfcS5Obg==","signatures":[{"sig":"MEUCIGMsaLgJc3X8SOBX2XHTxngl/lXhP3GI18TmDCkFm5nwAiEAr3m12i6NEjINQFZb3L3tJwAFz6dutWDbP9OY1oHsbRI=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":61740,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJhG71gCRA9TVsSAnZWagAA99wQAIrI4B/Gtps8pIIJLXSk\nFq2k6X9vXDUWNlXfuwRSXyyRdaDEImLY3Md2K61f+GYZlhEBQD6UVFmGL0bJ\nRhkNeAyXWzVsT3DBiLRRCttFGlA7/GXP2kH1FJX2ep66MeYa8nsbphWKikSF\nXj+5kYK+8/FrsbfX9QsV/s5eczVkxWWF6vO4bkZZ5HTrkEwPw5SLH7AwY1ij\nk2Xq+Md7k8mLj4ZOn5XeKln4FKodqAruqWaL9gjXsJHdVQvVUZugEWx1nff5\nZV+cQA0/9GQ9V/ioY+iHYuKWQQNNp07I85r/zKUZ0FgUvm6XJvXglaW4cwLh\nnLfVl+VoJWRWzJitTO5UO5OWXDvIJlkc8/d7PVEX5OBJCetpWFDAU9SZKvjv\nOetSPz8doWV0untRznUD8FSOfN7X72ypbO0yEJeMlkfPX8v4msHK8Hv4EukT\n0WB8K2u9tRv2Eh4WbxaHda95jA1N3fXbi2wqJZZNlQ6SNxKlNQttKhV1cdtk\ndAXCUCBe8Pp2d4e1/8269tSURR72iO9qvlQ1nwTMddaBoGuJzMtSfOLlhVyH\nfP8DH/PhlmmrUK4u7sSYHqsxTu3bBVhXEm7F1W6NnRO7sEZAUAghROOakgYC\nKkiuIPOzhsH+lSdRvQBfL7ReLjvIJ5mB7g5BEWWJ7Xd80xQ9+4YWLh4LRYiq\nlg7w\r\n=Hq4/\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=14.2.0"},"gitHead":"df79984135fef1d829de26fe49d0197d0a952dad","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"npm run lint && npm run test:unit","build":"npm run clean && tsc -p tsconfig.build.json","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint:fix":"balena-lint --fix lib test","test:unit":"jest"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"versionist":{"publishedAt":"2021-08-17T13:43:05.965Z"},"_npmVersion":"6.14.14","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --fix"]},"_nodeVersion":"14.17.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.9.5","@balena/jellyfish-logger":"^3.0.60"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^27.0.6","sinon":"^11.1.2","deplint":"^1.1.3","ts-jest":"^27.0.4","typedoc":"^0.21.5","depcheck":"^1.4.2","typescript":"^4.3.5","@types/jest":"^26.0.24","lint-staged":"^11.1.2","@balena/lint":"^6.1.1","@types/sinon":"^10.0.2","@types/semver":"^7.3.8","simple-git-hooks":"^2.5.1","@balena/jellycheck":"^0.1.3","@types/json-schema":"~6.0.1","@balena/jellyfish-config":"^1.4.8"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.224_1629207904061_0.61944565107468","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.225-renovate-internal-patch-c9412801a2bc2e8407aa96d85dd44e277383dce0":{"name":"@balena/jellyfish-plugin-base","version":"2.1.225-renovate-internal-patch-c9412801a2bc2e8407aa96d85dd44e277383dce0","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.1.225-renovate-internal-patch-c9412801a2bc2e8407aa96d85dd44e277383dce0","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"00c4e66dde569f5d1fc16417e5f5fc5df4fe60e1","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.225-renovate-internal-patch-c9412801a2bc2e8407aa96d85dd44e277383dce0.tgz","fileCount":18,"integrity":"sha512-qpNFPyjkrc+2KLMZ+1YfHMY29DKVlECbH/KMuIGFLXCNtDqN6zMGBAT4zSpjYXBYr0lBiVd9ZmXFFCmtWL4gAg==","signatures":[{"sig":"MEUCIQCyUlvHi3Y8gduqiG18PtiiHO7FbpHlNP3wtjOJWgDspgIgd6WO47d+uFR9O96ruxoGfhp8djlM71+TYPbEGVOPf2Y=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":61907,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJhHPIZCRA9TVsSAnZWagAAj/cQAJv3w8oqzh0yT8RIf9Vv\nKV6fMf6+WTYNdU46luT/Pv4RMvjDXWHyilY5JPuVXCATcaDOD7NDPiRM2F/q\n3K8YUUdnO8pa1lba5sPOCN3xHYRBcHGHu8DYcFjJmNugluhDHn4NOx2ZcJPA\niBHyCIdALVmQW5u8LMX6emwE5kTiCT8YhwwDxEhsW93DwpqeCRUz2J0THvZT\n3O5wpvvllZkUjLyqZU5TyEMF8dSXV+aDa8RD1JYoISESbQlKOJvy5uud3hZ8\nXCq/FyOm2HdFMlCm+TAcE1J/8r5G2L5D1Ra70BIlONuSjsDpNs0UP/DL6M7Z\nNhZiOQq69aMqygF/qOoh2cSqPxaiy0t32bd5yI9W5QHXI6h6QofcPQyBfTV3\nCUmef1tW8fZDq64WWIN2Njwx6nCywT0w42eOdH5KWVG4F9+pSsjq1Km16ZAZ\nAfdUr409F8ptWVC6WxfN7mjouUqFT7UL0wIC7MCP/EOO5Qm5l8rI/ka+gprX\n4W9F9v0k6CRNQ6ytqNL/BhsWn7Oc401Sm4JESEw3eQsZiJgwAvGghkgd9wxP\nonOrWe27OkED5s9q0tRgGcz7Gkj+ytJxYzkte79U7bSSEz1USobPKA0dviOt\nUA0cguc/L0g6K6cS+g5CB6HiWGc7qvl+fqqPIn0CaJO3olSuTEEMSef3PNKX\nRn+T\r\n=C64w\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\n[![Publish Documentation](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml/badge.svg)](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml)\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=14.2.0"},"gitHead":"c9412801a2bc2e8407aa96d85dd44e277383dce0","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"npm run lint && npm run test:unit","build":"npm run clean && tsc -p tsconfig.build.json","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint:fix":"balena-lint --fix lib test","test:unit":"jest"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"versionist":{"publishedAt":"2021-08-18T11:38:51.474Z"},"_npmVersion":"6.14.14","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --fix"]},"_nodeVersion":"14.17.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.9.7","@balena/jellyfish-logger":"^3.0.60"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^27.0.6","sinon":"^11.1.2","deplint":"^1.1.3","ts-jest":"^27.0.4","typedoc":"^0.21.5","depcheck":"^1.4.2","typescript":"^4.3.5","@types/jest":"^26.0.24","lint-staged":"^11.1.2","@balena/lint":"^6.1.1","@types/sinon":"^10.0.2","@types/semver":"^7.3.8","simple-git-hooks":"^2.5.1","@balena/jellycheck":"^0.1.3","@types/json-schema":"~6.0.1","@balena/jellyfish-config":"^1.4.8"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.225-renovate-internal-patch-c9412801a2bc2e8407aa96d85dd44e277383dce0_1629286937113_0.24860001184518787","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.225":{"name":"@balena/jellyfish-plugin-base","version":"2.1.225","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.1.225","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"983108c602a3c0cecee370ed5de611a237b27eeb","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.225.tgz","fileCount":18,"integrity":"sha512-7YGno04CHY+jz9lEyoxjGGFd82VwOUACQdmuDALa710mwuT1VyTQOezjABd35pAfEISaOOIxFbdY0tV9Lr1dTA==","signatures":[{"sig":"MEUCIQCkoDxaJ3BQ+5dAM3cbk600tyP0dMSMamy5HrohrYT2cgIgIu/LfK7y+3dE+E5jX31wwuePbPRRwNEDCDqksCY+Dk4=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":61842,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJhHPLnCRA9TVsSAnZWagAAo0cP/Rv2MLBP4MgQVQpZ/55T\nqtt1TxMjyMvAnbraFZBrJzg6ueUoK4KSjmEhZLVM1qxxRKVbW3wskDt9PSUz\nE4OUkrztsFWbVwGQaF0Bc4k5Y86hdQdRcELVNNGm4ubkKCahvgZc71B9RRaH\nBR3Hl+Kp6y9FIy0fO6ulicAUCxRiVmqpqyyNMtKPezc5EE4wZyiZde8dtGPL\n+jc34Sc+IiNuPYTpUemTlWSv93Wc37IZycna6U2FVZom9qQ3xZNmvCnIyM0e\nETpNO//Jmj5GPLyn62NnF5jGg+O5UCjCT7+21hg/joW2UoQZnjWwu6EiPoTj\nlWwUrheqWYoIhwfJjRvbeM2Fau9qTzol7q4RJ/84wPFkGMeS8Q2nVIU/GAYL\n2SUtu+MaChKV0CeIgYuZU/BEMu8r1WcPLGNz3n2DglMBJrMZF81jHGR8XECJ\nahX2XxZR6wPOcBWsASIy5UW0DhQwDwj/JXywJtgEPtsuq2PwJDJx+zj9R8im\nQkPcS5KJfaOPcrhUEyv8bhoFkqzRfGzpABEq9ln6pmx6aPWlcTNXfWtJtWuh\nvdpTfVlW4rejbvJOmI30jIEvubiQz0X5B1ewEvIY9QBlVxciKG38/GfvroDl\nksjlwEV4dP6nsy+G9LBHVJE06Vmmu13GjhK4byh6aO08eWW1jdyfqZUHn8/2\nvMMg\r\n=RrvH\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=14.2.0"},"gitHead":"633663fe0b44d9509a6d1aec665e0bbe002d40ab","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"npm run lint && npm run test:unit","build":"npm run clean && tsc -p tsconfig.build.json","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint:fix":"balena-lint --fix lib test","test:unit":"jest"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"versionist":{"publishedAt":"2021-08-18T11:43:50.452Z"},"_npmVersion":"6.14.14","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --fix"]},"_nodeVersion":"14.17.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.9.7","@balena/jellyfish-logger":"^3.0.60"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^27.0.6","sinon":"^11.1.2","deplint":"^1.1.3","ts-jest":"^27.0.4","typedoc":"^0.21.5","depcheck":"^1.4.2","typescript":"^4.3.5","@types/jest":"^26.0.24","lint-staged":"^11.1.2","@balena/lint":"^6.1.1","@types/sinon":"^10.0.2","@types/semver":"^7.3.8","simple-git-hooks":"^2.5.1","@balena/jellycheck":"^0.1.3","@types/json-schema":"~6.0.1","@balena/jellyfish-config":"^1.4.8"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.225_1629287143194_0.40381195517488777","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.226-renovate-internal-patch-9b8ae1402ad8bba522b5edf2e407376654e2210a":{"name":"@balena/jellyfish-plugin-base","version":"2.1.226-renovate-internal-patch-9b8ae1402ad8bba522b5edf2e407376654e2210a","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.1.226-renovate-internal-patch-9b8ae1402ad8bba522b5edf2e407376654e2210a","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"8a1b2c126b6d4f554abc3400e70fe204adb5a8dc","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.226-renovate-internal-patch-9b8ae1402ad8bba522b5edf2e407376654e2210a.tgz","fileCount":18,"integrity":"sha512-cRENGXkzTTyf0FSWMxpNAvCdmlpAdlUb75yt8fZn53un6y73wrlbRC0sNWnL0aafTg8U0+nJbXAswpaJGJxFOw==","signatures":[{"sig":"MEUCIEWUqom1n+avqRa/jhGTP8PJNY47ph38Omt7a1Ag8nrZAiEAuUREMWvPIaN4+6dr3urDQHYQmkAWU19ZQ0KXMZnClQE=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":62009,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJhHuPUCRA9TVsSAnZWagAAYmEQAIa58zuOIbAVpss74Y0q\nLbl/xJn7nKFLE5C9IyAuIrp9iPJGtMg7o+5gz5f1DI8/q76nggC8UArQdt34\n7KvkBYTa0cRfwyYpOG8mLvQheky/FVu6LYx/pYCfY1BIdgr93CvJf78Kpiaa\nAbiY6u75AxHZnwMavKE9MGeszL6DFA/+MTKFT2QO+jOWMT8+kimT84nA24Ym\nF7pnffe+4LcOmD99jwTI4auTjg05yl5y5oRcGHhysBuov/9GyySJa0HNQNEG\nDRn0Xn6/9avfTlzMv53XY9XJpOFmH7eOV5S+HGSmJOfQxQEBj7kSr/8qMkzZ\nrYsa7pSZZNLz335xaFwJynRPoAc6MXVvt9vN8lbzDctDP1zNsoTad7B1yVgq\nx8HpzjGZCkvVERDukXdcsaUU3zk7xDDeRevTYQ6tDuZCVWhNAhfc4U7n7YZZ\nldoHhj9l0Y6bmh+z+mGCJv0eISF1MZXxMErIVDDgJNEkT++C7p2l6UkqqA78\nxdO5xEiJ+ARbxj3MrZwaju7YCtg5zP989GN7qmxSzNfjgBb8IitRmpVj+iFA\nI+vf6pSyfoUNGOaIM3rL1XycSQuKbhRt61Q7f5tiZvxmQ3I7A9+oyQXymqot\n2LH2/M/pv97fAp5QdoTtIXgGP5nyV9t7VX4OlZxe7aVHqGSYd8BurFhbWnfT\nutoS\r\n=6mv2\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\n[![Publish Documentation](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml/badge.svg)](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml)\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=14.2.0"},"gitHead":"9b8ae1402ad8bba522b5edf2e407376654e2210a","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"npm run lint && npm run test:unit","build":"npm run clean && tsc -p tsconfig.build.json","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint:fix":"balena-lint --fix lib test","test:unit":"jest"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"versionist":{"publishedAt":"2021-08-19T23:03:01.009Z"},"_npmVersion":"6.14.14","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --fix"]},"_nodeVersion":"14.17.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.9.8","@balena/jellyfish-logger":"^3.0.60"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^27.0.6","sinon":"^11.1.2","deplint":"^1.1.3","ts-jest":"^27.0.4","typedoc":"^0.21.5","depcheck":"^1.4.2","typescript":"^4.3.5","@types/jest":"^26.0.24","lint-staged":"^11.1.2","@balena/lint":"^6.1.1","@types/sinon":"^10.0.2","@types/semver":"^7.3.8","simple-git-hooks":"^2.5.1","@balena/jellycheck":"^0.1.3","@types/json-schema":"~6.0.1","@balena/jellyfish-config":"^1.4.8"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.226-renovate-internal-patch-9b8ae1402ad8bba522b5edf2e407376654e2210a_1629414356301_0.3513534679928272","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.226":{"name":"@balena/jellyfish-plugin-base","version":"2.1.226","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.1.226","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"234cef84388f81019673529e5ba744424da42652","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.226.tgz","fileCount":18,"integrity":"sha512-rBxk4Htg7xHTCkV1EJTcOUun+lCgX4/+28eRZszlkg1K/8EIh5qNvUA/TAqL/bScSLDa/QoQEvbqAoQlTBjORw==","signatures":[{"sig":"MEUCIQDIV8M2Ug7c3aIk6w0q1ifK7A+aJupLbubbbFXrckq/sQIgXKJsqyPF4kKjyrYjCw2rP62pSqwwfljnby4cbD/85Og=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":61944,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJhHuSnCRA9TVsSAnZWagAAYeEP/Au3rliqClOv7w4BRJa/\nchECEj4x1Orb5Su9JqHkyUom/8OOcM5KbBFgv2ROBncsPcKvtNhs9vZGDpLe\n3enA1kbp922CYt95cdSbZcqcezbd8GH0Rywgi9IV36DbUe4SzEqKn0MJ0xvg\n9FcNWKN68mnMRLtOED+xnvg2mKj+Y6nD93cHx3Z5kCQFywo658k4Xne3TH/9\nknVBTSRboUeo5OMR8xb/TXevoa+kRlxvtgqscAmTa37YxIoe40KX6r19FXhu\nswbLu7q/XqisUhvcYePFINjfv6iuTDTTdIudkOb06JXMvE2FLJu5Q23ugs3Z\ng3YWQUdX/aTJDIdAUv85qJPuUVFAbUqKZr7N5/WWZ9CnTesKKQhOYDmwLYft\ncUmoWCSaHrQyPYyCXnqdyX9n16Afui0t2yDqZMa1UL/B17uJCfqfZg8hQ9HI\nnoLGFIOaQIRnU2qA+AsFBOVTX4eoNOj5HliBb5LgAB/lhmHvXNq1eTe9qYQk\nrzZPO9rxBfUwPApD5EK6K0p9FXYGXuVBKB+OOg/gssiW1uUneuqGYLHk8Fav\n/gbPsoCdqRuaL5EBSaTXjDTCeZL5ARURx+nBerf5nwDW01aMmIZMLuDnCuzi\n3TKJc4YkbtMkz+M3IJgp1XihX9fwYZ0gTwZkGa6EYxRbQpaLW3Likqna164G\n074G\r\n=M7W+\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=14.2.0"},"gitHead":"e2b2b1e7c8e108b6f49f43aa3c790973fc34755b","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"npm run lint && npm run test:unit","build":"npm run clean && tsc -p tsconfig.build.json","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint:fix":"balena-lint --fix lib test","test:unit":"jest"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"versionist":{"publishedAt":"2021-08-19T23:07:31.953Z"},"_npmVersion":"6.14.14","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --fix"]},"_nodeVersion":"14.17.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.9.8","@balena/jellyfish-logger":"^3.0.60"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^27.0.6","sinon":"^11.1.2","deplint":"^1.1.3","ts-jest":"^27.0.4","typedoc":"^0.21.5","depcheck":"^1.4.2","typescript":"^4.3.5","@types/jest":"^26.0.24","lint-staged":"^11.1.2","@balena/lint":"^6.1.1","@types/sinon":"^10.0.2","@types/semver":"^7.3.8","simple-git-hooks":"^2.5.1","@balena/jellycheck":"^0.1.3","@types/json-schema":"~6.0.1","@balena/jellyfish-config":"^1.4.8"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.226_1629414567746_0.061373789762591446","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.227-bump-types-jest-1a74f8bdabd7fb785d591bbbb7e8f5543593df16":{"name":"@balena/jellyfish-plugin-base","version":"2.1.227-bump-types-jest-1a74f8bdabd7fb785d591bbbb7e8f5543593df16","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.1.227-bump-types-jest-1a74f8bdabd7fb785d591bbbb7e8f5543593df16","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"a83628bd3eb0e75d8a63877839a42de2e1d94fca","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.227-bump-types-jest-1a74f8bdabd7fb785d591bbbb7e8f5543593df16.tgz","fileCount":18,"integrity":"sha512-KvsTYF7KyxB0kUipAtgQB3A1IOYQRx29fuLpPADQ1B0l9oaOuwTUEVV0Yzp3if+lVO5T4cVqBWioS1ohYSeyaQ==","signatures":[{"sig":"MEUCIAR52rPFMzLaQA2sEm2YREb21qEfBRZx2hUJ+xBgxXOEAiEA7uqGVVzH38c+HJmfQ1oBfHxx69QlLOZpSUSCvJc8ykw=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":62071,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJhIaPrCRA9TVsSAnZWagAAdf0P/jaQja3ey42UM1FC64zh\nTp8JdYw16MeH6mHLWYkaJGqyAKRhDd9pvz0Cuuzjkxcs5zP11WXMF+Gc+8pd\nZtRG32QxXNMNfVR2OOEk6PlmkuXSiF4eHNbp/TR3+rbDSeNF9dGWiHzy6Twi\nmSrDxs+qP6IAGJNcwFKSWNCR/7JjNDl2aOYThfpO6tCIEjUTH7uP+r+CT9k3\nQ3s2J23cnqicIBJ56HnyQT6Lt1EMBWz6ktYTaZLHJYSgPKoX5RJxxG8Ljx7q\noLZ+zsbpBbr05fdjl/VEAHCtLUaPjbcBiqZdxdpNyfjiLCJcvLnhQJfTTlZQ\nwfSFqoFUo48yDvdkiarxrfkI3EMnVvPK1ngO3RAu38mJpbZ4BytbraLKjk8y\nAnoCITQVpIqKu/6/GyikYIobyRp93e0um6gn4ZpZiNSPolNj9Eb9VhW8U8Je\nrINkWY5Xjf59zBQ5IQlqjDjT4BZ96jzEXk5P9nGB7En6isKWonOag/eLZCTV\nqBol3taGybAZaJ2Neo88BRdBlKVyNryfGX0FWQaEM2L0YZWPntb9C6dOcuXw\nHIlW25URpvrTpc8o0H5xTxLk3bGeVRiCEln70N6O1Mx+wy5WbLdAQkrk7EDa\ne5cIyavh8u3imV1l9Hl8IcD0abzO1HGij5bbo/gJn2NLadndZ9WP++p3K0Up\nbMga\r\n=0q5U\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\n[![Publish Documentation](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml/badge.svg)](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml)\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=14.2.0"},"gitHead":"1a74f8bdabd7fb785d591bbbb7e8f5543593df16","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"npm run lint && npm run test:unit","build":"npm run clean && tsc -p tsconfig.build.json","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint:fix":"balena-lint --fix lib test","test:unit":"jest"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"versionist":{"publishedAt":"2021-08-22T01:07:20.800Z"},"_npmVersion":"6.14.14","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --fix"]},"_nodeVersion":"14.17.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.9.8","@balena/jellyfish-logger":"^3.0.60"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^27.0.6","sinon":"^11.1.2","deplint":"^1.1.3","ts-jest":"^27.0.4","typedoc":"^0.21.5","depcheck":"^1.4.2","typescript":"^4.3.5","@types/jest":"^27.0.1","lint-staged":"^11.1.2","@balena/lint":"^6.1.1","@types/sinon":"^10.0.2","@types/semver":"^7.3.8","simple-git-hooks":"^2.5.1","@balena/jellycheck":"^0.1.3","@types/json-schema":"~6.0.1","@balena/jellyfish-config":"^1.4.8"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.227-bump-types-jest-1a74f8bdabd7fb785d591bbbb7e8f5543593df16_1629594603551_0.0780118453292089","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.227":{"name":"@balena/jellyfish-plugin-base","version":"2.1.227","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.1.227","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"57de29d92388ff4e54528b2736b7c7e4599a46c7","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.227.tgz","fileCount":18,"integrity":"sha512-DY2VLtlwhN3VSKL6HTUIiMXp/wUel21aTV9Bqng9rHxg+fitw5G/l+fyKTxEGyqx5ds8mWjLgB7V+stfDdQ1PQ==","signatures":[{"sig":"MEYCIQCerbx7lhC09me/bt9l+ke+Vqv21QSKNBVqOU1Cx/VMawIhAJFLOYFWUj6iWWPhJ3VYU/WT70NiWHYaTMkXST876qTv","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":62014,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJhIaSxCRA9TVsSAnZWagAAzR4P/j8RoFRF+h719xH6FPLv\nFXP111ijFBMU/VqSl4En5Fucl1Uck5O3hUNwpECuIqz40jpIgmsT3mrH0qmg\nbnqvqRm2OGNWKAlwuXK5IYqmZ3TGfGHt/Gkk7714ShaKzAQ+TQcjm2xokCXp\nW8y+qP8zzxMfhUzWsEQG4wCZgGNNBf282HW+mmROoVZor6J8Hh0TOQSMZuYL\nBR1iomQa2m/5Qzv+Ff/7HqHLDDgtvSPlnT+GlIAAT2G8E9AiQebNZLlI1kyx\ndQLpuZg86QncjgjaIfO7Om7dJqTyHnXWa3O8WAudwEBigyra9OWdTT1NxX0V\nVe1hhTH5KPhXG/Lw5l+8H544nZfuRGaTUjGtMnC3p2wtE5SGhByduBlKkhOy\nqf675M8FhKkuy5Fsgb6jTELhvDDW2idh2xWB6bSwSIFZ8so4580ThnYFRd7s\nVtBRgG2dYw08npeDaeOEfI3OzJzW0uD4Z5MXQpo2/Ofiajx/eMG1WNf6PHKv\nq2T7XeBeRsirtCdnt2voRXDaL+Ghxjypz3KJgljgrMjg28q7RweCeupvPfkJ\ncsTHcAWJnXrXam7zxGriK6TKCBWkKPCZXvB7lhfaey8F/uxqzuS0zcgvqA+9\nHbcbx3PQc9dc9Plx1QElIqmv9IrQRaC/fQuIiRlUTCW1BHm9uF+iQBVJ55xm\n2FsX\r\n=gx3S\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=14.2.0"},"gitHead":"ad87bd3d41a8063ad65a568c60f125122d98b919","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"npm run lint && npm run test:unit","build":"npm run clean && tsc -p tsconfig.build.json","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint:fix":"balena-lint --fix lib test","test:unit":"jest"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"versionist":{"publishedAt":"2021-08-22T01:11:25.302Z"},"_npmVersion":"6.14.14","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --fix"]},"_nodeVersion":"14.17.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.9.8","@balena/jellyfish-logger":"^3.0.60"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^27.0.6","sinon":"^11.1.2","deplint":"^1.1.3","ts-jest":"^27.0.4","typedoc":"^0.21.5","depcheck":"^1.4.2","typescript":"^4.3.5","@types/jest":"^27.0.1","lint-staged":"^11.1.2","@balena/lint":"^6.1.1","@types/sinon":"^10.0.2","@types/semver":"^7.3.8","simple-git-hooks":"^2.5.1","@balena/jellycheck":"^0.1.3","@types/json-schema":"~6.0.1","@balena/jellyfish-config":"^1.4.8"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.227_1629594801845_0.03948029267629538","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.228-renovate-external-non-major-ecf1491c32845b75c3bec9f4e4a3d652a6daa6d9":{"name":"@balena/jellyfish-plugin-base","version":"2.1.228-renovate-external-non-major-ecf1491c32845b75c3bec9f4e4a3d652a6daa6d9","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.1.228-renovate-external-non-major-ecf1491c32845b75c3bec9f4e4a3d652a6daa6d9","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"a9914708bd5b7a0265e5599408573314206c5c88","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.228-renovate-external-non-major-ecf1491c32845b75c3bec9f4e4a3d652a6daa6d9.tgz","fileCount":18,"integrity":"sha512-fTZasVkhfE3OcL20b+o/0f0yggc5Fc4iEccnHw3aMq+JVmVs5Nr+4JM3xVbh7EjCb+/LJcZAGSBuxIXabn3CJg==","signatures":[{"sig":"MEQCIH0IR4Pe3rORgWEHEJP3s//S8XQFe+dbnvkVFZ7BP7ajAiASMCYJVkCt4+D+j682Z/7reZjF02e068UErEx0661b1g==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":62159,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJhIaWFCRA9TVsSAnZWagAAGMAQAJRguxpuMjtgCXacujiL\nLgodgdleW3xYYGQGXn4EecKNU9j2dzXGJwj0428friAfDAOa3HL8XzgBp2GT\nTWGzYCdnIIccTIAwDPHx9HvZ+WrOWLWFPSBFKlN17QGUq6sJQwhyWr9kvqJL\nJfmzf0TdRJl2LrO0H4ctKb9rF4oLld4BtC4mINpcji4POC4il1zrVno7/zHK\nfysYTqBK+Sm5s2KFoz8BkYaepYTkZaqcHUQYXOU8IsYNfeTE2gVXC7MYhwFf\n+NUqISzPcXQY4OYcSJ9Y3nis+njC32N4YZFgJdUKAk1xyRLojhG/F/SQNnVb\ntbNnnpSJYQNvLo5WTIqdbRLVKpzqpL2LXxKWfNsG9OJFYJ+d0gyZTSkOibKy\n6YPg10HqahFBfp+NbWkvqyoWVTSP5VX24Q04BbZUFolctHTQGZMJbgGGFD7w\n6rRrnhVeSggmoJLygr0rd6lYsv2tZ1toZL0rBsD6Jw5BG1iziV+9eYmTus15\nRdkTycS9CWtKVLTCixaBkEg2AutlAhYQ2S25TKk17UHcr0GnvgEsAoUZZcXA\nl3LoBmlwQLXQcQen2B2ns43wkcNQhj1PpUeKNTXTCIBEzOM1QumWrZQAVZl6\nbrYXTUxHqzxRU6E3ac439ut1qebx2Yte4AwlDP55LyWV1Bd+/xw/0ZTsV3Vk\nc03A\r\n=OwQ7\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\n[![Publish Documentation](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml/badge.svg)](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml)\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=14.2.0"},"gitHead":"ecf1491c32845b75c3bec9f4e4a3d652a6daa6d9","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"npm run lint && npm run test:unit","build":"npm run clean && tsc -p tsconfig.build.json","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint:fix":"balena-lint --fix lib test","test:unit":"jest"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"versionist":{"publishedAt":"2021-08-22T01:14:01.343Z"},"_npmVersion":"6.14.14","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --fix"]},"_nodeVersion":"14.17.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.9.8","@balena/jellyfish-logger":"^3.0.60"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^27.0.6","sinon":"^11.1.2","deplint":"^1.1.3","ts-jest":"^27.0.5","typedoc":"^0.21.6","depcheck":"^1.4.2","typescript":"^4.3.5","@types/jest":"^27.0.1","lint-staged":"^11.1.2","@balena/lint":"^6.1.1","@types/sinon":"^10.0.2","@types/semver":"^7.3.8","simple-git-hooks":"^2.6.1","@balena/jellycheck":"^0.1.3","@types/json-schema":"~6.0.1","@balena/jellyfish-config":"^1.4.8"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.228-renovate-external-non-major-ecf1491c32845b75c3bec9f4e4a3d652a6daa6d9_1629595012958_0.43388478531052654","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.228-renovate-internal-patch-b42603d208da2cb1ee33d68b391b59f236c7626b":{"name":"@balena/jellyfish-plugin-base","version":"2.1.228-renovate-internal-patch-b42603d208da2cb1ee33d68b391b59f236c7626b","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.1.228-renovate-internal-patch-b42603d208da2cb1ee33d68b391b59f236c7626b","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"c6ba90ac15157451ab0a7d6aa86d7df02b9859d5","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.228-renovate-internal-patch-b42603d208da2cb1ee33d68b391b59f236c7626b.tgz","fileCount":18,"integrity":"sha512-TcWpsnJx1/RWMNRAjPkEn7YqytZmt/vMSvY51KTLpRtyOkN3NRZtUwH/r85x3u8pVJUReZ07bdXJLtvvGC1cZw==","signatures":[{"sig":"MEUCIBSBwLk3O9vFCR0ax3jJIesau8WDFC2P1VTeQzIaKTJiAiEA+h/d/Ipv96t5zAX9oavFoPsXCS+/sjpb8ytDAi2zBy8=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":62151,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJhIaX0CRA9TVsSAnZWagAAtBsP/RfCgUm41VMvMtnCUkbh\ntMmxDJW3yyGLnlV9UJTSNrtpJ3R8xjelHlLdUjSGDarSdhZYtzpjwDY6ipbJ\n9FfFqeVAatmCfIIgv9DFx3MmUEi30FCQBhqmEE8dMQdcUwVJfapluNSPojgV\nOMA26pwsp9EEzTezHpSz6FUlNH/pblt9y0Z8B9p66VwKV8C87fZNJ0PUQ0+5\nkwoqcBEM7tBj6OyGk8GqYcDPNDczNDiCKaO7hjAqPY8dUvOHaOra2OvLWN7t\n2VHkTmckyQ06WMVxy7GH27UshpR4ST9vuMA8ShcaNGFtZPgqsyAAF/VUxjKY\n1LUOOKQ/g7grIwYXKRJupw1bZ7ImlCfZu6F0zOonvnll+zyO+OFIO4u/b/VR\nUEfRpb6J0GQvhOARBzIM+rLhZw3ZkfIVwqMc+di2f6yN4Itt0t/sz7nrGWfK\n+GTGGSd3FFL4eQLW27JPdp2lF3bc6fBcVSofF0g646a1hpwb0ijycddAZOq9\nY9zVY4fQ4Siyg7kTfg+I8/egK05nJULIdoYG55j/L4mnbEwDkdoeZuKG1Cw+\nTILUVli5su5vvKRrs0BKHnhP3OCGx7FWu9N/Q9slIjR44xE3Vuq2LDj2sS2x\n/wgywqstCO5+SHUnjDgFgm5W2SeGhTEsulyIzQ2iCyUoq/x/pZKDUcUDf/8J\nswpd\r\n=acvv\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\n[![Publish Documentation](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml/badge.svg)](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml)\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=14.2.0"},"gitHead":"b42603d208da2cb1ee33d68b391b59f236c7626b","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"npm run lint && npm run test:unit","build":"npm run clean && tsc -p tsconfig.build.json","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint:fix":"balena-lint --fix lib test","test:unit":"jest"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"versionist":{"publishedAt":"2021-08-22T01:15:41.840Z"},"_npmVersion":"6.14.14","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --fix"]},"_nodeVersion":"14.17.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.9.9","@balena/jellyfish-logger":"^3.0.64"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^27.0.6","sinon":"^11.1.2","deplint":"^1.1.3","ts-jest":"^27.0.4","typedoc":"^0.21.5","depcheck":"^1.4.2","typescript":"^4.3.5","@types/jest":"^27.0.1","lint-staged":"^11.1.2","@balena/lint":"^6.1.1","@types/sinon":"^10.0.2","@types/semver":"^7.3.8","simple-git-hooks":"^2.5.1","@balena/jellycheck":"^0.1.3","@types/json-schema":"~6.0.1","@balena/jellyfish-config":"^1.4.8"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.228-renovate-internal-patch-b42603d208da2cb1ee33d68b391b59f236c7626b_1629595124504_0.3536746911225901","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.228":{"name":"@balena/jellyfish-plugin-base","version":"2.1.228","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.1.228","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"ed579dbe955b0113c1c38f8bf64250bda74003ea","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.228.tgz","fileCount":18,"integrity":"sha512-iAMgSHx/ymLLgY2K7bPog8kbckJxBKT5vADQXuQKMI8FJzCidLdvsf+8x+1boEUMKhFtZ2Xii/FNyrjBRuXo8A==","signatures":[{"sig":"MEUCIDBPL1bcRqZDRh7kvWYldJT32YIQYIQb4kp8qN6pmc5ZAiEA0VxicdnD/GbBVhvN6V0ZjOsjNwVc6yldVi2lys/1gTc=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":62086,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJhIaaiCRA9TVsSAnZWagAAIeYQAIa7Ia1QL7V9bpegh6ph\nRCnNySW8pxNjiXz82L+j3rqKRjzszPIKvXBB9FSNjsD/nAB0Fu5TxFOACoy/\nyoIsZQ+ygNLmW8oCJic+6aLgmE4UZMFpr9Hrwr3aT2sg2NzRI89jNw7qG8fj\n6RrNVCqDGliPplP2tbKWxABAed6L61K4YeCm8IFVvNdpYYr/0hnOC1CdS/Yq\n4bG41Ty8IfPbhkxpQW7fhJ3BnREg3PI/Q2D3YeTjDJTQfzWlQ9fOj27wQnpN\nQmgiiQg9E0kxBvV599JNHxEerELAIjlCm5UOdzWlwZiM4GbMcC3a6LsHX9s2\nzb05/EAdHMz2FyUSSBLYTBXj6w0Bn7ZhjXbQSWNP6pICxHELMmQmaGOCV2Gv\ngV/uYH8P33MexkKe9D5lBT9/3Kosn0CFDeBnWb01Jbw57MRW6GfGCLDzUg4J\nWn2ywsvO8VyB0A/1lWWVTycz7u5vszULbPuoNddgluFNlGd07upAKjWEolJI\nT+j1u8g9zK1rk98bujCl/r55FG7YPcgWtWPPjENhEzo4az54SRGeMqeRX5qe\n2RDn1N419H5lAVuQvEU0q8i9cIsE1XwJFysNskjp81n5cR0Ae0w1zMA7qGyl\nM5tCKIbGAu6MrePLCad8hSQwxAHDm7ynFXNX8myqmPqGlNFgdxrXOnyRCd2T\nWKbQ\r\n=Kx3v\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=14.2.0"},"gitHead":"503f3d27351d6abb2fbce225c0355ecb75ee9d21","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"npm run lint && npm run test:unit","build":"npm run clean && tsc -p tsconfig.build.json","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint:fix":"balena-lint --fix lib test","test:unit":"jest"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"versionist":{"publishedAt":"2021-08-22T01:20:01.019Z"},"_npmVersion":"6.14.14","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --fix"]},"_nodeVersion":"14.17.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.9.9","@balena/jellyfish-logger":"^3.0.64"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^27.0.6","sinon":"^11.1.2","deplint":"^1.1.3","ts-jest":"^27.0.4","typedoc":"^0.21.5","depcheck":"^1.4.2","typescript":"^4.3.5","@types/jest":"^27.0.1","lint-staged":"^11.1.2","@balena/lint":"^6.1.1","@types/sinon":"^10.0.2","@types/semver":"^7.3.8","simple-git-hooks":"^2.5.1","@balena/jellycheck":"^0.1.3","@types/json-schema":"~6.0.1","@balena/jellyfish-config":"^1.4.8"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.228_1629595298191_0.8327307614687338","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.229-renovate-external-non-major-16e56a9258140e3a4f5d6331f03149cd2fbe0c1f":{"name":"@balena/jellyfish-plugin-base","version":"2.1.229-renovate-external-non-major-16e56a9258140e3a4f5d6331f03149cd2fbe0c1f","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.1.229-renovate-external-non-major-16e56a9258140e3a4f5d6331f03149cd2fbe0c1f","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"e75ec3e88b6ae1761ca7a74ab0207db4bf149199","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.229-renovate-external-non-major-16e56a9258140e3a4f5d6331f03149cd2fbe0c1f.tgz","fileCount":18,"integrity":"sha512-Q3mCZUdqvWtv5SOfbbn1B2S9O6Hi5xNkWwWY40hsfm8L8r31kTo/I3TBlxLs+h2urshaPvtwSjUkO01uTwRqbw==","signatures":[{"sig":"MEUCIFLohG8L1Kd3jrFu9vJXmp9MeK30yWhlLUxIUE5HRiuUAiEAyEl70KT/QLr7OHQPmDHITWmGn9hH32jELPtCNaVInVc=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":62231,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJhIaf4CRA9TVsSAnZWagAAVukP/i/gd9TQo8WfpUT6FuWd\nn1zPjS9KX/UdUApSFaqdiRxd7XjQqu8QMmUAJ+ciJYTgI71M+Umx0DjN8lLt\nQkum7PaGQZjQeDejwEslWu1OReb8RKOv/m4QYq4j8CkNc3UB3EGrFOQOreZ+\ng9Fr9avLM201qKxSgxuej2wxEX+bUicWArjdOnReMjtEMqww4d5zDXGkM8aa\npEUuqj9hHsopJakJdVf2ogRujTHOgO6bJYRPOmilc8Ji0RYRkzMr8btO1q90\nqbYeap32tUPnsJrR80OFp1+zB6aZdgFCXGBFoREE+NXPglEusBjJiWzZkEz3\nXAFD0nknfPhLCuzKPaUujQ1k7gTYcN76gLVeFAbTIz/wm0YpEdxnQVKgI5H+\n8LK1fGlYPQiOrKnQfWtbjj+gzvIrtBiv94oeaRgO3zONgJMOdIG9AjL8U3JF\n7EW8po3+XvV9xfJaoWfQi+jgfF6G4hGWjajHwqp259twkH/XO2yf0QzCImnS\n+NLaxurA8GSmFZktACqkFMS3Xfu7oQWZRzsB38QJ1SbuWk3zPNMoPo3Yky89\nSuCUyf45ooMb4EWC5+7kZ4WoG/Ckwo81dAqNptfPw2SEOCJFo0I7GlXhA4wP\nt3VrYDBXO77OiPclDpfWxn6BJaLdfkk2HTr0p85MHrV4T/74NAngINWpBud8\nDO+w\r\n=DBy3\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\n[![Publish Documentation](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml/badge.svg)](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml)\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=14.2.0"},"gitHead":"16e56a9258140e3a4f5d6331f03149cd2fbe0c1f","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"npm run lint && npm run test:unit","build":"npm run clean && tsc -p tsconfig.build.json","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint:fix":"balena-lint --fix lib test","test:unit":"jest"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"versionist":{"publishedAt":"2021-08-22T01:24:00.472Z"},"_npmVersion":"6.14.14","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --fix"]},"_nodeVersion":"14.17.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.9.9","@balena/jellyfish-logger":"^3.0.64"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^27.0.6","sinon":"^11.1.2","deplint":"^1.1.3","ts-jest":"^27.0.5","typedoc":"^0.21.6","depcheck":"^1.4.2","typescript":"^4.3.5","@types/jest":"^27.0.1","lint-staged":"^11.1.2","@balena/lint":"^6.1.1","@types/sinon":"^10.0.2","@types/semver":"^7.3.8","simple-git-hooks":"^2.6.1","@balena/jellycheck":"^0.1.3","@types/json-schema":"~6.0.1","@balena/jellyfish-config":"^1.4.8"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.229-renovate-external-non-major-16e56a9258140e3a4f5d6331f03149cd2fbe0c1f_1629595640229_0.46886130129591796","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.229":{"name":"@balena/jellyfish-plugin-base","version":"2.1.229","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.1.229","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"fd092f495b9f297c4aff2efc0c74c8d5a5d9bd10","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.229.tgz","fileCount":18,"integrity":"sha512-28ttja6uduQ7v/h3Av8LMDAf1rbT7dLhwWLyh9RL9pQImzZfuk29L02FFg1L7fJ4YzE0OmvfallvKXJ0LZ0oqg==","signatures":[{"sig":"MEUCIAvo6Yvq8CHS+dNMhgfdBp5FATiygp/0iMymkgXOKPPaAiEAtpGKTIQpVC3Bq7Fx928Zh2DLQX9leDmsWa9StA4ZjVY=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":62162,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJhIai4CRA9TVsSAnZWagAAV+UP/R5WM39S/+85WUb1i7wJ\np/jN9uhNhZf4GSCKnyDSdNGCNimGMqhqo+dc+AE/0+hirPanKeCbmgc1CFOR\nMXID4Es3MvG9NIOSm8Ay/3Y99nuS2wy5BXlrpfajKDSY9qPclVOt1QZ38896\nBx6cDBvWlXJmeNIZ1nVN3gMbwinrwB8Ln1qW9i97oMuDqCiswgheWcgErTwL\niYgPYgaALQcByze/TGhaVeXBmNbiu6cuALQigPxUI9BHJo1/IHFMNRNv5fAi\ncGnXnUJrhWZcgNnDIiHZbKSO6ucWnnnd+JY/fbYzzioKRgQwKjLafuGf8WDU\nusR679aYzppexIW1A7DqaexfNdfbnea5cUxBjREvx0ddVzfXn0/xGmtt19Ou\nkXE7x7LxvdtIQogWw+3D19d+hAOv/UbbFS4pavjvm6F7Sv+ArmFHA03+41v7\nt/iR9b2vW9DlM7n3TFTWQEXmIh3W+ml1t3cJ70N7O4FQAiZCefSITUKCqs86\nSzJJqHVVBEBd2WmfCCj9t2zEXK56phqqVzAIFfIA0U3DxEV2une83xbO3Os0\neEZOtgSMn+H3a8TU0b5KGB6B6/h1SkaLSUeAw47Tr1nja+Rn1EqXg9Y1ZzMF\nXC+uBv70EG+5OBiHQxhBPy5WgrWsGOHWFkesCd4w2mgB1u2+ms3K1/yy8PBs\nrzCL\r\n=RsB4\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=14.2.0"},"gitHead":"7f560c7f4c48216881fbad5afb13a78f5eb0a46b","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"npm run lint && npm run test:unit","build":"npm run clean && tsc -p tsconfig.build.json","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint:fix":"balena-lint --fix lib test","test:unit":"jest"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"versionist":{"publishedAt":"2021-08-22T01:28:50.910Z"},"_npmVersion":"6.14.14","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --fix"]},"_nodeVersion":"14.17.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.3.0","@balena/jellyfish-types":"^0.9.9","@balena/jellyfish-logger":"^3.0.64"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^27.0.6","sinon":"^11.1.2","deplint":"^1.1.3","ts-jest":"^27.0.5","typedoc":"^0.21.6","depcheck":"^1.4.2","typescript":"^4.3.5","@types/jest":"^27.0.1","lint-staged":"^11.1.2","@balena/lint":"^6.1.1","@types/sinon":"^10.0.2","@types/semver":"^7.3.8","simple-git-hooks":"^2.6.1","@balena/jellycheck":"^0.1.3","@types/json-schema":"~6.0.1","@balena/jellyfish-config":"^1.4.8"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.229_1629595832390_0.5859330409333683","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.230-move-jellyfish-types-883eb4e6cbfc2c1b50670a2b7884c7ede9b81789":{"name":"@balena/jellyfish-plugin-base","version":"2.1.230-move-jellyfish-types-883eb4e6cbfc2c1b50670a2b7884c7ede9b81789","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.1.230-move-jellyfish-types-883eb4e6cbfc2c1b50670a2b7884c7ede9b81789","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"0fc8fdff824d2d8b2578f9210c9abb841dbb5766","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.230-move-jellyfish-types-883eb4e6cbfc2c1b50670a2b7884c7ede9b81789.tgz","fileCount":18,"integrity":"sha512-mzg4xYx+CY3FkgYl+exAK6QvCFJpATOx8OudSGpEYOxl/LRhRuyouIgh+sCjXAxf99ru7f2qg1qLv9S/dIkG9w==","signatures":[{"sig":"MEYCIQCqfJRF8V/xD+pbBiUTR+Vj8yar2CAbsfQGqwMC3JUpZgIhAMW70B9zRYhGecHsS+p0Q78eggUi6vVCq7aucbp5LRw/","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":62307,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJhJjsOCRA9TVsSAnZWagAA8soP/jZPwX2MOxXjaidZ3Ojk\nF/SMjupkhZvbEat6roL6e4ndmSpSy+Ur2RilVW0epyl/csx0jo4us3tRoCYU\nmo/fOpO0UqnIZvwGo7twriDBIXF8SsPEpmcKM+hsGsDubiPhMUas6Tvg8Jli\nuwSRUuWgIJvgn/7/SKixpd/cQADAR7zp33y09d6Ta/XaUwhGRjV6dGHorrlr\nWo4PdcYV0sWOnZvc8dwFXCO1Kvc9c543I5KFJ91wbLcgmfUMxb4fmM8JmNOI\nOxqh8h3HkVqhYKzJ8ogc7AJ3gRXw5MzZSfWA9afF2Ix9Cp28jfDZp0bLHFe7\nezKBCxQUSAsXfm7bvnsEAcwakVeLjMZLBBTZmU9N0BS1u3jbgrs8gmY3g1AO\nrgeazj77pRmFOthcGqTW0xXnNEWNLeq76KxObQawkd+OGk3kWaJgl53VPiD9\nj8otF0TEfaqQ6oFtIAOV5xfktqV37+VLgSt+IYGToh80CvPfaYv6kS5q8ph0\nqe86NiBviJRjE0hK8LbSXyexB2hhOIpFTMlzJhb0UUy7EOK3wfuYwy6ptKcS\nkpjOKpygKhWgXoYKYzlfoQGG6NT0BiXJzWZlDZk8ckwSkU3n8zEhClrcllyk\nanFTWp6VBtb0TCgI4Cf/yISooVZqK2BrRKZ/q/0TjoHbQNnuQdwlojswnQai\nFZ8s\r\n=IBcO\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\n[![Publish Documentation](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml/badge.svg)](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml)\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=14.2.0"},"gitHead":"883eb4e6cbfc2c1b50670a2b7884c7ede9b81789","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"npm run lint && npm run test:unit","build":"npm run clean && tsc -p tsconfig.build.json","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint:fix":"balena-lint --fix lib test","test:unit":"jest"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"versionist":{"publishedAt":"2021-08-25T12:40:46.593Z"},"_npmVersion":"6.14.14","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --fix"]},"_nodeVersion":"14.17.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.3.0","@balena/jellyfish-logger":"^3.0.64"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^27.0.6","sinon":"^11.1.2","deplint":"^1.1.3","ts-jest":"^27.0.5","typedoc":"^0.21.6","depcheck":"^1.4.2","typescript":"^4.3.5","@types/jest":"^27.0.1","lint-staged":"^11.1.2","@balena/lint":"^6.1.1","@types/sinon":"^10.0.2","@types/semver":"^7.3.8","simple-git-hooks":"^2.6.1","@balena/jellycheck":"^0.1.3","@types/json-schema":"~6.0.1","@balena/jellyfish-types":"^0.9.9","@balena/jellyfish-config":"^1.4.8"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.230-move-jellyfish-types-883eb4e6cbfc2c1b50670a2b7884c7ede9b81789_1629895438296_0.2071497973576466","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.230":{"name":"@balena/jellyfish-plugin-base","version":"2.1.230","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.1.230","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"d8c8c88d71798ec1838fcf630cf58fc98b76c9ec","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.230.tgz","fileCount":18,"integrity":"sha512-HjtjZq0/2EN1d4JNCKqpj791PeDIBpkFXcKtrT8sV5NmjGyhujjiv6ZaM/iQDm3a6aMcoGpIpPPHa8a9r2Xhmw==","signatures":[{"sig":"MEQCIH1P91YrbQLshkoshVVOVh/WhNB+OP75v30X0gp4bfNbAiBljsbthUycIJSErWpQxG4qN9TA69oLkMTS/mRqY4lI9g==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":62245,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJhJjw9CRA9TVsSAnZWagAA44YP/0e3+ou5OTo7UXw1FssL\nYfVur7Zm4XCDVAJWvJ1tfx8qqtGXEnkNaalEJ+75gPj5NJRVE32rau04PlR0\nhD0wnClOFD5wM6wdTsUKgyfhSukw+bntsXu2X8/NBt4tosONx6AVJNzKjlK8\nmsz94tsi6lgorcTYc2AyCx/FXxk9OsBposJsCtpRAx8BAK+064CX/mXwhmIc\nqlzH+1OS+ChBL1jYzPtWWd7wAKJhAKEnDFXbkE01lmM/wRAKYmfmDr1omVAQ\nZ70lotljrE2fzvaqzDH4xmSiS8YtwzXdXNAqYIplhwlnfnUBSOaf1O7HXeGG\nM+/6PTY9JJfW7LEhGStFeU69iZnnFqh8rPwedMhSxrOOyeVFU8fIKXHXEC8j\nwTuxvl7hLMMflB8Pls1YLgg9fGRBNa2JxolJQhZFB/Lulogp4Z6l7GxDhhSY\n9Y2lUEWvXo45e1IxONIMYv1fH994gdMBmnfXAeg+jMCKJ3jvSgYfNfhr8mlb\nvj46h1LIYK1EjbAhMOxmDgsUVCtERDBkJZrDojF/GNCvsrCwQVMlKnidwd9m\nk1FtGx1kbUhKwUCgkSP5r5rEGgheqKP54LA85vLoJ/dKhdyt+R2WUmgjB9W+\n+rgX/SWOpjTsc+Z54yDP8a19ufdMj5/MB1W0J+Mk3giD3IpoDTYofOY4FGed\ntCK9\r\n=e2N5\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=14.2.0"},"gitHead":"b06eabc18a7f00108e22e4f2c7e063079de1417c","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"npm run lint && npm run test:unit","build":"npm run clean && tsc -p tsconfig.build.json","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint:fix":"balena-lint --fix lib test","test:unit":"jest"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"versionist":{"publishedAt":"2021-08-25T12:47:20.558Z"},"_npmVersion":"6.14.14","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --fix"]},"_nodeVersion":"14.17.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.3.0","@balena/jellyfish-logger":"^3.0.64"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^27.0.6","sinon":"^11.1.2","deplint":"^1.1.3","ts-jest":"^27.0.5","typedoc":"^0.21.6","depcheck":"^1.4.2","typescript":"^4.3.5","@types/jest":"^27.0.1","lint-staged":"^11.1.2","@balena/lint":"^6.1.1","@types/sinon":"^10.0.2","@types/semver":"^7.3.8","simple-git-hooks":"^2.6.1","@balena/jellycheck":"^0.1.3","@types/json-schema":"~6.0.1","@balena/jellyfish-types":"^0.9.9","@balena/jellyfish-config":"^1.4.8"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.230_1629895741148_0.1988632974451987","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.231-renovate-external-non-major-6e2c2e6adf821b12ae5a186d7347c94ff1c4b649":{"name":"@balena/jellyfish-plugin-base","version":"2.1.231-renovate-external-non-major-6e2c2e6adf821b12ae5a186d7347c94ff1c4b649","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.1.231-renovate-external-non-major-6e2c2e6adf821b12ae5a186d7347c94ff1c4b649","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"c628836db4b20daf9d43db9e963583b61de0abc7","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.231-renovate-external-non-major-6e2c2e6adf821b12ae5a186d7347c94ff1c4b649.tgz","fileCount":18,"integrity":"sha512-cL5wnUQXW6D0AkboA+nCGA8GWmlMb6MVqgDwUC6t6G/qLyWeQc4T4S4ac5guDouTnxoTPjR2M+szEcUbQNC17A==","signatures":[{"sig":"MEYCIQDyrTcQUnFI6+BC7YWReU4tY0lK0PndQ75tnfxspbR3NAIhAP3ojJlzTUkzo4U7rsDg/Qh4xE0igUBcm3vQBjidZbgL","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":62463,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJhKubsCRA9TVsSAnZWagAAkwoP/iGHxTwgLkIMWXQQ2Ip3\nTJEuvgdVdLK2q7PWDHYn++RdHv2s/niuKXgGHlzCCx87A/jcNQD79931q2Cs\nieyJUQ6ksGHSRCetpErSGjC6ddmlXaw13DW3HUzHlFHnan+njmnBN+vXO/Bs\no3AlDSjCO3ShoNDIAmDY9i25FhI9ytKcYSEcktBwhh67kR8FCgzX8l9uLeIp\nMtOmRX52ZkA03HuX+amZuiS3xpj7ZC7nRNHJ7yPkzwWYycxH4vuc0gp7hbXW\nRp+TXIBzj6nQm8JH5Rla7OexTEWrAa3k8OKZEDyN20eg2Kw8BPkOl6d7l+o9\n/lPeFzeaBA7XXHSeMVWdqBWMeiyDTz+40hlechmZDMCS8qr+rKTI5pI4nbF+\nhFcfae5rV3Qcl3x7BbXJQcnNVIK+3ZoL+skcFgNovaZj9En+Y0lfmrnughVa\njxdC9H03cNuv3og7DAFwe/danEdoWXkoFyfpFqOS5Mrs8MiyUU4IQD7tuCui\nm7HJ1gF6qAmldSNS4BXdIr6ogT1ZIixZBt0TxljFpYNK7gBCq2qKmwcSUjX2\nENCJ9N2gdDSrheL2VpIY6LNhBreaRkYJMvfT8KQ2BlGuRzaAH647ymwD3523\njWjGQrnm6XikG1OBF2XM8Tob1TuRJjqQY0+Bdv6O86nRvuLPwtRL0FRDXSmw\nvEKk\r\n=68TS\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\n[![Publish Documentation](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml/badge.svg)](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml)\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=14.2.0"},"gitHead":"6e2c2e6adf821b12ae5a186d7347c94ff1c4b649","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"npm run lint && npm run test:unit","build":"npm run clean && tsc -p tsconfig.build.json","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint:fix":"balena-lint --fix lib test","test:unit":"jest"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"versionist":{"publishedAt":"2021-08-29T01:42:38.105Z"},"_npmVersion":"6.14.14","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --fix"]},"_nodeVersion":"14.17.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.3.0","@balena/jellyfish-logger":"^3.0.64"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^27.1.0","sinon":"^11.1.2","deplint":"^1.1.3","ts-jest":"^27.0.5","typedoc":"^0.21.7","depcheck":"^1.4.2","typescript":"^4.4.2","@types/jest":"^27.0.1","lint-staged":"^11.1.2","@balena/lint":"^6.1.1","@types/sinon":"^10.0.2","@types/semver":"^7.3.8","simple-git-hooks":"^2.6.1","@balena/jellycheck":"^0.1.3","@types/json-schema":"~6.0.1","@balena/jellyfish-types":"^0.9.9","@balena/jellyfish-config":"^1.4.8"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.231-renovate-external-non-major-6e2c2e6adf821b12ae5a186d7347c94ff1c4b649_1630201580701_0.34707344963964704","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.231":{"name":"@balena/jellyfish-plugin-base","version":"2.1.231","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.1.231","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"9f189b8764c550262a5a59d9fbbd6fde8500596e","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.231.tgz","fileCount":18,"integrity":"sha512-JkOI0YoMTnhnboI1WqkdjJajIOi7FaZQ9aZpiapboQk6hDL4dMQWTjcGOe1ErmveT0uL4HSc0lhtFrAT2CGpbw==","signatures":[{"sig":"MEUCIQDWwEri0vbXUziA9/blZSaymZuI6kUGd7tmSc3KS+ihjwIgMSmWgQ7t3EjXcohMeQBFKDUumepbB/cAAYaoskEiFpM=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":62394,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJhKueqCRA9TVsSAnZWagAANVgP/0MVUXx4v9hQOPfBsM2F\nW2RChBc8MDY+wT4RsGkTRcXbBfw9+yq6rEgoujPbEpfWf+nj1dSi7oHEMGaR\n5u0lOs8HhBkFe+WZTOgi2sZg/F+EMBGm29T3mjeckcMNslCAJEDjB8VA5wmk\nG5rRmkZbbA39AMpjkgN+cZqqhsbew46aFoQGITH67J1u/Hkn67WY/nAVXoRA\nvIkWY9EBfxCsouRhHNHpllTD/+77hQsAdv9u36LWljL3NScEpj0HALzQ/Thh\nraFCWXB8awndMr0P3gWY5+TNA24aOB6Y+foGoLIELNPT1eEWoYPQPTVFq52V\nLDGEFDMr3zWHkRJdNoBWuAHRR3zYxbzSM9XI2b2ezSKBuwQQSO9CfyBWvmc1\nzomolH6jB9HlOXYQI+K1U8p5PTdBFvKJr7MQ4kst95/SZy+jYr7CQk4/lpeH\nJ4bHfriD0i0xFBmDrGvWcerhgGXji3bUwLYYDw5KkbM8sW/L72nGfQ7zY8S2\nJSuIaDlsPtroKt7lrkXRJICrha5coOp5JpPYSuDI/ITnGer7Zw5sOH3ePZVa\ngN8B7nH91xopH2oxWzLG3OOl1i5Csc/DFOCIPLK2H2YJ5GaG4paVwVl3opZc\ntgtkrP3M9w62nNYMXD7wpdJ/Jac9OML6qNBSAsA3mWkPWer+GKC6z42MMmJY\nCvRg\r\n=cH2I\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=14.2.0"},"gitHead":"0732b5a0689d3d9c1d9562d192b95fa7fbfc1998","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"npm run lint && npm run test:unit","build":"npm run clean && tsc -p tsconfig.build.json","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint:fix":"balena-lint --fix lib test","test:unit":"jest"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"versionist":{"publishedAt":"2021-08-29T01:47:50.144Z"},"_npmVersion":"6.14.14","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --fix"]},"_nodeVersion":"14.17.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.3.0","@balena/jellyfish-logger":"^3.0.64"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^27.1.0","sinon":"^11.1.2","deplint":"^1.1.3","ts-jest":"^27.0.5","typedoc":"^0.21.7","depcheck":"^1.4.2","typescript":"^4.4.2","@types/jest":"^27.0.1","lint-staged":"^11.1.2","@balena/lint":"^6.1.1","@types/sinon":"^10.0.2","@types/semver":"^7.3.8","simple-git-hooks":"^2.6.1","@balena/jellycheck":"^0.1.3","@types/json-schema":"~6.0.1","@balena/jellyfish-types":"^0.9.9","@balena/jellyfish-config":"^1.4.8"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.231_1630201770682_0.0003188839278303046","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.232-renovate-internal-patch-0d32ad37d660406cf2c1d41af3fd82acfe2c33cb":{"name":"@balena/jellyfish-plugin-base","version":"2.1.232-renovate-internal-patch-0d32ad37d660406cf2c1d41af3fd82acfe2c33cb","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.1.232-renovate-internal-patch-0d32ad37d660406cf2c1d41af3fd82acfe2c33cb","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"997d5bb82686beec7361a7d09cdc3ee5e3b2a2f6","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.232-renovate-internal-patch-0d32ad37d660406cf2c1d41af3fd82acfe2c33cb.tgz","fileCount":18,"integrity":"sha512-8WQwPdnSARhXPcVGYRYxZ3uIZK1pgV9HtuZMgHJNji3avl5/M+/jgL14qHMxNrQnbOrc0dmd56vnbmEYLTugMg==","signatures":[{"sig":"MEQCIEj79tQeH+ZuOPUKRKcMlo+TEgs9SCN7bCkE7f5oiVfZAiByrUPm/TOyA5HAkC3t0tUBcRUqTNOlq27P+0YM2O+XvA==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":62563,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJhKur2CRA9TVsSAnZWagAALKkP/jvZ4X1W3cGBR+jTngQb\nAiKm3O2DIC7WND8UIZaU6E8sml+KtOu1F6E69Jwg1I83ggYv492i154w64TI\nXfVwORZ7oMbAMeecSYTIAZ5w4iNq6YLYZs9Uye73FNdMyBqsYCg5S7hjR4Mf\n/ABqbihTw92EHc2Y/YzQ2dSheMkuASEoDnjzVCq/c3ViYxWXyZMfZURWH4js\nY98BeNbMoNsnju97mzYOVYsV4enCMwReKJhtdicctVDn+QrlvQ+ynHsTpUSO\n4JEN0NOI1p2KozYrmZ5UQqotjI4ucS1+s5fZsBNbdW/jeM4o+7GhN/oDhp65\nywLUt/E3HTz1evxhu/I/D4Z900R2SbnRA5a6rofOdem4TRz6cZInlNHJuqaw\n4WKF6uQsytq7UTC9D3nUUQBbsp2JewHPFSmNlkIXVN6UczsZ/qZzR8G6+hkq\npYWrtEXa3O/rbEdgYrIv2Hd+0Shknqop0g3VinAphWPFmHIVdoT7eGy4XoAo\nsUP5oObCJkSa28OXiR4Y34NBVJYU/nXcCxxBFJ3LCUGvonI3hkmNCISgemr8\n48/ikxka4AB9iozIClFpdP24hUJMaVXd3mxdvPul7nPSUFu4CQHrCT4GsV+g\ncIjYvepeFA2bmpDFq3jTnWRqqN1JSlhL0sbguC96K/4nmyZsst5CWbhgcYxp\nWcb5\r\n=7tX3\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\n[![Publish Documentation](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml/badge.svg)](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml)\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=14.2.0"},"gitHead":"0d32ad37d660406cf2c1d41af3fd82acfe2c33cb","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"npm run lint && npm run test:unit","build":"npm run clean && tsc -p tsconfig.build.json","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint:fix":"balena-lint --fix lib test","test:unit":"jest"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"versionist":{"publishedAt":"2021-08-29T02:00:40.726Z"},"_npmVersion":"6.14.14","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --fix"]},"_nodeVersion":"14.17.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.3.0","@balena/jellyfish-logger":"^3.0.65"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^27.1.0","sinon":"^11.1.2","deplint":"^1.1.3","ts-jest":"^27.0.5","typedoc":"^0.21.7","depcheck":"^1.4.2","typescript":"^4.4.2","@types/jest":"^27.0.1","lint-staged":"^11.1.2","@balena/lint":"^6.1.1","@types/sinon":"^10.0.2","@types/semver":"^7.3.8","simple-git-hooks":"^2.6.1","@balena/jellycheck":"^0.1.3","@types/json-schema":"~6.0.1","@balena/jellyfish-types":"^0.9.9","@balena/jellyfish-config":"^1.4.8"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.232-renovate-internal-patch-0d32ad37d660406cf2c1d41af3fd82acfe2c33cb_1630202614174_0.030405495531643734","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.232":{"name":"@balena/jellyfish-plugin-base","version":"2.1.232","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.1.232","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"86623fd8240bbbf5e815d1612db81bd5726a69e0","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.232.tgz","fileCount":18,"integrity":"sha512-JiXsVhzCwZUH0f5ge/I4NGRDvBfp9k+k+1YXingOG2/K34lBTAgr1gavo7ZHmPv9ICanlpIVvtT6d6D3eRGftA==","signatures":[{"sig":"MEUCIQC9C8K10AqDZo7XCraYyVQT+KkM9dCu2iXd4Ty54QfbmgIgQqhAwE7YCYEDO+SQvQi0h33OTMui6tJ0dEpJo8GTFw0=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":62498,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJhKuu4CRA9TVsSAnZWagAAdLsP/0gqU6O2d9VmtFTjYqoy\nLlm8oi88QVK3zKQim+yucSBbxHLFFt2VVG0/Sv7iA3REkiSG7Gz25IZxgQ9V\nwUAMxCj1aje4Dq8o1033JJLm3ncdFdnArH572uqHShml3500CYUK1vYhsY8b\ni9AxAX4ForJQL+rn0U7HTG0wnFiFZcdVq//ke1VLfUqhECu3RmA3BMmDTF4i\nIyU17y+XPIyEXFBLj+ckmdlSnV3Sc4IXjwgsxzo5g2XOI1pF25b/AC44WY5K\nPlcX3lvs24c+IYF4bPxeO0qcQGh4TWTe/ZGXpggr7R/kLUQpl6OHfy/ldi/G\nsS87zo91CeQZihYFdXhC+zVkRMQZNONwaVcPT+qaCp3E7zZdoDZKkitYd+3N\nMSQsGTHFok9DYYYinYNQuAuov8FcvMYwxdJBz3lSIV4JQISOK4EzebxAnBS7\nDZonknP3V6n+HZnuZCfpRRX6DJC8iQgBnUwcVMcbR04m2ZxUUuLivwqwvuQN\n9dgj6554v5K8iWVEOwyoZr9Nb32aAzQsU7sEiXwGfJapDRSJ2DySZXMw2uX4\nSjWl4rrH5ja0fGWmVqXMpWfd5XAvpHAaGe7ObV1QFnyZSHPRsttpJP+UJqpx\nc3rxDSqNLillFvvWCdCY3FmY9HkokNaanUsWIOz/NrsFWAgawCzCf027pQjO\n5xS4\r\n=Xxqz\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=14.2.0"},"gitHead":"33dc64b1e86087ffc783959b835cb9546821c032","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"npm run lint && npm run test:unit","build":"npm run clean && tsc -p tsconfig.build.json","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint:fix":"balena-lint --fix lib test","test:unit":"jest"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"versionist":{"publishedAt":"2021-08-29T02:05:10.938Z"},"_npmVersion":"6.14.14","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --fix"]},"_nodeVersion":"14.17.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.3.0","@balena/jellyfish-logger":"^3.0.65"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^27.1.0","sinon":"^11.1.2","deplint":"^1.1.3","ts-jest":"^27.0.5","typedoc":"^0.21.7","depcheck":"^1.4.2","typescript":"^4.4.2","@types/jest":"^27.0.1","lint-staged":"^11.1.2","@balena/lint":"^6.1.1","@types/sinon":"^10.0.2","@types/semver":"^7.3.8","simple-git-hooks":"^2.6.1","@balena/jellycheck":"^0.1.3","@types/json-schema":"~6.0.1","@balena/jellyfish-types":"^0.9.9","@balena/jellyfish-config":"^1.4.8"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.232_1630202808669_0.7396341659480115","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.233-renovate-external-non-major-ba05ae846e3352b430dfc6ee8f039dfd4f32f6a7":{"name":"@balena/jellyfish-plugin-base","version":"2.1.233-renovate-external-non-major-ba05ae846e3352b430dfc6ee8f039dfd4f32f6a7","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.1.233-renovate-external-non-major-ba05ae846e3352b430dfc6ee8f039dfd4f32f6a7","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"253d1edc1902b3622c6c0a260b0c896ef78a2157","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.233-renovate-external-non-major-ba05ae846e3352b430dfc6ee8f039dfd4f32f6a7.tgz","fileCount":18,"integrity":"sha512-xyYItwBGep4ZJIkXx+mXmpEZ4ZGDL76DGp6QzBuZ2QdQWPUk9IrEB1NAkEwIHWsPEN6e0Y5zUHnrLHhLshfrug==","signatures":[{"sig":"MEQCICNASpI3JxsN+gsHXjSZBSHRYyfTfh1PXLZ8F6WhTdZcAiADqTtP6CNiGUbLoDnhRAKnsjioCLZRCZ50SNs0x1N6QQ==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":62654,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJhLBtQCRA9TVsSAnZWagAAqUoP/RxV8UGhecDcDZbnqR19\nyCFV79p2C9AZA7pudxNfWfhj/Ng5FwNi+bMSwYTbmGb8XB7GKYpclxaQPgqh\nyqZUVpSy9zYzNad8obmKSE22YIRiiO45r2ZiLP43sn0+HNiA3sYeQCUAB+f9\nNatC2o+ApN8mV7kqfsi8eXbdGIx4FRlT8N3ptZbvoYmTREQiG+GS5PgXQAWC\nrc8q0HF3SJJgWWYTeCS9EWiWpKBv7Hf0F/jqj9Rz42H4l3jCMvZNsqUGji+8\nFCKKdh73Flx6geV0wRhX12wCIa9rb/detTdEWHC+LlfNpco4M8toxnKEEA78\nPZV8DrSyBN4obRgnBLmex4ZhYGt4EmDcALnxZSSoIZlvREeCQiUDQjUfABLp\nUyxnJfx44r+lOmPGear6OTbWM65Q7MUkWMrx/N+VkRW7PRJOpWH/Ax6nBBRk\nJTdfPC0wrwoKEQmzRttTwMAu1xgeo1k0wftOUHBDZ1F+ZUILx0bv+9bjMfVZ\nHRI8oAbzPetwQuZbjRLLstBH3LfhxjqXOF3Jmvi4T9IQx8QRHfe9wloYvOxq\nzK+b3+iSHsHdtv0ee4VEa1K/ccxVoMZL/5xK3z0LB1/yq1popUvcm8ap3hAi\nDyn1z2MSdl/9QDMyhsk25IgGhUa7UBRbzAvbt8YAJuOwkifPXkQvhtnDnaAq\nKea/\r\n=Rhzs\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\n[![Publish Documentation](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml/badge.svg)](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml)\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=14.2.0"},"gitHead":"ba05ae846e3352b430dfc6ee8f039dfd4f32f6a7","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"npm run lint && npm run test:unit","build":"npm run clean && tsc -p tsconfig.build.json","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint:fix":"balena-lint --fix lib test","test:unit":"jest"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"versionist":{"publishedAt":"2021-08-29T23:38:50.958Z"},"_npmVersion":"6.14.14","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --fix"]},"_nodeVersion":"14.17.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.3.0","@balena/jellyfish-logger":"^3.0.65"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^27.1.0","sinon":"^11.1.2","deplint":"^1.1.3","ts-jest":"^27.0.5","typedoc":"^0.21.8","depcheck":"^1.4.2","typescript":"^4.4.2","@types/jest":"^27.0.1","lint-staged":"^11.1.2","@balena/lint":"^6.1.1","@types/sinon":"^10.0.2","@types/semver":"^7.3.8","simple-git-hooks":"^2.6.1","@balena/jellycheck":"^0.1.3","@types/json-schema":"~6.0.1","@balena/jellyfish-types":"^0.9.9","@balena/jellyfish-config":"^1.4.8"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.233-renovate-external-non-major-ba05ae846e3352b430dfc6ee8f039dfd4f32f6a7_1630280528045_0.8683578538721919","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.233":{"name":"@balena/jellyfish-plugin-base","version":"2.1.233","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.1.233","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"c08e9a498944007fa34519ee3d9eae7ecc6021b1","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.233.tgz","fileCount":18,"integrity":"sha512-+Pceutvmurwoz6VVtZMXTcqhHwo96HnVDbtnGH+kJh+nRuKP0Sejp2kl4zuQw9fKrm34EATDjs7s3iRYoV2hsA==","signatures":[{"sig":"MEUCIDE7FIGQ78UKcaR8x97DabIWCqi9uQU6yrBxV/PuqtEbAiEAlVCC1HFTwTz2zQ+5dF/dZ7Yxs10P4rtVM84YnqGZqxQ=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":62585,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJhLBwnCRA9TVsSAnZWagAAleIP/1984iUtSenz4L50TFgK\nEULoQ5lJh+0cAqX4GFPh8A6+9q4Aq4Oo+A/UVSEiGg8zdcGkmmyPh32ROl9U\nsokYWhNZiGwxRCUMpUFHtZ2JEjAVDUZk/dKWUjmie+lj8kXOQhFwGUsweY+s\n9LBwXzS/gkyyJfRAmU3M27jFGTvp1D+RaOUTT6WtnkFtixu4L9JLQkZeDibk\nzPUt9I8bM+DceQtBfI51s+hW/lOoWMSwA5OML6dOeOPbx+V31YG22+WPKO74\nDyTnFzCov9D2UCoJGbn5IsO6zezBGQFj3Apd1Hw8obT1bxnXWf1sQm1ErUS0\nrdtiLNL6k5WimgKVhmc+xhJ4HM1eXxpncj9taxIb2uKZddn4XRUHfiEXrPGh\nzsONyLFi/H4MbX0y1s+d/wMPUZhDDCtO6EgaWOylD9Hgn4QNDRTSTcggI8Pj\n+MoSJ7go9fNMNCcH6ZMOClAfqhXjTFZWA92DBt+1b8RulruJryGc5XPzhyL/\nEAGWrMZ+1qRqMccDXdZK5FxIKTVTb4nfAzevGNPQgFAyzBNQYiVh27TKgvoL\nCyp9lo7rptSid/6bOCBd7r1xdYWKdQ0u6EDZ9E14yPkXLUZ4QlMIJAUsrSdv\nefC0hQfNENdwKh9o5O4wUTnLh703p1N9seFejkdrvYpfBAfR4QXRiFkliq6U\nUmS7\r\n=rTYm\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=14.2.0"},"gitHead":"bf9f9c65cc90f970c05f4376fe7121b5df267bbb","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"npm run lint && npm run test:unit","build":"npm run clean && tsc -p tsconfig.build.json","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint:fix":"balena-lint --fix lib test","test:unit":"jest"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"versionist":{"publishedAt":"2021-08-29T23:44:01.063Z"},"_npmVersion":"6.14.14","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --fix"]},"_nodeVersion":"14.17.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.3.0","@balena/jellyfish-logger":"^3.0.65"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^27.1.0","sinon":"^11.1.2","deplint":"^1.1.3","ts-jest":"^27.0.5","typedoc":"^0.21.8","depcheck":"^1.4.2","typescript":"^4.4.2","@types/jest":"^27.0.1","lint-staged":"^11.1.2","@balena/lint":"^6.1.1","@types/sinon":"^10.0.2","@types/semver":"^7.3.8","simple-git-hooks":"^2.6.1","@balena/jellycheck":"^0.1.3","@types/json-schema":"~6.0.1","@balena/jellyfish-types":"^0.9.9","@balena/jellyfish-config":"^1.4.8"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.233_1630280742965_0.6632275827371639","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.234-renovate-internal-patch-e9cea04136f2e0db37f2b09856bc6cd881dcf923":{"name":"@balena/jellyfish-plugin-base","version":"2.1.234-renovate-internal-patch-e9cea04136f2e0db37f2b09856bc6cd881dcf923","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.1.234-renovate-internal-patch-e9cea04136f2e0db37f2b09856bc6cd881dcf923","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"b353e2b597c0e5a02d9980c6a0beb0a227b220f7","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.234-renovate-internal-patch-e9cea04136f2e0db37f2b09856bc6cd881dcf923.tgz","fileCount":18,"integrity":"sha512-B2Ekp+kh+9+T0/cVGRTlt799i+6gpMm6JTQw2NSRGF9wzCJMU36tkL6MkcW5USiqhBVjXPNrzLXpq7HlFwqoPg==","signatures":[{"sig":"MEYCIQDFGXa6Y8yZyakjH/BWtpnUF8lGxVjoQ7TeOH/2vxT9IgIhAPngJsSzTAYIS+Xhd31NwOWDdjCNyjy2Z0jd55NzQ5iw","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":62754,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJhLDx8CRA9TVsSAnZWagAAJJsP/RgBxjrWK5hvjomH2WiN\niEnCx5qwX/NkQ2B5ZOh/JLFv+UVNZIrRmbyTNHqm6X/b7qlN6GQH9NJtIANt\nGsz+pLp2lejeMhg93acBRospmAeDshmyWFXiCz0NCUT5UZ3NQQDMe/OGennA\n+13DydhPoaep5iFCQQQBv+vF9FQ+sLWCq4zM1mTYqYpKxMsqHDFOC42Rtl0C\n+s9IJKsHyI0FN5ogL6P3DUWiJnDHY4k5Og0j83yNg/HbLN0uOK+tPMbotpKe\nf0EgqFh7Ccnoz/ck3JBdD9CNqk5iNowSlQ1yhp8c+0VMpBQKwFI37M386wCj\nAGxw4oSKDllroNYxrFKdu+3OsB9ezexBYxoNw3aTdHIBhno7DmK8wyw+/+o9\nsaEkGxKnY4NNCRpZ8lVLDqtw1DIrLDcdkg2FYyhxZhMjEanwuiO9tAUliY/f\nkRxOIASx7FzFNET5Z2NqzIGPhL1sjbGWb0x+iuwP/n3uCN+qunwFBnhMLPJZ\nlASy7Ox87AtMUAYKoqyKX9WFdMEw9qGKvlf0wqwaPYPcDpMa3jzGd1FfwGdL\nm2EIL4ZhcZAcDmSvDLm15xLO1CZQrw8jlWZPLD3iGGegNs/NcLaO5ejgNPRa\nGU0mmM9DpLGDl5qbaq8adbEp/vmimOm+j2Bi4KWyFSOe2hW05ORGfBP9hMML\niYtB\r\n=ICnZ\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\n[![Publish Documentation](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml/badge.svg)](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml)\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=14.2.0"},"gitHead":"e9cea04136f2e0db37f2b09856bc6cd881dcf923","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"npm run lint && npm run test:unit","build":"npm run clean && tsc -p tsconfig.build.json","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint:fix":"balena-lint --fix lib test","test:unit":"jest"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"versionist":{"publishedAt":"2021-08-30T02:00:51.010Z"},"_npmVersion":"6.14.14","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --fix"]},"_nodeVersion":"14.17.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.3.0","@balena/jellyfish-logger":"^3.0.66"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^27.1.0","sinon":"^11.1.2","deplint":"^1.1.3","ts-jest":"^27.0.5","typedoc":"^0.21.8","depcheck":"^1.4.2","typescript":"^4.4.2","@types/jest":"^27.0.1","lint-staged":"^11.1.2","@balena/lint":"^6.1.1","@types/sinon":"^10.0.2","@types/semver":"^7.3.8","simple-git-hooks":"^2.6.1","@balena/jellycheck":"^0.1.3","@types/json-schema":"~6.0.1","@balena/jellyfish-types":"^0.9.9","@balena/jellyfish-config":"^1.4.8"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.234-renovate-internal-patch-e9cea04136f2e0db37f2b09856bc6cd881dcf923_1630289020096_0.6614905268935032","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.234":{"name":"@balena/jellyfish-plugin-base","version":"2.1.234","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.1.234","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"d64bbf68ae777ec31a537d57c3dc4c504f3211b6","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.234.tgz","fileCount":18,"integrity":"sha512-UsK3hg4zOmfDSjaFqFWRvA21GwUXf700ci8WUK0fEue0EjC0y0AcgSnweEsFu/7BBU/KRWKYX1zoaFuvGpT1bA==","signatures":[{"sig":"MEUCIF568hrfMbUPunuHQHaeCPFtDE0vbq3C5ix8v6/DNsigAiEA3zsuHUA3HWNv68RVQYY71hTlYNSE2EFf/Gtm9mvdnpY=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":62689,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJhLD1ECRA9TVsSAnZWagAAtKsP/RyZgOQNKBXyqwDoYGBu\n+n6/k1nMUpf66++JrvIgM6pRjpJ8ISADAci/KhV6FxhXCSCa1DAgpKHpuMNB\nUIYzbm5RLxoRbN2hY6G/Orz7Bev+3EtoO6Kgc96KTl2Tp9eO9kdMpImSMSpA\nTQPa8DrlL9hdsl0v4kSD+DmUd4UaGEXs9M7mPnyyOaahsXgQZscU9Ag+sLAw\nzETiHVZ07xri1J8F2l7PWduPKKgGPhZra4ECeTjyWsjgfBeL8EO3kCSiGikn\ngmrbz8J5lOAMzm2LZK7+mwzXcXUxiawF31Kjc7LM6dvUlVGRDn52k03/YTpS\nX6dGuAXmxDD2pfC7RiyT89Gbo3ER3ctWIMqbce732ZUnX9p6uvNoHuDwbrkt\nxKE+QjsYZCtL5PcV0dlBWjWMSErb+NWDbj3i0OPmVysLilmoDy2GEX0S6Yqa\nxOgxiaW+wfTObuYn2uMUu6jbM+ZYPvKz0MjSC38NHw4YysWyriiIHmdXuB+9\n0yGls1QtT25Oz8ErTDqqJPwudcjRVHKQ1Hgv+NN3LRqQAz2ucO+eAnmbatxO\nmS5IE1Hp8JFqkujTNheA+VwiZIzwW4okNzfqtHXLTZ7fp6JF+qzQ9Je01/ri\naVODRuLHQOrkNx7B72QkZ+TMfxdVs/SyyLnKcKA4VrcbjechCT534DxlkGQs\nj90W\r\n=LBns\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=14.2.0"},"gitHead":"5452c9a6b455ebc2e826380a797ffca803dee89a","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"npm run lint && npm run test:unit","build":"npm run clean && tsc -p tsconfig.build.json","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint:fix":"balena-lint --fix lib test","test:unit":"jest"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"versionist":{"publishedAt":"2021-08-30T02:04:40.325Z"},"_npmVersion":"6.14.14","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --fix"]},"_nodeVersion":"14.17.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.3.0","@balena/jellyfish-logger":"^3.0.66"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^27.1.0","sinon":"^11.1.2","deplint":"^1.1.3","ts-jest":"^27.0.5","typedoc":"^0.21.8","depcheck":"^1.4.2","typescript":"^4.4.2","@types/jest":"^27.0.1","lint-staged":"^11.1.2","@balena/lint":"^6.1.1","@types/sinon":"^10.0.2","@types/semver":"^7.3.8","simple-git-hooks":"^2.6.1","@balena/jellycheck":"^0.1.3","@types/json-schema":"~6.0.1","@balena/jellyfish-types":"^0.9.9","@balena/jellyfish-config":"^1.4.8"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.234_1630289220427_0.9102640530379744","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.235-renovate-balena-jellyfish-types-1-x-c6226bb4da20e551864a912e0ebc4aca896402ba":{"name":"@balena/jellyfish-plugin-base","version":"2.1.235-renovate-balena-jellyfish-types-1-x-c6226bb4da20e551864a912e0ebc4aca896402ba","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.1.235-renovate-balena-jellyfish-types-1-x-c6226bb4da20e551864a912e0ebc4aca896402ba","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"2a461fe63e12a7213b2f0dd84f8d5f6945af80c3","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.235-renovate-balena-jellyfish-types-1-x-c6226bb4da20e551864a912e0ebc4aca896402ba.tgz","fileCount":18,"integrity":"sha512-bCNOLLxukM+muzmpQ9w5blBGbYZNLN0hq57d5KVifw3ukb6ik7zmJbkdio3NN7VPth8xSE0kNZgFQMWmbXChtA==","signatures":[{"sig":"MEYCIQD0CA8bMHbAueO3hw+KW5NtlS1/0sYH4qedpqtUWrC2zQIhANI/tpQAr2Ma9gjXVesUEGov6deCU/gKVm/0m84kTwvp","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":62864,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJhMChiCRA9TVsSAnZWagAAWFwP/3mwAm2NCcy2zRJxSMhV\n5u/w7GC48oMLqOh4gEsdkhRaw6yifEUZVhRqRQCrz7mXIX2R/zd/5Yqi+4Fq\n773Qu43d3xqgPPQ+ouvYDc8td37gQN4G6wQSba6xifPp094fWpDtCIGLewdU\nLuN2D5s2Od+pfJJqfHT94v+hu+Y9Lc8PUwtAMAbLz29LcsinEQQXotKQnS79\nlA9XlVRqKI1ktjfpIGJjceOLIMLcg5+Um9EvrKjsLwsCHT/RVnu6SCuORilp\ncrfHFQBqGx5Byd9yO7bVqzBn/tqbAqwC3xTThXf7cFfiEqPWeU127Y+acVB9\nNSoekv9Ag3QwPhQIllJZKmRBtyKujuyMVejh+Jn+usWpuHyElKIJMfAMegm5\n6/vlsDM8MoDSvWn6N+uFqXjSmC8cn5XeYKWbNCC7RdkMv/Iug3O6SzeAI/m7\nqpJ+RaHy5LvX9q8/zl00itRYiI9G6pOGrMjX0XJDlE1FxXRtW930sulsnxa8\nHToe/Goa3tYRo0vQq0D9PjKUHBoTQ8cNj7SbDXaa/lfmtV7+hbi2tAWB0KPM\nMolDBprqucpKuy5YKNlpfEtwicVq03GAEHXfc/veON35WuLV8asBJZFxSC0L\nC0nLrSxq/3G62UmD2rGnDtqt8DQk8vopu47ZIFvFy2R+7aDMr1ApdydlkL0Y\nDtys\r\n=c1Nm\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\n[![Publish Documentation](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml/badge.svg)](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml)\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=14.2.0"},"gitHead":"c6226bb4da20e551864a912e0ebc4aca896402ba","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"npm run lint && npm run test:unit","build":"npm run clean && tsc -p tsconfig.build.json","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint:fix":"balena-lint --fix lib test","test:unit":"jest"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"versionist":{"publishedAt":"2021-09-02T01:24:31.490Z"},"_npmVersion":"6.14.14","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --fix"]},"_nodeVersion":"14.17.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.3.0","@balena/jellyfish-logger":"^3.0.66"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^27.1.0","sinon":"^11.1.2","deplint":"^1.1.3","ts-jest":"^27.0.5","typedoc":"^0.21.8","depcheck":"^1.4.2","typescript":"^4.4.2","@types/jest":"^27.0.1","lint-staged":"^11.1.2","@balena/lint":"^6.1.1","@types/sinon":"^10.0.2","@types/semver":"^7.3.8","simple-git-hooks":"^2.6.1","@balena/jellycheck":"^0.1.3","@types/json-schema":"~6.0.1","@balena/jellyfish-types":"^1.0.0","@balena/jellyfish-config":"^1.4.8"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.235-renovate-balena-jellyfish-types-1-x-c6226bb4da20e551864a912e0ebc4aca896402ba_1630546018267_0.5416638808323966","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.235-renovate-external-non-major-d08209a8afb95e22511dd881e82d940b0d2853c9":{"name":"@balena/jellyfish-plugin-base","version":"2.1.235-renovate-external-non-major-d08209a8afb95e22511dd881e82d940b0d2853c9","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.1.235-renovate-external-non-major-d08209a8afb95e22511dd881e82d940b0d2853c9","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"c3b52de4b6d094ccfc7628b9962e5cc7c049c098","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.235-renovate-external-non-major-d08209a8afb95e22511dd881e82d940b0d2853c9.tgz","fileCount":18,"integrity":"sha512-I5RmwnNMMzBsRIooh9vlCX5jTc7EXGC7MaF6uCa8do4piJNDCkPldkLXtnJUJ7JOpW4YjvIUIagRMYoqtySCLQ==","signatures":[{"sig":"MEYCIQDmGD37qf7xVfIjpfIJCYzHzx/0r5Ey169PjJmtt6gQpgIhAJ0Ek/Z/Dh0SvA5ADRB3WLT+bK1j6Dx5mepLTOYcNyew","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":62845,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJhMrwdCRA9TVsSAnZWagAA8MEP/1kh4I1rdayiIJamjRXu\nfp6irKeRNivCp62lxvEhrLWTj261bi5dzbHi1iWdX5snDTLH6G1poDx4AIyX\nqeBMqE7XyYEl4hb7kjUZdnOIoTAQX8XIa0dUyGdHeZ5uGijbH+Sds54nvW4U\nwi0tgzjqkAOzQ6Bel75PBDYuZ9kEb1YCduOPQEwpDI5a47AHefccEHPokw7m\nfGRudNa8LNk48NqiAJszEBW2D5NmZuAdjCKOshyn9wT0UXJgwzwkh6HeDXy4\nJ2H/cneXsUIDdZnZVyAe0go9CtHOf0vSvHoC4SUT24sCsCJvmSrXV9tbmFHB\nk3EKvLyx8lnUbzu2S8hAvYnXD5Tm2hOR++yfgUQKqirzHTCZkNo4Lb43JtGr\nbEnt82ULYCI2B0ewfiCiMy8tjVDmeKbMGGKamdx0EQZ22Sf4dzCnbZbJkKVn\nYXNtC+l6NwzW9VCD+3xFDvVkt+Xpka706oqu88kZmHUIRPrf87ncufPQCeo3\n5Kw4OYoT45EB1RSA7Kwmw+gOeuJgJtLPF/XncvG2XV5CdZZD+t9SRi0f3V1M\npI0XyYS7DsyGx6c5NtODtPjIw8yJ+YsW5qvXctx8pQf/5wSBXznU+KA/cHrI\nzWFmxsz2RsdUTF6qA7Qj+ta9m6X5V62fRgUEAtEchzvVr0SK+kXzPbvAk2ji\nRlew\r\n=bBJs\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\n[![Publish Documentation](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml/badge.svg)](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml)\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=14.2.0"},"gitHead":"d08209a8afb95e22511dd881e82d940b0d2853c9","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"npm run lint && npm run test:unit","build":"npm run clean && tsc -p tsconfig.build.json","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint:fix":"balena-lint --fix lib test","test:unit":"jest"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"versionist":{"publishedAt":"2021-09-04T00:18:50.911Z"},"_npmVersion":"6.14.14","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --fix"]},"_nodeVersion":"14.17.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.3.0","@balena/jellyfish-logger":"^3.0.66"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^27.1.0","sinon":"^11.1.2","deplint":"^1.1.3","ts-jest":"^27.0.5","typedoc":"^0.21.9","depcheck":"^1.4.2","typescript":"^4.4.2","@types/jest":"^27.0.1","lint-staged":"^11.1.2","@balena/lint":"^6.1.1","@types/sinon":"^10.0.2","@types/semver":"^7.3.8","simple-git-hooks":"^2.6.1","@balena/jellycheck":"^0.1.3","@types/json-schema":"~6.0.1","@balena/jellyfish-types":"^0.9.9","@balena/jellyfish-config":"^1.4.8"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.235-renovate-external-non-major-d08209a8afb95e22511dd881e82d940b0d2853c9_1630714908877_0.6954587498699605","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.235":{"name":"@balena/jellyfish-plugin-base","version":"2.1.235","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.1.235","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"92793bed070d8e75f83a2988733b0e40df5ef93f","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.235.tgz","fileCount":18,"integrity":"sha512-J42sxc11MlBiYC/vzkNUO24qecPdKEgOEG7Cx+PgPwxPE4JoXl3/7Ab2fh6COLtcVYgjCgscRPsWUZT+7xPE6A==","signatures":[{"sig":"MEYCIQDOLthFa9Y4pGARAYNdd9H5y2IDB14fvZJUVP2jeO8WwQIhAO4scdLUvEFXQ7gvlKQgDsQHT0+Mj365pg1S9sg0O+g+","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":62776,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJhMr0WCRA9TVsSAnZWagAA1a8P+wfLSaiR3IvdfwHCsMy6\nbFt1H73U0yFUQQdYEioTJvy6P0AnI3I1yuDz0cE3GenyM+phBSfNchlJ6sjK\nMxla8UVZ7qeHOVYanR+TsNL7o/nEmjby53blBPsOhS3kuZ55yXxd1g8QQ5Jo\nDup2S1EFwnkFDhds4AruXtJQhXGroVtZ09GPzxcbxJW1HPSk1puO0tG6UNK/\nnqE6PYeSRphcR7T0QDdp4a8GW7lY6BgDHFYqFVcfFfgzcd/9zGxGs+lYPRmf\n8Ug6uiRoGkMcQmb9J3+EWEPbbwAJwO1FeICp8z0O31aiIvzj4/mIpSVjtrer\n34ALDj8zbnS8BYSWugDvc9iQvl8m02aPhrTSdiF2uY0esD7SngBRTRv/qCur\nPWChaf/pU3xzUtsLynAQl6pfjwHx8/0ltWX5MAY1eIdGZ/iKcqM5OQBngFZP\nzM6orVG5ccd5LOUc4VJeGFG3IPt8udZ4QipyrJTwbbiu7QqZ9o2uP5tN7gNH\ngxeWME5JFbzLVQimC364xL1aEX30TwKumEQvM0j/JXX/cZWzA0bC16SBDpTb\nPhuoD2t+XZU5KwfFp20Mh3H4FwnNfrBXOOtb844jEA695r/VEglAcnHGu0cT\nHjaBmOH9Vf6rFXrYh8JTbRpVL/65dYIHvgLpkHmmjHeuGm+QS5KFmh1xf9aJ\n7ttP\r\n=zfS+\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=14.2.0"},"gitHead":"2970aed66a0f68b521e1f62480a27acf26d88641","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"npm run lint && npm run test:unit","build":"npm run clean && tsc -p tsconfig.build.json","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint:fix":"balena-lint --fix lib test","test:unit":"jest"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"versionist":{"publishedAt":"2021-09-04T00:23:47.229Z"},"_npmVersion":"6.14.14","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --fix"]},"_nodeVersion":"14.17.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.3.0","@balena/jellyfish-logger":"^3.0.66"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^27.1.0","sinon":"^11.1.2","deplint":"^1.1.3","ts-jest":"^27.0.5","typedoc":"^0.21.9","depcheck":"^1.4.2","typescript":"^4.4.2","@types/jest":"^27.0.1","lint-staged":"^11.1.2","@balena/lint":"^6.1.1","@types/sinon":"^10.0.2","@types/semver":"^7.3.8","simple-git-hooks":"^2.6.1","@balena/jellycheck":"^0.1.3","@types/json-schema":"~6.0.1","@balena/jellyfish-types":"^0.9.9","@balena/jellyfish-config":"^1.4.8"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.235_1630715158193_0.6148971698171377","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.235-renovate-balena-jellyfish-types-1-x-b6ae6e727fe9647d6e96ec01e7de02f093b238ea":{"name":"@balena/jellyfish-plugin-base","version":"2.1.235-renovate-balena-jellyfish-types-1-x-b6ae6e727fe9647d6e96ec01e7de02f093b238ea","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.1.235-renovate-balena-jellyfish-types-1-x-b6ae6e727fe9647d6e96ec01e7de02f093b238ea","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"827df1de4784769a890772f722870bec49dbc4af","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.235-renovate-balena-jellyfish-types-1-x-b6ae6e727fe9647d6e96ec01e7de02f093b238ea.tgz","fileCount":18,"integrity":"sha512-yWsml530I8gjetSsqRADSZpmv4NVlwZRFjOCQSsFqqXAQ5dB0Pvb/j+pYaz4mk3rrdwDhS4sywQSyA4LgvlfUg==","signatures":[{"sig":"MEUCIECQylAhF4tmmsvcReoh20OhUP8KvvandubHoenRbPr0AiEAlOSGItnD2FoLg6eVHahJ5ikZpMQMLCXF84VGxyQiyKI=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":62925,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJhMr1iCRA9TVsSAnZWagAAamsQAIRDeg8VGDvys0PYEbJq\nB5HsNCptZs4UewINURwzm6TIZFOGi9PrzNzxweUSXEyK0Ram6phZdXonfGzM\n2IS/4Ey5g7b291aVA+TZ7xsee/Gfms1cx/huSmBYpw9fxfudOryUYyW0Vr97\nelLr7XJi4G4GQyUu3qwhc27Zxrnm9hx6Ca4NRSrexBiBs+TOozkvKP87S7fB\ndresn7SGX6fotVjulmK6BYNmmwmiV4lqtSZ2f+EWiBMf4NOPkenvXzkUgMx4\nt7zORvtBpabbuN7ep46u2ejlm3nuMRyRGwxjrtu539qynFdQ9BFhgtZ4mbbx\n0QKiyB96nkeiAjisUsNXQLeNq7q1TtFEd8LedReRjvYKJancOB0QulYxbjvT\nC2UQHAwssTLks5mMhyCV6dQAo1MqN8uqgqne2XsAm+5YjxZsl/aIA8o4puR2\nmcsQNZxxTP0LyEJkHWFS4ViC6TKBNpqa0v6sgqFuClbsltrT4UGV6S//hMHj\neqo7hRV9j2f5b45ZXmF7K+xmRG866VDYHyHeMgXt61pF8mIh/7Q2o65VVEmZ\nLEPvZXuoHZMdjeaK3kFjR/BCDsfNhq6aNUIzMG1CIVxqPJXtKUNsSfRlDHx2\nS/w6R/2PYThFV6LEeynCWQvYihaKan1OfFvzFmUM2FzvLIEXwxy0cBgDFKFD\nPS0X\r\n=TNR9\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\n[![Publish Documentation](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml/badge.svg)](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml)\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=14.2.0"},"gitHead":"b6ae6e727fe9647d6e96ec01e7de02f093b238ea","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"npm run lint && npm run test:unit","build":"npm run clean && tsc -p tsconfig.build.json","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint:fix":"balena-lint --fix lib test","test:unit":"jest"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"versionist":{"publishedAt":"2021-09-04T00:23:52.631Z"},"_npmVersion":"6.14.14","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --fix"]},"_nodeVersion":"14.17.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.3.0","@balena/jellyfish-logger":"^3.0.66"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^27.1.0","sinon":"^11.1.2","deplint":"^1.1.3","ts-jest":"^27.0.5","typedoc":"^0.21.9","depcheck":"^1.4.2","typescript":"^4.4.2","@types/jest":"^27.0.1","lint-staged":"^11.1.2","@balena/lint":"^6.1.1","@types/sinon":"^10.0.2","@types/semver":"^7.3.8","simple-git-hooks":"^2.6.1","@balena/jellycheck":"^0.1.3","@types/json-schema":"~6.0.1","@balena/jellyfish-types":"^1.0.1","@balena/jellyfish-config":"^1.4.8"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.235-renovate-balena-jellyfish-types-1-x-b6ae6e727fe9647d6e96ec01e7de02f093b238ea_1630715234190_0.24699881410065117","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.236-renovate-balena-jellyfish-types-1-x-8c65f90c51e5741d58f6398ed0d6ef6aedba6b8e":{"name":"@balena/jellyfish-plugin-base","version":"2.1.236-renovate-balena-jellyfish-types-1-x-8c65f90c51e5741d58f6398ed0d6ef6aedba6b8e","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.1.236-renovate-balena-jellyfish-types-1-x-8c65f90c51e5741d58f6398ed0d6ef6aedba6b8e","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"644702a442ba65187a4761770bc7ff55e5fc8b03","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.236-renovate-balena-jellyfish-types-1-x-8c65f90c51e5741d58f6398ed0d6ef6aedba6b8e.tgz","fileCount":18,"integrity":"sha512-MS/vQAgOQK51VaBOXNreShfa79HhEb9ZqM3mcqjk4N9WwYaPumoj0geYaQfcqeUhyzX7KmxbPpBi4RAwW0qEug==","signatures":[{"sig":"MEUCIEOeVpFmztgqojy5lUpif5ZUJsWPLtbP4cxM2cwwBE2IAiEA25D6p716r7uNxTBBq+4nX6hMKaUtkjnCBB5OSwbIRvI=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":62951,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJhNIwFCRA9TVsSAnZWagAAB2sP/iErmKFirWgjecul3osl\nzmQwPDde/hVlSewzUnOa28GbjDag/G4oP7RqwZi/zxxpeiZ1JnaGr/++jFgz\n3o7+xihDqklykRQPPBRkd5tdla5JqJG1O13kTQUSHMMwEcsfuIXyPjuuodXP\nbvVAXCuiYtc6W1MRHe1Hf8E9I69FlSeLg2YiOImYWqD5+RYn06VPfV++/y8Z\n2D1xhQyc7Fynemab71VK+AqnY3opL2cVwXqDmiVjTX4N4nZVdvVYUa5/Ytwu\noeCR3p0p8BNR9y5ZH7L132MtkwhrRRlV3RSOubd2LNl5gNTZNOIUbdkg7b6R\nfB+ESdAegPY7JA+9BhtSjRVqMbVe1NpFqYuR5fkdUhdfAQwF24GuYq1YN0IE\neEMU+AfIeY8whp3NVy6ltODcXmYSabUUIUhe3+DswNS8jtlB2ni1MimQyTSC\n/tYThlbjtNCHdHx6Q+TNRf3jMjCJuWN7IJy0LCaSaj202D1LYGIHaFjlAJzw\n9Hek7//URP+MckuBNzS/rbp1gJh72mb5R76T9SqIaRGQRv/RhnSJGNWc/CGw\nwTyiAAlGHeKnROTORG2TZHQ2va2G/MECqa3zs1YsUU+3OHtKklCzwjrDEJqM\nT0cv3Nxez8fSf05c73jmWtUgeIcuQRJb1sELTXRNCb32G22MSXp4HZdVuwSK\nashe\r\n=0DGs\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\n[![Publish Documentation](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml/badge.svg)](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml)\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=14.2.0"},"gitHead":"8c65f90c51e5741d58f6398ed0d6ef6aedba6b8e","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"npm run lint && npm run test:unit","build":"npm run clean && tsc -p tsconfig.build.json","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint:fix":"balena-lint --fix lib test","test:unit":"jest"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"versionist":{"publishedAt":"2021-09-05T09:18:01.059Z"},"_npmVersion":"6.14.14","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --fix"]},"_nodeVersion":"14.17.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.3.0","@balena/jellyfish-logger":"^3.0.66"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^27.1.0","sinon":"^11.1.2","deplint":"^1.1.3","ts-jest":"^27.0.5","typedoc":"^0.21.9","depcheck":"^1.4.2","typescript":"^4.4.2","@types/jest":"^27.0.1","lint-staged":"^11.1.2","@balena/lint":"^6.1.1","@types/sinon":"^10.0.2","@types/semver":"^7.3.8","simple-git-hooks":"^2.6.1","@balena/jellycheck":"^0.1.3","@types/json-schema":"~6.0.1","@balena/jellyfish-types":"^1.1.0","@balena/jellyfish-config":"^1.4.8"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.236-renovate-balena-jellyfish-types-1-x-8c65f90c51e5741d58f6398ed0d6ef6aedba6b8e_1630833669224_0.7724520095055054","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.236-renovate-balena-jellyfish-types-1-x-40de0a4577ef4d9816ee3db90fc30abd4aeefd7f":{"name":"@balena/jellyfish-plugin-base","version":"2.1.236-renovate-balena-jellyfish-types-1-x-40de0a4577ef4d9816ee3db90fc30abd4aeefd7f","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.1.236-renovate-balena-jellyfish-types-1-x-40de0a4577ef4d9816ee3db90fc30abd4aeefd7f","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"b7f1e0c18c3ccba3d8870cb3dff62c9887f74816","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.236-renovate-balena-jellyfish-types-1-x-40de0a4577ef4d9816ee3db90fc30abd4aeefd7f.tgz","fileCount":18,"integrity":"sha512-MKDNEnt2RvP7eu/47Ge6OAi5V+hFUyXZzwpn8up0mMkeLz4LawLGdcb1YT+ebM4VvEPIWKhqNjW9LMDJwUa8ew==","signatures":[{"sig":"MEUCIF78YlrHltxxGCwE8gD09ohBfR2fLgzFhE+t6nRq6yTgAiEA6F48gy51gHLZS7kVuKLY/lT5T9h7MS6y90alzvFMRSk=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":62951,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJhNafsCRA9TVsSAnZWagAAk2wP/iZ79Su4GfAdDWt3BniP\nwVJn+4mSI9qCsU9rYIaeSQZZvvY1nlHG25OCLX4LM39IWAS0ySJoS7ZMHO2U\nex+cdUpAxqODy2u3QLOBHK033gEAiaXcp84cUnMYsBBI4qYnaVOugNYBzNGv\noKvexh9gYr0sjMCJerIulAWwkQj0MJePs3Hx7BY7IoVKCrPTtLsk5S5pTmNi\nHCREH5RfKfTqu7eH6A6UdQh4syrz0sVOsadDFJrTzzhzuUatFZJ01yhDcU82\nhJZl0gvyVo/9D6OlGKc6JDxyLFR9f2Q4FXGVHtMq6TeKWMYbdi17PsteAMjk\nwcgWMd347NvQkR25CF9SzLh6fWMCuqdzPGYDDp75HNYNt2pp5wZN8MCzialO\nFdBCAJnx17SBzHVll5z163OmcZ5B7D//e6mcE93zv0ZqUN9K9xUZF590gEz0\n5eZ8PEAn0O9/RlghSlLgWlMDQMJi8b/4msUGln9djJ5umZZOSKiiIrP4bvUL\naLEcBydtb25jwgDCyj3bSQahoe7aX+YwOoVJ68Ua+2eJbITiUGztZIO85rS0\nYwReL7g/fM61tZEPRmJDeQ8hX3+4HlKWcAgYe8AQzS6o0CIk3WqCEoQFePKB\nrDGYAnsJT5gJyAZtpU9BuIOUEoXBJ0kIo7K43aGdp3+NuyFmBioqgFnePs00\n927D\r\n=0Ju4\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\n[![Publish Documentation](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml/badge.svg)](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml)\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=14.2.0"},"gitHead":"40de0a4577ef4d9816ee3db90fc30abd4aeefd7f","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"npm run lint && npm run test:unit","build":"npm run clean && tsc -p tsconfig.build.json","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint:fix":"balena-lint --fix lib test","test:unit":"jest"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"versionist":{"publishedAt":"2021-09-06T05:29:41.680Z"},"_npmVersion":"6.14.14","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --fix"]},"_nodeVersion":"14.17.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.3.0","@balena/jellyfish-logger":"^3.0.66"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^27.1.0","sinon":"^11.1.2","deplint":"^1.1.3","ts-jest":"^27.0.5","typedoc":"^0.21.9","depcheck":"^1.4.2","typescript":"^4.4.2","@types/jest":"^27.0.1","lint-staged":"^11.1.2","@balena/lint":"^6.1.1","@types/sinon":"^10.0.2","@types/semver":"^7.3.8","simple-git-hooks":"^2.6.1","@balena/jellycheck":"^0.1.3","@types/json-schema":"~6.0.1","@balena/jellyfish-types":"^1.1.1","@balena/jellyfish-config":"^1.4.8"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.236-renovate-balena-jellyfish-types-1-x-40de0a4577ef4d9816ee3db90fc30abd4aeefd7f_1630906348107_0.7188415752597832","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.236-renovate-balena-jellyfish-types-1-x-c2679790b9a6d20cc0c83a83d5523aa4306d1ed5":{"name":"@balena/jellyfish-plugin-base","version":"2.1.236-renovate-balena-jellyfish-types-1-x-c2679790b9a6d20cc0c83a83d5523aa4306d1ed5","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.1.236-renovate-balena-jellyfish-types-1-x-c2679790b9a6d20cc0c83a83d5523aa4306d1ed5","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"9972c2a6c1f1577353fccb05243c8c77a4f55abc","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.236-renovate-balena-jellyfish-types-1-x-c2679790b9a6d20cc0c83a83d5523aa4306d1ed5.tgz","fileCount":18,"integrity":"sha512-JnnTvqqtEPOkFBF2pcudHvPRtDmKpPRFg5x9NbYeD2GitEZRPy3QRnlq8WmEhv4sMnr2hrt6cHX3LCPNaFApBg==","signatures":[{"sig":"MEQCIBWR3ew5OeemM1IK+6CM7CRbv7CyY9AzVai55eBfpRxXAiAtsBZ4l6C1mJjwrX4MUZKjt3+90xy3+zBmQDOcq6E+Ww==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":62951,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJhNy8fCRA9TVsSAnZWagAAMrcP/1pt2pp5UiZNwFIXsQCL\nrwWmIMfCAxL9wk9m4BK1WD3CXawTDmoYv0+BRzQb/YbP529oRoLzz9OZnyIQ\nhC6cYqPeTQIhrbySK0P2BvB+j6NP4CRZlq0wJtWF0NkumPHQDbTe2eYUD84t\n0VbMK7y+lRWvzcd/uB9cYsKYBE4kWOt/OAoGQc1wFVPh3rCZMpL4igyumTRa\nGFNQI/QSGRQQdkoj6qSwsuXK/fRGMiXjI8k/Ex97LUl7LDhGZ/lx8CiZ5rAD\neda0QRsmNnh6Orht+G7cgNGDs+AwGUcGUK6whI7/lzAK98/PdlDc4bAMM/JE\nPpi88lioP8iYQZbkpTJZ1mYHkuBlzz+bv9wFlipPtcufAhyuXmUySgfklKYV\nffdS8izV14UdJLhI2kOQe73uiaYsBTWq/eVxPWdR8HXLVwxm1goBxWO0n8b/\nf0V6XpEm+NofgrybgO5r6mklXXbpsWrs3HBA0m59f0Gn1yq85Xmwz3I0f6KF\nQeAtr9FGzrpZFTKznssjIuz6qzpWTNqSjC227TDxpYIBYk0X3kWTyfbeOeFS\ngUYdg9q4fMLX7CauE9/OS6LH4SocHy/RqlJupm5QGkmtanRDxQpEGj8F0NVS\n+nxyJc7oFSxQEUNXA3jcpKeNqrQfae3EEbzoTJ9vrHktFrkWCeMa9rdSXuH8\n3km0\r\n=LrJv\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\n[![Publish Documentation](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml/badge.svg)](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml)\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=14.2.0"},"gitHead":"c2679790b9a6d20cc0c83a83d5523aa4306d1ed5","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"npm run lint && npm run test:unit","build":"npm run clean && tsc -p tsconfig.build.json","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint:fix":"balena-lint --fix lib test","test:unit":"jest"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"versionist":{"publishedAt":"2021-09-07T09:18:31.851Z"},"_npmVersion":"6.14.14","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --fix"]},"_nodeVersion":"14.17.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.3.0","@balena/jellyfish-logger":"^3.0.66"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^27.1.0","sinon":"^11.1.2","deplint":"^1.1.3","ts-jest":"^27.0.5","typedoc":"^0.21.9","depcheck":"^1.4.2","typescript":"^4.4.2","@types/jest":"^27.0.1","lint-staged":"^11.1.2","@balena/lint":"^6.1.1","@types/sinon":"^10.0.2","@types/semver":"^7.3.8","simple-git-hooks":"^2.6.1","@balena/jellycheck":"^0.1.3","@types/json-schema":"~6.0.1","@balena/jellyfish-types":"^1.1.2","@balena/jellyfish-config":"^1.4.8"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.236-renovate-balena-jellyfish-types-1-x-c2679790b9a6d20cc0c83a83d5523aa4306d1ed5_1631006495436_0.33124645068353975","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.236":{"name":"@balena/jellyfish-plugin-base","version":"2.1.236","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.1.236","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"5b0047bf2cbd6778c1d2f840d6d849bff197952b","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.236.tgz","fileCount":18,"integrity":"sha512-AEyLcAYqVvpyE2+NsgT36U+/f+4vnRX24RM63CjoRjdvaQqLQ4QE2Saz5yXOAGGVEKuuQ4bVO/jmPkCv+PkyCg==","signatures":[{"sig":"MEYCIQCBSO5zljUYxJh1gNZpJGZhpZcpnXOg6/N2AGn7tD6DPgIhAL4cNzoxq6VALheO5DYJNVakouEfWebZqSuLI+dtjmkG","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":62874,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJhOpDsCRA9TVsSAnZWagAAe6EQAJBL/0734iKXXQhanGMQ\nxFzmNfxekJliSIqFDTdVyoSbAx44w6HIty8HyQoxGdEEtD0bM3mh3k+9qGjC\njPUk8wgsOENwRXfBk1WM4zyrK0W+xr8az4ImXnpof9nA/esbP8bh3rqORZwo\nuiIBPnqOfYF+Fu8W4PVa61ibrvKKuoSoW12vBNKFOD3ARPXqSCfemX50O5kh\n+il3DzftKi+iaXgaq5qJ+gPQ+XfnbFQICa1af3AWghhql680G++uiJmuXHB5\nB1ZqWg1RldoyFMbKL9w6/1qCV6ULpdMvvdcAlLRASZGFpbHJUFuVNNGSMgKO\nkD225SBLsjQV4f610/HGWtV5rd9WcOviSTC7nvKG4zx+ZCxhafYxLsj6SZPi\nxyv05yNlnUxMvSz5Pr6FSq3hoIeVNSIXp7KtG84xPNkAuBnVLmPK1KZf1HAg\nOszUFLNRVw8dOkOlk3YE8q8PaxLIn0gGxGXyUs2J9ZAvwR/EO9tpxa3n2gPj\noZMfqrRZuwkXcNcOmzBtiIfw+K69CNLqtfSDoMBglJs62XPBysWIa0TfCKyA\nZIzPT8KEkrvu6O80B1Blaq3ngcukHznkYadUXub3hBZFGoXVvH7fGqSgcxNg\nr/owf+bV+8XLjDx9B/MybqXqcCswEYnaF5Wubz3Hp17ArSqzMkboiPWDRkHk\n1lKG\r\n=rI2O\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=14.2.0"},"gitHead":"ce004e6b25e34a70352537de36f0f70ded857972","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"npm run lint && npm run test:unit","build":"npm run clean && tsc -p tsconfig.build.json","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint:fix":"balena-lint --fix lib test","test:unit":"jest"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"versionist":{"publishedAt":"2021-09-09T22:54:00.715Z"},"_npmVersion":"6.14.14","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --fix"]},"_nodeVersion":"14.17.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.3.0","@balena/jellyfish-logger":"^3.0.66"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^27.1.0","sinon":"^11.1.2","deplint":"^1.1.3","ts-jest":"^27.0.5","typedoc":"^0.21.9","depcheck":"^1.4.2","typescript":"^4.4.2","@types/jest":"^27.0.1","lint-staged":"^11.1.2","@balena/lint":"^6.1.1","@types/sinon":"^10.0.2","@types/semver":"^7.3.8","simple-git-hooks":"^2.6.1","@balena/jellycheck":"^0.1.3","@types/json-schema":"~6.0.1","@balena/jellyfish-types":"^1.1.2","@balena/jellyfish-config":"^1.4.8"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.236_1631228140067_0.8220992569612817","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.237-renovate-internal-patch-fad54e2786841690ddbac91bac064f17324a6e5c":{"name":"@balena/jellyfish-plugin-base","version":"2.1.237-renovate-internal-patch-fad54e2786841690ddbac91bac064f17324a6e5c","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.1.237-renovate-internal-patch-fad54e2786841690ddbac91bac064f17324a6e5c","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"59bac8c181591a2b1726d319ef287707fa1e26d9","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.237-renovate-internal-patch-fad54e2786841690ddbac91bac064f17324a6e5c.tgz","fileCount":18,"integrity":"sha512-IqaItibIGE8/X7RucqSuGr/8E+NCElD3CvYcl/vvoXbX1ULaApHY05I/asWnpZID3SkHTxE7SQWJeYzWld50fw==","signatures":[{"sig":"MEQCIAt8FbKswf44adKYayutuAyUOgmItq9C1drJ204LO4StAiAos06s3LxRG30jcxEP40NPDvCXlQS8huWS7KGhehDCDg==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":63043,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJhOqdOCRA9TVsSAnZWagAAUbAQAJ7DJRm4XiH0h0KDCKyZ\nl/4Evc0ldKd9Y90gpy5LTbJcBkDBa6yCdLSQt7k5HKVE+sAfj9OE/lEB31xU\nUKrUgIconS+NZDpJukdHVVCLNItEfodI0qaGvoLDlns2AaEXAzmwl4vetdTU\n/YAk4rvu2FaiJ1bgmsbfk4P0fbs1tXG9TZqvAqxf+0Z0uYzraEnYVirmFzEA\n+vp+l9q3VGftDpwZzR7uThYPs4HOD8zngSumY3ND2x3nfxR0eXy+yTfb9Fml\nqeac4m8ISAFGT8C9+s9ZhriQuLoEycQLW9Jy2oMd3tIs+0yjbXIRh6bIU4Wh\nXG2j/CnEQpGDXsyuLAcawJawg1KVzVUOWq6sMsZPsX3s5B9N7lJ2lJ+Q32fo\nDRySyLzIgJmBre4LJod7wiNbBk8EtUd74SJ5Cv3X9kfe7y60IMZDrhwnTXpw\nEmnYZst3NNm9NJxr/I9UAW47JDBqIXd4QfZkppQ20eU28mVCryEhMrEjewGi\ns6UhwLdEuSKW1VGBxZ7RBt+aUO6E0GvFiL2vm2MzytDfn0z7Ap5Q9wEs9gIy\nZX08D1Ds0nfty+7zGoe8J4sbGH57zC/BljkoLDRIwDm6WAfgRS3bODXZVgw+\nQ/MPEfC8TWVxV8IvGLXbr0zWluIXu1e6eARjnPJtadlzBwdgQL7Sky6e6by2\nyIi1\r\n=wbaL\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\n[![Publish Documentation](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml/badge.svg)](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml)\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=14.2.0"},"gitHead":"fad54e2786841690ddbac91bac064f17324a6e5c","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"npm run lint && npm run test:unit","build":"npm run clean && tsc -p tsconfig.build.json","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint:fix":"balena-lint --fix lib test","test:unit":"jest"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"versionist":{"publishedAt":"2021-09-10T00:28:07.479Z"},"_npmVersion":"6.14.14","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --fix"]},"_nodeVersion":"14.17.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.3.0","@balena/jellyfish-logger":"^3.0.67"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^27.1.0","sinon":"^11.1.2","deplint":"^1.1.3","ts-jest":"^27.0.5","typedoc":"^0.21.9","depcheck":"^1.4.2","typescript":"^4.4.2","@types/jest":"^27.0.1","lint-staged":"^11.1.2","@balena/lint":"^6.1.1","@types/sinon":"^10.0.2","@types/semver":"^7.3.8","simple-git-hooks":"^2.6.1","@balena/jellycheck":"^0.1.3","@types/json-schema":"~6.0.1","@balena/jellyfish-types":"^1.1.2","@balena/jellyfish-config":"^1.4.8"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.237-renovate-internal-patch-fad54e2786841690ddbac91bac064f17324a6e5c_1631233870666_0.52053856943387","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.237":{"name":"@balena/jellyfish-plugin-base","version":"2.1.237","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.1.237","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"b3b8c9e77a82e7cbd10854234deb9caaefe01b84","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.237.tgz","fileCount":18,"integrity":"sha512-aVdeupKxA8OmyZ9b+VrEsw1eWJAjbQb/YWfWPxXkrj7yVnH+9JIVRyRt6lRtCuzZ0gzJC+AtWR7yBTr1hJLVzQ==","signatures":[{"sig":"MEUCIQCMUVNoEd/+9chHdQRkvgTnUxT7Gz6IIUVCq1cVCwbqEgIgM3/R+jxWi/gGgU/5+sut2dUsFQS3knRNHAUDwEAWJ+A=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":62978,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJhOqgeCRA9TVsSAnZWagAAkU8QAIeZElzpu7Sv4Jz4oTR4\njgv/EsvQm1PrKi+ARq03H43u4SKDwiqhYEtTiVRSgjqQuMP2Sb4MLskQ4b4I\n95MxZCFkk6Z8yUjy2C4xm+YQ9Ihpj+eFZH4ZLQFYAodAc/CNIypXTSnyveVA\nZwbW/qX8jMD89gbfXrWLeyCTLL8nmkSTY3CFAASq+9Ckxz2rvPcp8BJINR2Z\nJVu8ITQFbo3cyjMjgV+FWk8TtrkYYMFv6LeLwErdSAClML45U06UYmoyKnF8\noyE0fmy5bKQnG9QHHqoKME8yQaI1OcP12ps2KkCIV4GrkGJhJlCXZi8WVi0C\ns5iQXOB06Wxg54t+WmR1N2PrmldjFpykTWEZZTbNiOj61hTpTCiJz/cDet0C\nVWeKuEGQ3Y5kXTa6qWdjgR359dbQ2a1laQWJK/Q6wmtyBcLFbYEy9yw0pBMK\nwd/PVFQk7hyZPDitKZQvcTDN82sl5KQLOw5ojz8QbjKnH7nZri4pmgXvk9oW\ncX7KDv3sDd/Zkllos/1Y3GZSS59JTG3HheBNh0L29Abgubsg2ri+MKRYiz5A\nkuPOKG8xiNTeT0rbXERTOQsxioubypIgyrKJtnJqt+00efQe+32oKBX3+cnm\nqq3S2SaoOAJ4wXvBdRLNpnxceEVIuSf14T81DcGjr+7LsdNo4i0sQpGW9VZp\no4cn\r\n=ZN8Q\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=14.2.0"},"gitHead":"41601b8a530d6da769e08572a25e4eb925f93cbe","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"npm run lint && npm run test:unit","build":"npm run clean && tsc -p tsconfig.build.json","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint:fix":"balena-lint --fix lib test","test:unit":"jest"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"versionist":{"publishedAt":"2021-09-10T00:33:01.226Z"},"_npmVersion":"6.14.14","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --fix"]},"_nodeVersion":"14.17.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.3.0","@balena/jellyfish-logger":"^3.0.67"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^27.1.0","sinon":"^11.1.2","deplint":"^1.1.3","ts-jest":"^27.0.5","typedoc":"^0.21.9","depcheck":"^1.4.2","typescript":"^4.4.2","@types/jest":"^27.0.1","lint-staged":"^11.1.2","@balena/lint":"^6.1.1","@types/sinon":"^10.0.2","@types/semver":"^7.3.8","simple-git-hooks":"^2.6.1","@balena/jellycheck":"^0.1.3","@types/json-schema":"~6.0.1","@balena/jellyfish-types":"^1.1.2","@balena/jellyfish-config":"^1.4.8"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.237_1631234078310_0.44687326299032093","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.238-renovate-external-non-major-5f315a3bb88aa6358a18e364770c2d3721e34b79":{"name":"@balena/jellyfish-plugin-base","version":"2.1.238-renovate-external-non-major-5f315a3bb88aa6358a18e364770c2d3721e34b79","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.1.238-renovate-external-non-major-5f315a3bb88aa6358a18e364770c2d3721e34b79","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"6a8f218ee9407c33aff5435c9ef002fe3ac7b727","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.238-renovate-external-non-major-5f315a3bb88aa6358a18e364770c2d3721e34b79.tgz","fileCount":18,"integrity":"sha512-dsclHfjSpgOIdNWIytxqNrtQwT9jt7JAjyTjN5cXHljBSgVXZSHs2GKpwcHxbw3aciPejZ+s8c4SLVaHIUxeRA==","signatures":[{"sig":"MEUCIQCStf4HPsCBxDY3PC6RKq5xY/tEDv3OfhilsCfILap0lQIgOHsOGqe6z/gJzBBD/PFzC/bNqxLR87dEJdG4RzBQRUM=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":63123,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJhO/mdCRA9TVsSAnZWagAATDwP/1Nqqhx7cSGeVu0BuL0V\nk8u8zJs3KhxVUalBlrElI967t7fsWsUIF67URqjEv1yjt6ghVS/3Wg0ZQCVa\nedQlzmO40IgdIHdwMWN1JGfbM3d6hBXz+yCKgsGJhcU10mmfYyA+eFa6SG/u\nJYYc+QX0mUR5B5CT99h7+YoDRkCpLLXCqMKl71GZh9myJgKycdp6kHFUH2eo\niuqPrsOxP3WhG8Na9LA0tsNvkV57/epAhguOzVaQbGFtmVBU81uX6KCkKor0\njZo9rsPGB4mCW7c2cKtONy1poC85UHfWCZYHyFO0MlYZ0r8tAl4zYVCIKNMv\nIJC+4K6JGLa9q8oEg6i15q/46NTJU01KnnrdShDpuRfSFTAphllUn2nyp9an\nniWXgsRCEFo+yLuveECSP80tavoj9GdYMg3KOWVG0empakpUmhWwFPkGmbKu\nEGBbaboh6EuYe+1d1yTSK6lwms4hKX4ARqBqcpCuCfMyZ1NlJyJ7YZAsc+CO\nxtrLtZpBuMurZnCKuGd8A3UYmw0BDpPg7a9+KWgdm2h+gSJ7G1IQ5TkG8Z6v\npFnoon8vJcDKBfg3wDnTRc05EIkbSVo2qtXGG9TS3zeO5K1qoY/S9kpM2pTd\n/AG1VmkuD/plxKJs+xt2QEYTGRh51aaRRG9Q3ZJTbiyKihAB8OxBW4Kx/48M\n9gxe\r\n=rBR4\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\n[![Publish Documentation](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml/badge.svg)](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml)\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=14.2.0"},"gitHead":"5f315a3bb88aa6358a18e364770c2d3721e34b79","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"npm run lint && npm run test:unit","build":"npm run clean && tsc -p tsconfig.build.json","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint:fix":"balena-lint --fix lib test","test:unit":"jest"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"versionist":{"publishedAt":"2021-09-11T00:31:07.983Z"},"_npmVersion":"6.14.14","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --fix"]},"_nodeVersion":"14.17.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.3.0","@balena/jellyfish-logger":"^3.0.67"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^27.1.1","sinon":"^11.1.2","deplint":"^1.1.3","ts-jest":"^27.0.5","typedoc":"^0.22.1","depcheck":"^1.4.2","typescript":"^4.4.3","@types/jest":"^27.0.1","lint-staged":"^11.1.2","@balena/lint":"^6.1.1","@types/sinon":"^10.0.2","@types/semver":"^7.3.8","simple-git-hooks":"^2.6.1","@balena/jellycheck":"^0.1.3","@types/json-schema":"~6.0.1","@balena/jellyfish-types":"^1.1.2","@balena/jellyfish-config":"^1.4.8"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.238-renovate-external-non-major-5f315a3bb88aa6358a18e364770c2d3721e34b79_1631320477116_0.4793501207733777","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.238-renovate-external-non-major-bf97b9bc5cddb45de03304a401d0804a5c39583c":{"name":"@balena/jellyfish-plugin-base","version":"2.1.238-renovate-external-non-major-bf97b9bc5cddb45de03304a401d0804a5c39583c","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.1.238-renovate-external-non-major-bf97b9bc5cddb45de03304a401d0804a5c39583c","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"be6920541f6fde5cd561f6e217f695a2a8be145f","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.238-renovate-external-non-major-bf97b9bc5cddb45de03304a401d0804a5c39583c.tgz","fileCount":18,"integrity":"sha512-0k9/Lp+WAJCVb4jtFSmcu8HDCtyyFJVW5Rfo39luPVGxTzCVLdCQFAoG6lzasgyvV5gAkDT8SdzQ1QAEDiU9Jg==","signatures":[{"sig":"MEUCIQDELzmlezvWg3gF8klk3VC39a3pUJzvScFBaCDxizr4dgIgePJFFQHkdFEVZY9Q9Pl3MIi6KMDxp0g7ZMei8lv3/mA=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":63123,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJhPBqFCRA9TVsSAnZWagAALDAP/RDzlxq9jwu4ZsW5H82C\nodMcxCGNSFYFi5b2Cw1oebhgDqw+H/aCc80uk9BvHuMo5vWPZXoSujX+2CXl\n0O+MHOAVCa4q4Zf6J9nQu8ZqooqjVKejBBxh8pvcSXIPxwipSyTP4rSF6vi0\nkDE4kM7D8MBJSRYCyPXtdmKX+q1jLsI86JNnas+zHbFFUO/vVxFRKs9W4D3b\ndp2mDnrWIu5Lg5qbfM/To2sTWZdlH5q1s3lHp/CuY0kUEYcKZ62/xU3BJ1q7\nRmhrH1mO8bcJBUOQ4DM9Vsr3fwBsKjSlC6AGqNsmfL3bD/zEGmAja2Reqgg+\nagL53yckP2t/CpWAh6yZYUVj0Rq8wXE6Z7REk7WQKXAAlw0HE56xmaQWvB4+\nr6/257vrUpCLCpd+giOBuFLtUbZ/ZPU+R9HMvc7nnL+NV/QNWLLgy1k2gXTz\nXvduPRvQLRMQlGN/QpSL+xUvTyJdZ/MfWEhzswLSIGIl+8uBwAma4vez5/Mo\n9rCNFgoox1yGW1b7WNBsI/M95qACJTMREQiAESSHHr8Jlrg7s8TthcW46s6y\nNdz+YUNPq4yI56MptzE2UzYGelxfdeA3MiHonsl92ldZNf8RHSLlecdBuQwk\n9syIGhDFyykaNM/Xyx0GyHzM0Ar39VltrbYDOeZpQIakbihpb623IB6otE/w\nTDKz\r\n=WeJc\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\n[![Publish Documentation](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml/badge.svg)](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml)\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=14.2.0"},"gitHead":"bf97b9bc5cddb45de03304a401d0804a5c39583c","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"npm run lint && npm run test:unit","build":"npm run clean && tsc -p tsconfig.build.json","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint:fix":"balena-lint --fix lib test","test:unit":"jest"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"versionist":{"publishedAt":"2021-09-11T02:52:00.145Z"},"_npmVersion":"6.14.14","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --fix"]},"_nodeVersion":"14.17.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.3.0","@balena/jellyfish-logger":"^3.0.67"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^27.1.1","sinon":"^11.1.2","deplint":"^1.1.3","ts-jest":"^27.0.5","typedoc":"^0.22.2","depcheck":"^1.4.2","typescript":"^4.4.3","@types/jest":"^27.0.1","lint-staged":"^11.1.2","@balena/lint":"^6.1.1","@types/sinon":"^10.0.2","@types/semver":"^7.3.8","simple-git-hooks":"^2.6.1","@balena/jellycheck":"^0.1.3","@types/json-schema":"~6.0.1","@balena/jellyfish-types":"^1.1.2","@balena/jellyfish-config":"^1.4.8"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.238-renovate-external-non-major-bf97b9bc5cddb45de03304a401d0804a5c39583c_1631328901547_0.7879854361569218","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.238-renovate-internal-patch-39bd332a6b03e098c4968194f3412c4d6fda3db3":{"name":"@balena/jellyfish-plugin-base","version":"2.1.238-renovate-internal-patch-39bd332a6b03e098c4968194f3412c4d6fda3db3","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.1.238-renovate-internal-patch-39bd332a6b03e098c4968194f3412c4d6fda3db3","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"90ffaeb5fd0b9f04d44009284c5d3b0b9d23e94f","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.238-renovate-internal-patch-39bd332a6b03e098c4968194f3412c4d6fda3db3.tgz","fileCount":18,"integrity":"sha512-rH2DgV8gmxt1jj7s3AObKh976tdcWcBObC+X6JqlF9WTsPaO035Nuzbtm+it5UAnZJ3mhldN4ZHIU4tZF1JEPQ==","signatures":[{"sig":"MEUCIQDGbZ/jolkYZzRwlvxy+fsVd+FzVmp1pGFyqyGkAfD9QwIgVlhctVvqbwnNn/ZQJ1hgHh2QK1mi0r7T1j3Ayw80iYI=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":63147,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJhPEA+CRA9TVsSAnZWagAAYUEP/iClNlLg4LgrkD52YzEH\nYj9ebnPROpHP2vl8vTnLOlt8ZrBO8UvPPOyFLchLGQ4WKoULzyxYQuSj2tvd\nypUgUvml+iEC3ZhLmCn5iZnOLiQ/ijRcCb6V8qpGr8mWbCsCdFJ/G0esJltg\nYKw7bi+P5GAjUpSfRgmharCFrSqAk3DvNFPNW0WHf1Gy3lOpRZ2h9XaWLFYn\nPSyYkoWe3z7mArCOpqmNI2yOzA0A45tM/CRO2Lh3Hhp6HX/0J+QcV7JIZtyM\nokcWqFSDXzLqxGi64lflajRQTK4bsNh5X+ZZRFNsx36yZjQzbrTELlP08FY/\nN7Rz5KJLnekIcE16nTEiACMgdAcZweMWNp1tGBTSPOCdtZ0IlG72QU4AHZgD\n9NWaZuuZ33EOefEFUP+EcO0Rp79tTJSaRmdILg7X+QSQAiu7R0Y9dzEa7fin\nODy1IWvA12gnr6shrpHU0Y8Gg63/RGuvHwyF4BM216vcDT5ZxMggW2ZTUNyH\nUzaySNcKohdpzhZQMm1L0pu0vNyCfPPARKhJ7lZpGe2okBlyYGvP910ARf/Z\nGH33Z87XrqUF+UtNMHdj/Rydultc6o3HSmso7A9NsbSXWDaRyoic6Wy/Vh2u\nWbxiaa71ufiPlWea/5VysBwYb36QFkPJAKEVS8+tweQcBObttIzEHVw7gqUp\nW0eH\r\n=+z37\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\n[![Publish Documentation](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml/badge.svg)](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml)\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=14.2.0"},"gitHead":"39bd332a6b03e098c4968194f3412c4d6fda3db3","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"npm run lint && npm run test:unit","build":"npm run clean && tsc -p tsconfig.build.json","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint:fix":"balena-lint --fix lib test","test:unit":"jest"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"versionist":{"publishedAt":"2021-09-11T05:33:20.541Z"},"_npmVersion":"6.14.14","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --fix"]},"_nodeVersion":"14.17.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.3.0","@balena/jellyfish-logger":"^3.0.68"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^27.1.0","sinon":"^11.1.2","deplint":"^1.1.3","ts-jest":"^27.0.5","typedoc":"^0.21.9","depcheck":"^1.4.2","typescript":"^4.4.2","@types/jest":"^27.0.1","lint-staged":"^11.1.2","@balena/lint":"^6.1.1","@types/sinon":"^10.0.2","@types/semver":"^7.3.8","simple-git-hooks":"^2.6.1","@balena/jellycheck":"^0.1.3","@types/json-schema":"~6.0.1","@balena/jellyfish-types":"^1.1.2","@balena/jellyfish-config":"^1.4.8"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.238-renovate-internal-patch-39bd332a6b03e098c4968194f3412c4d6fda3db3_1631338558531_0.4846935201903013","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.238":{"name":"@balena/jellyfish-plugin-base","version":"2.1.238","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.1.238","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"5136fff029a33701167da44f270d2f6751c27c1c","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.238.tgz","fileCount":18,"integrity":"sha512-HCd1o9bAOAvp/E4jbidRkohyaoWWoVFt8f7UVoDVzQbpDnZOKJt+2ZjwcAyF2AjGpMkC7SjT3ytY0hlIWp8cQQ==","signatures":[{"sig":"MEQCIGYFDYU+NfFGTpawFqdfE6JQdzoe2VMpmnbar68wfEAqAiBSX3zWLU+aPufMyHS+/P6ODPsEYead/+NlXPtOyDEHng==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":63082,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJhPED9CRA9TVsSAnZWagAAABcP/jSQLTssMPzZtiZrPTo+\nr0cbW0JIa9u3Zv65jpg0a73fbqEMDEUPbtu9e/Shq0JW2HXucwDPfcpPDAtL\nu7c850e93ut7ZQrpIwKMZhBYi8MoaiHFEQlQVG08bZLD7KIjg3xBI6/NpiAj\niac3phaKWnk9FmVdD1a3aasDj+c+Yosl9Ee1ME7ZK/W9V56YcxJHhKbiyboC\n00EVv5dXVyphCrFPyHdSWpkAowFKHcOQkq60ZtQ1W6YyyPRi5Ig7jMc/q6yK\n2JHSJhtkx3r9XNiSchXM9vr/4VUcExbvr5ORJChzMMQkBPvDhvqFk5nSK4sd\njEvRqly3vdtUp+r6fgSsgkfVOAe/vbI0KKA2l1WmWEUQJ9fx9igxey0Yx/Vw\nkZtAyGT1ZFFyd26Egh5I2sNzdBMJDiEyLTNjoQsRJz35Bfp27xLvwpi04g2N\nGWCEnevF9Jwu6DSD6Y/o/Bj0G+TOLX+Lr9aO7cB9zobUNnf352H7tIKNIBq+\nBLUpEHTaDpLV5GhYIi+cQQ5oRaHyfcZReZp8D7WOKOy1yQGF7MyiNErIvAb1\nKneYa42EQpPlGND/7RKac6ENYS/llSuu2GzzB5AYy64Ep2yA0yHY6Tid7WO3\nXlIcLCxtZpGboVdJKqVWgRNmnDhlPZ6t641yU19O6AslulNDmX6G+rHUwbI1\nmV96\r\n=vhTI\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=14.2.0"},"gitHead":"29a8895ad4a0cf20467cc00373b623593366fa42","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"npm run lint && npm run test:unit","build":"npm run clean && tsc -p tsconfig.build.json","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint:fix":"balena-lint --fix lib test","test:unit":"jest"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"versionist":{"publishedAt":"2021-09-11T05:37:05.640Z"},"_npmVersion":"6.14.14","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --fix"]},"_nodeVersion":"14.17.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.3.0","@balena/jellyfish-logger":"^3.0.68"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^27.1.0","sinon":"^11.1.2","deplint":"^1.1.3","ts-jest":"^27.0.5","typedoc":"^0.21.9","depcheck":"^1.4.2","typescript":"^4.4.2","@types/jest":"^27.0.1","lint-staged":"^11.1.2","@balena/lint":"^6.1.1","@types/sinon":"^10.0.2","@types/semver":"^7.3.8","simple-git-hooks":"^2.6.1","@balena/jellycheck":"^0.1.3","@types/json-schema":"~6.0.1","@balena/jellyfish-types":"^1.1.2","@balena/jellyfish-config":"^1.4.8"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.238_1631338749355_0.7456378759122286","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.239-renovate-external-non-major-0a1f6abb708a38c95c1f2771585c1a6a1c92bd09":{"name":"@balena/jellyfish-plugin-base","version":"2.1.239-renovate-external-non-major-0a1f6abb708a38c95c1f2771585c1a6a1c92bd09","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.1.239-renovate-external-non-major-0a1f6abb708a38c95c1f2771585c1a6a1c92bd09","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"0aae58f78c137470a7065c927d87c3482b5e2dc9","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.239-renovate-external-non-major-0a1f6abb708a38c95c1f2771585c1a6a1c92bd09.tgz","fileCount":18,"integrity":"sha512-nt42+J3N9dh17HbhAPYppOEo8KU1jwkJZ5J3S2MURSv6vmEwaM3KpPwoFuIsRSWD8/Dku7AcKgqj0Xzbed//UA==","signatures":[{"sig":"MEUCIQDVjjEeQbbDQ6R18odhLNBcDOYD+GM3npdE2Nu4DvNn/gIgODrQEvRdYxFRvC5J36x7mag+xRPGq8QrOtOH60KI0sg=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":63227,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJhPEHUCRA9TVsSAnZWagAA9TgP/jUpZLcuwf3XP8xSgq36\ngpQOp50f9T34A/Sv0MpHx050Iw6Kw/F0Me8uUBkD9NqXV2p6QdY1vHgHui3H\n//8Fh4Uhj9MvryaNREjiBhtXLpkbggA7qwGA0B/Y/4cUKGr6t5uTLTYFIfyZ\noC5Z99rbgJF73+u/dnEpyHUUwO7Krzr8VJobiGR6hphyGDa08jcokq/AiZgr\nCIr4c9bazcoWby57qQ7AivHkVN6w/altb+FPFGYemFvyLgFv6sDD3L6+CZUc\njCATk7OxhPnH0f9+5yZruMY0WHINNwqEXPqCkUEQm5P4KAG9TiHthDL3RYST\nRYcI/bBphoBW9mOKQ0pn2JSnm5A811dgVM7MwfAXVIsF8MOefw8EvrEyFkG/\nSjYIq+CIO5r9hATsUz1I1j1+x5WSvd3k2Fet662D4mQcAhnGxD7ZTiAp9YvD\nz/4USgyE0z5EA89xYeG6Jlmwfa1CEShvc4dWJ+06XU+k0pF+kN8qrjltNviH\nZJrQb7myJgi1wr4kFckOo5cvprtHSxqyskziW8TpfV9nLZLmB5e6QpQC1G+M\nWN56h+7WKl1hH1SgLbOHLgsj0Hcw+YCWPPtIIKxeEzionaL+SyamyBi63ONR\n5iYArDAz1WUTqW+QH7VUHdrEbinX/+Hc8k9NchZnqyvqFEPd95u9Xw/Swgd0\nA3hy\r\n=aGQj\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\n[![Publish Documentation](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml/badge.svg)](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml)\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=14.2.0"},"gitHead":"0a1f6abb708a38c95c1f2771585c1a6a1c92bd09","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"npm run lint && npm run test:unit","build":"npm run clean && tsc -p tsconfig.build.json","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint:fix":"balena-lint --fix lib test","test:unit":"jest"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"versionist":{"publishedAt":"2021-09-11T05:40:11.114Z"},"_npmVersion":"6.14.14","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --fix"]},"_nodeVersion":"14.17.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.3.0","@balena/jellyfish-logger":"^3.0.68"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^27.1.1","sinon":"^11.1.2","deplint":"^1.1.3","ts-jest":"^27.0.5","typedoc":"^0.22.2","depcheck":"^1.4.2","typescript":"^4.4.3","@types/jest":"^27.0.1","lint-staged":"^11.1.2","@balena/lint":"^6.1.1","@types/sinon":"^10.0.2","@types/semver":"^7.3.8","simple-git-hooks":"^2.6.1","@balena/jellycheck":"^0.1.3","@types/json-schema":"~6.0.1","@balena/jellyfish-types":"^1.1.2","@balena/jellyfish-config":"^1.4.8"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.239-renovate-external-non-major-0a1f6abb708a38c95c1f2771585c1a6a1c92bd09_1631338963887_0.4397299163329469","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.239-renovate-internal-patch-a29f69100bb95dc0a7ed980b39b987e532a43f6a":{"name":"@balena/jellyfish-plugin-base","version":"2.1.239-renovate-internal-patch-a29f69100bb95dc0a7ed980b39b987e532a43f6a","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.1.239-renovate-internal-patch-a29f69100bb95dc0a7ed980b39b987e532a43f6a","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"e328aedbb46721e870e103195695fc9990c8fad5","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.239-renovate-internal-patch-a29f69100bb95dc0a7ed980b39b987e532a43f6a.tgz","fileCount":18,"integrity":"sha512-jQE/XhCQP+nX4E+/itKEz2Rcme0IccqKB2fnYkXektBgjrfWsfKjRUbI2LFxFCCVI8gk8SmpRHKf8DfBluG8fA==","signatures":[{"sig":"MEUCIQDKkCr/1hFvGU7zKkD/6Wa6ceTPO+8AiiDdH8yfvhJHRAIgBT3BLY/CaynOrR12lwOZMdrAGngXNtjykQpJaB8fPdY=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":63251,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJhPY24CRA9TVsSAnZWagAAvScP/31dJzxu2AmAP3CJdyA8\nuAnZIpAPxg3df5dkC+kcS9+vDyTYoLEg1TiYgPuqsmmpwoQsvk9Jeaa+Npeo\nmBF1bZgFgMn/L4o+GpOkT3Yk7b8/GNU1rmexlUEMz9yViA4d/lOKX7qNAt21\nsXDVL5TOsJeZLXAo3j96ZPDKdKwai4xLaMw2NQRCBNa8Kga1prSxm8lKgeqW\nGhrZ+dY8ld2IZ0g58HcY4H7+OXlctVfKjQZ8umaScQjHuR3QoeUj4VMCxZl/\n0Z5e9bvXebWSRWBFvFiB1P+jhF9UFeXUx6+Pbjsce1TJEmQ9T2uLG90HtOHB\nC2AQx0eOFpUAwkXw4++jBhNSzsf22pml5bZRICcvfxyLKG9AbOJPgBQR3M9i\nIQyLM3oyMmSQ9zcZDlum5a4yp4aVEjD8Oj3rMOPJvLTbLeFF7r77MqVmMf2M\n/2eL+UD9s4LO6L5fbYBG86otV+sY0llEYK/bgLhpi4cgrUPuVwhBQDsUJt0B\n0YUa9Awe40s9VQ3InDExu3hy7bvdZOuWgFGV7bnR4ztXLSEm7IriP0uHfPq3\nyWkhPzF791ImiMT6lEVwDE5pmjjVt2vqI43On8RaGnNpelWPfFhQemg/xKRr\nKhSKeOopDT3VN53Km/gdrYZnwL6cDn9ugio1uAcfX3huFwjJa0Ve/N7gy5VH\nkeDr\r\n=2jFH\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\n[![Publish Documentation](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml/badge.svg)](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml)\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=14.2.0"},"gitHead":"a29f69100bb95dc0a7ed980b39b987e532a43f6a","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"npm run lint && npm run test:unit","build":"npm run clean && tsc -p tsconfig.build.json","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint:fix":"balena-lint --fix lib test","test:unit":"jest"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"versionist":{"publishedAt":"2021-09-12T05:16:21.198Z"},"_npmVersion":"6.14.14","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --fix"]},"_nodeVersion":"14.17.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.3.0","@balena/jellyfish-logger":"^3.0.69"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^27.1.0","sinon":"^11.1.2","deplint":"^1.1.3","ts-jest":"^27.0.5","typedoc":"^0.21.9","depcheck":"^1.4.2","typescript":"^4.4.2","@types/jest":"^27.0.1","lint-staged":"^11.1.2","@balena/lint":"^6.1.1","@types/sinon":"^10.0.2","@types/semver":"^7.3.8","simple-git-hooks":"^2.6.1","@balena/jellycheck":"^0.1.3","@types/json-schema":"~6.0.1","@balena/jellyfish-types":"^1.1.2","@balena/jellyfish-config":"^1.4.8"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.239-renovate-internal-patch-a29f69100bb95dc0a7ed980b39b987e532a43f6a_1631423927842_0.21688056049352245","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.239-renovate-external-non-major-4b9bd361f665bb6973c4e0ab4fbc94cb1a75abb2":{"name":"@balena/jellyfish-plugin-base","version":"2.1.239-renovate-external-non-major-4b9bd361f665bb6973c4e0ab4fbc94cb1a75abb2","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.1.239-renovate-external-non-major-4b9bd361f665bb6973c4e0ab4fbc94cb1a75abb2","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"0f6e2d4b6ad37cf5eeb47fb309df1fe96a946c7f","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.239-renovate-external-non-major-4b9bd361f665bb6973c4e0ab4fbc94cb1a75abb2.tgz","fileCount":18,"integrity":"sha512-ccWEERzfOHfsPua1VpMoXnub0EOT9Js3nU7FIw+NBDBo4vJGjMsOmvIMMmdtlopSTsKRtV2kWulfcAR8iS2hIg==","signatures":[{"sig":"MEQCIHGPBWGrNHaD8tMcu31xX5WS7P7ZCl/LqyiAbCJDMR+8AiATaqspPR7ktLiK9jDitK8bpBtO75RLsP/keIn00jmdIw==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":63227,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJhPY4CCRA9TVsSAnZWagAA96QP/ih0roVLU567RkcMqAMp\n7MVwJnpdXNFhO2AVyQ3Uc6OoNyC2LHiuieedIh4kxakNjTEG0odT6PxlpABQ\nEUlBwaCioageZRyg/3Yt9Y4fCohFwObcO/L32y/SkDsbtFUZMIS3GVgSu2Em\neRkIJY8Qhb+nDS/bT7CrhCWH5N7vMExKrL3gvggepRViKdP8nhy1+3XAhFX+\nDmsZbJBYiMt+ZUopKudzIm1l/Nf9Qb3qZQ5GTMW00G7F1WP3SFvRCFnyrYLQ\nhBv5wgGaxwR9ux0JeIv3oWrwCyL98DHXloBR3MvUgYnI8IivDBpl5qaJNCUJ\nWqOpE40eh7Wucgq40xxfS89ZYveLcu4qv+xWEJJlYY70x8CViHBSqy4kpsmE\n8RIX37JYpSQwb6hUbixyqLtCkxHkfmMqMJMlDBAwg1fmzZtDjXhSJeEWnkcM\nOSWyZxYFm0mNzlNiByG4R4kr4nP16XEH3ivtkMG4Z93/9IyzE/SVZbAqtJIr\nkCcqZ7EFnkWOZNcU0XYVaEMFQeco3eo8y8iLJOSTCfyTXO7BesI6NzPEZTJf\n3zEyP8I3dzRMCe2tJLrIwRjHRWLy6cQXwhy8s7aQqGkVxq5kjFCrDqgy5vYm\n/ugKeDmY6yQsiW/EX6uhIsUk+Pro9culgTO3c3yN2bsuNcrJuOR5AkbnsmKI\nzGIC\r\n=NYlI\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\n[![Publish Documentation](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml/badge.svg)](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml)\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=14.2.0"},"gitHead":"4b9bd361f665bb6973c4e0ab4fbc94cb1a75abb2","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"npm run lint && npm run test:unit","build":"npm run clean && tsc -p tsconfig.build.json","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint:fix":"balena-lint --fix lib test","test:unit":"jest"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"versionist":{"publishedAt":"2021-09-12T05:17:21.634Z"},"_npmVersion":"6.14.14","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --fix"]},"_nodeVersion":"14.17.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.3.0","@balena/jellyfish-logger":"^3.0.68"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^27.1.1","sinon":"^11.1.2","deplint":"^1.1.3","ts-jest":"^27.0.5","typedoc":"^0.22.3","depcheck":"^1.4.2","typescript":"^4.4.3","@types/jest":"^27.0.1","lint-staged":"^11.1.2","@balena/lint":"^6.1.1","@types/sinon":"^10.0.2","@types/semver":"^7.3.8","simple-git-hooks":"^2.6.1","@balena/jellycheck":"^0.1.3","@types/json-schema":"~6.0.1","@balena/jellyfish-types":"^1.1.2","@balena/jellyfish-config":"^1.4.8"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.239-renovate-external-non-major-4b9bd361f665bb6973c4e0ab4fbc94cb1a75abb2_1631424002463_0.17439514529692746","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.239":{"name":"@balena/jellyfish-plugin-base","version":"2.1.239","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.1.239","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"808edbc853a1becb7464a036b4163c09ce04614c","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.239.tgz","fileCount":18,"integrity":"sha512-YUmsBR6E0aPHbIMdEdpfCP0Nz3vpFrRzEmqgatxK+j1Jvsn/3Fjlo8oMHRCkYPGwEhuj9Mx8Nyk//L+UgBE2MQ==","signatures":[{"sig":"MEQCICwMtv1xuf1hrlx3+VmkYi3cL+tJUx6xNiQ1S722sV9+AiBqcQQpGWLtNk+Ro58IQ8FZMZ1W4eJYYNvYBrQfhj1twg==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":63186,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJhPY5sCRA9TVsSAnZWagAAAGEP/1F+03eH07pUesULgYRk\nRZYkmGeKkrBKeOh7T6SQdZR2lwxfbHVQFKflBiL7ITfG7rzXfDjiFO9z++sT\nnabIrbwfGrkKYc4lZm9mFalJTW/wa4XYvgvObYncvkmAWCQHxFMCejzcpI9l\n6zmnEvNXjKPD2s9baPqGFLwTsdCrnCY6qZTStd+ctr8E2dTOoISDBrOHE+oA\nhkd94FnboX+vfpKatd9r83dzRZSkrqMBvxebwbE1nykD5LY/rdzTqzdg7nLs\ndWtdxzmR8/44F1fpMBs3j5HZ+hlt6iCDFprYRmT2fIOvfTHKITkMQMzK39Wi\no2GCln6uqLwnPBXnDfXhA5wOr/SwQxbM5JHna3i6MHs0Br029jZtzOio+btO\nNzxNjTi8W/yIEojIKzPdXI0mwSJ6Lca0VFi2JmwtZPoOE6oY2YvRsUXj3/af\nVKxcMgxatTknk3FbkgjXXSGCcfvGqNIaXZZcE7NuYZ1DkWvt0IccW0bY6YgR\n/iYUpz2JanlSHG3lW6583SdUq0FrG64qH/2RBCKJS5BtySvxbCqp17FMVRZI\ndp6HhLY1YWLkBFYhEaE2GWVesEiTVIvs4IEGvZ0nJnM86Utv+6wqKtVWu+AO\npDL8HJpfE7/v1qL8ViPboWHpYI0w8eNLwdq25AAN6NnYrNl6RyOrG/g8S6FX\nIPtt\r\n=e/i3\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=14.2.0"},"gitHead":"9c60d71a70523d512d10ecec9de9fd7138479823","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"npm run lint && npm run test:unit","build":"npm run clean && tsc -p tsconfig.build.json","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint:fix":"balena-lint --fix lib test","test:unit":"jest"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"versionist":{"publishedAt":"2021-09-12T05:19:36.705Z"},"_npmVersion":"6.14.14","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --fix"]},"_nodeVersion":"14.17.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.3.0","@balena/jellyfish-logger":"^3.0.69"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^27.1.0","sinon":"^11.1.2","deplint":"^1.1.3","ts-jest":"^27.0.5","typedoc":"^0.21.9","depcheck":"^1.4.2","typescript":"^4.4.2","@types/jest":"^27.0.1","lint-staged":"^11.1.2","@balena/lint":"^6.1.1","@types/sinon":"^10.0.2","@types/semver":"^7.3.8","simple-git-hooks":"^2.6.1","@balena/jellycheck":"^0.1.3","@types/json-schema":"~6.0.1","@balena/jellyfish-types":"^1.1.2","@balena/jellyfish-config":"^1.4.8"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.239_1631424108603_0.09994908558666005","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.240-renovate-external-non-major-6210125bb7304ccdf5f9441af760d089167c0330":{"name":"@balena/jellyfish-plugin-base","version":"2.1.240-renovate-external-non-major-6210125bb7304ccdf5f9441af760d089167c0330","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.1.240-renovate-external-non-major-6210125bb7304ccdf5f9441af760d089167c0330","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"3dc426f89d83c9ae6ba80e64b3a770011b7fea4e","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.240-renovate-external-non-major-6210125bb7304ccdf5f9441af760d089167c0330.tgz","fileCount":18,"integrity":"sha512-uwnPJVt2KmTYuFNyPuvOMOpuqss9RtmbsP3zxw22KwnrXSREruLCnjrDO467g3pN8Sf1Ha9lwFm49a63nUvDYQ==","signatures":[{"sig":"MEQCIG9caeAZlHq3mOly3ame2M7uCAG0aEKkg1Tj1hbLyscsAiByXrt5DAxJwu++DLWgx5eJb1hPJ8UDJRTyTuzE6sxwaw==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":63331,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJhPx05CRA9TVsSAnZWagAAz/kP/iNv4zAf0II3ZRsho7PR\nsDgYF13qLDT2StY9oT17WnPardMmhoXYaAm9Zlhjb6E8XKzQMpGJRQjxyJUT\naHh2LRQhv84YH+jOMJigoR4kd/Uh45L6wtLyXBHLpBudBfvJE53i+2ioRsvg\nwkxIArN3ZW5bHpQ76wrhHtK5gwAGr7WlD633i6ES46Ulp2iwMji+lg0X15ox\n7uaXb0mSUi5ZxvT0k5WDZYhb6n4oLI/MGCOSVpQK1qJk2z2FgrLDO2+W7Gc0\nFvqJ5cgmoJu7NNX1amTQYd5DQ9Uq/Pg4oWs0utei/vjUGZlXnUsk6H3epMhR\nMGnMZXYlRg0Mdn4rg1i3yBamEiWpZD0T1F1XErgvuvo4x2JJfH7Pmt4jam71\nn2u4q5lN04MavMyjXnOuLtvsoWve1Lz/5B3J+C2saM/gUw2Qn9QuKYm+afBy\nT+LsRFZcFnFjtoGgeCTIL5G1Rm8YdU4ukQ+BFPYqnYzMtPyX/rC1TB472+DK\n6rUG/t83lI4chVsybQoYI8IPlRUZ2ZxMpA995nz5bA29YlQPM5ZuenX3b9yQ\nyj7/gLHXMtAYML42e6Leek4RYqWjSTLnCcL71TkfAJZ2IxDum7hTPeFofKXV\nwlBV8EP7pb+K9D2X7S7YftxeoE3OFDrmdyQqc/WMXuwMDk61flLhlqRYUq9o\nasD8\r\n=tgfq\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\n[![Publish Documentation](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml/badge.svg)](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml)\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=14.2.0"},"gitHead":"6210125bb7304ccdf5f9441af760d089167c0330","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"npm run lint && npm run test:unit","build":"npm run clean && tsc -p tsconfig.build.json","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint:fix":"balena-lint --fix lib test","test:unit":"jest"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"versionist":{"publishedAt":"2021-09-13T09:40:30.843Z"},"_npmVersion":"6.14.14","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --fix"]},"_nodeVersion":"14.17.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.3.0","@balena/jellyfish-logger":"^3.0.69"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^27.2.0","sinon":"^11.1.2","deplint":"^1.1.3","ts-jest":"^27.0.5","typedoc":"^0.22.3","depcheck":"^1.4.2","typescript":"^4.4.3","@types/jest":"^27.0.1","lint-staged":"^11.1.2","@balena/lint":"^6.1.1","@types/sinon":"^10.0.2","@types/semver":"^7.3.8","simple-git-hooks":"^2.6.1","@balena/jellycheck":"^0.1.3","@types/json-schema":"~6.0.1","@balena/jellyfish-types":"^1.1.2","@balena/jellyfish-config":"^1.4.8"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.240-renovate-external-non-major-6210125bb7304ccdf5f9441af760d089167c0330_1631526201433_0.11152552452450326","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.240-renovate-internal-patch-fffbb0f03ed5727002eba421fcc4c01a993ae5fe":{"name":"@balena/jellyfish-plugin-base","version":"2.1.240-renovate-internal-patch-fffbb0f03ed5727002eba421fcc4c01a993ae5fe","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.1.240-renovate-internal-patch-fffbb0f03ed5727002eba421fcc4c01a993ae5fe","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"c33999f88ce463a26df567d2db67b49d7552ac7c","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.240-renovate-internal-patch-fffbb0f03ed5727002eba421fcc4c01a993ae5fe.tgz","fileCount":18,"integrity":"sha512-tUZlb5sy8Tmv/WtJf4P5N4d9iTUpBa7CMc4LWupksmHU44tRuYMOyfe5VSCR/oPDKpxbJEWvWNgARqJ8fsFgUw==","signatures":[{"sig":"MEUCIAd/KuKm2kBnM+PONmBApW/lOm5MfWsi3+G3ou6HtjcuAiEA8v9Yr2qIBCE+4wiqtk6H29C839FM6gI0EBHMYrZFZck=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":63355},"main":"build/index.js","types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\n[![Publish Documentation](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml/badge.svg)](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml)\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=14.2.0"},"gitHead":"fffbb0f03ed5727002eba421fcc4c01a993ae5fe","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"npm run lint && npm run test:unit","build":"npm run clean && tsc -p tsconfig.build.json","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint:fix":"balena-lint --fix lib test","test:unit":"jest"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"versionist":{"publishedAt":"2021-09-18T03:41:04.322Z"},"_npmVersion":"6.14.14","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --fix"]},"_nodeVersion":"14.17.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.3.0","@balena/jellyfish-logger":"^3.0.70"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^27.1.0","sinon":"^11.1.2","deplint":"^1.1.3","ts-jest":"^27.0.5","typedoc":"^0.21.9","depcheck":"^1.4.2","typescript":"^4.4.2","@types/jest":"^27.0.1","lint-staged":"^11.1.2","@balena/lint":"^6.1.1","@types/sinon":"^10.0.2","@types/semver":"^7.3.8","simple-git-hooks":"^2.6.1","@balena/jellycheck":"^0.1.3","@types/json-schema":"~6.0.1","@balena/jellyfish-types":"^1.1.2","@balena/jellyfish-config":"^1.4.8"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.240-renovate-internal-patch-fffbb0f03ed5727002eba421fcc4c01a993ae5fe_1631936676507_0.5649411666511461","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.240":{"name":"@balena/jellyfish-plugin-base","version":"2.1.240","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.1.240","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"f1fbf56b5e7b013b6cb8401cff30eadae59a19c1","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.240.tgz","fileCount":18,"integrity":"sha512-JHlCVAJ6t+QcoK1pV74q8WML5UUTrnKOc6+j5oi8p3DQ2NF30QLwgT/zqlzuIQH0YxI0XdGkgwVRZTXkcau7CQ==","signatures":[{"sig":"MEYCIQCadNkfCV/omRgYPjIdH5mIgtvzjZNMr2kCX0vp4Le34wIhAJhViMFatZmr66+VDdOPwFvGudanExaD/xpk0+7r9O8h","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":63290},"main":"build/index.js","types":"build/index.d.ts","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=14.2.0"},"gitHead":"c3b4b27b653321691fb3e14ad0068441140c64f9","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"npm run lint && npm run test:unit","build":"npm run clean && tsc -p tsconfig.build.json","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint:fix":"balena-lint --fix lib test","test:unit":"jest"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"versionist":{"publishedAt":"2021-09-18T03:46:20.863Z"},"_npmVersion":"6.14.14","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --fix"]},"_nodeVersion":"14.17.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.3.0","@balena/jellyfish-logger":"^3.0.70"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^27.1.0","sinon":"^11.1.2","deplint":"^1.1.3","ts-jest":"^27.0.5","typedoc":"^0.21.9","depcheck":"^1.4.2","typescript":"^4.4.2","@types/jest":"^27.0.1","lint-staged":"^11.1.2","@balena/lint":"^6.1.1","@types/sinon":"^10.0.2","@types/semver":"^7.3.8","simple-git-hooks":"^2.6.1","@balena/jellycheck":"^0.1.3","@types/json-schema":"~6.0.1","@balena/jellyfish-types":"^1.1.2","@balena/jellyfish-config":"^1.4.8"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.240_1631936884564_0.3491809901507825","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.241-renovate-external-non-major-d0da85c32bbfec0d995be011361c5e613278c1a9":{"name":"@balena/jellyfish-plugin-base","version":"2.1.241-renovate-external-non-major-d0da85c32bbfec0d995be011361c5e613278c1a9","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.1.241-renovate-external-non-major-d0da85c32bbfec0d995be011361c5e613278c1a9","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"b39d9bda6204357db06d611c25bd5cfe666e9974","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.241-renovate-external-non-major-d0da85c32bbfec0d995be011361c5e613278c1a9.tgz","fileCount":18,"integrity":"sha512-Y6xY7a1RR2Rx57vvELTnrTouYpSetGfisIDSlzVj7K6eS8VTp2mxb7BaZ/2+FjgrtA5MKTLazB+3ziYMhIZxKQ==","signatures":[{"sig":"MEUCIHB7jEiXK8xuOrCuQDTXQ6CpWj1YFpg+T6T6J30d66aTAiEAmkpoGUGQdbtJbLkDf706wyuQJY3+9e3pR36TyTxhuco=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":63435},"main":"build/index.js","types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\n[![Publish Documentation](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml/badge.svg)](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml)\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=14.2.0"},"gitHead":"d0da85c32bbfec0d995be011361c5e613278c1a9","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"npm run lint && npm run test:unit","build":"npm run clean && tsc -p tsconfig.build.json","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint:fix":"balena-lint --fix lib test","test:unit":"jest"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"versionist":{"publishedAt":"2021-09-18T03:48:20.361Z"},"_npmVersion":"6.14.14","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --fix"]},"_nodeVersion":"14.17.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.3.0","@balena/jellyfish-logger":"^3.0.70"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^27.2.0","sinon":"^11.1.2","deplint":"^1.1.3","ts-jest":"^27.0.5","typedoc":"^0.22.3","depcheck":"^1.4.2","typescript":"^4.4.3","@types/jest":"^27.0.1","lint-staged":"^11.1.2","@balena/lint":"^6.1.1","@types/sinon":"^10.0.2","@types/semver":"^7.3.8","simple-git-hooks":"^2.6.1","@balena/jellycheck":"^0.1.3","@types/json-schema":"~6.0.1","@balena/jellyfish-types":"^1.1.2","@balena/jellyfish-config":"^1.4.8"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.241-renovate-external-non-major-d0da85c32bbfec0d995be011361c5e613278c1a9_1631937117558_0.8044635457934495","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.241-renovate-external-non-major-c469f4f879e608b639f1731f62816eb1453cc5bb":{"name":"@balena/jellyfish-plugin-base","version":"2.1.241-renovate-external-non-major-c469f4f879e608b639f1731f62816eb1453cc5bb","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.1.241-renovate-external-non-major-c469f4f879e608b639f1731f62816eb1453cc5bb","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"a0ca4e120922b8c70076c2dfa6fd33254e48927b","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.241-renovate-external-non-major-c469f4f879e608b639f1731f62816eb1453cc5bb.tgz","fileCount":18,"integrity":"sha512-c3/8NS5Z9CuMFVS060jsSWJKu+4l3/ODp75kEp5fuZhuP+FZDY/6webqm53Fm9XgPyF4NQwjomH7JY9TXcBXMA==","signatures":[{"sig":"MEUCIQDid97d8dFqm6FeCuL9QqYwiCWWMDAy3kmIFStMdYiC8QIgQNMB2PjV8aPld15f+Fsifeq8kVbp428AzcVz0AzN2CE=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":63435},"main":"build/index.js","types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\n[![Publish Documentation](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml/badge.svg)](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml)\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=14.2.0"},"gitHead":"c469f4f879e608b639f1731f62816eb1453cc5bb","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"npm run lint && npm run test:unit","build":"npm run clean && tsc -p tsconfig.build.json","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint:fix":"balena-lint --fix lib test","test:unit":"jest"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"versionist":{"publishedAt":"2021-09-18T20:28:22.901Z"},"_npmVersion":"6.14.14","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --fix"]},"_nodeVersion":"14.17.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.3.0","@balena/jellyfish-logger":"^3.0.70"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^27.2.0","sinon":"^11.1.2","deplint":"^1.1.3","ts-jest":"^27.0.5","typedoc":"^0.22.4","depcheck":"^1.4.2","typescript":"^4.4.3","@types/jest":"^27.0.1","lint-staged":"^11.1.2","@balena/lint":"^6.1.1","@types/sinon":"^10.0.2","@types/semver":"^7.3.8","simple-git-hooks":"^2.6.1","@balena/jellycheck":"^0.1.3","@types/json-schema":"~6.0.1","@balena/jellyfish-types":"^1.1.2","@balena/jellyfish-config":"^1.4.8"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.241-renovate-external-non-major-c469f4f879e608b639f1731f62816eb1453cc5bb_1631997110687_0.8042629826760359","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.241-renovate-balena-jellyfish-types-1-x-d3abf514b6a783f3ec7347dd318cb08e36e06ade":{"name":"@balena/jellyfish-plugin-base","version":"2.1.241-renovate-balena-jellyfish-types-1-x-d3abf514b6a783f3ec7347dd318cb08e36e06ade","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.1.241-renovate-balena-jellyfish-types-1-x-d3abf514b6a783f3ec7347dd318cb08e36e06ade","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"ba6e49585ed1e528d497ffac79fe70161d0cdbf4","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.241-renovate-balena-jellyfish-types-1-x-d3abf514b6a783f3ec7347dd318cb08e36e06ade.tgz","fileCount":18,"integrity":"sha512-M9r/c2SDqQT63M18SnJWS07giVLCsOGUR4bIyxijnSCjUEGEHeICSH3YYuDTZqWfn0yjeYY1acSuXZzegHbNTg==","signatures":[{"sig":"MEQCID7Sz251Ad8xkOM7UyFkpCxD8jwBeEzhs5kFTXJqY/JQAiAeA5DzJqaiPnxDO9kZHKzQYIBlX4zlYd1f470h61jzVw==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":63469},"main":"build/index.js","types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\n[![Publish Documentation](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml/badge.svg)](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml)\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=14.2.0"},"gitHead":"d3abf514b6a783f3ec7347dd318cb08e36e06ade","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"npm run lint && npm run test:unit","build":"npm run clean && tsc -p tsconfig.build.json","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint:fix":"balena-lint --fix lib test","test:unit":"jest"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"versionist":{"publishedAt":"2021-09-20T11:24:21.676Z"},"_npmVersion":"6.14.14","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --fix"]},"_nodeVersion":"14.17.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.3.0","@balena/jellyfish-logger":"^3.0.70"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^27.1.0","sinon":"^11.1.2","deplint":"^1.1.3","ts-jest":"^27.0.5","typedoc":"^0.21.9","depcheck":"^1.4.2","typescript":"^4.4.2","@types/jest":"^27.0.1","lint-staged":"^11.1.2","@balena/lint":"^6.1.1","@types/sinon":"^10.0.2","@types/semver":"^7.3.8","simple-git-hooks":"^2.6.1","@balena/jellycheck":"^0.1.3","@types/json-schema":"~6.0.1","@balena/jellyfish-types":"^1.2.0","@balena/jellyfish-config":"^1.4.8"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.241-renovate-balena-jellyfish-types-1-x-d3abf514b6a783f3ec7347dd318cb08e36e06ade_1632137233768_0.4674385565545418","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.241":{"name":"@balena/jellyfish-plugin-base","version":"2.1.241","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.1.241","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"4bdd4622b615aeaa34a8d314c581e42c6b57a6b6","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.241.tgz","fileCount":18,"integrity":"sha512-cf4l9Y+yoPND3sgJizDhdyvaTA84BN0BAP8LTQXDKxuqUNHExBo9/dYbos2CWivtEJK6rLC/LSxJQgBxGYrKQQ==","signatures":[{"sig":"MEUCIGnhCjCg8Nn+7BjfeUgutJNu+OVCzXnqMiAiRymW4BSMAiEA12ap+vtmnv4i+kF67E3ZnywW1LG3ekbFeuiXVTDkYgw=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":63392},"main":"build/index.js","types":"build/index.d.ts","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=14.2.0"},"gitHead":"d255bafe44134bdf5ec34464afad54aeb628a001","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"npm run lint && npm run test:unit","build":"npm run clean && tsc -p tsconfig.build.json","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint:fix":"balena-lint --fix lib test","test:unit":"jest"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"versionist":{"publishedAt":"2021-09-20T11:29:01.452Z"},"_npmVersion":"6.14.14","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --fix"]},"_nodeVersion":"14.17.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.3.0","@balena/jellyfish-logger":"^3.0.70"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^27.1.0","sinon":"^11.1.2","deplint":"^1.1.3","ts-jest":"^27.0.5","typedoc":"^0.21.9","depcheck":"^1.4.2","typescript":"^4.4.2","@types/jest":"^27.0.1","lint-staged":"^11.1.2","@balena/lint":"^6.1.1","@types/sinon":"^10.0.2","@types/semver":"^7.3.8","simple-git-hooks":"^2.6.1","@balena/jellycheck":"^0.1.3","@types/json-schema":"~6.0.1","@balena/jellyfish-types":"^1.2.0","@balena/jellyfish-config":"^1.4.8"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.241_1632137446878_0.5351001181480035","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.242-renovate-internal-patch-0013585a989e1eb5dd0848bd27dd854c33758bb4":{"name":"@balena/jellyfish-plugin-base","version":"2.1.242-renovate-internal-patch-0013585a989e1eb5dd0848bd27dd854c33758bb4","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.1.242-renovate-internal-patch-0013585a989e1eb5dd0848bd27dd854c33758bb4","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"8ae76b950dd90ad6980d054a9de80df2e19cee80","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.242-renovate-internal-patch-0013585a989e1eb5dd0848bd27dd854c33758bb4.tgz","fileCount":18,"integrity":"sha512-13WfY1hNB3fq8jEYAI0Qilb3DCYbepRZCk5AZittDLcJM7OR/DFVD70m0f2BJzsAW451t5Uw6P4wjzwWu7Dzhw==","signatures":[{"sig":"MEUCIQD6KuxbiP/m9KdFMyJoQr0OFM3cAHK7ztcBllCs650SlQIgQE2ceg6LB+88Ni3XYu6Opnh8vRv6rAifoNWj9svIYg0=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":63561},"main":"build/index.js","types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\n[![Publish Documentation](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml/badge.svg)](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml)\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=14.2.0"},"gitHead":"0013585a989e1eb5dd0848bd27dd854c33758bb4","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"npm run lint && npm run test:unit","build":"npm run clean && tsc -p tsconfig.build.json","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint:fix":"balena-lint --fix lib test","test:unit":"jest"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"versionist":{"publishedAt":"2021-09-20T11:31:41.843Z"},"_npmVersion":"6.14.14","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --fix"]},"_nodeVersion":"14.17.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.3.0","@balena/jellyfish-logger":"^3.0.71"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^27.1.0","sinon":"^11.1.2","deplint":"^1.1.3","ts-jest":"^27.0.5","typedoc":"^0.21.9","depcheck":"^1.4.2","typescript":"^4.4.2","@types/jest":"^27.0.1","lint-staged":"^11.1.2","@balena/lint":"^6.1.1","@types/sinon":"^10.0.2","@types/semver":"^7.3.8","simple-git-hooks":"^2.6.1","@balena/jellycheck":"^0.1.3","@types/json-schema":"~6.0.1","@balena/jellyfish-types":"^1.2.0","@balena/jellyfish-config":"^1.4.8"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.242-renovate-internal-patch-0013585a989e1eb5dd0848bd27dd854c33758bb4_1632137705131_0.8089347104421569","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.242-renovate-external-non-major-f6044c6d6625543859997ab184b4047ad0d6241e":{"name":"@balena/jellyfish-plugin-base","version":"2.1.242-renovate-external-non-major-f6044c6d6625543859997ab184b4047ad0d6241e","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.1.242-renovate-external-non-major-f6044c6d6625543859997ab184b4047ad0d6241e","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"b99f77eaac5ab1cfd4aea5fbfe72650442333974","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.242-renovate-external-non-major-f6044c6d6625543859997ab184b4047ad0d6241e.tgz","fileCount":18,"integrity":"sha512-o0JuSBRnkWNKpeikBCmZ/3MewT6C3aT37GFUButq0+fcKH+cYQONPU8IADqLUxx5PiXyMywXPdTdbbUmTw7bRw==","signatures":[{"sig":"MEQCIE3gaPyr6nJ8k0GZ/K6pQj4XNKJu4jfFlqoVGOEeAQiBAiAZsHBRJHHWudBMjVFgf7U3uxvzsFhiwt/sGrdmI7VDAg==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":63537},"main":"build/index.js","types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\n[![Publish Documentation](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml/badge.svg)](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml)\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=14.2.0"},"gitHead":"f6044c6d6625543859997ab184b4047ad0d6241e","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"npm run lint && npm run test:unit","build":"npm run clean && tsc -p tsconfig.build.json","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint:fix":"balena-lint --fix lib test","test:unit":"jest"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"versionist":{"publishedAt":"2021-09-20T11:34:42.016Z"},"_npmVersion":"6.14.14","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --fix"]},"_nodeVersion":"14.17.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.3.0","@balena/jellyfish-logger":"^3.0.70"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^27.2.0","sinon":"^11.1.2","deplint":"^1.1.3","ts-jest":"^27.0.5","typedoc":"^0.22.4","depcheck":"^1.4.2","typescript":"^4.4.3","@types/jest":"^27.0.1","lint-staged":"^11.1.2","@balena/lint":"^6.1.1","@types/sinon":"^10.0.2","@types/semver":"^7.3.8","simple-git-hooks":"^2.6.1","@balena/jellycheck":"^0.1.3","@types/json-schema":"~6.0.1","@balena/jellyfish-types":"^1.2.0","@balena/jellyfish-config":"^1.4.8"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.242-renovate-external-non-major-f6044c6d6625543859997ab184b4047ad0d6241e_1632137820414_0.7323419724968845","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.242":{"name":"@balena/jellyfish-plugin-base","version":"2.1.242","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.1.242","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"da822c37967e22596d8faa912ffb44a69aab99da","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.242.tgz","fileCount":18,"integrity":"sha512-TpB3mLx/sYcXMalPQgF9FxODM65NkIt23NJ27V7zmv3yymNcsiQaPC+F6LT1MtpsnSSJQnJjO8RamzgorLQVIw==","signatures":[{"sig":"MEQCICvURjHfWJtzzUSwhfR/TfxjvzS49pdH7IE7+B9mtarvAiBlCVjeycFT8O4VY37ND1IQjkfbzgpL3+YMsDGFKccJgw==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":63496},"main":"build/index.js","types":"build/index.d.ts","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=14.2.0"},"gitHead":"6c3631c5312e760df6e09aff2d0efbcdd9c4d6c9","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"npm run lint && npm run test:unit","build":"npm run clean && tsc -p tsconfig.build.json","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint:fix":"balena-lint --fix lib test","test:unit":"jest"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"versionist":{"publishedAt":"2021-09-20T11:38:38.633Z"},"_npmVersion":"6.14.14","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --fix"]},"_nodeVersion":"14.17.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.3.0","@balena/jellyfish-logger":"^3.0.71"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^27.1.0","sinon":"^11.1.2","deplint":"^1.1.3","ts-jest":"^27.0.5","typedoc":"^0.21.9","depcheck":"^1.4.2","typescript":"^4.4.2","@types/jest":"^27.0.1","lint-staged":"^11.1.2","@balena/lint":"^6.1.1","@types/sinon":"^10.0.2","@types/semver":"^7.3.8","simple-git-hooks":"^2.6.1","@balena/jellycheck":"^0.1.3","@types/json-schema":"~6.0.1","@balena/jellyfish-types":"^1.2.0","@balena/jellyfish-config":"^1.4.8"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.242_1632138060607_0.8521202672020489","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.243-renovate-external-non-major-eacfcae8d7ca98f7f1e656b0e07c31e96cd2935f":{"name":"@balena/jellyfish-plugin-base","version":"2.1.243-renovate-external-non-major-eacfcae8d7ca98f7f1e656b0e07c31e96cd2935f","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.1.243-renovate-external-non-major-eacfcae8d7ca98f7f1e656b0e07c31e96cd2935f","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"b04bc4fef4653085da7d493eb4a0d178882d5927","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.243-renovate-external-non-major-eacfcae8d7ca98f7f1e656b0e07c31e96cd2935f.tgz","fileCount":18,"integrity":"sha512-Pn1Jr+TR8lDsB5TtQkFdUdjNyA+ViPTe5VIKffvvkLL5e5iIl/PCCNmiO0aJ5uR1RQ4kZwhAq9f0tXllt+1+mw==","signatures":[{"sig":"MEQCIELmXgHu0F8Ecwrk5ziicHrb2sTr8QSaVRUvgAaVjs1BAiBqVTv1E57AN0xw9xnc++JzX8DFuiP/aZPMoI4haklEzQ==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":63641},"main":"build/index.js","types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\n[![Publish Documentation](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml/badge.svg)](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml)\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=14.2.0"},"gitHead":"eacfcae8d7ca98f7f1e656b0e07c31e96cd2935f","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"npm run lint && npm run test:unit","build":"npm run clean && tsc -p tsconfig.build.json","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint:fix":"balena-lint --fix lib test","test:unit":"jest"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"versionist":{"publishedAt":"2021-09-20T11:45:52.008Z"},"_npmVersion":"6.14.14","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --fix"]},"_nodeVersion":"14.17.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.3.0","@balena/jellyfish-logger":"^3.0.71"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^27.2.0","sinon":"^11.1.2","deplint":"^1.1.3","ts-jest":"^27.0.5","typedoc":"^0.22.4","depcheck":"^1.4.2","typescript":"^4.4.3","@types/jest":"^27.0.1","lint-staged":"^11.1.2","@balena/lint":"^6.1.1","@types/sinon":"^10.0.2","@types/semver":"^7.3.8","simple-git-hooks":"^2.6.1","@balena/jellycheck":"^0.1.3","@types/json-schema":"~6.0.1","@balena/jellyfish-types":"^1.2.0","@balena/jellyfish-config":"^1.4.8"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.243-renovate-external-non-major-eacfcae8d7ca98f7f1e656b0e07c31e96cd2935f_1632138575833_0.008771485790954658","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.243-renovate-external-non-major-f10db684fe0f5271d54f32c78b6304556322127d":{"name":"@balena/jellyfish-plugin-base","version":"2.1.243-renovate-external-non-major-f10db684fe0f5271d54f32c78b6304556322127d","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.1.243-renovate-external-non-major-f10db684fe0f5271d54f32c78b6304556322127d","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"c292bb4153f61216bc88a5c6ea2621a9608c41c5","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.243-renovate-external-non-major-f10db684fe0f5271d54f32c78b6304556322127d.tgz","fileCount":18,"integrity":"sha512-i9N1sSiBUaHRGbXmOmxdJBs+c3jdWjf+jBgrMB841etBg7ctcdbK49/+yMadnmOUbswtPoGpJDkGnzGzKHUpow==","signatures":[{"sig":"MEUCIALnFi1zldkHvWS0ykW+F03dmpLTXU30LkKfhKFrmI3gAiEA2npg65YVTfevOEWnndt4VZibHl2iUP6EVTkSDC6Pdkk=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":63641},"main":"build/index.js","types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\n[![Publish Documentation](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml/badge.svg)](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml)\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=14.2.0"},"gitHead":"f10db684fe0f5271d54f32c78b6304556322127d","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"npm run lint && npm run test:unit","build":"npm run clean && tsc -p tsconfig.build.json","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint:fix":"balena-lint --fix lib test","test:unit":"jest"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"versionist":{"publishedAt":"2021-09-20T13:54:08.968Z"},"_npmVersion":"6.14.14","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --fix"]},"_nodeVersion":"14.17.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.3.0","@balena/jellyfish-logger":"^3.0.71"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^27.2.1","sinon":"^11.1.2","deplint":"^1.1.3","ts-jest":"^27.0.5","typedoc":"^0.22.4","depcheck":"^1.4.2","typescript":"^4.4.3","@types/jest":"^27.0.1","lint-staged":"^11.1.2","@balena/lint":"^6.1.1","@types/sinon":"^10.0.2","@types/semver":"^7.3.8","simple-git-hooks":"^2.6.1","@balena/jellycheck":"^0.1.3","@types/json-schema":"~6.0.1","@balena/jellyfish-types":"^1.2.0","@balena/jellyfish-config":"^1.4.8"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.243-renovate-external-non-major-f10db684fe0f5271d54f32c78b6304556322127d_1632146324189_0.5514195537654738","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.243-renovate-external-non-major-3ca2b55a8c03f9c019eb5aa76ac8538c90fca0cc":{"name":"@balena/jellyfish-plugin-base","version":"2.1.243-renovate-external-non-major-3ca2b55a8c03f9c019eb5aa76ac8538c90fca0cc","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.1.243-renovate-external-non-major-3ca2b55a8c03f9c019eb5aa76ac8538c90fca0cc","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"01e09d4a9d0deec31543fc0c93c2c8ca0da4bcb3","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.243-renovate-external-non-major-3ca2b55a8c03f9c019eb5aa76ac8538c90fca0cc.tgz","fileCount":18,"integrity":"sha512-VqBaR+rE36EKgKcgSvq+erck9UQwSqaenZDmiKC8v1CsdHdKIE5IUvVwqAPXEQ3boz3EmItOsp2uyy9kI7tisQ==","signatures":[{"sig":"MEUCIANYBYVm6FBPo+PnlNalGrj8todAHD+tNIQtAV3lp+HZAiEA/IiGV/uyrcIqEkD58IL1uYLtASm5cMs2tq/oTXmoVms=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":63641},"main":"build/index.js","types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\n[![Publish Documentation](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml/badge.svg)](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml)\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=14.2.0"},"gitHead":"3ca2b55a8c03f9c019eb5aa76ac8538c90fca0cc","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest","test":"npm run lint && npm run test:unit","build":"npm run clean && tsc -p tsconfig.build.json","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint:fix":"balena-lint --fix lib test","test:unit":"jest"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"versionist":{"publishedAt":"2021-09-22T00:30:21.298Z"},"_npmVersion":"6.14.15","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --fix"]},"_nodeVersion":"14.17.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.3.0","@balena/jellyfish-logger":"^3.0.71"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^27.2.1","sinon":"^11.1.2","deplint":"^1.1.3","ts-jest":"^27.0.5","typedoc":"^0.22.4","depcheck":"^1.4.2","typescript":"^4.4.3","@types/jest":"^27.0.2","lint-staged":"^11.1.2","@balena/lint":"^6.1.1","@types/sinon":"^10.0.3","@types/semver":"^7.3.8","simple-git-hooks":"^2.6.1","@balena/jellycheck":"^0.1.3","@types/json-schema":"~6.0.1","@balena/jellyfish-types":"^1.2.0","@balena/jellyfish-config":"^1.4.8"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.243-renovate-external-non-major-3ca2b55a8c03f9c019eb5aa76ac8538c90fca0cc_1632270800052_0.7463898323656244","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.243-renovate-external-non-major-12b02853e075f09876f14752c6b3059c0a8c9ab3":{"name":"@balena/jellyfish-plugin-base","version":"2.1.243-renovate-external-non-major-12b02853e075f09876f14752c6b3059c0a8c9ab3","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.1.243-renovate-external-non-major-12b02853e075f09876f14752c6b3059c0a8c9ab3","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"34072f6c6f680c9b510fc5f8a6e4810e3cada976","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.243-renovate-external-non-major-12b02853e075f09876f14752c6b3059c0a8c9ab3.tgz","fileCount":18,"integrity":"sha512-wMMQKmLjU6dwJmJ2HHU3xPantdYsKlG+kQepBtrJcimnDWevUtsfqgoQMGN5UJVHZGen0rQ3bXmJaQ8TQuFqRw==","signatures":[{"sig":"MEUCIEZTWQXToLRkIJ7EWMDE4YEkpCl+pQh6nwSqISdq4EJoAiEA+nIm22zG56nthg0bVvja8KyhtOW3jcZN9D9yXkUJUag=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":63702},"main":"build/index.js","types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\n[![Publish Documentation](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml/badge.svg)](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml)\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=14.2.0"},"gitHead":"12b02853e075f09876f14752c6b3059c0a8c9ab3","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest,typedoc","test":"npm run lint && npm run test:unit","build":"npm run clean && tsc -p tsconfig.build.json","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint:fix":"balena-lint --fix lib test","test:unit":"jest"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"versionist":{"publishedAt":"2021-09-22T00:53:36.910Z"},"_npmVersion":"6.14.15","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --fix"]},"_nodeVersion":"14.17.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.3.0","@balena/jellyfish-logger":"^3.0.71"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^27.2.1","sinon":"^11.1.2","deplint":"^1.1.3","ts-jest":"^27.0.5","typedoc":"^0.22.4","depcheck":"^1.4.2","typescript":"^4.4.3","@types/jest":"^27.0.2","lint-staged":"^11.1.2","@balena/lint":"^6.1.1","@types/sinon":"^10.0.3","@types/semver":"^7.3.8","simple-git-hooks":"^2.6.1","@balena/jellycheck":"^0.1.3","@types/json-schema":"~6.0.1","@balena/jellyfish-types":"^1.2.0","@balena/jellyfish-config":"^1.4.8"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.243-renovate-external-non-major-12b02853e075f09876f14752c6b3059c0a8c9ab3_1632272250385_0.7783851207340196","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.243":{"name":"@balena/jellyfish-plugin-base","version":"2.1.243","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.1.243","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"65096d6db05db55ccbf942db372e8f159cce1c90","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.243.tgz","fileCount":18,"integrity":"sha512-fKrPiH556lll2HRIjGC3T+GoH84wsgxU2hNjtSo4j/Qg4KHHQ7QS2xOUVvFuF1h9ZkciJ0ee9SW9uiCRjzbbcw==","signatures":[{"sig":"MEQCIE3PNbOTDWfhgIUu61cdisxvshSSxUMtmh9+asPQgL64AiBudlc7izpO1oeXjWEkPJ+kGmI5tgZgjTIoCvHbmlQXsA==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":63633},"main":"build/index.js","types":"build/index.d.ts","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=14.2.0"},"gitHead":"b98bb26aeedc8538b01f0a62e799ae122870c084","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest,typedoc","test":"npm run lint && npm run test:unit","build":"npm run clean && tsc -p tsconfig.build.json","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint:fix":"balena-lint --fix lib test","test:unit":"jest"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"versionist":{"publishedAt":"2021-09-22T00:58:50.487Z"},"_npmVersion":"6.14.15","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --fix"]},"_nodeVersion":"14.17.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.3.0","@balena/jellyfish-logger":"^3.0.71"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^27.2.1","sinon":"^11.1.2","deplint":"^1.1.3","ts-jest":"^27.0.5","typedoc":"^0.22.4","depcheck":"^1.4.2","typescript":"^4.4.3","@types/jest":"^27.0.2","lint-staged":"^11.1.2","@balena/lint":"^6.1.1","@types/sinon":"^10.0.3","@types/semver":"^7.3.8","simple-git-hooks":"^2.6.1","@balena/jellycheck":"^0.1.3","@types/json-schema":"~6.0.1","@balena/jellyfish-types":"^1.2.0","@balena/jellyfish-config":"^1.4.8"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.243_1632272463243_0.19639912839717577","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.244-repo-sync-jellyfish-config-default-85f1df34cfbe7c22cd41e601c29bcb4ae45a82d3":{"name":"@balena/jellyfish-plugin-base","version":"2.1.244-repo-sync-jellyfish-config-default-85f1df34cfbe7c22cd41e601c29bcb4ae45a82d3","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.1.244-repo-sync-jellyfish-config-default-85f1df34cfbe7c22cd41e601c29bcb4ae45a82d3","maintainers":[{"name":"iayanpahwa","email":"ayan@balena.io"},{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"d9d63acfca5aa1421a9a04f94d5869171a4b696f","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.244-repo-sync-jellyfish-config-default-85f1df34cfbe7c22cd41e601c29bcb4ae45a82d3.tgz","fileCount":18,"integrity":"sha512-QMp6fQAu++Qhx/ADu/f2QhxmipnhKjt1NSABVV9w4uubKRgUlSf59taxRPXtKJUsZxk8ti/xjaEXuE980CvB/A==","signatures":[{"sig":"MEUCIQCiMLBh7talmwcFpfSCvILwN7ENoiLuxm7wjM6NAZCcGQIgXXFadoWgoPdTNnrUfUVXRET0Sw+S9hWp68+hXaInUI4=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":63802},"main":"build/index.js","types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\n[![Publish Documentation](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml/badge.svg)](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml)\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=14.2.0"},"gitHead":"85f1df34cfbe7c22cd41e601c29bcb4ae45a82d3","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest,typedoc","test":"npm run lint && npm run test:unit","build":"npm run clean && tsc -p tsconfig.build.json","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint:fix":"balena-lint --fix lib test","test:unit":"jest"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"versionist":{"publishedAt":"2021-10-04T03:33:25.751Z"},"_npmVersion":"6.14.15","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --fix"]},"_nodeVersion":"14.17.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.3.0","@balena/jellyfish-logger":"^3.0.71"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^27.2.1","sinon":"^11.1.2","deplint":"^1.1.3","ts-jest":"^27.0.5","typedoc":"^0.22.4","depcheck":"^1.4.2","typescript":"^4.4.3","@types/jest":"^27.0.2","lint-staged":"^11.1.2","@balena/lint":"^6.1.1","@types/sinon":"^10.0.3","@types/semver":"^7.3.8","simple-git-hooks":"^2.6.1","@balena/jellycheck":"^0.1.3","@types/json-schema":"~6.0.1","@balena/jellyfish-types":"^1.2.0","@balena/jellyfish-config":"^1.4.8"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.244-repo-sync-jellyfish-config-default-85f1df34cfbe7c22cd41e601c29bcb4ae45a82d3_1633318684158_0.5795269578507334","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.244-repo-sync-jellyfish-config-default-dc2e8d39212dba1c8301211c198da554ab84e089":{"name":"@balena/jellyfish-plugin-base","version":"2.1.244-repo-sync-jellyfish-config-default-dc2e8d39212dba1c8301211c198da554ab84e089","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.1.244-repo-sync-jellyfish-config-default-dc2e8d39212dba1c8301211c198da554ab84e089","maintainers":[{"name":"iayanpahwa","email":"ayan@balena.io"},{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"0b7b2926fda774c8ce8d2b96937ee7359c32e93a","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.244-repo-sync-jellyfish-config-default-dc2e8d39212dba1c8301211c198da554ab84e089.tgz","fileCount":18,"integrity":"sha512-BjCFeSPS3ZHuyOxsHpbYdAJI8eIQCt6r0mCeRclOUpdvt2yOzSAwz445kHishGmI/X1ep5/eWb1K/p72g3uZEA==","signatures":[{"sig":"MEYCIQDqnmj3Jb6VFsUolk+ZoRWlfI3HK2wCdG3ZQbD+6vWmOwIhALRKdasROHWhSc7H4+oNMXYLxi8/LZPDfLvPBRRjFgjL","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":63802},"main":"build/index.js","types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\n[![Publish Documentation](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml/badge.svg)](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml)\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=14.2.0"},"gitHead":"dc2e8d39212dba1c8301211c198da554ab84e089","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest,typedoc","test":"npm run lint && npm run test:unit","build":"npm run clean && tsc -p tsconfig.build.json","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint:fix":"balena-lint --fix lib test","test:unit":"jest"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"versionist":{"publishedAt":"2021-10-04T05:16:21.265Z"},"_npmVersion":"6.14.15","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --fix"]},"_nodeVersion":"14.17.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.3.0","@balena/jellyfish-logger":"^3.0.71"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^27.2.1","sinon":"^11.1.2","deplint":"^1.1.3","ts-jest":"^27.0.5","typedoc":"^0.22.4","depcheck":"^1.4.2","typescript":"^4.4.3","@types/jest":"^27.0.2","lint-staged":"^11.1.2","@balena/lint":"^6.1.1","@types/sinon":"^10.0.3","@types/semver":"^7.3.8","simple-git-hooks":"^2.6.1","@balena/jellycheck":"^0.1.3","@types/json-schema":"~6.0.1","@balena/jellyfish-types":"^1.2.0","@balena/jellyfish-config":"^1.4.8"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.244-repo-sync-jellyfish-config-default-dc2e8d39212dba1c8301211c198da554ab84e089_1633324790221_0.22773771716629576","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.244":{"name":"@balena/jellyfish-plugin-base","version":"2.1.244","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.1.244","maintainers":[{"name":"iayanpahwa","email":"ayan@balena.io"},{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"nazrhom","email":"nazrhom@gmail.com"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"d9e2cb93b27fb9d549665fb9179a464ccf039d1d","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.244.tgz","fileCount":18,"integrity":"sha512-VRO6rVYMxIZVTdVTxqLhwSTWdeskHIXWCfgEsUuCbIt9Zx6jPY/8Pc9CO0sE4C0u9O8XC0/WXn1wNQlzJ51IHw==","signatures":[{"sig":"MEYCIQCqy1zOp9O4rArh17NCW9uPRVm9W1BS2M/VAjedOne3awIhALQCRMHuIt/ME3qmxNB/ceij8+xbugvig564A0Q/OydA","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":63726},"main":"build/index.js","types":"build/index.d.ts","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=14.2.0"},"gitHead":"183275c03c2cfd75d99407410d12efa53f19af3c","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest,typedoc","test":"npm run lint && npm run test:unit","build":"npm run clean && tsc -p tsconfig.build.json","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint:fix":"balena-lint --fix lib test","test:unit":"jest"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"versionist":{"publishedAt":"2021-10-05T00:00:59.625Z"},"_npmVersion":"6.14.15","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --fix"]},"_nodeVersion":"14.17.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.3.0","@balena/jellyfish-logger":"^3.0.71"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^27.2.1","sinon":"^11.1.2","deplint":"^1.1.3","ts-jest":"^27.0.5","typedoc":"^0.22.4","depcheck":"^1.4.2","typescript":"^4.4.3","@types/jest":"^27.0.2","lint-staged":"^11.1.2","@balena/lint":"^6.1.1","@types/sinon":"^10.0.3","@types/semver":"^7.3.8","simple-git-hooks":"^2.6.1","@balena/jellycheck":"^0.1.3","@types/json-schema":"~6.0.1","@balena/jellyfish-types":"^1.2.0","@balena/jellyfish-config":"^1.4.8"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.244_1633392164502_0.16755470971581254","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.245-renovate-internal-patch-99368ee26ab34ea1f904fcd23d3546f960618fed":{"name":"@balena/jellyfish-plugin-base","version":"2.1.245-renovate-internal-patch-99368ee26ab34ea1f904fcd23d3546f960618fed","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.1.245-renovate-internal-patch-99368ee26ab34ea1f904fcd23d3546f960618fed","maintainers":[{"name":"pranavbalena","email":"pranav@balena.io"},{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"1f69476af3a17935b8b427ef51343ba56ee06992","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.245-renovate-internal-patch-99368ee26ab34ea1f904fcd23d3546f960618fed.tgz","fileCount":18,"integrity":"sha512-NbCUT0U0zMYIng1xxM3TZx8aIH8xpAwwAx6RpJyIbXbqz8e/A8dKQiszr5gWpDIlEKQZKlbuppEhwCDl1mRMgw==","signatures":[{"sig":"MEUCIHyENMW9JRqL9OC5i4N+UogYeNJm7/e0QspDzx7RtbzUAiEAsjFwzPpGwza+j5aUoQ7RBPVV7JE9b68ao1I5jCv40Uo=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":63863},"main":"build/index.js","types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\n[![Publish Documentation](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml/badge.svg)](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml)\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=14.2.0"},"gitHead":"99368ee26ab34ea1f904fcd23d3546f960618fed","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest,typedoc","test":"npm run lint && npm run test:unit","build":"npm run clean && tsc -p tsconfig.build.json","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint:fix":"balena-lint --fix lib test","test:unit":"jest"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"versionist":{"publishedAt":"2021-10-18T20:03:07.076Z"},"_npmVersion":"6.14.15","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --fix"]},"_nodeVersion":"14.17.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.3.0","@balena/jellyfish-logger":"^3.0.86"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^27.2.1","sinon":"^11.1.2","deplint":"^1.1.3","ts-jest":"^27.0.5","typedoc":"^0.22.4","depcheck":"^1.4.2","typescript":"^4.4.3","@types/jest":"^27.0.2","lint-staged":"^11.1.2","@balena/lint":"^6.1.1","@types/sinon":"^10.0.3","@types/semver":"^7.3.8","simple-git-hooks":"^2.6.1","@balena/jellycheck":"^0.1.3","@types/json-schema":"~6.0.1","@balena/jellyfish-types":"^1.2.4","@balena/jellyfish-config":"^1.4.8"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.245-renovate-internal-patch-99368ee26ab34ea1f904fcd23d3546f960618fed_1634587602145_0.38160422532907057","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.245":{"name":"@balena/jellyfish-plugin-base","version":"2.1.245","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.1.245","maintainers":[{"name":"pranavbalena","email":"pranav@balena.io"},{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"496a85b02e3db494e8b314f7b82393bb91cc50fa","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.245.tgz","fileCount":18,"integrity":"sha512-SvL2471Y/6LHqomPuWlMzdcK4/yLfwU/yqYAADGKXSozsFya6hdGJuj2Rw54yrEUGx6nlP6IRYJwUr0mtwIwew==","signatures":[{"sig":"MEQCIFwnAsm0wDqsErfSAJUWzoSwUxfqkCOnR+aCg5HNFP5KAiBo9Iw+IOzr6hlYFI/xzCxrbx5NLEi5ZfQVt7jmN2aICg==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":63798},"main":"build/index.js","types":"build/index.d.ts","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=14.2.0"},"gitHead":"ed1024fa119f1558b1c04b504b8e8e3a05c2917d","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest,typedoc","test":"npm run lint && npm run test:unit","build":"npm run clean && tsc -p tsconfig.build.json","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint:fix":"balena-lint --fix lib test","test:unit":"jest"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"versionist":{"publishedAt":"2021-10-18T20:08:25.066Z"},"_npmVersion":"6.14.15","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --fix"]},"_nodeVersion":"14.17.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.3.0","@balena/jellyfish-logger":"^3.0.86"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^27.2.1","sinon":"^11.1.2","deplint":"^1.1.3","ts-jest":"^27.0.5","typedoc":"^0.22.4","depcheck":"^1.4.2","typescript":"^4.4.3","@types/jest":"^27.0.2","lint-staged":"^11.1.2","@balena/lint":"^6.1.1","@types/sinon":"^10.0.3","@types/semver":"^7.3.8","simple-git-hooks":"^2.6.1","@balena/jellycheck":"^0.1.3","@types/json-schema":"~6.0.1","@balena/jellyfish-types":"^1.2.4","@balena/jellyfish-config":"^1.4.8"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.245_1634587830799_0.2933357194044559","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.246-renovate-balena-jellyfish-config-1-x-7ff323185c0897ead50bcb03739b7583566988c3":{"name":"@balena/jellyfish-plugin-base","version":"2.1.246-renovate-balena-jellyfish-config-1-x-7ff323185c0897ead50bcb03739b7583566988c3","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.1.246-renovate-balena-jellyfish-config-1-x-7ff323185c0897ead50bcb03739b7583566988c3","maintainers":[{"name":"pranavbalena","email":"pranav@balena.io"},{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"50b7d0094f1a004f007d7252729c009bd35bbfab","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.246-renovate-balena-jellyfish-config-1-x-7ff323185c0897ead50bcb03739b7583566988c3.tgz","fileCount":18,"integrity":"sha512-030uPzCy4XfdKxcunwwRKpwkkwZsJFqKIC1sAP8+pPjBc2sKU/nuwyv+NMMh6cEnB0ds/J9P3Jgra6fFepq4KQ==","signatures":[{"sig":"MEQCIA4t8tXt5ZKoS1QLdu3kL1QqJFmI3GY2krMtuGQIIZ4cAiBYAPL3NJ1Es0f1/1JsN9tJDH9zlSJgKiOMbVkEgQh/aw==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":63979},"main":"build/index.js","types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\n[![Publish Documentation](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml/badge.svg)](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml)\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=14.2.0"},"gitHead":"7ff323185c0897ead50bcb03739b7583566988c3","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest,typedoc","test":"npm run lint && npm run test:unit","build":"npm run clean && tsc -p tsconfig.build.json","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint:fix":"balena-lint --fix lib test","test:unit":"jest"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"versionist":{"publishedAt":"2021-10-18T20:11:08.237Z"},"_npmVersion":"6.14.15","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --fix"]},"_nodeVersion":"14.17.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.3.0","@balena/jellyfish-logger":"^3.0.86"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^27.2.1","sinon":"^11.1.2","deplint":"^1.1.3","ts-jest":"^27.0.5","typedoc":"^0.22.4","depcheck":"^1.4.2","typescript":"^4.4.3","@types/jest":"^27.0.2","lint-staged":"^11.1.2","@balena/lint":"^6.1.1","@types/sinon":"^10.0.3","@types/semver":"^7.3.8","simple-git-hooks":"^2.6.1","@balena/jellycheck":"^0.1.3","@types/json-schema":"~6.0.1","@balena/jellyfish-types":"^1.2.4","@balena/jellyfish-config":"^1.5.4"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.246-renovate-balena-jellyfish-config-1-x-7ff323185c0897ead50bcb03739b7583566988c3_1634588040671_0.053808417653307794","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.246":{"name":"@balena/jellyfish-plugin-base","version":"2.1.246","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.1.246","maintainers":[{"name":"pranavbalena","email":"pranav@balena.io"},{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"937104a70ff48fa4dfc535100ff20d26b8ec447e","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.246.tgz","fileCount":18,"integrity":"sha512-oBkXlkPN78WJu6y82EHcur/ef69C0ubLEcTXtaxuOpXfxQSrOw6j2cDLM+aFQcZKG4rrPhRzZkneh8HcT6yAPg==","signatures":[{"sig":"MEUCIQDWfyM7K/eXTBvFsDWzTP+eiacnkRjmIgnPPDKaQBwBtAIgQwYiGHMmoQ6tsFluEtP+y8Y+E8fyd7A0owBQSD6QO4U=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":63901},"main":"build/index.js","types":"build/index.d.ts","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=14.2.0"},"gitHead":"869c45dabcc0475a6c5c7d0ab6d552acc1d64395","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest,typedoc","test":"npm run lint && npm run test:unit","build":"npm run clean && tsc -p tsconfig.build.json","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint:fix":"balena-lint --fix lib test","test:unit":"jest"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"versionist":{"publishedAt":"2021-10-18T20:18:28.052Z"},"_npmVersion":"6.14.15","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --fix"]},"_nodeVersion":"14.17.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.3.0","@balena/jellyfish-logger":"^3.0.86"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^27.2.1","sinon":"^11.1.2","deplint":"^1.1.3","ts-jest":"^27.0.5","typedoc":"^0.22.4","depcheck":"^1.4.2","typescript":"^4.4.3","@types/jest":"^27.0.2","lint-staged":"^11.1.2","@balena/lint":"^6.1.1","@types/sinon":"^10.0.3","@types/semver":"^7.3.8","simple-git-hooks":"^2.6.1","@balena/jellycheck":"^0.1.3","@types/json-schema":"~6.0.1","@balena/jellyfish-types":"^1.2.4","@balena/jellyfish-config":"^1.5.4"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.246_1634588408832_0.3951805713438383","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.247-renovate-internal-patch-53f30a7bc0b9c331031bccfb57f9429605cb39f9":{"name":"@balena/jellyfish-plugin-base","version":"2.1.247-renovate-internal-patch-53f30a7bc0b9c331031bccfb57f9429605cb39f9","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.1.247-renovate-internal-patch-53f30a7bc0b9c331031bccfb57f9429605cb39f9","maintainers":[{"name":"pranavbalena","email":"pranav@balena.io"},{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"952fa600adbe853afc8add0cd09ad4c5bbfe4ded","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.247-renovate-internal-patch-53f30a7bc0b9c331031bccfb57f9429605cb39f9.tgz","fileCount":18,"integrity":"sha512-O/5ncpQ9dlu7gnqxj6EaET/NKo4eiBRs0jwPYjMJis/u68tfoJGn8u9yjZJ1+n8UfornWE3KniaEe/y79Xc6HA==","signatures":[{"sig":"MEUCIQCWrnbciDkArE5cmIObpG4pR8hVHbN9Id5IWZNqKcrKlwIgYo6uGWpBhelfgojdvWm4yagPP5EuZLJIaKmGfsG28qs=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":64070},"main":"build/index.js","types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\n[![Publish Documentation](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml/badge.svg)](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml)\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=14.2.0"},"gitHead":"53f30a7bc0b9c331031bccfb57f9429605cb39f9","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest,typedoc","test":"npm run lint && npm run test:unit","build":"npm run clean && tsc -p tsconfig.build.json","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint:fix":"balena-lint --fix lib test","test:unit":"jest"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"versionist":{"publishedAt":"2021-10-20T08:26:08.444Z"},"_npmVersion":"6.14.15","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --fix"]},"_nodeVersion":"14.17.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.3.0","@balena/jellyfish-logger":"^3.0.87"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^27.2.1","sinon":"^11.1.2","deplint":"^1.1.3","ts-jest":"^27.0.5","typedoc":"^0.22.4","depcheck":"^1.4.2","typescript":"^4.4.3","@types/jest":"^27.0.2","lint-staged":"^11.1.2","@balena/lint":"^6.1.1","@types/sinon":"^10.0.3","@types/semver":"^7.3.8","simple-git-hooks":"^2.6.1","@balena/jellycheck":"^0.1.3","@types/json-schema":"~6.0.1","@balena/jellyfish-types":"^1.2.4","@balena/jellyfish-config":"^1.5.4"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.247-renovate-internal-patch-53f30a7bc0b9c331031bccfb57f9429605cb39f9_1634718582667_0.7021770626156503","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.247":{"name":"@balena/jellyfish-plugin-base","version":"2.1.247","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.1.247","maintainers":[{"name":"pranavbalena","email":"pranav@balena.io"},{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"8776d1f46dbb79c30acc3c4b6da2cc908bc78d4b","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.247.tgz","fileCount":18,"integrity":"sha512-oY+qArt269e0b3VEjpvqn93uyPfFbLuj4MMAAF6zoCgMt5aJ+382C06rL5ZcZd2EFN/iUTtbhYMkJV8Uu0DsBw==","signatures":[{"sig":"MEQCIEfxj/S9ZQx3T4xe/3rH1+eE8fPHiyejew1i8D9KANoPAiBg/NZDFr1TkzNVm7LzNc+oQWHLvAp7wl3eg4kTWNyPlA==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":64005},"main":"build/index.js","types":"build/index.d.ts","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=14.2.0"},"gitHead":"0e658dcebd3fe05a1371fe10d864dfa2ea22c1e1","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest,typedoc","test":"npm run lint && npm run test:unit","build":"npm run clean && tsc -p tsconfig.build.json","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint:fix":"balena-lint --fix lib test","test:unit":"jest"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"versionist":{"publishedAt":"2021-10-20T08:31:17.948Z"},"_npmVersion":"6.14.15","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --fix"]},"_nodeVersion":"14.17.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.3.0","@balena/jellyfish-logger":"^3.0.87"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^27.2.1","sinon":"^11.1.2","deplint":"^1.1.3","ts-jest":"^27.0.5","typedoc":"^0.22.4","depcheck":"^1.4.2","typescript":"^4.4.3","@types/jest":"^27.0.2","lint-staged":"^11.1.2","@balena/lint":"^6.1.1","@types/sinon":"^10.0.3","@types/semver":"^7.3.8","simple-git-hooks":"^2.6.1","@balena/jellycheck":"^0.1.3","@types/json-schema":"~6.0.1","@balena/jellyfish-types":"^1.2.4","@balena/jellyfish-config":"^1.5.4"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.247_1634718779996_0.10082719164107368","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.248-renovate-external-non-major-42189dfe9cf99e1b824f8312e0178f1618fa333e":{"name":"@balena/jellyfish-plugin-base","version":"2.1.248-renovate-external-non-major-42189dfe9cf99e1b824f8312e0178f1618fa333e","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.1.248-renovate-external-non-major-42189dfe9cf99e1b824f8312e0178f1618fa333e","maintainers":[{"name":"pranavbalena","email":"pranav@balena.io"},{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"6ddc38cc4e79961f71bb8e74072a8706deabdc6e","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.248-renovate-external-non-major-42189dfe9cf99e1b824f8312e0178f1618fa333e.tgz","fileCount":18,"integrity":"sha512-zMOk18GMwwBPPvicW2FN4YH7+RXuCv8W08UfALGZf/2sVvzFkc8Me23clc/fOmgUAKwxxc0qWjF8PijGA3UDJA==","signatures":[{"sig":"MEUCIDLR2/T6cHGaOkPvHm3kZHKcI2KBJFKxpCxh0a7WWtdpAiEA2Cf9n/iR5Es5NY5jHedUOdScn5qaQcAppgTs11MzSsY=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":64150},"main":"build/index.js","types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\n[![Publish Documentation](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml/badge.svg)](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml)\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=14.2.0"},"gitHead":"42189dfe9cf99e1b824f8312e0178f1618fa333e","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest,typedoc","test":"npm run lint && npm run test:unit","build":"npm run clean && tsc -p tsconfig.build.json","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint:fix":"balena-lint --fix lib test","test:unit":"jest"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"versionist":{"publishedAt":"2021-10-23T00:26:08.301Z"},"_npmVersion":"6.14.15","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --fix"]},"_nodeVersion":"14.17.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.3.0","@balena/jellyfish-logger":"^3.0.87"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^27.3.1","sinon":"^11.1.2","deplint":"^1.1.3","ts-jest":"^27.0.7","typedoc":"^0.22.6","depcheck":"^1.4.2","typescript":"^4.4.4","@types/jest":"^27.0.2","lint-staged":"^11.2.3","@balena/lint":"^6.1.1","@types/sinon":"^10.0.4","@types/semver":"^7.3.9","simple-git-hooks":"^2.6.1","@balena/jellycheck":"^0.1.3","@types/json-schema":"~6.0.1","@balena/jellyfish-types":"^1.2.4","@balena/jellyfish-config":"^1.5.4"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.248-renovate-external-non-major-42189dfe9cf99e1b824f8312e0178f1618fa333e_1634948957426_0.7573672521241801","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.248":{"name":"@balena/jellyfish-plugin-base","version":"2.1.248","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.1.248","maintainers":[{"name":"pranavbalena","email":"pranav@balena.io"},{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"86548d66bf57b1e52f4b765b05b74906ca6de3c6","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.248.tgz","fileCount":18,"integrity":"sha512-Gx8fm/jWuQhMofhAlYANv2NFHEYioXf//P7WO+AMoUw3eyCJ6hPbU5/+Nhe3HpZUloJUf34F4EFbH56n9Xuclg==","signatures":[{"sig":"MEYCIQDYuhgAduYG3RQHZ7X3cYbbsTNusck3St9OHOYLoB5ZgAIhAJNUe33Wbmy1m9HOM6B1ArltvXlW9K7c2CP9w6nrod+I","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":64081},"main":"build/index.js","types":"build/index.d.ts","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=14.2.0"},"gitHead":"cf01396f1a76d0762ed121a935afa317e1f1278d","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest,typedoc","test":"npm run lint && npm run test:unit","build":"npm run clean && tsc -p tsconfig.build.json","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint:fix":"balena-lint --fix lib test","test:unit":"jest"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"versionist":{"publishedAt":"2021-10-23T00:30:46.185Z"},"_npmVersion":"6.14.15","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --fix"]},"_nodeVersion":"14.17.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.3.0","@balena/jellyfish-logger":"^3.0.87"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^27.3.1","sinon":"^11.1.2","deplint":"^1.1.3","ts-jest":"^27.0.7","typedoc":"^0.22.6","depcheck":"^1.4.2","typescript":"^4.4.4","@types/jest":"^27.0.2","lint-staged":"^11.2.3","@balena/lint":"^6.1.1","@types/sinon":"^10.0.4","@types/semver":"^7.3.9","simple-git-hooks":"^2.6.1","@balena/jellycheck":"^0.1.3","@types/json-schema":"~6.0.1","@balena/jellyfish-types":"^1.2.4","@balena/jellyfish-config":"^1.5.4"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.248_1634949176394_0.5542166529844561","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.249-renovate-internal-patch-0968ce1d328bfd1ad1290cbe390e8829240b1aed":{"name":"@balena/jellyfish-plugin-base","version":"2.1.249-renovate-internal-patch-0968ce1d328bfd1ad1290cbe390e8829240b1aed","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.1.249-renovate-internal-patch-0968ce1d328bfd1ad1290cbe390e8829240b1aed","maintainers":[{"name":"pranavbalena","email":"pranav@balena.io"},{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"eaeebdb0e7cd831b76456da90d82af4311c82a53","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.249-renovate-internal-patch-0968ce1d328bfd1ad1290cbe390e8829240b1aed.tgz","fileCount":18,"integrity":"sha512-3o88Otag9SQPeCMQ2lnATP6SaPMAqs6x+ZNRhHHfhCF01eir0agBclL5TTnBNsKl1YZdrn2AvYWAaQJXpHThsg==","signatures":[{"sig":"MEQCIArgdDSGbHiLzC3nUraiwBmJcliAbdzpIuHyAuFUqt22AiAnWsNtqY/7rsCdKFXI7gRf+Z7r1eNEiCqmdZ5JAZLGyw==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":64218},"main":"build/index.js","types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\n[![Publish Documentation](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml/badge.svg)](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml)\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=14.2.0"},"gitHead":"0968ce1d328bfd1ad1290cbe390e8829240b1aed","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest,typedoc","test":"npm run lint && npm run test:unit","build":"npm run clean && tsc -p tsconfig.build.json","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint:fix":"balena-lint --fix lib test","test:unit":"jest"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"versionist":{"publishedAt":"2021-10-23T02:52:39.366Z"},"_npmVersion":"6.14.15","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --fix"]},"_nodeVersion":"14.17.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.3.0","@balena/jellyfish-logger":"^3.0.89"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^27.3.1","sinon":"^11.1.2","deplint":"^1.1.3","ts-jest":"^27.0.7","typedoc":"^0.22.6","depcheck":"^1.4.2","typescript":"^4.4.4","@types/jest":"^27.0.2","lint-staged":"^11.2.3","@balena/lint":"^6.1.1","@types/sinon":"^10.0.4","@types/semver":"^7.3.9","simple-git-hooks":"^2.6.1","@balena/jellycheck":"^0.1.3","@types/json-schema":"~6.0.1","@balena/jellyfish-types":"^1.2.6","@balena/jellyfish-config":"^1.5.5"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.249-renovate-internal-patch-0968ce1d328bfd1ad1290cbe390e8829240b1aed_1634957747307_0.7999123696870492","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.249":{"name":"@balena/jellyfish-plugin-base","version":"2.1.249","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.1.249","maintainers":[{"name":"pranavbalena","email":"pranav@balena.io"},{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"3d4df513a499107d22f0a9b6291ab7ebf768807e","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.249.tgz","fileCount":18,"integrity":"sha512-yI9vuiPajS8XM0rQOW41H1ytwLed4rTzsst/JwOWNqzDLSYg/LhkSnXyRKoxLIs4wxzjL6RF9jpRXhWtIA7u9g==","signatures":[{"sig":"MEYCIQDHutyErL1AzdbG5XCnp0QPGGQhWhEZ4RNgJ2zzKwBh/QIhAJB00CO4JMk6JJRzdSFvgkBDj/v1ibzstOh6/VHRWlD3","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":64153},"main":"build/index.js","types":"build/index.d.ts","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=14.2.0"},"gitHead":"07b2449a8a4e1e1aeef2c024a04cfff053d8eb30","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest,typedoc","test":"npm run lint && npm run test:unit","build":"npm run clean && tsc -p tsconfig.build.json","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint:fix":"balena-lint --fix lib test","test:unit":"jest"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"versionist":{"publishedAt":"2021-10-23T02:57:38.914Z"},"_npmVersion":"6.14.15","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --fix"]},"_nodeVersion":"14.17.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.3.0","@balena/jellyfish-logger":"^3.0.89"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^27.3.1","sinon":"^11.1.2","deplint":"^1.1.3","ts-jest":"^27.0.7","typedoc":"^0.22.6","depcheck":"^1.4.2","typescript":"^4.4.4","@types/jest":"^27.0.2","lint-staged":"^11.2.3","@balena/lint":"^6.1.1","@types/sinon":"^10.0.4","@types/semver":"^7.3.9","simple-git-hooks":"^2.6.1","@balena/jellycheck":"^0.1.3","@types/json-schema":"~6.0.1","@balena/jellyfish-types":"^1.2.6","@balena/jellyfish-config":"^1.5.5"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.249_1634957965692_0.2983078577580529","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.250-renovate-internal-patch-3df91dfb09002e272a2f26c6485fd3ed94d3a00e":{"name":"@balena/jellyfish-plugin-base","version":"2.1.250-renovate-internal-patch-3df91dfb09002e272a2f26c6485fd3ed94d3a00e","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.1.250-renovate-internal-patch-3df91dfb09002e272a2f26c6485fd3ed94d3a00e","maintainers":[{"name":"pranavbalena","email":"pranav@balena.io"},{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"6be27ef48dad89e15f211bb46f0e49d203ba16c9","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.250-renovate-internal-patch-3df91dfb09002e272a2f26c6485fd3ed94d3a00e.tgz","fileCount":18,"integrity":"sha512-LMDh9cShx9pI0QM9O8fuj1/lFL0JJKRewp7XqpuFf88z7/PhdrpAe4+LPJ10z+oRhRvgDr8PH7SvK9S0l0W4sA==","signatures":[{"sig":"MEYCIQCeKOOc5c/7w+bX7nWIoeyYDBXEvNGTBIfaeoFMcxSFiQIhAOLeAmmwMDFwtWP2mW7KHgyvsxcmtaF5v7jDpoKsB3b1","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":64322},"main":"build/index.js","types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\n[![Publish Documentation](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml/badge.svg)](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml)\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=14.2.0"},"gitHead":"3df91dfb09002e272a2f26c6485fd3ed94d3a00e","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest,typedoc","test":"npm run lint && npm run test:unit","build":"npm run clean && tsc -p tsconfig.build.json","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint:fix":"balena-lint --fix lib test","test:unit":"jest"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"versionist":{"publishedAt":"2021-10-23T04:30:38.798Z"},"_npmVersion":"6.14.15","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --fix"]},"_nodeVersion":"14.17.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.3.0","@balena/jellyfish-logger":"^3.0.90"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^27.3.1","sinon":"^11.1.2","deplint":"^1.1.3","ts-jest":"^27.0.7","typedoc":"^0.22.6","depcheck":"^1.4.2","typescript":"^4.4.4","@types/jest":"^27.0.2","lint-staged":"^11.2.3","@balena/lint":"^6.1.1","@types/sinon":"^10.0.4","@types/semver":"^7.3.9","simple-git-hooks":"^2.6.1","@balena/jellycheck":"^0.1.3","@types/json-schema":"~6.0.1","@balena/jellyfish-types":"^1.2.6","@balena/jellyfish-config":"^1.5.5"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.250-renovate-internal-patch-3df91dfb09002e272a2f26c6485fd3ed94d3a00e_1634963662944_0.7511278900786988","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.250":{"name":"@balena/jellyfish-plugin-base","version":"2.1.250","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.1.250","maintainers":[{"name":"pranavbalena","email":"pranav@balena.io"},{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"eae354798d04940206fa40ece6c03d366af6d4ca","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.250.tgz","fileCount":18,"integrity":"sha512-PhVgPmmDLX3moXX3VDyBBpMu+Vr/y4P2U4oEMA3LpVZXRxx2gktwmQNwx6sMa3vwSp4npAq1iX/DV2p7t31iGw==","signatures":[{"sig":"MEUCIQDhox4QxVrapKO1vPhcTgn8PEbzayM3lcwPvj8BJpN2igIgDD6I3b5ORIp+Iu1vxAtgFW8RFIcAty8OLsZKgT63miY=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":64257},"main":"build/index.js","types":"build/index.d.ts","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=14.2.0"},"gitHead":"9e2bef43eb5f96ef8c153d864e94dc419854c64b","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest,typedoc","test":"npm run lint && npm run test:unit","build":"npm run clean && tsc -p tsconfig.build.json","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint:fix":"balena-lint --fix lib test","test:unit":"jest"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"versionist":{"publishedAt":"2021-10-23T04:36:28.691Z"},"_npmVersion":"6.14.15","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --fix"]},"_nodeVersion":"14.17.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.3.0","@balena/jellyfish-logger":"^3.0.90"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^27.3.1","sinon":"^11.1.2","deplint":"^1.1.3","ts-jest":"^27.0.7","typedoc":"^0.22.6","depcheck":"^1.4.2","typescript":"^4.4.4","@types/jest":"^27.0.2","lint-staged":"^11.2.3","@balena/lint":"^6.1.1","@types/sinon":"^10.0.4","@types/semver":"^7.3.9","simple-git-hooks":"^2.6.1","@balena/jellycheck":"^0.1.3","@types/json-schema":"~6.0.1","@balena/jellyfish-types":"^1.2.6","@balena/jellyfish-config":"^1.5.5"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.250_1634963894440_0.5055507618236457","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.251-renovate-internal-patch-b2e995d3cac00306cb0c63834c1a0875cdc080a6":{"name":"@balena/jellyfish-plugin-base","version":"2.1.251-renovate-internal-patch-b2e995d3cac00306cb0c63834c1a0875cdc080a6","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.1.251-renovate-internal-patch-b2e995d3cac00306cb0c63834c1a0875cdc080a6","maintainers":[{"name":"pranavbalena","email":"pranav@balena.io"},{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"b75db3d565f1f9e0442a957e72af2db5e3c91fc4","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.251-renovate-internal-patch-b2e995d3cac00306cb0c63834c1a0875cdc080a6.tgz","fileCount":18,"integrity":"sha512-OyfL+LZEG5IH/QfPSLzaUwSgTCbJhxVW77c2SVfagPRkvvhxYXw9HWloGASYe7dC+DAibqitGf9NK17ibCykZg==","signatures":[{"sig":"MEUCIBj+ajrW26W8HloIUSkYMK+2EAmdcmwm23ExrXOlsYB7AiEA+YJuay+a2QTpsr99aIrEtqfP53EX9+K9Tki+J1nnzFA=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":64426},"main":"build/index.js","types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\n[![Publish Documentation](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml/badge.svg)](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml)\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=14.2.0"},"gitHead":"b2e995d3cac00306cb0c63834c1a0875cdc080a6","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest,typedoc","test":"npm run lint && npm run test:unit","build":"npm run clean && tsc -p tsconfig.build.json","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint:fix":"balena-lint --fix lib test","test:unit":"jest"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"versionist":{"publishedAt":"2021-10-23T09:38:28.500Z"},"_npmVersion":"6.14.15","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --fix"]},"_nodeVersion":"14.17.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.3.0","@balena/jellyfish-logger":"^3.0.91"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^27.3.1","sinon":"^11.1.2","deplint":"^1.1.3","ts-jest":"^27.0.7","typedoc":"^0.22.6","depcheck":"^1.4.2","typescript":"^4.4.4","@types/jest":"^27.0.2","lint-staged":"^11.2.3","@balena/lint":"^6.1.1","@types/sinon":"^10.0.4","@types/semver":"^7.3.9","simple-git-hooks":"^2.6.1","@balena/jellycheck":"^0.1.3","@types/json-schema":"~6.0.1","@balena/jellyfish-types":"^1.2.6","@balena/jellyfish-config":"^1.5.5"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.251-renovate-internal-patch-b2e995d3cac00306cb0c63834c1a0875cdc080a6_1634982090959_0.16480010241617116","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.251":{"name":"@balena/jellyfish-plugin-base","version":"2.1.251","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.1.251","maintainers":[{"name":"pranavbalena","email":"pranav@balena.io"},{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"63b0c159fdbb578ac32ebd4f764700e74fe73c71","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.251.tgz","fileCount":18,"integrity":"sha512-UzGYKCxV6olfOIvssrP4g7g753byQhGVuFQSIE5sVmM94MSDPdUmlGdbrzcho35XjnDF37sVeCVSaI/mGMLSDw==","signatures":[{"sig":"MEYCIQDQjVe7orttm8fqMevh3QdhYN0P/LfpDuVA3ilKPa9RWAIhANrrdf7uTeYejMVZTfbbj2vSgxAG+dUfPdDhgDJuC+ao","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":64361},"main":"build/index.js","types":"build/index.d.ts","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=14.2.0"},"gitHead":"56718e38e705b539fa00fd1193c47335c6cb506a","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest,typedoc","test":"npm run lint && npm run test:unit","build":"npm run clean && tsc -p tsconfig.build.json","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint:fix":"balena-lint --fix lib test","test:unit":"jest"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"versionist":{"publishedAt":"2021-10-23T09:43:49.281Z"},"_npmVersion":"6.14.15","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --fix"]},"_nodeVersion":"14.17.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.3.0","@balena/jellyfish-logger":"^3.0.91"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^27.3.1","sinon":"^11.1.2","deplint":"^1.1.3","ts-jest":"^27.0.7","typedoc":"^0.22.6","depcheck":"^1.4.2","typescript":"^4.4.4","@types/jest":"^27.0.2","lint-staged":"^11.2.3","@balena/lint":"^6.1.1","@types/sinon":"^10.0.4","@types/semver":"^7.3.9","simple-git-hooks":"^2.6.1","@balena/jellycheck":"^0.1.3","@types/json-schema":"~6.0.1","@balena/jellyfish-types":"^1.2.6","@balena/jellyfish-config":"^1.5.5"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.251_1634982348992_0.25885978261301057","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.252-renovate-external-non-major-15c09de975cc665824e10b2f1002c5754f03c0d1":{"name":"@balena/jellyfish-plugin-base","version":"2.1.252-renovate-external-non-major-15c09de975cc665824e10b2f1002c5754f03c0d1","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.1.252-renovate-external-non-major-15c09de975cc665824e10b2f1002c5754f03c0d1","maintainers":[{"name":"pranavbalena","email":"pranav@balena.io"},{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"0821b7f090add4338f60a3b9fa23f41ce80af2cf","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.252-renovate-external-non-major-15c09de975cc665824e10b2f1002c5754f03c0d1.tgz","fileCount":18,"integrity":"sha512-nuJOHOUUaLsAhor+tIImTvAna+HXrXokWq9ZhNgpiClxbXGqrGWo8uJsOGD+4X4y65OTIjgPlWZSnKTTKTIZXA==","signatures":[{"sig":"MEUCIEp5YWhrDnagGEG+k7cUp9oc/WkGyhBIHPmCw/Byh3uAAiEAgNstuCRevAySBxfIw7x5/+ZPuHmVK7CLN68FjbX9G28=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":64506},"main":"build/index.js","types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\n[![Publish Documentation](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml/badge.svg)](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml)\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=14.2.0"},"gitHead":"15c09de975cc665824e10b2f1002c5754f03c0d1","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest,typedoc","test":"npm run lint && npm run test:unit","build":"npm run clean && tsc -p tsconfig.build.json","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint:fix":"balena-lint --fix lib test","test:unit":"jest"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"versionist":{"publishedAt":"2021-10-23T21:46:07.630Z"},"_npmVersion":"6.14.15","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --fix"]},"_nodeVersion":"14.17.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.3.0","@balena/jellyfish-logger":"^3.0.91"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^27.3.1","sinon":"^11.1.2","deplint":"^1.1.3","ts-jest":"^27.0.7","typedoc":"^0.22.6","depcheck":"^1.4.2","typescript":"^4.4.4","@types/jest":"^27.0.2","lint-staged":"^11.2.4","@balena/lint":"^6.1.1","@types/sinon":"^10.0.5","@types/semver":"^7.3.9","simple-git-hooks":"^2.6.1","@balena/jellycheck":"^0.1.3","@types/json-schema":"~6.0.1","@balena/jellyfish-types":"^1.2.6","@balena/jellyfish-config":"^1.5.5"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.252-renovate-external-non-major-15c09de975cc665824e10b2f1002c5754f03c0d1_1635025718022_0.7773150614336004","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.252-renovate-internal-patch-76f7b312bcf392dfb72a78e18af4eae06c381de3":{"name":"@balena/jellyfish-plugin-base","version":"2.1.252-renovate-internal-patch-76f7b312bcf392dfb72a78e18af4eae06c381de3","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.1.252-renovate-internal-patch-76f7b312bcf392dfb72a78e18af4eae06c381de3","maintainers":[{"name":"pranavbalena","email":"pranav@balena.io"},{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"bbd2203505ecd4c6a191319efdd0a5d82aa65325","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.252-renovate-internal-patch-76f7b312bcf392dfb72a78e18af4eae06c381de3.tgz","fileCount":18,"integrity":"sha512-2olJpCzqixlprYerM5RcKEMMPOC9tvLntykYBMnZ1VRel+9R0MRX7rW0wKd5DXFDPekMEClzmgtFSJI+HMXkbQ==","signatures":[{"sig":"MEQCIQCW8Bbiwa9Zp6RVa7JHA0hVbtMC9Lbf3/WussS8E+7cSAIfZ0O/1nwEUXskPcXLXkVq7omgn/vKk2F/vBT8vmTnwA==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":64498},"main":"build/index.js","types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\n[![Publish Documentation](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml/badge.svg)](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml)\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=14.2.0"},"gitHead":"76f7b312bcf392dfb72a78e18af4eae06c381de3","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest,typedoc","test":"npm run lint && npm run test:unit","build":"npm run clean && tsc -p tsconfig.build.json","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint:fix":"balena-lint --fix lib test","test:unit":"jest"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"versionist":{"publishedAt":"2021-10-23T21:45:38.724Z"},"_npmVersion":"6.14.15","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --fix"]},"_nodeVersion":"14.17.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.3.0","@balena/jellyfish-logger":"^3.0.93"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^27.3.1","sinon":"^11.1.2","deplint":"^1.1.3","ts-jest":"^27.0.7","typedoc":"^0.22.6","depcheck":"^1.4.2","typescript":"^4.4.4","@types/jest":"^27.0.2","lint-staged":"^11.2.3","@balena/lint":"^6.1.1","@types/sinon":"^10.0.4","@types/semver":"^7.3.9","simple-git-hooks":"^2.6.1","@balena/jellycheck":"^0.1.3","@types/json-schema":"~6.0.1","@balena/jellyfish-types":"^1.2.7","@balena/jellyfish-config":"^1.5.5"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.252-renovate-internal-patch-76f7b312bcf392dfb72a78e18af4eae06c381de3_1635025733476_0.8735852066570005","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.252":{"name":"@balena/jellyfish-plugin-base","version":"2.1.252","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.1.252","maintainers":[{"name":"pranavbalena","email":"pranav@balena.io"},{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"38a6569440c2cde1d0283fd3cea95b915ac8bb91","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.252.tgz","fileCount":18,"integrity":"sha512-bEUenEUT9uGVsXnXSYeFwhLDSMoCLsaszVPiBbvew3Z8SayRC5Je33OXcVwC6JkkThj4Or87TXS6VGrI5o+lhw==","signatures":[{"sig":"MEYCIQDdkq9gKwPOXY7EpSgLRFJh4mJyxZSY8IOpwqvxGsPeuQIhAN172gKAnMJ37a0oftN8/i5GT4t658vDweIzeuIIM/O7","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":64437},"main":"build/index.js","types":"build/index.d.ts","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=14.2.0"},"gitHead":"a78f2092a2968e0d1b2f6e9c6735a3aa33216f4a","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest,typedoc","test":"npm run lint && npm run test:unit","build":"npm run clean && tsc -p tsconfig.build.json","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint:fix":"balena-lint --fix lib test","test:unit":"jest"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"versionist":{"publishedAt":"2021-10-23T21:50:19.295Z"},"_npmVersion":"6.14.15","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --fix"]},"_nodeVersion":"14.17.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.3.0","@balena/jellyfish-logger":"^3.0.91"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^27.3.1","sinon":"^11.1.2","deplint":"^1.1.3","ts-jest":"^27.0.7","typedoc":"^0.22.6","depcheck":"^1.4.2","typescript":"^4.4.4","@types/jest":"^27.0.2","lint-staged":"^11.2.4","@balena/lint":"^6.1.1","@types/sinon":"^10.0.5","@types/semver":"^7.3.9","simple-git-hooks":"^2.6.1","@balena/jellycheck":"^0.1.3","@types/json-schema":"~6.0.1","@balena/jellyfish-types":"^1.2.6","@balena/jellyfish-config":"^1.5.5"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.252_1635025923504_0.3096556502023591","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.253-renovate-internal-patch-ec5c7aae38bbf42f901a65c311dbae2d4615b5e8":{"name":"@balena/jellyfish-plugin-base","version":"2.1.253-renovate-internal-patch-ec5c7aae38bbf42f901a65c311dbae2d4615b5e8","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.1.253-renovate-internal-patch-ec5c7aae38bbf42f901a65c311dbae2d4615b5e8","maintainers":[{"name":"pranavbalena","email":"pranav@balena.io"},{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"f24f8604af58c0a585913f9e76fca409e58eeefa","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.253-renovate-internal-patch-ec5c7aae38bbf42f901a65c311dbae2d4615b5e8.tgz","fileCount":18,"integrity":"sha512-ctG6M5sFe2tVpXwHUd92jEIN3W5L0w7X08/0++GSE+dJamDLznfYySjJ/YYa6CfGGGm8NtfeRnAivZIfMSJGbw==","signatures":[{"sig":"MEUCIHeobKRpag4U2ueD3t8E2fhRrE+Jxj8GEDnFco8oL8FfAiEA8oIbnoqjK60p2wg8am7HYkCtwHrtgIdb2CEob6QK7YI=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":64574},"main":"build/index.js","types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\n[![Publish Documentation](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml/badge.svg)](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml)\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=14.2.0"},"gitHead":"ec5c7aae38bbf42f901a65c311dbae2d4615b5e8","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest,typedoc","test":"npm run lint && npm run test:unit","build":"npm run clean && tsc -p tsconfig.build.json","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint:fix":"balena-lint --fix lib test","test:unit":"jest"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"versionist":{"publishedAt":"2021-10-23T21:55:49.480Z"},"_npmVersion":"6.14.15","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --fix"]},"_nodeVersion":"14.17.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.3.0","@balena/jellyfish-logger":"^3.0.93"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^27.3.1","sinon":"^11.1.2","deplint":"^1.1.3","ts-jest":"^27.0.7","typedoc":"^0.22.6","depcheck":"^1.4.2","typescript":"^4.4.4","@types/jest":"^27.0.2","lint-staged":"^11.2.4","@balena/lint":"^6.1.1","@types/sinon":"^10.0.5","@types/semver":"^7.3.9","simple-git-hooks":"^2.6.1","@balena/jellycheck":"^0.1.3","@types/json-schema":"~6.0.1","@balena/jellyfish-types":"^1.2.7","@balena/jellyfish-config":"^1.5.5"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.253-renovate-internal-patch-ec5c7aae38bbf42f901a65c311dbae2d4615b5e8_1635026334763_0.6202713857749531","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.253":{"name":"@balena/jellyfish-plugin-base","version":"2.1.253","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.1.253","maintainers":[{"name":"pranavbalena","email":"pranav@balena.io"},{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"page","email":"page@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"b33b2d7d53652f791223a865f886b562b4dc061b","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.253.tgz","fileCount":18,"integrity":"sha512-IcgcAoyWwdUn4d3d4rY8GEuvHzW8936R3TH4glyGL++aEoEhrJaZYmqQWjeeTA0tE2M2OTCQ8486Zl3PJW+MhA==","signatures":[{"sig":"MEUCIEO7kyYdi3XKU0t2RkNQ9NxhkSF+GCIAoDiiLB0CR9vaAiEAu4c+IcjQHH+0xPpk6QZzEnHBla9ClcIieF4nWX9YWW0=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":64509},"main":"build/index.js","types":"build/index.d.ts","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=14.2.0"},"gitHead":"ffe1deede526b57001af0b96aab1364619bb2fff","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest,typedoc","test":"npm run lint && npm run test:unit","build":"npm run clean && tsc -p tsconfig.build.json","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint:fix":"balena-lint --fix lib test","test:unit":"jest"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"versionist":{"publishedAt":"2021-10-23T22:00:17.030Z"},"_npmVersion":"6.14.15","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --fix"]},"_nodeVersion":"14.17.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.3.0","@balena/jellyfish-logger":"^3.0.93"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^27.3.1","sinon":"^11.1.2","deplint":"^1.1.3","ts-jest":"^27.0.7","typedoc":"^0.22.6","depcheck":"^1.4.2","typescript":"^4.4.4","@types/jest":"^27.0.2","lint-staged":"^11.2.4","@balena/lint":"^6.1.1","@types/sinon":"^10.0.5","@types/semver":"^7.3.9","simple-git-hooks":"^2.6.1","@balena/jellycheck":"^0.1.3","@types/json-schema":"~6.0.1","@balena/jellyfish-types":"^1.2.7","@balena/jellyfish-config":"^1.5.5"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.253_1635026565445_0.7043592530090657","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.254-renovate-internal-patch-a2300c5df37029fb997f35485577f44df67eb66b":{"name":"@balena/jellyfish-plugin-base","version":"2.1.254-renovate-internal-patch-a2300c5df37029fb997f35485577f44df67eb66b","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.1.254-renovate-internal-patch-a2300c5df37029fb997f35485577f44df67eb66b","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"ef2082393e1cedae458935191fb30d53c07b8c6e","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.254-renovate-internal-patch-a2300c5df37029fb997f35485577f44df67eb66b.tgz","fileCount":18,"integrity":"sha512-zDiM1rIzUnbgAL6cEN2ZWaT9YFZBuEa7JIOQu66cOkIDacchmdKTYwDFliE0LvJAT0dxR2nk3ww0u8XZCH8M1Q==","signatures":[{"sig":"MEYCIQDyEZarONY6RAzQ1nJWCvYkB0KMvpRPE5r8E+vu1xbC6wIhAKbdmK1LZXIomhcevcl8b6bH9Wil1WCN5lj/stElRp93","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":64646},"main":"build/index.js","types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\n[![Publish Documentation](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml/badge.svg)](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml)\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=14.2.0"},"gitHead":"a2300c5df37029fb997f35485577f44df67eb66b","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest,typedoc","test":"npm run lint && npm run test:unit","build":"npm run clean && tsc -p tsconfig.build.json","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint:fix":"balena-lint --fix lib test","test:unit":"jest"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"versionist":{"publishedAt":"2021-10-28T05:17:57.772Z"},"_npmVersion":"6.14.15","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --fix"]},"_nodeVersion":"14.17.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.3.0","@balena/jellyfish-logger":"^3.0.95"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^27.3.1","sinon":"^11.1.2","deplint":"^1.1.3","ts-jest":"^27.0.7","typedoc":"^0.22.6","depcheck":"^1.4.2","typescript":"^4.4.4","@types/jest":"^27.0.2","lint-staged":"^11.2.4","@balena/lint":"^6.1.1","@types/sinon":"^10.0.5","@types/semver":"^7.3.9","simple-git-hooks":"^2.6.1","@balena/jellycheck":"^0.1.4","@types/json-schema":"~6.0.1","@balena/jellyfish-types":"^1.2.8","@balena/jellyfish-config":"^1.5.5"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.254-renovate-internal-patch-a2300c5df37029fb997f35485577f44df67eb66b_1635398457082_0.5405290801562879","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.254":{"name":"@balena/jellyfish-plugin-base","version":"2.1.254","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.1.254","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"7189e8943d1fb8b9f82dc6573eeffa2e7ed1e8cd","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.254.tgz","fileCount":18,"integrity":"sha512-6adnBWeFiiaSboKDPV6ySBymRLza1j/V9FbdbzhqRIPlJq4Gs0BVz/Das60/4fpwA5NQTG2V8MciGThttz0XBg==","signatures":[{"sig":"MEUCIFqit/A8RZT7zvJQDs0mJfMy5U1ToPXmMovIi4/IIBObAiEA94yyLyKMUmzUXjp4gGMBopHKVeb4zbKmKDo+SVZi8R8=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":64581},"main":"build/index.js","types":"build/index.d.ts","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=14.2.0"},"gitHead":"fd46cbdc668b9f2bb7b5df85b141d28193aba7f3","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest,typedoc","test":"npm run lint && npm run test:unit","build":"npm run clean && tsc -p tsconfig.build.json","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint:fix":"balena-lint --fix lib test","test:unit":"jest"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"versionist":{"publishedAt":"2021-10-28T05:22:58.385Z"},"_npmVersion":"6.14.15","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --fix"]},"_nodeVersion":"14.17.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.3.0","@balena/jellyfish-logger":"^3.0.95"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^27.3.1","sinon":"^11.1.2","deplint":"^1.1.3","ts-jest":"^27.0.7","typedoc":"^0.22.6","depcheck":"^1.4.2","typescript":"^4.4.4","@types/jest":"^27.0.2","lint-staged":"^11.2.4","@balena/lint":"^6.1.1","@types/sinon":"^10.0.5","@types/semver":"^7.3.9","simple-git-hooks":"^2.6.1","@balena/jellycheck":"^0.1.4","@types/json-schema":"~6.0.1","@balena/jellyfish-types":"^1.2.8","@balena/jellyfish-config":"^1.5.5"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.254_1635398679658_0.7114371742087529","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.255-renovate-internal-patch-352b46a730afffe8551b2590223d16864923fb05":{"name":"@balena/jellyfish-plugin-base","version":"2.1.255-renovate-internal-patch-352b46a730afffe8551b2590223d16864923fb05","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.1.255-renovate-internal-patch-352b46a730afffe8551b2590223d16864923fb05","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"e98b66813697efb4b71bc4461875a96ceb77acd2","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.255-renovate-internal-patch-352b46a730afffe8551b2590223d16864923fb05.tgz","fileCount":18,"integrity":"sha512-a0YWfdKUwaBJVGRhjDjMc7AfqqRzRpTM0jlrO8x/GoBR2C80gFgv4O3ffr74JEUMbqQoWs4T3dFTygL3bGv9HA==","signatures":[{"sig":"MEQCIEvEfDUVP4JKWb980Mi0q9DQ4lBDeSc971b6Npd/lWWiAiBPIQBErHGiBmnx0GIzlQVyW8n330n/tFjmVowmkt1/nA==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":64718},"main":"build/index.js","types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\n[![Publish Documentation](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml/badge.svg)](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml)\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=14.2.0"},"gitHead":"352b46a730afffe8551b2590223d16864923fb05","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest,typedoc","test":"npm run lint && npm run test:unit","build":"npm run clean && tsc -p tsconfig.build.json","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint:fix":"balena-lint --fix lib test","test:unit":"jest"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"versionist":{"publishedAt":"2021-10-28T10:36:59.930Z"},"_npmVersion":"6.14.15","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --fix"]},"_nodeVersion":"14.17.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.3.0","@balena/jellyfish-logger":"^3.0.95"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^27.3.1","sinon":"^11.1.2","deplint":"^1.1.3","ts-jest":"^27.0.7","typedoc":"^0.22.6","depcheck":"^1.4.2","typescript":"^4.4.4","@types/jest":"^27.0.2","lint-staged":"^11.2.4","@balena/lint":"^6.1.1","@types/sinon":"^10.0.5","@types/semver":"^7.3.9","simple-git-hooks":"^2.6.1","@balena/jellycheck":"^0.1.5","@types/json-schema":"~6.0.1","@balena/jellyfish-types":"^1.2.8","@balena/jellyfish-config":"^1.5.6"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.255-renovate-internal-patch-352b46a730afffe8551b2590223d16864923fb05_1635417595012_0.12368638247244745","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.255":{"name":"@balena/jellyfish-plugin-base","version":"2.1.255","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.1.255","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"0a8eab7043dc878fbd6299d05e782ef2c5fb5f8b","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.255.tgz","fileCount":18,"integrity":"sha512-CCAUf581u5f48J4kqNtDDE4GVHLdrhjAyARqshHlUOvnrvvHfLsMWg4+1X8EVtMknF+s1exZP6XdxHDyHknIWQ==","signatures":[{"sig":"MEUCIQCXSGDkp60BR59RRWqCZt6H6BxWdr4wG1XvN/MRBAGSAgIgHh50FmFzB+NRILt6SFT71wV3qxVCOzmSFzCkGYUciws=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":64653},"main":"build/index.js","types":"build/index.d.ts","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=14.2.0"},"gitHead":"33e8571dc43362a0a8abda64e60be2db14f5d7c6","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest,typedoc","test":"npm run lint && npm run test:unit","build":"npm run clean && tsc -p tsconfig.build.json","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint:fix":"balena-lint --fix lib test","test:unit":"jest"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"versionist":{"publishedAt":"2021-10-28T10:41:19.444Z"},"_npmVersion":"6.14.15","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --fix"]},"_nodeVersion":"14.17.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.3.0","@balena/jellyfish-logger":"^3.0.95"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^27.3.1","sinon":"^11.1.2","deplint":"^1.1.3","ts-jest":"^27.0.7","typedoc":"^0.22.6","depcheck":"^1.4.2","typescript":"^4.4.4","@types/jest":"^27.0.2","lint-staged":"^11.2.4","@balena/lint":"^6.1.1","@types/sinon":"^10.0.5","@types/semver":"^7.3.9","simple-git-hooks":"^2.6.1","@balena/jellycheck":"^0.1.5","@types/json-schema":"~6.0.1","@balena/jellyfish-types":"^1.2.8","@balena/jellyfish-config":"^1.5.6"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.255_1635417781513_0.16868934906626132","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.256-renovate-internal-patch-8d41fa4be273569cac452f3d6934749e35ce176e":{"name":"@balena/jellyfish-plugin-base","version":"2.1.256-renovate-internal-patch-8d41fa4be273569cac452f3d6934749e35ce176e","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.1.256-renovate-internal-patch-8d41fa4be273569cac452f3d6934749e35ce176e","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"b0ff35924d4d0b788246c2d82fefccdd90da4831","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.256-renovate-internal-patch-8d41fa4be273569cac452f3d6934749e35ce176e.tgz","fileCount":18,"integrity":"sha512-gVsZGsqhMVI/R9WmAid0XOtovlYKeCb+V43Llw7s8/yp9cJhcUBhn3wPb0OZ8pm+vINL54av5byL7Oj5XLErhg==","signatures":[{"sig":"MEUCIQCXHgZh4qeQbkBEI6k2q4Hge8kjlzzvtb4sh+/nEI92NgIgYFxvihxRxaPo/lv0gQkXsyCTA9N4B6tp4lTcQgoUy2Q=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":64790},"main":"build/index.js","types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\n[![Publish Documentation](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml/badge.svg)](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml)\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=14.2.0"},"gitHead":"8d41fa4be273569cac452f3d6934749e35ce176e","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest,typedoc","test":"npm run lint && npm run test:unit","build":"npm run clean && tsc -p tsconfig.build.json","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint:fix":"balena-lint --fix lib test","test:unit":"jest"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"versionist":{"publishedAt":"2021-10-28T12:24:09.124Z"},"_npmVersion":"6.14.15","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --fix"]},"_nodeVersion":"14.17.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.3.0","@balena/jellyfish-logger":"^3.0.96"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^27.3.1","sinon":"^11.1.2","deplint":"^1.1.3","ts-jest":"^27.0.7","typedoc":"^0.22.6","depcheck":"^1.4.2","typescript":"^4.4.4","@types/jest":"^27.0.2","lint-staged":"^11.2.4","@balena/lint":"^6.1.1","@types/sinon":"^10.0.5","@types/semver":"^7.3.9","simple-git-hooks":"^2.6.1","@balena/jellycheck":"^0.1.5","@types/json-schema":"~6.0.1","@balena/jellyfish-types":"^1.2.9","@balena/jellyfish-config":"^1.5.6"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.256-renovate-internal-patch-8d41fa4be273569cac452f3d6934749e35ce176e_1635423984892_0.765121183483275","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.256":{"name":"@balena/jellyfish-plugin-base","version":"2.1.256","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.1.256","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"d48c04404c1adcc79e1eb7349f2b4789aec43e18","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.256.tgz","fileCount":18,"integrity":"sha512-bHyzDA+bibrmRwwu2lSy8L7MUVbDLXAtWPTuAEOh0T+rWMzrEvrmDnGRUwVshdrqBs/SkMndk3P30AxT8B29Xw==","signatures":[{"sig":"MEUCIQDlnhffwwgMmLZTxpA8f8642p7BSKAejScNTumGHVjN8QIgcOVmvFE1N4pJwx4k8/6cEv5moX5PmFvdhgzzvaEEFJk=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":64725},"main":"build/index.js","types":"build/index.d.ts","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=14.2.0"},"gitHead":"eebe3d12521074bbe9be18f3270fa8a16a24b79c","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest,typedoc","test":"npm run lint && npm run test:unit","build":"npm run clean && tsc -p tsconfig.build.json","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint:fix":"balena-lint --fix lib test","test:unit":"jest"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"versionist":{"publishedAt":"2021-10-28T12:28:28.979Z"},"_npmVersion":"6.14.15","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --fix"]},"_nodeVersion":"14.17.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.3.0","@balena/jellyfish-logger":"^3.0.96"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^27.3.1","sinon":"^11.1.2","deplint":"^1.1.3","ts-jest":"^27.0.7","typedoc":"^0.22.6","depcheck":"^1.4.2","typescript":"^4.4.4","@types/jest":"^27.0.2","lint-staged":"^11.2.4","@balena/lint":"^6.1.1","@types/sinon":"^10.0.5","@types/semver":"^7.3.9","simple-git-hooks":"^2.6.1","@balena/jellycheck":"^0.1.5","@types/json-schema":"~6.0.1","@balena/jellyfish-types":"^1.2.9","@balena/jellyfish-config":"^1.5.6"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.256_1635424213410_0.1257356627192232","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.257-renovate-internal-patch-45c758e910e5e9af0aef6a9f8b47d1a04b079f74":{"name":"@balena/jellyfish-plugin-base","version":"2.1.257-renovate-internal-patch-45c758e910e5e9af0aef6a9f8b47d1a04b079f74","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.1.257-renovate-internal-patch-45c758e910e5e9af0aef6a9f8b47d1a04b079f74","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"cec1d603135cff4b56d92a91310ef94cb83c7683","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.257-renovate-internal-patch-45c758e910e5e9af0aef6a9f8b47d1a04b079f74.tgz","fileCount":18,"integrity":"sha512-gINjGNecljqRqrWxLIwo6ISWwen+bvPpYRjqkQKRQG8eTy8zw0apbBWodI19srhwEcp2lZVP4q0MME9OsGB0EA==","signatures":[{"sig":"MEUCIC8VvuyD8XE/hFKtvW++C6j+JH63yUphNfQEB8aQkaMcAiEA4c3LdZX5yycL5CAd6cvuk1QVlopablmy4or1LcU4Dyc=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":64894},"main":"build/index.js","types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\n[![Publish Documentation](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml/badge.svg)](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml)\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=14.2.0"},"gitHead":"45c758e910e5e9af0aef6a9f8b47d1a04b079f74","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest,typedoc","test":"npm run lint && npm run test:unit","build":"npm run clean && tsc -p tsconfig.build.json","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint:fix":"balena-lint --fix lib test","test:unit":"jest"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"versionist":{"publishedAt":"2021-10-28T14:45:28.244Z"},"_npmVersion":"6.14.15","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --fix"]},"_nodeVersion":"14.17.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.3.0","@balena/jellyfish-logger":"^3.0.97"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^27.3.1","sinon":"^11.1.2","deplint":"^1.1.3","ts-jest":"^27.0.7","typedoc":"^0.22.6","depcheck":"^1.4.2","typescript":"^4.4.4","@types/jest":"^27.0.2","lint-staged":"^11.2.4","@balena/lint":"^6.1.1","@types/sinon":"^10.0.5","@types/semver":"^7.3.9","simple-git-hooks":"^2.6.1","@balena/jellycheck":"^0.1.5","@types/json-schema":"~6.0.1","@balena/jellyfish-types":"^1.2.9","@balena/jellyfish-config":"^1.5.6"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.257-renovate-internal-patch-45c758e910e5e9af0aef6a9f8b47d1a04b079f74_1635432506830_0.6003134246283033","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.257":{"name":"@balena/jellyfish-plugin-base","version":"2.1.257","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.1.257","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"6f7fc2160265286c5fb0b22c68b16c9da7d8c7e1","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.257.tgz","fileCount":18,"integrity":"sha512-uyUUNooEoZMhqswcokPdIYWZhyPBjUUqsE/k5h1+nO2cOf13V6HbORIpeGDH9gkav5VUov8aCG8YWVGFNn1kjQ==","signatures":[{"sig":"MEYCIQClbeVWQqG4xvUpjR19MNXZPlhguTCmhzX3Tc66lSbulAIhANRHcQ/ddzYqXRWZhcSXx5JSJyICR3dNaiQNli8GV2rt","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":64829},"main":"build/index.js","types":"build/index.d.ts","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=14.2.0"},"gitHead":"cb713aab3aea7ccd488e2a4d7b7a8f05ce071328","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest,typedoc","test":"npm run lint && npm run test:unit","build":"npm run clean && tsc -p tsconfig.build.json","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint:fix":"balena-lint --fix lib test","test:unit":"jest"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"versionist":{"publishedAt":"2021-10-28T14:50:07.998Z"},"_npmVersion":"6.14.15","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --fix"]},"_nodeVersion":"14.17.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.3.0","@balena/jellyfish-logger":"^3.0.97"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^27.3.1","sinon":"^11.1.2","deplint":"^1.1.3","ts-jest":"^27.0.7","typedoc":"^0.22.6","depcheck":"^1.4.2","typescript":"^4.4.4","@types/jest":"^27.0.2","lint-staged":"^11.2.4","@balena/lint":"^6.1.1","@types/sinon":"^10.0.5","@types/semver":"^7.3.9","simple-git-hooks":"^2.6.1","@balena/jellycheck":"^0.1.5","@types/json-schema":"~6.0.1","@balena/jellyfish-types":"^1.2.9","@balena/jellyfish-config":"^1.5.6"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.257_1635432712433_0.9799636522316191","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.258-renovate-external-non-major-9580743d02c0269084a1431cfc12fd5ba16d9acc":{"name":"@balena/jellyfish-plugin-base","version":"2.1.258-renovate-external-non-major-9580743d02c0269084a1431cfc12fd5ba16d9acc","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.1.258-renovate-external-non-major-9580743d02c0269084a1431cfc12fd5ba16d9acc","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"d2092a5c268f7f2dc375accf26733e5d9a593d3c","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.258-renovate-external-non-major-9580743d02c0269084a1431cfc12fd5ba16d9acc.tgz","fileCount":18,"integrity":"sha512-++xo7UkAUXtRE9vHLOXjVxMjzwzpQxpxgtOMm2B3TtGSat1EtsIBc6wTCIpSuwUaJR7yKUBzkPTPHhgREI7xCA==","signatures":[{"sig":"MEUCIQCzqJrenE9vn811tazdb/hdB3Ypf+gaMVT1jLLhbtiG3QIgW6V6cVal9/TT7MC3CVgwoY4z2O7jA957REoNToCrBY0=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":64974},"main":"build/index.js","types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\n[![Publish Documentation](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml/badge.svg)](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml)\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=14.2.0"},"gitHead":"9580743d02c0269084a1431cfc12fd5ba16d9acc","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest,typedoc","test":"npm run lint && npm run test:unit","build":"npm run clean && tsc -p tsconfig.build.json","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint:fix":"balena-lint --fix lib test","test:unit":"jest"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"versionist":{"publishedAt":"2021-10-30T00:31:15.544Z"},"_npmVersion":"6.14.15","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --fix"]},"_nodeVersion":"14.17.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.3.0","@balena/jellyfish-logger":"^3.0.97"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^27.3.1","sinon":"^11.1.2","deplint":"^1.1.3","ts-jest":"^27.0.7","typedoc":"^0.22.7","depcheck":"^1.4.2","typescript":"^4.4.4","@types/jest":"^27.0.2","lint-staged":"^11.2.6","@balena/lint":"^6.1.1","@types/sinon":"^10.0.6","@types/semver":"^7.3.9","simple-git-hooks":"^2.7.0","@balena/jellycheck":"^0.1.5","@types/json-schema":"~6.0.1","@balena/jellyfish-types":"^1.2.9","@balena/jellyfish-config":"^1.5.6"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.258-renovate-external-non-major-9580743d02c0269084a1431cfc12fd5ba16d9acc_1635554108699_0.2773384085406816","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.258":{"name":"@balena/jellyfish-plugin-base","version":"2.1.258","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.1.258","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"d527519e7c07ed4d13a64124ce02c8b5c33c4b43","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.258.tgz","fileCount":18,"integrity":"sha512-5zv4GbozBezLqWI0Fm6vB+cRTiwJTmBUx6RCCxpJhERAy0lp4XGPIV56c8BbIeEgySPXUbq3hcDYHBN4FCwRbQ==","signatures":[{"sig":"MEUCIDqncgUym65qfXoqwV9R0AsQFvZXqUGp3SjLe0KCWPxWAiEAjlL+gqdayrOA8TUOE3wfQNjy4rWjwqpSycvtFZlR2wE=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":64905},"main":"build/index.js","types":"build/index.d.ts","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=14.2.0"},"gitHead":"2f9c8156d84db95172c048aa13271ea1a7bfa9be","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest,typedoc","test":"npm run lint && npm run test:unit","build":"npm run clean && tsc -p tsconfig.build.json","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint:fix":"balena-lint --fix lib test","test:unit":"jest"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"versionist":{"publishedAt":"2021-10-30T00:36:12.841Z"},"_npmVersion":"6.14.15","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --fix"]},"_nodeVersion":"14.17.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.3.0","@balena/jellyfish-logger":"^3.0.97"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^27.3.1","sinon":"^11.1.2","deplint":"^1.1.3","ts-jest":"^27.0.7","typedoc":"^0.22.7","depcheck":"^1.4.2","typescript":"^4.4.4","@types/jest":"^27.0.2","lint-staged":"^11.2.6","@balena/lint":"^6.1.1","@types/sinon":"^10.0.6","@types/semver":"^7.3.9","simple-git-hooks":"^2.7.0","@balena/jellycheck":"^0.1.5","@types/json-schema":"~6.0.1","@balena/jellyfish-types":"^1.2.9","@balena/jellyfish-config":"^1.5.6"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.258_1635554306978_0.3672364986279957","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.259-renovate-internal-patch-21db6c4fc45716ebb9d4990f0e58ce6557b7dbe7":{"name":"@balena/jellyfish-plugin-base","version":"2.1.259-renovate-internal-patch-21db6c4fc45716ebb9d4990f0e58ce6557b7dbe7","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.1.259-renovate-internal-patch-21db6c4fc45716ebb9d4990f0e58ce6557b7dbe7","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"bf62dc4734ce4fedf35e4d00ba10e152cf578659","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.259-renovate-internal-patch-21db6c4fc45716ebb9d4990f0e58ce6557b7dbe7.tgz","fileCount":18,"integrity":"sha512-6kLLkYEdAh0iY0tZeRJPCSl4CmiR1jz8+7Q3Ks/PYC+CtCG6xve5TD0U8kvhzg/ynewfGxjEnMAArLKTH4xG9A==","signatures":[{"sig":"MEYCIQCjiqTV28v1TiwhRzWm565/m6ncE6v9KdM7Tup2QLVs+AIhAIFr3mp4tgcCMHrSniSPTmf1igQ9PcQYO4mp0iDXpeWc","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":65043},"main":"build/index.js","types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\n[![Publish Documentation](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml/badge.svg)](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml)\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=14.2.0"},"gitHead":"21db6c4fc45716ebb9d4990f0e58ce6557b7dbe7","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest,typedoc","test":"npm run lint && npm run test:unit","build":"npm run clean && tsc -p tsconfig.build.json","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint:fix":"balena-lint --fix lib test","test:unit":"jest"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"versionist":{"publishedAt":"2021-10-30T04:31:28.076Z"},"_npmVersion":"6.14.15","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --fix"]},"_nodeVersion":"14.17.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.3.0","@balena/jellyfish-logger":"^3.0.99"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^27.3.1","sinon":"^11.1.2","deplint":"^1.1.3","ts-jest":"^27.0.7","typedoc":"^0.22.7","depcheck":"^1.4.2","typescript":"^4.4.4","@types/jest":"^27.0.2","lint-staged":"^11.2.6","@balena/lint":"^6.1.1","@types/sinon":"^10.0.6","@types/semver":"^7.3.9","simple-git-hooks":"^2.7.0","@balena/jellycheck":"^0.1.5","@types/json-schema":"~6.0.1","@balena/jellyfish-types":"^1.2.10","@balena/jellyfish-config":"^1.5.6"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.259-renovate-internal-patch-21db6c4fc45716ebb9d4990f0e58ce6557b7dbe7_1635568482699_0.14776695654483452","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.259":{"name":"@balena/jellyfish-plugin-base","version":"2.1.259","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.1.259","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"4632a86482ca2f8edb9b771585fb202f56a6e51f","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.259.tgz","fileCount":18,"integrity":"sha512-haKdU+fmEzgFz+i5Jk8yxPOCE22DWttzEd0VlhqyJ0t5uoE7gBfrmkQqz/rHnf10RIFeZpcwD/fkLMoMWQvXrg==","signatures":[{"sig":"MEUCIE/471+PPbZydVa//Fob4KPbnqBlyQxnOH0VTARxXWsfAiEAuj7WIMoXr1dhk/9fhWX18j+LqwmsDJhxvWGf+sdrDe8=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":64978},"main":"build/index.js","types":"build/index.d.ts","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=14.2.0"},"gitHead":"3792e7ea0e2600fceb2e8ba8de08d71f752492a2","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest,typedoc","test":"npm run lint && npm run test:unit","build":"npm run clean && tsc -p tsconfig.build.json","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint:fix":"balena-lint --fix lib test","test:unit":"jest"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"versionist":{"publishedAt":"2021-10-30T04:36:38.112Z"},"_npmVersion":"6.14.15","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --fix"]},"_nodeVersion":"14.17.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.3.0","@balena/jellyfish-logger":"^3.0.99"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^27.3.1","sinon":"^11.1.2","deplint":"^1.1.3","ts-jest":"^27.0.7","typedoc":"^0.22.7","depcheck":"^1.4.2","typescript":"^4.4.4","@types/jest":"^27.0.2","lint-staged":"^11.2.6","@balena/lint":"^6.1.1","@types/sinon":"^10.0.6","@types/semver":"^7.3.9","simple-git-hooks":"^2.7.0","@balena/jellycheck":"^0.1.5","@types/json-schema":"~6.0.1","@balena/jellyfish-types":"^1.2.10","@balena/jellyfish-config":"^1.5.6"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.259_1635568702242_0.09083964518849763","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.260-renovate-internal-patch-f45f8a9d73eb95dfe46f96d68ca36c2a536c0850":{"name":"@balena/jellyfish-plugin-base","version":"2.1.260-renovate-internal-patch-f45f8a9d73eb95dfe46f96d68ca36c2a536c0850","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.1.260-renovate-internal-patch-f45f8a9d73eb95dfe46f96d68ca36c2a536c0850","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"8d2e8b9d15223da4272aed66a3f39cc98145f85f","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.260-renovate-internal-patch-f45f8a9d73eb95dfe46f96d68ca36c2a536c0850.tgz","fileCount":18,"integrity":"sha512-UTJ2AfVje+GMTqiokmV6FuC/dZaRqzM9/BSD4DJEOy30Gku+uqlkElE+cyosVIyJmj/B92pqL0Xtcl2x/aB+Zg==","signatures":[{"sig":"MEYCIQCmL2lWQsHyaBEiZC9bi67/3NstMn6JXmtB/uW1iPsjggIhAL9SRowAoLlJ5Q75EuLMOBi0SYzMAVgYCL9a3tENYzJ9","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":65146},"main":"build/index.js","types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\n[![Publish Documentation](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml/badge.svg)](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml)\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=14.2.0"},"gitHead":"f45f8a9d73eb95dfe46f96d68ca36c2a536c0850","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest,typedoc","test":"npm run lint && npm run test:unit","build":"npm run clean && tsc -p tsconfig.build.json","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint:fix":"balena-lint --fix lib test","test:unit":"jest"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"versionist":{"publishedAt":"2021-11-05T10:27:08.150Z"},"_npmVersion":"6.14.15","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --fix"]},"_nodeVersion":"14.17.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.3.0","@balena/jellyfish-logger":"^3.0.99"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^27.3.1","sinon":"^11.1.2","deplint":"^1.1.3","ts-jest":"^27.0.7","typedoc":"^0.22.7","depcheck":"^1.4.2","typescript":"^4.4.4","@types/jest":"^27.0.2","lint-staged":"^11.2.6","@balena/lint":"^6.1.1","@types/sinon":"^10.0.6","@types/semver":"^7.3.9","simple-git-hooks":"^2.7.0","@balena/jellycheck":"^0.1.5","@types/json-schema":"~6.0.1","@balena/jellyfish-types":"^1.2.10","@balena/jellyfish-config":"^1.5.7"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.260-renovate-internal-patch-f45f8a9d73eb95dfe46f96d68ca36c2a536c0850_1636108192959_0.08629461223219193","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.260":{"name":"@balena/jellyfish-plugin-base","version":"2.1.260","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.1.260","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"424ccc7b9289f0586b44533efe685931a9ebf3db","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.260.tgz","fileCount":18,"integrity":"sha512-NIAtpARQs1ZAGcRo2UY2/GLYe7pjIcuwTA6d3pES9WGPKcWsDy7QUjO2rHix0bxulH+iepZO8lYbvEgt0YXhYA==","signatures":[{"sig":"MEYCIQCsRv+E9J6BnLL10J1DTKBz9q7EdNFV3ZREehHeG2mpBQIhAPWpuCTTFq3GexGeroxt0/PYOIqRuFRjX3COE90vjX8G","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":65081},"main":"build/index.js","types":"build/index.d.ts","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=14.2.0"},"gitHead":"fb8d8871f861dbd2ead79347c97e05b0781ad18b","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest,typedoc","test":"npm run lint && npm run test:unit","build":"npm run clean && tsc -p tsconfig.build.json","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint:fix":"balena-lint --fix lib test","test:unit":"jest"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"versionist":{"publishedAt":"2021-11-05T10:31:28.989Z"},"_npmVersion":"6.14.15","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --fix"]},"_nodeVersion":"14.17.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.3.0","@balena/jellyfish-logger":"^3.0.99"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^27.3.1","sinon":"^11.1.2","deplint":"^1.1.3","ts-jest":"^27.0.7","typedoc":"^0.22.7","depcheck":"^1.4.2","typescript":"^4.4.4","@types/jest":"^27.0.2","lint-staged":"^11.2.6","@balena/lint":"^6.1.1","@types/sinon":"^10.0.6","@types/semver":"^7.3.9","simple-git-hooks":"^2.7.0","@balena/jellycheck":"^0.1.5","@types/json-schema":"~6.0.1","@balena/jellyfish-types":"^1.2.10","@balena/jellyfish-config":"^1.5.7"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.260_1636108396667_0.6811670710014821","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.261-renovate-internal-patch-54a2e9cc88b1c52e6c2421c31b99cccb46b0dc39":{"name":"@balena/jellyfish-plugin-base","version":"2.1.261-renovate-internal-patch-54a2e9cc88b1c52e6c2421c31b99cccb46b0dc39","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.1.261-renovate-internal-patch-54a2e9cc88b1c52e6c2421c31b99cccb46b0dc39","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"8035ddacf30ea8c2571acce814980b20064f9274","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.261-renovate-internal-patch-54a2e9cc88b1c52e6c2421c31b99cccb46b0dc39.tgz","fileCount":18,"integrity":"sha512-/nOAwCn1TZvYhRm9ZdzAzBD7tgbiw08wq82nRepAw6FJHg48B+LEOZmzS8Jl8vEpmrcCOuTY4d1e+FHUQTVuJA==","signatures":[{"sig":"MEQCIBL6DvqHCaPDtYnvaETQMCcgtqzbEuGpp0haprv3YQI7AiBXxueHs7gKnmhQLHUoPh50CwVyfQ/BZZJHR5FQKghhpA==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":65252},"main":"build/index.js","types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\n[![Publish Documentation](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml/badge.svg)](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml)\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=14.2.0"},"gitHead":"54a2e9cc88b1c52e6c2421c31b99cccb46b0dc39","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest,typedoc","test":"npm run lint && npm run test:unit","build":"npm run clean && tsc -p tsconfig.build.json","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint:fix":"balena-lint --fix lib test","test:unit":"jest"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"versionist":{"publishedAt":"2021-11-05T23:59:31.041Z"},"_npmVersion":"6.14.15","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --fix"]},"_nodeVersion":"14.17.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.3.0","@balena/jellyfish-logger":"^3.0.100"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^27.3.1","sinon":"^11.1.2","deplint":"^1.1.3","ts-jest":"^27.0.7","typedoc":"^0.22.7","depcheck":"^1.4.2","typescript":"^4.4.4","@types/jest":"^27.0.2","lint-staged":"^11.2.6","@balena/lint":"^6.1.1","@types/sinon":"^10.0.6","@types/semver":"^7.3.9","simple-git-hooks":"^2.7.0","@balena/jellycheck":"^0.1.5","@types/json-schema":"~6.0.1","@balena/jellyfish-types":"^1.2.10","@balena/jellyfish-config":"^1.5.7"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.261-renovate-internal-patch-54a2e9cc88b1c52e6c2421c31b99cccb46b0dc39_1636157006820_0.8309663606452424","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.261":{"name":"@balena/jellyfish-plugin-base","version":"2.1.261","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.1.261","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"c487525351b4138f4f4b7dd3c50c5ee0ba55f9f9","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.261.tgz","fileCount":18,"integrity":"sha512-SdlC2P4hpIonC3R9x5Fdq+1sMYtCjJFgzUgotpblM8XvKS87pXI7o5AeZR6rKSFJV2VqsWAWt9+bC5M1DynQlg==","signatures":[{"sig":"MEUCIAZ1vV97An9p7xo0K8FT04SHldlmwIglmfor+SMjeX6yAiEAjnJWO1t4s5sh8iuP+rH6LW/G7dJC2IeJwNOSHUTe+1c=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":65187},"main":"build/index.js","types":"build/index.d.ts","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=14.2.0"},"gitHead":"760e8b501cc06e447bcd3487432df92bf44c071c","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest,typedoc","test":"npm run lint && npm run test:unit","build":"npm run clean && tsc -p tsconfig.build.json","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint:fix":"balena-lint --fix lib test","test:unit":"jest"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"versionist":{"publishedAt":"2021-11-06T00:04:35.775Z"},"_npmVersion":"6.14.15","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --fix"]},"_nodeVersion":"14.17.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.3.0","@balena/jellyfish-logger":"^3.0.100"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^27.3.1","sinon":"^11.1.2","deplint":"^1.1.3","ts-jest":"^27.0.7","typedoc":"^0.22.7","depcheck":"^1.4.2","typescript":"^4.4.4","@types/jest":"^27.0.2","lint-staged":"^11.2.6","@balena/lint":"^6.1.1","@types/sinon":"^10.0.6","@types/semver":"^7.3.9","simple-git-hooks":"^2.7.0","@balena/jellycheck":"^0.1.5","@types/json-schema":"~6.0.1","@balena/jellyfish-types":"^1.2.10","@balena/jellyfish-config":"^1.5.7"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.261_1636157171922_0.28376962447541243","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.262-renovate-internal-patch-d0fa11d68b7bbb400887279ab598368637fe0349":{"name":"@balena/jellyfish-plugin-base","version":"2.1.262-renovate-internal-patch-d0fa11d68b7bbb400887279ab598368637fe0349","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.1.262-renovate-internal-patch-d0fa11d68b7bbb400887279ab598368637fe0349","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"baf476e4a58b2cd5fa900459ab4df9b5f911aae4","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.262-renovate-internal-patch-d0fa11d68b7bbb400887279ab598368637fe0349.tgz","fileCount":18,"integrity":"sha512-Sy1R7lVJnNSjHYquoPOJMMu747sMivn2QJ50k19ilw98RWWv0MgKobSRLyAwD2pR3rCRjrFIv6MrUhfOz8d9Ow==","signatures":[{"sig":"MEUCIHV7brKSZyKv1HW1iIJYsncvNJkhAOzrPnxg4NTU0cfYAiEAsmZJdfD5fsm8353y9PQ7uChKPI5SD08xkFpnAR0uRl4=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":65324},"main":"build/index.js","types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\n[![Publish Documentation](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml/badge.svg)](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml)\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=14.2.0"},"gitHead":"d0fa11d68b7bbb400887279ab598368637fe0349","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest,typedoc","test":"npm run lint && npm run test:unit","build":"npm run clean && tsc -p tsconfig.build.json","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint:fix":"balena-lint --fix lib test","test:unit":"jest"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"versionist":{"publishedAt":"2021-11-06T02:24:56.383Z"},"_npmVersion":"6.14.15","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --fix"]},"_nodeVersion":"14.17.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.3.0","@balena/jellyfish-logger":"^3.0.101"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^27.3.1","sinon":"^11.1.2","deplint":"^1.1.3","ts-jest":"^27.0.7","typedoc":"^0.22.7","depcheck":"^1.4.2","typescript":"^4.4.4","@types/jest":"^27.0.2","lint-staged":"^11.2.6","@balena/lint":"^6.1.1","@types/sinon":"^10.0.6","@types/semver":"^7.3.9","simple-git-hooks":"^2.7.0","@balena/jellycheck":"^0.1.5","@types/json-schema":"~6.0.1","@balena/jellyfish-types":"^1.2.11","@balena/jellyfish-config":"^1.5.7"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.262-renovate-internal-patch-d0fa11d68b7bbb400887279ab598368637fe0349_1636165673041_0.21535780595822884","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.262":{"name":"@balena/jellyfish-plugin-base","version":"2.1.262","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.1.262","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"627b7c3a04cfcd00b6271f83c91a335207ed4847","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.262.tgz","fileCount":18,"integrity":"sha512-rbqqrfK3FovtnBlExzh2BCjDPeMMGesZ6D5QXH6ccIwAr4FH4/0mtSCIuQfnKPTV9Or3IvapoiLdwyqMTMlBSw==","signatures":[{"sig":"MEUCIHALLcvTuALNk2yO2n6wOIDouZSM/TotO8maRIEWeI1sAiEAh+Hm24ige9/Oy7JjZ0yBGPKRDLdbXfKtMgGkTen0gdE=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":65259},"main":"build/index.js","types":"build/index.d.ts","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=14.2.0"},"gitHead":"aa1ae252452a6b011fba2d7de96c5afb1a276299","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest,typedoc","test":"npm run lint && npm run test:unit","build":"npm run clean && tsc -p tsconfig.build.json","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint:fix":"balena-lint --fix lib test","test:unit":"jest"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"versionist":{"publishedAt":"2021-11-06T02:28:46.610Z"},"_npmVersion":"6.14.15","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --fix"]},"_nodeVersion":"14.17.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.3.0","@balena/jellyfish-logger":"^3.0.101"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^27.3.1","sinon":"^11.1.2","deplint":"^1.1.3","ts-jest":"^27.0.7","typedoc":"^0.22.7","depcheck":"^1.4.2","typescript":"^4.4.4","@types/jest":"^27.0.2","lint-staged":"^11.2.6","@balena/lint":"^6.1.1","@types/sinon":"^10.0.6","@types/semver":"^7.3.9","simple-git-hooks":"^2.7.0","@balena/jellycheck":"^0.1.5","@types/json-schema":"~6.0.1","@balena/jellyfish-types":"^1.2.11","@balena/jellyfish-config":"^1.5.7"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.262_1636165825401_0.5435626687155872","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.263-renovate-internal-patch-67a1fd25998d7e1d0d5146992a5cfe7d44695772":{"name":"@balena/jellyfish-plugin-base","version":"2.1.263-renovate-internal-patch-67a1fd25998d7e1d0d5146992a5cfe7d44695772","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.1.263-renovate-internal-patch-67a1fd25998d7e1d0d5146992a5cfe7d44695772","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"a5cbce9bb65e2f0a5b74a86416ac105846b56440","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.263-renovate-internal-patch-67a1fd25998d7e1d0d5146992a5cfe7d44695772.tgz","fileCount":18,"integrity":"sha512-MM0URjedFlwOhJvUAH2F+c/zUTXmkliKZk7EFRgusSiYidALmRovoN+W8K671lAB3s9PoQnON5JT0AkZpkjhPA==","signatures":[{"sig":"MEUCIEBJUtagk7jOwlBP4i0bRc1oArYLpXF0F44z1vTR8i6ZAiEArDOC8HEAZEiORgs0l2QGL/AquPirqY9qDNslI2g9iYA=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":65427},"main":"build/index.js","types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\n[![Publish Documentation](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml/badge.svg)](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml)\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=14.2.0"},"gitHead":"67a1fd25998d7e1d0d5146992a5cfe7d44695772","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest,typedoc","test":"npm run lint && npm run test:unit","build":"npm run clean && tsc -p tsconfig.build.json","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint:fix":"balena-lint --fix lib test","test:unit":"jest"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"versionist":{"publishedAt":"2021-11-07T01:24:42.818Z"},"_npmVersion":"6.14.15","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --fix"]},"_nodeVersion":"14.17.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.3.0","@balena/jellyfish-logger":"^3.0.101"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^27.3.1","sinon":"^11.1.2","deplint":"^1.1.3","ts-jest":"^27.0.7","typedoc":"^0.22.7","depcheck":"^1.4.2","typescript":"^4.4.4","@types/jest":"^27.0.2","lint-staged":"^11.2.6","@balena/lint":"^6.1.1","@types/sinon":"^10.0.6","@types/semver":"^7.3.9","simple-git-hooks":"^2.7.0","@balena/jellycheck":"^0.1.5","@types/json-schema":"~6.0.1","@balena/jellyfish-types":"^1.2.12","@balena/jellyfish-config":"^1.5.7"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.263-renovate-internal-patch-67a1fd25998d7e1d0d5146992a5cfe7d44695772_1636248474020_0.300679497111932","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.263-renovate-external-non-major-06f0ef9e633659019dc8ef8eb16c8ca8c55b36c8":{"name":"@balena/jellyfish-plugin-base","version":"2.1.263-renovate-external-non-major-06f0ef9e633659019dc8ef8eb16c8ca8c55b36c8","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.1.263-renovate-external-non-major-06f0ef9e633659019dc8ef8eb16c8ca8c55b36c8","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"5c7221a6aed31b584941c0643636fffeed56558d","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.263-renovate-external-non-major-06f0ef9e633659019dc8ef8eb16c8ca8c55b36c8.tgz","fileCount":18,"integrity":"sha512-8fEmuSoIO9P4OpiV6xLgXz2X4E0MjzOtNVLWXVUw8z65FkHbMBqtHUkVqipjwpET4aRsmaL9rs0GFSSiOZQOGQ==","signatures":[{"sig":"MEUCIDRowaNwZRfbLjatYRONpv0VzZWc6rqzh2Gb1EvGxpkfAiEAwMNvhz8G9lAEeKxJb8EaLOSKTJa1TDry4Vq8s5Jqmkk=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":65415},"main":"build/index.js","types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\n[![Publish Documentation](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml/badge.svg)](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml)\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=14.2.0"},"gitHead":"06f0ef9e633659019dc8ef8eb16c8ca8c55b36c8","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest,typedoc","test":"npm run lint && npm run test:unit","build":"npm run clean && tsc -p tsconfig.build.json","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint:fix":"balena-lint --fix lib test","test:unit":"jest"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"versionist":{"publishedAt":"2021-11-07T01:25:44.028Z"},"_npmVersion":"6.14.15","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --fix"]},"_nodeVersion":"14.17.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.3.0","@balena/jellyfish-logger":"^3.0.101"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^27.3.1","sinon":"^11.1.2","deplint":"^1.1.3","ts-jest":"^27.0.7","typedoc":"^0.22.8","depcheck":"^1.4.2","typescript":"^4.4.4","@types/jest":"^27.0.2","lint-staged":"^11.2.6","@balena/lint":"^6.1.1","@types/sinon":"^10.0.6","@types/semver":"^7.3.9","simple-git-hooks":"^2.7.0","@balena/jellycheck":"^0.1.5","@types/json-schema":"~6.0.1","@balena/jellyfish-types":"^1.2.11","@balena/jellyfish-config":"^1.5.7"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.263-renovate-external-non-major-06f0ef9e633659019dc8ef8eb16c8ca8c55b36c8_1636248501191_0.8407453592979404","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.263":{"name":"@balena/jellyfish-plugin-base","version":"2.1.263","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.1.263","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"b1e2c8f5ea28f21067e21aef08028dd94c488b86","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.263.tgz","fileCount":18,"integrity":"sha512-Hhxeb8CGVu6eONIxeuu5/ifX6M9z3CisiBB8WCr6YIowAivDZE5B/6IAFyUOeAmM5cIvtQLWsYsiH3jC0RGamw==","signatures":[{"sig":"MEUCIF/vcnJrhrERHswrUk5TUy3dcT0hc7sTb+PnNMP4NDdMAiEAoNd9sqGJPgNcptIbjqe5Jr20g72HfW/SgivQ5k2xmbo=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":65362},"main":"build/index.js","types":"build/index.d.ts","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=14.2.0"},"gitHead":"26e215b28621f249a3f60c8cdd2c5da3c8869dfe","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest,typedoc","test":"npm run lint && npm run test:unit","build":"npm run clean && tsc -p tsconfig.build.json","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint:fix":"balena-lint --fix lib test","test:unit":"jest"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"versionist":{"publishedAt":"2021-11-07T01:29:04.713Z"},"_npmVersion":"6.14.15","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --fix"]},"_nodeVersion":"14.17.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.3.0","@balena/jellyfish-logger":"^3.0.101"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^27.3.1","sinon":"^11.1.2","deplint":"^1.1.3","ts-jest":"^27.0.7","typedoc":"^0.22.7","depcheck":"^1.4.2","typescript":"^4.4.4","@types/jest":"^27.0.2","lint-staged":"^11.2.6","@balena/lint":"^6.1.1","@types/sinon":"^10.0.6","@types/semver":"^7.3.9","simple-git-hooks":"^2.7.0","@balena/jellycheck":"^0.1.5","@types/json-schema":"~6.0.1","@balena/jellyfish-types":"^1.2.12","@balena/jellyfish-config":"^1.5.7"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.263_1636248651320_0.37613445666051337","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.264-renovate-external-non-major-6061f222eaaef617f080711d9676fc9875044a2b":{"name":"@balena/jellyfish-plugin-base","version":"2.1.264-renovate-external-non-major-6061f222eaaef617f080711d9676fc9875044a2b","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.1.264-renovate-external-non-major-6061f222eaaef617f080711d9676fc9875044a2b","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"ebb2c13823def0c5825047640e6f3e5bddb26a15","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.264-renovate-external-non-major-6061f222eaaef617f080711d9676fc9875044a2b.tgz","fileCount":18,"integrity":"sha512-BWdHbmvQe8/VTvvV973S+CeMf+dZPhCDcurAzv58ZY9XzrbHceK7XxruOzWgzFjgPNn3DxUdEKrV7uxHdAdhUw==","signatures":[{"sig":"MEUCIQCJro381v34Yd02vCkwQJlhZJt+yzXKjAeag9hRnp8bDQIgHNeXlf1GdWscm1nsewEFwRUKPm99ug40GMhHH4dqWbA=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":65518},"main":"build/index.js","types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\n[![Publish Documentation](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml/badge.svg)](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml)\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=14.2.0"},"gitHead":"6061f222eaaef617f080711d9676fc9875044a2b","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest,typedoc","test":"npm run lint && npm run test:unit","build":"npm run clean && tsc -p tsconfig.build.json","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint:fix":"balena-lint --fix lib test","test:unit":"jest"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"versionist":{"publishedAt":"2021-11-07T01:32:34.500Z"},"_npmVersion":"6.14.15","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --fix"]},"_nodeVersion":"14.17.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.3.0","@balena/jellyfish-logger":"^3.0.101"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^27.3.1","sinon":"^11.1.2","deplint":"^1.1.3","ts-jest":"^27.0.7","typedoc":"^0.22.8","depcheck":"^1.4.2","typescript":"^4.4.4","@types/jest":"^27.0.2","lint-staged":"^11.2.6","@balena/lint":"^6.1.1","@types/sinon":"^10.0.6","@types/semver":"^7.3.9","simple-git-hooks":"^2.7.0","@balena/jellycheck":"^0.1.5","@types/json-schema":"~6.0.1","@balena/jellyfish-types":"^1.2.12","@balena/jellyfish-config":"^1.5.7"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.264-renovate-external-non-major-6061f222eaaef617f080711d9676fc9875044a2b_1636248921344_0.17143878157271186","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.264":{"name":"@balena/jellyfish-plugin-base","version":"2.1.264","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.1.264","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"30330eac2aa6fd5a69c8a0ad2086032bda820c2f","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.264.tgz","fileCount":18,"integrity":"sha512-+0HcL/0rPSAz74YmzS+tDu+gPudsZHsEBtxiV4z3BIvYJ6UsgYG00gqB9Kvj/rPqBJla9QgPTBcNiWL7EDSNwQ==","signatures":[{"sig":"MEUCIFKpWnhrwCAZ1bcKFS3IW7mIiUWpCIzNXnuISCNmr2I7AiEAlJugcHs41KYbNtfw5lZENB/jcIGtkvhm2iIVK2qPcIg=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":65449},"main":"build/index.js","types":"build/index.d.ts","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=14.2.0"},"gitHead":"8799c5112fb1c1e8873d0d48a0abac8148004a31","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest,typedoc","test":"npm run lint && npm run test:unit","build":"npm run clean && tsc -p tsconfig.build.json","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint:fix":"balena-lint --fix lib test","test:unit":"jest"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"versionist":{"publishedAt":"2021-11-07T01:37:10.610Z"},"_npmVersion":"6.14.15","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --fix"]},"_nodeVersion":"14.17.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.3.0","@balena/jellyfish-logger":"^3.0.101"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^27.3.1","sinon":"^11.1.2","deplint":"^1.1.3","ts-jest":"^27.0.7","typedoc":"^0.22.8","depcheck":"^1.4.2","typescript":"^4.4.4","@types/jest":"^27.0.2","lint-staged":"^11.2.6","@balena/lint":"^6.1.1","@types/sinon":"^10.0.6","@types/semver":"^7.3.9","simple-git-hooks":"^2.7.0","@balena/jellycheck":"^0.1.5","@types/json-schema":"~6.0.1","@balena/jellyfish-types":"^1.2.12","@balena/jellyfish-config":"^1.5.7"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.264_1636249146421_0.7831079547736477","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.265-renovate-internal-patch-4df4fd9ea4ef38abdba1e52c50cbc6e446c81d42":{"name":"@balena/jellyfish-plugin-base","version":"2.1.265-renovate-internal-patch-4df4fd9ea4ef38abdba1e52c50cbc6e446c81d42","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.1.265-renovate-internal-patch-4df4fd9ea4ef38abdba1e52c50cbc6e446c81d42","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"1a25fd88738e3601823caad74d1e57a3c84a17bc","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.265-renovate-internal-patch-4df4fd9ea4ef38abdba1e52c50cbc6e446c81d42.tgz","fileCount":18,"integrity":"sha512-qBWRqz54/MBQ8zaCM6NM/6ovfghMumUmgj1zMlpf6rYbdmOecLOMFg5EkGQnkhW1WnUtUcZ4I/+I8QgINgMoxQ==","signatures":[{"sig":"MEUCIQDVbV4UbGRmdTGGY0O5oLyRL5TGEClTZ36MV4yP6HCtpgIgJFAXEx8VPK4CiuF+1vrgitkdJcbgmrNoaF5O2/GDMb4=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":65586},"main":"build/index.js","types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\n[![Publish Documentation](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml/badge.svg)](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml)\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=14.2.0"},"gitHead":"4df4fd9ea4ef38abdba1e52c50cbc6e446c81d42","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest,typedoc","test":"npm run lint && npm run test:unit","build":"npm run clean && tsc -p tsconfig.build.json","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint:fix":"balena-lint --fix lib test","test:unit":"jest"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"versionist":{"publishedAt":"2021-11-09T14:19:24.957Z"},"_npmVersion":"6.14.15","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --fix"]},"_nodeVersion":"14.17.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.3.0","@balena/jellyfish-logger":"^3.0.104"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^27.3.1","sinon":"^11.1.2","deplint":"^1.1.3","ts-jest":"^27.0.7","typedoc":"^0.22.8","depcheck":"^1.4.2","typescript":"^4.4.4","@types/jest":"^27.0.2","lint-staged":"^11.2.6","@balena/lint":"^6.1.1","@types/sinon":"^10.0.6","@types/semver":"^7.3.9","simple-git-hooks":"^2.7.0","@balena/jellycheck":"^0.1.5","@types/json-schema":"~6.0.1","@balena/jellyfish-types":"^1.2.12","@balena/jellyfish-config":"^1.5.8"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.265-renovate-internal-patch-4df4fd9ea4ef38abdba1e52c50cbc6e446c81d42_1636467766435_0.03384152082132741","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.265":{"name":"@balena/jellyfish-plugin-base","version":"2.1.265","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.1.265","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"29f442eea91370728a270e1dfb7c5ac879f53526","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.265.tgz","fileCount":18,"integrity":"sha512-g+WKRs0ap2XlIGxHIK0ENYj/6A7vKJAw4+bU4ezK65H7TxG348v5liG5TGghlbKME/KrelHpmbiKU0FoxjkxoA==","signatures":[{"sig":"MEYCIQCnYov/PjthrzCkNbN1UrJTP5ZVsPah6TAYpkY/uMxnOAIhAPiK3wP0WQIz3Ily1aFb665751c4dEiELysG2ae/kgw1","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":65521},"main":"build/index.js","types":"build/index.d.ts","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=14.2.0"},"gitHead":"03564be4a3a19eaf963c7fc5e42ac4fa1aca07b0","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest,typedoc","test":"npm run lint && npm run test:unit","build":"npm run clean && tsc -p tsconfig.build.json","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint:fix":"balena-lint --fix lib test","test:unit":"jest"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"versionist":{"publishedAt":"2021-11-09T14:24:35.820Z"},"_npmVersion":"6.14.15","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --fix"]},"_nodeVersion":"14.17.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.3.0","@balena/jellyfish-logger":"^3.0.104"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^27.3.1","sinon":"^11.1.2","deplint":"^1.1.3","ts-jest":"^27.0.7","typedoc":"^0.22.8","depcheck":"^1.4.2","typescript":"^4.4.4","@types/jest":"^27.0.2","lint-staged":"^11.2.6","@balena/lint":"^6.1.1","@types/sinon":"^10.0.6","@types/semver":"^7.3.9","simple-git-hooks":"^2.7.0","@balena/jellycheck":"^0.1.5","@types/json-schema":"~6.0.1","@balena/jellyfish-types":"^1.2.12","@balena/jellyfish-config":"^1.5.8"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.265_1636468005005_0.3026459532451986","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.266-joshbwlng-bump-sinon-e0bcc43664031c5f79f5c03520d56e795e701997":{"name":"@balena/jellyfish-plugin-base","version":"2.1.266-joshbwlng-bump-sinon-e0bcc43664031c5f79f5c03520d56e795e701997","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.1.266-joshbwlng-bump-sinon-e0bcc43664031c5f79f5c03520d56e795e701997","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"6403e5dd205f04467a6e2e9103ae3dc6e3910cc8","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.266-joshbwlng-bump-sinon-e0bcc43664031c5f79f5c03520d56e795e701997.tgz","fileCount":18,"integrity":"sha512-qtYw9jVH74ygDEvd+1kyaZgq7p83N4p+hbkbSQFEyVXw2cv2VrHHsMdXXrX70wuW7zfyS5XZFviNEG7Sv166oA==","signatures":[{"sig":"MEUCID0AUMGlUWqSKsGtIX5NAORTlxE1WsHjUbXw7VtEA3PEAiEA7gYma1Bz1Vqa58swD6CrDo/GkdWh4CRbHRsYK1KZR44=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":65644},"main":"build/index.js","types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\n[![Publish Documentation](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml/badge.svg)](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml)\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=14.2.0"},"gitHead":"e0bcc43664031c5f79f5c03520d56e795e701997","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest,typedoc","test":"npm run lint && npm run test:unit","build":"npm run clean && tsc -p tsconfig.build.json","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint:fix":"balena-lint --fix lib test","test:unit":"jest"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"versionist":{"publishedAt":"2021-11-09T14:35:51.890Z"},"_npmVersion":"6.14.15","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --fix"]},"_nodeVersion":"14.17.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.3.0","@balena/jellyfish-logger":"^3.0.104"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^27.3.1","sinon":"^12.0.1","deplint":"^1.1.3","ts-jest":"^27.0.7","typedoc":"^0.22.8","depcheck":"^1.4.2","typescript":"^4.4.4","@types/jest":"^27.0.2","lint-staged":"^11.2.6","@balena/lint":"^6.1.1","@types/sinon":"^10.0.6","@types/semver":"^7.3.9","simple-git-hooks":"^2.7.0","@balena/jellycheck":"^0.1.5","@types/json-schema":"~6.0.1","@balena/jellyfish-types":"^1.2.12","@balena/jellyfish-config":"^1.5.8"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.266-joshbwlng-bump-sinon-e0bcc43664031c5f79f5c03520d56e795e701997_1636468818424_0.49837271728754007","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.266":{"name":"@balena/jellyfish-plugin-base","version":"2.1.266","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.1.266","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"c6e21819a61d671e8596442453ed5514b53e7cc6","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.266.tgz","fileCount":18,"integrity":"sha512-2b+t9n7wUbyTCPYoBkT/H7SnfEDelE9au3XolMZcFPaXPTE5nFiwcEnWEvlmO5jmFO6aMDoAq2ZcraLAllj84Q==","signatures":[{"sig":"MEUCIFVbPhF2rDMEYY4lthDwzIpO4PuQrxAkB1DPO8YLvT57AiEAnpc30xTqg2RtQlcjf1NEl2Epz/DE8Ro8zy3ejBCrQ6k=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":65582},"main":"build/index.js","types":"build/index.d.ts","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=14.2.0"},"gitHead":"ef8f4a07ba04b5a5b58eb4d8fcf48ce85613c1e6","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest,typedoc","test":"npm run lint && npm run test:unit","build":"npm run clean && tsc -p tsconfig.build.json","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint:fix":"balena-lint --fix lib test","test:unit":"jest"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"versionist":{"publishedAt":"2021-11-09T14:41:42.011Z"},"_npmVersion":"6.14.15","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --fix"]},"_nodeVersion":"14.17.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.3.0","@balena/jellyfish-logger":"^3.0.104"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^27.3.1","sinon":"^12.0.1","deplint":"^1.1.3","ts-jest":"^27.0.7","typedoc":"^0.22.8","depcheck":"^1.4.2","typescript":"^4.4.4","@types/jest":"^27.0.2","lint-staged":"^11.2.6","@balena/lint":"^6.1.1","@types/sinon":"^10.0.6","@types/semver":"^7.3.9","simple-git-hooks":"^2.7.0","@balena/jellycheck":"^0.1.5","@types/json-schema":"~6.0.1","@balena/jellyfish-types":"^1.2.12","@balena/jellyfish-config":"^1.5.8"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.266_1636469028674_0.91878452431939","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.267-renovate-internal-patch-4f1ac89fd5822b3de32b6dd154f6a63f6b70a59a":{"name":"@balena/jellyfish-plugin-base","version":"2.1.267-renovate-internal-patch-4f1ac89fd5822b3de32b6dd154f6a63f6b70a59a","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.1.267-renovate-internal-patch-4f1ac89fd5822b3de32b6dd154f6a63f6b70a59a","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"5f7ee35008a682add63704c7468958193a932e6d","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.267-renovate-internal-patch-4f1ac89fd5822b3de32b6dd154f6a63f6b70a59a.tgz","fileCount":18,"integrity":"sha512-REQaEARbf3CaG7ZblxXswzpxBbxx/9s7fqKwNUZ0sNH4yojAW+1YrfZuPXDQRw9/aiPzQkwv5NJ4VcoqP2tTHg==","signatures":[{"sig":"MEUCIQCfFcAS+vl19zwIqNgpNr/5R+/Mihe9AqetdYxaWOkbWgIgA3vV4jWH+LuUc90rNIxT0Y5H+eT9WLuzOeZZV4N15Zw=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":65719},"main":"build/index.js","types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\n[![Publish Documentation](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml/badge.svg)](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml)\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=14.2.0"},"gitHead":"4f1ac89fd5822b3de32b6dd154f6a63f6b70a59a","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest,typedoc","test":"npm run lint && npm run test:unit","build":"npm run clean && tsc -p tsconfig.build.json","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint:fix":"balena-lint --fix lib test","test:unit":"jest"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"versionist":{"publishedAt":"2021-11-11T06:32:19.265Z"},"_npmVersion":"6.14.15","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --fix"]},"_nodeVersion":"14.17.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.3.0","@balena/jellyfish-logger":"^3.0.106"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^27.3.1","sinon":"^12.0.1","deplint":"^1.1.3","ts-jest":"^27.0.7","typedoc":"^0.22.8","depcheck":"^1.4.2","typescript":"^4.4.4","@types/jest":"^27.0.2","lint-staged":"^11.2.6","@balena/lint":"^6.1.1","@types/sinon":"^10.0.6","@types/semver":"^7.3.9","simple-git-hooks":"^2.7.0","@balena/jellycheck":"^0.1.5","@types/json-schema":"~6.0.1","@balena/jellyfish-types":"^1.2.13","@balena/jellyfish-config":"^1.5.8"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.267-renovate-internal-patch-4f1ac89fd5822b3de32b6dd154f6a63f6b70a59a_1636612518146_0.7639647923838147","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.267":{"name":"@balena/jellyfish-plugin-base","version":"2.1.267","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.1.267","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"7a2e82da5d32f5ed3e0f268436073487b8b791db","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.267.tgz","fileCount":18,"integrity":"sha512-AD30+3MJlnNgQb9N4SXE08FmEPCKx5f9HjehKQMzSe9P8Z6DEMoCoi06SnpfmcjgG1GdU+aZXkosww5LHfv01A==","signatures":[{"sig":"MEUCIHs94e7xC40dyx40DNNy4Y4MYl87W4fh1nDRTYR1Rpb8AiEAjrRzFOljv9gQyH5VCWgnyFRfnhjDkuPatxZSkOueZLk=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":65654},"main":"build/index.js","types":"build/index.d.ts","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=14.2.0"},"gitHead":"3f064b7276490da27f0d522f4c0da7a3ed8fdd77","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest,typedoc","test":"npm run lint && npm run test:unit","build":"npm run clean && tsc -p tsconfig.build.json","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint:fix":"balena-lint --fix lib test","test:unit":"jest"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"versionist":{"publishedAt":"2021-11-11T06:36:19.808Z"},"_npmVersion":"6.14.15","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --fix"]},"_nodeVersion":"14.17.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.3.0","@balena/jellyfish-logger":"^3.0.106"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^27.3.1","sinon":"^12.0.1","deplint":"^1.1.3","ts-jest":"^27.0.7","typedoc":"^0.22.8","depcheck":"^1.4.2","typescript":"^4.4.4","@types/jest":"^27.0.2","lint-staged":"^11.2.6","@balena/lint":"^6.1.1","@types/sinon":"^10.0.6","@types/semver":"^7.3.9","simple-git-hooks":"^2.7.0","@balena/jellycheck":"^0.1.5","@types/json-schema":"~6.0.1","@balena/jellyfish-types":"^1.2.13","@balena/jellyfish-config":"^1.5.8"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.267_1636612678059_0.6404002893927823","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.268-renovate-internal-patch-d6b2391d34c83ebe6a5de9c6c8dde4dbe9b9016b":{"name":"@balena/jellyfish-plugin-base","version":"2.1.268-renovate-internal-patch-d6b2391d34c83ebe6a5de9c6c8dde4dbe9b9016b","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.1.268-renovate-internal-patch-d6b2391d34c83ebe6a5de9c6c8dde4dbe9b9016b","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"281ec68f6595502688bedf6548ff07fb9db82040","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.268-renovate-internal-patch-d6b2391d34c83ebe6a5de9c6c8dde4dbe9b9016b.tgz","fileCount":18,"integrity":"sha512-VhSmtlvIgMi+1iwc9o6apG8wPBuZPND+KDaPYui43UYpj+d2lkHSLp3c1tEckbwJTruWJI7zJFdzI3/gS4KOVw==","signatures":[{"sig":"MEUCIQCUT/Qi9N1h/4b2i05CUns5EipcLEaahODakgKiPkiO6QIgW7vFyF7SzUJvlNtT/O15cZOy1hamnCw+J/Vszd5Dq4Y=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":65824},"main":"build/index.js","types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\n[![Publish Documentation](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml/badge.svg)](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml)\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=14.2.0"},"gitHead":"d6b2391d34c83ebe6a5de9c6c8dde4dbe9b9016b","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest,typedoc","test":"npm run lint && npm run test:unit","build":"npm run clean && tsc -p tsconfig.build.json","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint:fix":"balena-lint --fix lib test","test:unit":"jest"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"versionist":{"publishedAt":"2021-11-12T06:00:28.321Z"},"_npmVersion":"6.14.15","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --fix"]},"_nodeVersion":"14.17.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.3.0","@balena/jellyfish-logger":"^3.0.107"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^27.3.1","sinon":"^12.0.1","deplint":"^1.1.3","ts-jest":"^27.0.7","typedoc":"^0.22.8","depcheck":"^1.4.2","typescript":"^4.4.4","@types/jest":"^27.0.2","lint-staged":"^11.2.6","@balena/lint":"^6.1.1","@types/sinon":"^10.0.6","@types/semver":"^7.3.9","simple-git-hooks":"^2.7.0","@balena/jellycheck":"^0.1.5","@types/json-schema":"~6.0.1","@balena/jellyfish-types":"^1.2.13","@balena/jellyfish-config":"^1.5.8"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.268-renovate-internal-patch-d6b2391d34c83ebe6a5de9c6c8dde4dbe9b9016b_1636696951490_0.846554659276757","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.268":{"name":"@balena/jellyfish-plugin-base","version":"2.1.268","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.1.268","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"334011869e0bd51ac6b7bfa17c8c9c944da0cb46","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.268.tgz","fileCount":18,"integrity":"sha512-qPkrZlLeKL6C97d1TG4PPdgNbXOZqS7n7RnbJNFY6hYeBuPlgxIuezRrqGkTtQgkzWa2tENDdNmPgDc7/6wFRw==","signatures":[{"sig":"MEYCIQCWH+r5jMt+1TlcpiXTg9yvu9ArWnWJlYTKVRUk1Hkg4wIhANzBZeVWZu0cQQFOsKmwQOvUNTUHsHUaSukWgk9/Oteq","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":65759},"main":"build/index.js","types":"build/index.d.ts","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=14.2.0"},"gitHead":"39a39c0c36ace1c835722ea1ed9e13ec242ae5d7","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest,typedoc","test":"npm run lint && npm run test:unit","build":"npm run clean && tsc -p tsconfig.build.json","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint:fix":"balena-lint --fix lib test","test:unit":"jest"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"versionist":{"publishedAt":"2021-11-12T06:04:17.413Z"},"_npmVersion":"6.14.15","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --fix"]},"_nodeVersion":"14.17.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.3.0","@balena/jellyfish-logger":"^3.0.107"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^27.3.1","sinon":"^12.0.1","deplint":"^1.1.3","ts-jest":"^27.0.7","typedoc":"^0.22.8","depcheck":"^1.4.2","typescript":"^4.4.4","@types/jest":"^27.0.2","lint-staged":"^11.2.6","@balena/lint":"^6.1.1","@types/sinon":"^10.0.6","@types/semver":"^7.3.9","simple-git-hooks":"^2.7.0","@balena/jellycheck":"^0.1.5","@types/json-schema":"~6.0.1","@balena/jellyfish-types":"^1.2.13","@balena/jellyfish-config":"^1.5.8"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.268_1636697154875_0.8880270889793969","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.269-renovate-internal-patch-b1c2fdd7710fb94efc42b689199350557c934250":{"name":"@balena/jellyfish-plugin-base","version":"2.1.269-renovate-internal-patch-b1c2fdd7710fb94efc42b689199350557c934250","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.1.269-renovate-internal-patch-b1c2fdd7710fb94efc42b689199350557c934250","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"9c82169138adf8d8a0783eab4f52ede3a1a39120","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.269-renovate-internal-patch-b1c2fdd7710fb94efc42b689199350557c934250.tgz","fileCount":18,"integrity":"sha512-vJNf7wOhoKPBzFDfZn26UMym5YeYWLJGpcBPv6lNPLtF3hDmWY0VJ9psYjY/pRSXh/WBRIRP8lphZfZWFgQrfQ==","signatures":[{"sig":"MEUCIQD8XdxlGsMGJmrg7HkipFOLD1DFIbufPDBcXp9NUuPTSAIgD/Lu4IARETXZpr56XXSpZRdH4zxmNt9C6lS7CgytERw=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":65929},"main":"build/index.js","types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\n[![Publish Documentation](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml/badge.svg)](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml)\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=14.2.0"},"gitHead":"b1c2fdd7710fb94efc42b689199350557c934250","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest,typedoc","test":"npm run lint && npm run test:unit","build":"npm run clean && tsc -p tsconfig.build.json","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint:fix":"balena-lint --fix lib test","test:unit":"jest"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"versionist":{"publishedAt":"2021-11-13T01:26:51.006Z"},"_npmVersion":"6.14.15","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --fix"]},"_nodeVersion":"14.17.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.3.0","@balena/jellyfish-logger":"^3.0.108"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^27.3.1","sinon":"^12.0.1","deplint":"^1.1.3","ts-jest":"^27.0.7","typedoc":"^0.22.8","depcheck":"^1.4.2","typescript":"^4.4.4","@types/jest":"^27.0.2","lint-staged":"^11.2.6","@balena/lint":"^6.1.1","@types/sinon":"^10.0.6","@types/semver":"^7.3.9","simple-git-hooks":"^2.7.0","@balena/jellycheck":"^0.1.5","@types/json-schema":"~6.0.1","@balena/jellyfish-types":"^1.2.13","@balena/jellyfish-config":"^1.5.8"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.269-renovate-internal-patch-b1c2fdd7710fb94efc42b689199350557c934250_1636766957709_0.35915182203873286","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.269-renovate-external-non-major-b5cda64a0f4da0b3b7256c1045e84f92d6262bbb":{"name":"@balena/jellyfish-plugin-base","version":"2.1.269-renovate-external-non-major-b5cda64a0f4da0b3b7256c1045e84f92d6262bbb","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.1.269-renovate-external-non-major-b5cda64a0f4da0b3b7256c1045e84f92d6262bbb","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"afb8ddd0da1e6b1a9f9d522374d479bf063a074d","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.269-renovate-external-non-major-b5cda64a0f4da0b3b7256c1045e84f92d6262bbb.tgz","fileCount":18,"integrity":"sha512-OZwO+B9SxhkRnJmm/+02yG9PzNf1/dGyEM8KH45d3dpaTLN/vD0QtEIwZyFxJCtbCzxl3a8McSLmX6w88qeEpg==","signatures":[{"sig":"MEYCIQDtI4u4dW3z1jtlKiNEyaTiXizzyzuANr6H7NLMiLyqQQIhANer3MHXNGhkFbS8H7E+rPSf2pf0uHM7COLHuQA4LTe6","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":65918},"main":"build/index.js","types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\n[![Publish Documentation](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml/badge.svg)](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml)\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=14.2.0"},"gitHead":"b5cda64a0f4da0b3b7256c1045e84f92d6262bbb","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest,typedoc","test":"npm run lint && npm run test:unit","build":"npm run clean && tsc -p tsconfig.build.json","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint:fix":"balena-lint --fix lib test","test:unit":"jest"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"versionist":{"publishedAt":"2021-11-13T01:27:26.926Z"},"_npmVersion":"6.14.15","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --fix"]},"_nodeVersion":"14.17.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.4.0","@balena/jellyfish-logger":"^3.0.107"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^27.3.1","sinon":"^12.0.1","deplint":"^1.1.3","ts-jest":"^27.0.7","typedoc":"^0.22.8","depcheck":"^1.4.2","typescript":"^4.4.4","@types/jest":"^27.0.2","lint-staged":"^11.2.6","@balena/lint":"^6.1.1","@types/sinon":"^10.0.6","@types/semver":"^7.3.9","simple-git-hooks":"^2.7.0","@balena/jellycheck":"^0.1.5","@types/json-schema":"~6.0.1","@balena/jellyfish-types":"^1.2.13","@balena/jellyfish-config":"^1.5.8"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.269-renovate-external-non-major-b5cda64a0f4da0b3b7256c1045e84f92d6262bbb_1636767084224_0.370709775368705","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.269":{"name":"@balena/jellyfish-plugin-base","version":"2.1.269","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.1.269","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"a2035b542f497a1c97519b4a54cf458cc5022e0d","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.269.tgz","fileCount":18,"integrity":"sha512-N3kR6CsJiO1rOwaS9JIFpbvEbjdfpPgyx2H2mq3M1mYIUXPWAEW8dGVSicAa307C46lVYJ8GrvIc8d1Y2vlqag==","signatures":[{"sig":"MEYCIQCN76WVe16ZCZe9ptVdnfwueY6E2fXRYUs0vteMV8QzugIhAOzVEHzO73w0EpotGzySuNy9ZpIMA0M8npjD9Ckksv7F","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":65864},"main":"build/index.js","types":"build/index.d.ts","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=14.2.0"},"gitHead":"ee4a7ba63a97674c63d252f7b5e814adfe2cd77f","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest,typedoc","test":"npm run lint && npm run test:unit","build":"npm run clean && tsc -p tsconfig.build.json","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint:fix":"balena-lint --fix lib test","test:unit":"jest"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"versionist":{"publishedAt":"2021-11-13T01:30:43.464Z"},"_npmVersion":"6.14.15","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --fix"]},"_nodeVersion":"14.17.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.3.0","@balena/jellyfish-logger":"^3.0.108"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^27.3.1","sinon":"^12.0.1","deplint":"^1.1.3","ts-jest":"^27.0.7","typedoc":"^0.22.8","depcheck":"^1.4.2","typescript":"^4.4.4","@types/jest":"^27.0.2","lint-staged":"^11.2.6","@balena/lint":"^6.1.1","@types/sinon":"^10.0.6","@types/semver":"^7.3.9","simple-git-hooks":"^2.7.0","@balena/jellycheck":"^0.1.5","@types/json-schema":"~6.0.1","@balena/jellyfish-types":"^1.2.13","@balena/jellyfish-config":"^1.5.8"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.269_1636767146412_0.6915007465479206","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.270-renovate-internal-patch-6c91a1fe91e7cc2c285824f67659e3602703a0cb":{"name":"@balena/jellyfish-plugin-base","version":"2.1.270-renovate-internal-patch-6c91a1fe91e7cc2c285824f67659e3602703a0cb","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.1.270-renovate-internal-patch-6c91a1fe91e7cc2c285824f67659e3602703a0cb","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"f5c80da9c7823cae0558b96f14381bb0b867c3fa","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.270-renovate-internal-patch-6c91a1fe91e7cc2c285824f67659e3602703a0cb.tgz","fileCount":18,"integrity":"sha512-mctHIKv18+jxUiYQ6mluEozApAjUqJqltHRrpu0+woV4+Vls3udi4CGZ07ueryw0ZOYUS7Ph9DYk0QOCwA5xLw==","signatures":[{"sig":"MEQCIDAwF9JDsleeSWni9r5BdJrzmuhOfL/P0TRb+ixwX5OAAiAdHCL1H028FTZuBRydVzm4UJuVaot+VI3iCIURDmywPA==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":66032},"main":"build/index.js","types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\n[![Publish Documentation](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml/badge.svg)](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml)\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=14.2.0"},"gitHead":"6c91a1fe91e7cc2c285824f67659e3602703a0cb","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest,typedoc","test":"npm run lint && npm run test:unit","build":"npm run clean && tsc -p tsconfig.build.json","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint:fix":"balena-lint --fix lib test","test:unit":"jest"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"versionist":{"publishedAt":"2021-11-13T04:03:02.116Z"},"_npmVersion":"6.14.15","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --fix"]},"_nodeVersion":"14.17.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.3.0","@balena/jellyfish-logger":"^3.0.108"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^27.3.1","sinon":"^12.0.1","deplint":"^1.1.3","ts-jest":"^27.0.7","typedoc":"^0.22.8","depcheck":"^1.4.2","typescript":"^4.4.4","@types/jest":"^27.0.2","lint-staged":"^11.2.6","@balena/lint":"^6.1.1","@types/sinon":"^10.0.6","@types/semver":"^7.3.9","simple-git-hooks":"^2.7.0","@balena/jellycheck":"^0.1.5","@types/json-schema":"~6.0.1","@balena/jellyfish-types":"^1.2.14","@balena/jellyfish-config":"^1.5.8"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.270-renovate-internal-patch-6c91a1fe91e7cc2c285824f67659e3602703a0cb_1636776323040_0.9141953770268616","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.270":{"name":"@balena/jellyfish-plugin-base","version":"2.1.270","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.1.270","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"d6bccf04116a629f5b62834c2e326eb249659d57","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.270.tgz","fileCount":18,"integrity":"sha512-iH7IrsZ8Qz/Kx2RYdVqfwcaCG+K5WTgIiByKKEnZO06pb3YqDIDrxusgdwGSRw7RcvpnZW114eDKzniBZ+iW2Q==","signatures":[{"sig":"MEQCIFFvHqyOhl3fUlppPmcHhC7Nbatx0thO0odCKFgB61meAiB7LxT4rw5wSA4AK4E1pXXbCgBP70iK0r1fk6sX5UcNIg==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":65967},"main":"build/index.js","types":"build/index.d.ts","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=14.2.0"},"gitHead":"d514b92aeb1684659b2120ba11d96773f00a0334","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest,typedoc","test":"npm run lint && npm run test:unit","build":"npm run clean && tsc -p tsconfig.build.json","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint:fix":"balena-lint --fix lib test","test:unit":"jest"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"versionist":{"publishedAt":"2021-11-13T04:07:02.764Z"},"_npmVersion":"6.14.15","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --fix"]},"_nodeVersion":"14.17.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.3.0","@balena/jellyfish-logger":"^3.0.108"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^27.3.1","sinon":"^12.0.1","deplint":"^1.1.3","ts-jest":"^27.0.7","typedoc":"^0.22.8","depcheck":"^1.4.2","typescript":"^4.4.4","@types/jest":"^27.0.2","lint-staged":"^11.2.6","@balena/lint":"^6.1.1","@types/sinon":"^10.0.6","@types/semver":"^7.3.9","simple-git-hooks":"^2.7.0","@balena/jellycheck":"^0.1.5","@types/json-schema":"~6.0.1","@balena/jellyfish-types":"^1.2.14","@balena/jellyfish-config":"^1.5.8"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.270_1636776526588_0.34391622363505414","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.271-renovate-external-non-major-d2779e10a804d53f4327828f21db9740a86101d3":{"name":"@balena/jellyfish-plugin-base","version":"2.1.271-renovate-external-non-major-d2779e10a804d53f4327828f21db9740a86101d3","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.1.271-renovate-external-non-major-d2779e10a804d53f4327828f21db9740a86101d3","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"e2bf558adeebf5032111fdb03342be8d8942ead7","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.271-renovate-external-non-major-d2779e10a804d53f4327828f21db9740a86101d3.tgz","fileCount":18,"integrity":"sha512-opgzM75qZlTZHCET+ed3OhxYDQY5WoESab7+fu/Bcz1xG6uFJUENaJzTJxTH5WYs1/VmhSCsr4khg8KIKoh4NQ==","signatures":[{"sig":"MEYCIQCN4VvJdFXsfddTSJ2gpAeobKRI/Q9leFMsqdbeOx1mIwIhAMiiXVL15HYJ61U/GlmfGDP+PeRrT6OUNti3eTHp9sYH","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":66126},"main":"build/index.js","types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\n[![Publish Documentation](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml/badge.svg)](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml)\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=14.2.0"},"gitHead":"d2779e10a804d53f4327828f21db9740a86101d3","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest,typedoc","test":"npm run lint && npm run test:unit","build":"npm run clean && tsc -p tsconfig.build.json","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint:fix":"balena-lint --fix lib test","test:unit":"jest"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"versionist":{"publishedAt":"2021-11-13T04:08:12.901Z"},"_npmVersion":"6.14.15","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --fix"]},"_nodeVersion":"14.17.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.4.0","@balena/jellyfish-logger":"^3.0.108"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^27.3.1","sinon":"^12.0.1","deplint":"^1.1.3","ts-jest":"^27.0.7","typedoc":"^0.22.8","depcheck":"^1.4.2","typescript":"^4.4.4","@types/jest":"^27.0.2","lint-staged":"^11.2.6","@balena/lint":"^6.1.1","@types/sinon":"^10.0.6","@types/semver":"^7.3.9","simple-git-hooks":"^2.7.0","@balena/jellycheck":"^0.1.5","@types/json-schema":"~6.0.1","@balena/jellyfish-types":"^1.2.14","@balena/jellyfish-config":"^1.5.8"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.271-renovate-external-non-major-d2779e10a804d53f4327828f21db9740a86101d3_1636776620116_0.9836172229484299","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.271":{"name":"@balena/jellyfish-plugin-base","version":"2.1.271","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.1.271","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"791059ef5c50c242c37576b280e959b1ec0cb3f5","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.271.tgz","fileCount":18,"integrity":"sha512-LZBo/MUflZN139N3OqHgDAYG6Pw6K+G4XgwJpWwl88BD6pJt+37nUqsENzryqODHYdEGEsnCUzQsG+SNHyhu8A==","signatures":[{"sig":"MEUCIGuuoZqRUbv5CYs8p7DMkWrXj4Lw5OustjnFMB3kiVjNAiEAh95k6GshPJIkPAynQQe68Olg8KaG0I8OhLuDhGAPUN4=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":66057},"main":"build/index.js","types":"build/index.d.ts","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=14.2.0"},"gitHead":"436c6b9bf7aacdfe445670d38174ad7a4198914b","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest,typedoc","test":"npm run lint && npm run test:unit","build":"npm run clean && tsc -p tsconfig.build.json","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint:fix":"balena-lint --fix lib test","test:unit":"jest"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"versionist":{"publishedAt":"2021-11-13T04:15:33.518Z"},"_npmVersion":"6.14.15","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --fix"]},"_nodeVersion":"14.17.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.4.0","@balena/jellyfish-logger":"^3.0.108"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^27.3.1","sinon":"^12.0.1","deplint":"^1.1.3","ts-jest":"^27.0.7","typedoc":"^0.22.8","depcheck":"^1.4.2","typescript":"^4.4.4","@types/jest":"^27.0.2","lint-staged":"^11.2.6","@balena/lint":"^6.1.1","@types/sinon":"^10.0.6","@types/semver":"^7.3.9","simple-git-hooks":"^2.7.0","@balena/jellycheck":"^0.1.5","@types/json-schema":"~6.0.1","@balena/jellyfish-types":"^1.2.14","@balena/jellyfish-config":"^1.5.8"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.271_1636777061273_0.90669654794994","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.272-renovate-internal-patch-47543ed762a2448ebab61a2b8456e0471d1246e8":{"name":"@balena/jellyfish-plugin-base","version":"2.1.272-renovate-internal-patch-47543ed762a2448ebab61a2b8456e0471d1246e8","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.1.272-renovate-internal-patch-47543ed762a2448ebab61a2b8456e0471d1246e8","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"914d7ef185591cf327cb3b51cd7b22f13eee29c3","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.272-renovate-internal-patch-47543ed762a2448ebab61a2b8456e0471d1246e8.tgz","fileCount":18,"integrity":"sha512-Ph4ymfxTY8DpAw2uOGPe7iK5WpTQ1BH/qZFh3BTa4rsaO2Osj/n+2NfIZmrUOmISTv0LXqUBE5vl7u9kQ+yt1A==","signatures":[{"sig":"MEYCIQDyytqtq9+zbJwSMeSMKaQsXslhDsLlRoO1+/gLHtQAvQIhAIJNOkZ4kbVGXBqiL9f8x3DhS+NJTc2vD76TwKgZlGy+","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":66227},"main":"build/index.js","types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\n[![Publish Documentation](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml/badge.svg)](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml)\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=14.2.0"},"gitHead":"47543ed762a2448ebab61a2b8456e0471d1246e8","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest,typedoc","test":"npm run lint && npm run test:unit","build":"npm run clean && tsc -p tsconfig.build.json","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint:fix":"balena-lint --fix lib test","test:unit":"jest"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"versionist":{"publishedAt":"2021-11-13T09:25:01.400Z"},"_npmVersion":"6.14.15","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --fix"]},"_nodeVersion":"14.17.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.4.0","@balena/jellyfish-logger":"^3.0.109"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^27.3.1","sinon":"^12.0.1","deplint":"^1.1.3","ts-jest":"^27.0.7","typedoc":"^0.22.8","depcheck":"^1.4.2","typescript":"^4.4.4","@types/jest":"^27.0.2","lint-staged":"^11.2.6","@balena/lint":"^6.1.1","@types/sinon":"^10.0.6","@types/semver":"^7.3.9","simple-git-hooks":"^2.7.0","@balena/jellycheck":"^0.1.5","@types/json-schema":"~6.0.1","@balena/jellyfish-types":"^1.2.14","@balena/jellyfish-config":"^1.5.8"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.272-renovate-internal-patch-47543ed762a2448ebab61a2b8456e0471d1246e8_1636795661172_0.9483208727383816","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.272":{"name":"@balena/jellyfish-plugin-base","version":"2.1.272","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.1.272","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"b332e91e3f6abb09fde7054001c8c6a09c927dd0","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.272.tgz","fileCount":18,"integrity":"sha512-4Rer615lJISzkkc8PU1rkeUDa4t1NcVGHKCnSiMCaOied4a1SinR84J8ykLWG9sMG2Ou//bZdfGrfm1Iuu551g==","signatures":[{"sig":"MEYCIQDtDzL44l/9I/TAvTHDRTIlZfIHZoln449USVDT9n2KQQIhAK6/Z2ntLG7WEOA/mMFx9HtAiHT2Fk6OAMGhkb8DCf2e","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":66162},"main":"build/index.js","types":"build/index.d.ts","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=14.2.0"},"gitHead":"dd8b3b3e6ef4a382650fbec8f1c15419a2244fe9","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest,typedoc","test":"npm run lint && npm run test:unit","build":"npm run clean && tsc -p tsconfig.build.json","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint:fix":"balena-lint --fix lib test","test:unit":"jest"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"versionist":{"publishedAt":"2021-11-13T09:28:24.439Z"},"_npmVersion":"6.14.15","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --fix"]},"_nodeVersion":"14.17.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.4.0","@balena/jellyfish-logger":"^3.0.109"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^27.3.1","sinon":"^12.0.1","deplint":"^1.1.3","ts-jest":"^27.0.7","typedoc":"^0.22.8","depcheck":"^1.4.2","typescript":"^4.4.4","@types/jest":"^27.0.2","lint-staged":"^11.2.6","@balena/lint":"^6.1.1","@types/sinon":"^10.0.6","@types/semver":"^7.3.9","simple-git-hooks":"^2.7.0","@balena/jellycheck":"^0.1.5","@types/json-schema":"~6.0.1","@balena/jellyfish-types":"^1.2.14","@balena/jellyfish-config":"^1.5.8"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.272_1636795801759_0.6869261451637552","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.273-renovate-internal-patch-f814be591357890c6ddb4ce38b0dca1b703fb7f8":{"name":"@balena/jellyfish-plugin-base","version":"2.1.273-renovate-internal-patch-f814be591357890c6ddb4ce38b0dca1b703fb7f8","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.1.273-renovate-internal-patch-f814be591357890c6ddb4ce38b0dca1b703fb7f8","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"e23550d7932ee3c2490b674b281340d86bd6a3e9","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.273-renovate-internal-patch-f814be591357890c6ddb4ce38b0dca1b703fb7f8.tgz","fileCount":18,"integrity":"sha512-zCXIDpByw6VZ+Q25sKE4YwyJAU+ZqEOKnqhpIH2Dp9lyCEksMnq5QezRqqXFO/fPrM4WUP8XVH+o5THC8RDBHQ==","signatures":[{"sig":"MEUCIGvinRnxB297DZFmk1IEJdaIYI3ZJwImGobRywpDjTkaAiEA3KFY/mwvlJ0yOjgkkxogWMdsQjT6BXUYyDdFez9t2u0=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":66332},"main":"build/index.js","types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\n[![Publish Documentation](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml/badge.svg)](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml)\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=14.2.0"},"gitHead":"f814be591357890c6ddb4ce38b0dca1b703fb7f8","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest,typedoc","test":"npm run lint && npm run test:unit","build":"npm run clean && tsc -p tsconfig.build.json","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint:fix":"balena-lint --fix lib test","test:unit":"jest"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"versionist":{"publishedAt":"2021-11-14T15:00:21.747Z"},"_npmVersion":"6.14.15","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --fix"]},"_nodeVersion":"14.17.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.4.0","@balena/jellyfish-logger":"^3.0.110"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^27.3.1","sinon":"^12.0.1","deplint":"^1.1.3","ts-jest":"^27.0.7","typedoc":"^0.22.8","depcheck":"^1.4.2","typescript":"^4.4.4","@types/jest":"^27.0.2","lint-staged":"^11.2.6","@balena/lint":"^6.1.1","@types/sinon":"^10.0.6","@types/semver":"^7.3.9","simple-git-hooks":"^2.7.0","@balena/jellycheck":"^0.1.5","@types/json-schema":"~6.0.1","@balena/jellyfish-types":"^1.2.14","@balena/jellyfish-config":"^1.5.8"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.273-renovate-internal-patch-f814be591357890c6ddb4ce38b0dca1b703fb7f8_1636902180464_0.2847767673278989","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.273":{"name":"@balena/jellyfish-plugin-base","version":"2.1.273","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.1.273","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"2f61f21f2aef865718ca24718a6fa57db743142a","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.273.tgz","fileCount":18,"integrity":"sha512-sgHRebW4oXvVNqDcQFWMLQ0gvAHBs4yj6+/FYEllMcOqVbDygs3JL9uexHGscB/oP/RVwaTBKB7DxiY/+tfu0A==","signatures":[{"sig":"MEUCIHbK8xe/pmTesUvD6ep5KQJCb1+uXMPltLzz3FwfPGfXAiEA4j2xRAUG1/AvzhJ7m45vCHX9zQ6kGQIk8qn+AROtbmM=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":66267},"main":"build/index.js","types":"build/index.d.ts","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=14.2.0"},"gitHead":"d52994d30a40d675f5b6be1bd97ffcd5fd0178fc","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest,typedoc","test":"npm run lint && npm run test:unit","build":"npm run clean && tsc -p tsconfig.build.json","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint:fix":"balena-lint --fix lib test","test:unit":"jest"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"versionist":{"publishedAt":"2021-11-14T15:04:35.566Z"},"_npmVersion":"6.14.15","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --fix"]},"_nodeVersion":"14.17.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.4.0","@balena/jellyfish-logger":"^3.0.110"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^27.3.1","sinon":"^12.0.1","deplint":"^1.1.3","ts-jest":"^27.0.7","typedoc":"^0.22.8","depcheck":"^1.4.2","typescript":"^4.4.4","@types/jest":"^27.0.2","lint-staged":"^11.2.6","@balena/lint":"^6.1.1","@types/sinon":"^10.0.6","@types/semver":"^7.3.9","simple-git-hooks":"^2.7.0","@balena/jellycheck":"^0.1.5","@types/json-schema":"~6.0.1","@balena/jellyfish-types":"^1.2.14","@balena/jellyfish-config":"^1.5.8"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.273_1636902367908_0.6628305381691666","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.274-renovate-internal-patch-2842174deb7a0617d8c5b24206134c575a3c6789":{"name":"@balena/jellyfish-plugin-base","version":"2.1.274-renovate-internal-patch-2842174deb7a0617d8c5b24206134c575a3c6789","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.1.274-renovate-internal-patch-2842174deb7a0617d8c5b24206134c575a3c6789","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"6a3b26aef5bc0c5b915de84f52796e3af140c5d3","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.274-renovate-internal-patch-2842174deb7a0617d8c5b24206134c575a3c6789.tgz","fileCount":18,"integrity":"sha512-mTFkQgkDA01r385zxQm6FQ3HtaWSVuI7S/2/kV5V8TIPKfgqzNTlgmXxUtrsIwmi7qXn58xA+QY/P2bA72ci5A==","signatures":[{"sig":"MEUCIQCDZOn2+mTTvLEXqTuh0TexcOoPpddqHmaidkO3FPzQbwIgZpjk7Ll6VQrOFZ1eZXzTYr+ITmC/VkwnOk/Y8KRycGY=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":66435},"main":"build/index.js","types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\n[![Publish Documentation](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml/badge.svg)](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml)\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=14.2.0"},"gitHead":"2842174deb7a0617d8c5b24206134c575a3c6789","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest,typedoc","test":"npm run lint && npm run test:unit","build":"npm run clean && tsc -p tsconfig.build.json","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint:fix":"balena-lint --fix lib test","test:unit":"jest"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"versionist":{"publishedAt":"2021-11-14T22:45:11.135Z"},"_npmVersion":"6.14.15","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --fix"]},"_nodeVersion":"14.17.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.4.0","@balena/jellyfish-logger":"^3.0.110"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^27.3.1","sinon":"^12.0.1","deplint":"^1.1.3","ts-jest":"^27.0.7","typedoc":"^0.22.8","depcheck":"^1.4.2","typescript":"^4.4.4","@types/jest":"^27.0.2","lint-staged":"^11.2.6","@balena/lint":"^6.1.1","@types/sinon":"^10.0.6","@types/semver":"^7.3.9","simple-git-hooks":"^2.7.0","@balena/jellycheck":"^0.1.5","@types/json-schema":"~6.0.1","@balena/jellyfish-types":"^1.2.15","@balena/jellyfish-config":"^1.5.8"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.274-renovate-internal-patch-2842174deb7a0617d8c5b24206134c575a3c6789_1636930080091_0.5196873146524195","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.274-renovate-external-non-major-4498f2f03c68ea0508284d1d4c89e48c2c4e5997":{"name":"@balena/jellyfish-plugin-base","version":"2.1.274-renovate-external-non-major-4498f2f03c68ea0508284d1d4c89e48c2c4e5997","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.1.274-renovate-external-non-major-4498f2f03c68ea0508284d1d4c89e48c2c4e5997","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"56667a24080cb36d9c81cae820e8adae2962d83f","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.274-renovate-external-non-major-4498f2f03c68ea0508284d1d4c89e48c2c4e5997.tgz","fileCount":18,"integrity":"sha512-424lzEtPDiQx+SElaGb8vuPFzDyat3LQ4FEC2YDxfJZOWQp0R21+xpv+xLGbyAuWecBrmcCirNld80vR/EZ5Zg==","signatures":[{"sig":"MEUCIGU/FeQUtr1bWIBm+ankAx6j7jqNgvLxw7VKrPBLpZxZAiEApzB5AhARteaAAWBVzskuNvbe2qPGoTNuGJ3ONoBq2CI=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":66423},"main":"build/index.js","types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\n[![Publish Documentation](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml/badge.svg)](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml)\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=14.2.0"},"gitHead":"4498f2f03c68ea0508284d1d4c89e48c2c4e5997","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest,typedoc","test":"npm run lint && npm run test:unit","build":"npm run clean && tsc -p tsconfig.build.json","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint:fix":"balena-lint --fix lib test","test:unit":"jest"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"versionist":{"publishedAt":"2021-11-14T22:45:46.066Z"},"_npmVersion":"6.14.15","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --fix"]},"_nodeVersion":"14.17.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.4.0","@balena/jellyfish-logger":"^3.0.110"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^27.3.1","sinon":"^12.0.1","deplint":"^1.1.3","ts-jest":"^27.0.7","typedoc":"^0.22.9","depcheck":"^1.4.2","typescript":"^4.4.4","@types/jest":"^27.0.2","lint-staged":"^11.2.6","@balena/lint":"^6.1.1","@types/sinon":"^10.0.6","@types/semver":"^7.3.9","simple-git-hooks":"^2.7.0","@balena/jellycheck":"^0.1.5","@types/json-schema":"~6.0.1","@balena/jellyfish-types":"^1.2.14","@balena/jellyfish-config":"^1.5.8"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.274-renovate-external-non-major-4498f2f03c68ea0508284d1d4c89e48c2c4e5997_1636930110339_0.6945417093516362","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.274":{"name":"@balena/jellyfish-plugin-base","version":"2.1.274","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.1.274","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"c8a711249df8744003cc60632c44764fb17161db","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.274.tgz","fileCount":18,"integrity":"sha512-bDufZuRJEV5qxbESx8EgNXKV3QfLfBcw9eCPrqSlIx9KvxRgmQjA75XrNVoHsCl9UieShm6ygCrdBuA4eBc87w==","signatures":[{"sig":"MEYCIQDZ3CiwSGGVU0SJmMh1OWGCYyXWayv0a88vUBXPuqS9jAIhALsrUIY0OGUDBKR+QRE7IXSndFxA76qgz+9SrH0DjI+j","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":66370},"main":"build/index.js","types":"build/index.d.ts","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=14.2.0"},"gitHead":"09af2749213aef43be5dc7c7bdb6901d4c776582","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest,typedoc","test":"npm run lint && npm run test:unit","build":"npm run clean && tsc -p tsconfig.build.json","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint:fix":"balena-lint --fix lib test","test:unit":"jest"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"versionist":{"publishedAt":"2021-11-14T22:49:21.299Z"},"_npmVersion":"6.14.15","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --fix"]},"_nodeVersion":"14.17.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.4.0","@balena/jellyfish-logger":"^3.0.110"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^27.3.1","sinon":"^12.0.1","deplint":"^1.1.3","ts-jest":"^27.0.7","typedoc":"^0.22.8","depcheck":"^1.4.2","typescript":"^4.4.4","@types/jest":"^27.0.2","lint-staged":"^11.2.6","@balena/lint":"^6.1.1","@types/sinon":"^10.0.6","@types/semver":"^7.3.9","simple-git-hooks":"^2.7.0","@balena/jellycheck":"^0.1.5","@types/json-schema":"~6.0.1","@balena/jellyfish-types":"^1.2.15","@balena/jellyfish-config":"^1.5.8"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.274_1636930272473_0.6895679294951","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.275-renovate-external-non-major-c596d66eeed211b52315775a5df1ffa6acca923d":{"name":"@balena/jellyfish-plugin-base","version":"2.1.275-renovate-external-non-major-c596d66eeed211b52315775a5df1ffa6acca923d","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.1.275-renovate-external-non-major-c596d66eeed211b52315775a5df1ffa6acca923d","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"fe52996f629a7b9c64b607cea63193e3c4605d87","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.275-renovate-external-non-major-c596d66eeed211b52315775a5df1ffa6acca923d.tgz","fileCount":18,"integrity":"sha512-vDGvarHtjYsPiqU2R/ELdQWTWyfKI7Yt7K3XQ5gNFRuH6Bo+ky77ZDI0+rHFX4ZQzBf+aBHT+A9ypxzjO02vKA==","signatures":[{"sig":"MEUCIDxbu+dpLuuCiSWLlyj7aPuI5o2uuQUycKkfgotwbwS8AiEAsGn697Fg0ytgdUEGc+AsCV+drBKHOufYiuf92YRKHzA=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":66526},"main":"build/index.js","types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\n[![Publish Documentation](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml/badge.svg)](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml)\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=14.2.0"},"gitHead":"c596d66eeed211b52315775a5df1ffa6acca923d","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest,typedoc","test":"npm run lint && npm run test:unit","build":"npm run clean && tsc -p tsconfig.build.json","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint:fix":"balena-lint --fix lib test","test:unit":"jest"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"versionist":{"publishedAt":"2021-11-14T22:51:14.364Z"},"_npmVersion":"6.14.15","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --fix"]},"_nodeVersion":"14.17.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.4.0","@balena/jellyfish-logger":"^3.0.110"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^27.3.1","sinon":"^12.0.1","deplint":"^1.1.3","ts-jest":"^27.0.7","typedoc":"^0.22.9","depcheck":"^1.4.2","typescript":"^4.4.4","@types/jest":"^27.0.2","lint-staged":"^11.2.6","@balena/lint":"^6.1.1","@types/sinon":"^10.0.6","@types/semver":"^7.3.9","simple-git-hooks":"^2.7.0","@balena/jellycheck":"^0.1.5","@types/json-schema":"~6.0.1","@balena/jellyfish-types":"^1.2.15","@balena/jellyfish-config":"^1.5.8"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.275-renovate-external-non-major-c596d66eeed211b52315775a5df1ffa6acca923d_1636930441140_0.7170566947299177","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.275":{"name":"@balena/jellyfish-plugin-base","version":"2.1.275","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.1.275","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"f618dd40d52450ce310d066170a5f3f7468b68ef","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.275.tgz","fileCount":18,"integrity":"sha512-iXyea2KbecnfiviKAXt3o9h7gsPkgkupEf6eDkCPrWzIhfCNoXV0yZ9D+LpsRkSQgb625EmCWPajYqULU6lDAQ==","signatures":[{"sig":"MEYCIQDG9CPYhOablv0Hmxj/teMNGRz3JBqbBBdRRM8xJvJzUwIhAPrBy3omSM927E0ydvGICIb73i8o/qL7Vvw/epcFtCXE","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":66457},"main":"build/index.js","types":"build/index.d.ts","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=14.2.0"},"gitHead":"ee5daabf044728c6a48797affe0b9dd46c4fd0cc","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest,typedoc","test":"npm run lint && npm run test:unit","build":"npm run clean && tsc -p tsconfig.build.json","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint:fix":"balena-lint --fix lib test","test:unit":"jest"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"versionist":{"publishedAt":"2021-11-14T22:58:17.239Z"},"_npmVersion":"6.14.15","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --fix"]},"_nodeVersion":"14.17.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.4.0","@balena/jellyfish-logger":"^3.0.110"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^27.3.1","sinon":"^12.0.1","deplint":"^1.1.3","ts-jest":"^27.0.7","typedoc":"^0.22.9","depcheck":"^1.4.2","typescript":"^4.4.4","@types/jest":"^27.0.2","lint-staged":"^11.2.6","@balena/lint":"^6.1.1","@types/sinon":"^10.0.6","@types/semver":"^7.3.9","simple-git-hooks":"^2.7.0","@balena/jellycheck":"^0.1.5","@types/json-schema":"~6.0.1","@balena/jellyfish-types":"^1.2.15","@balena/jellyfish-config":"^1.5.8"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.275_1636930792748_0.08134101335372423","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.276-renovate-internal-patch-376e5a10ac12271b1ee1769921b13f3af54f59fc":{"name":"@balena/jellyfish-plugin-base","version":"2.1.276-renovate-internal-patch-376e5a10ac12271b1ee1769921b13f3af54f59fc","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.1.276-renovate-internal-patch-376e5a10ac12271b1ee1769921b13f3af54f59fc","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"f9eae00a3e6515fee561de6468c40bcd114bc920","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.276-renovate-internal-patch-376e5a10ac12271b1ee1769921b13f3af54f59fc.tgz","fileCount":18,"integrity":"sha512-ixJooz9tf12h80lWKtWkXcgCfIeevGHYIXk48Mc3A7E69RzyFWCsghSTqiUZFDIktvoCjBYi8LirC3lEOGg9HA==","signatures":[{"sig":"MEUCIE7D5Te8ZCn8EpPb8Q7vJcdzofjee5lYUAJl3pExirTiAiEAm26pfAm6w5ZDXvQAezZlVuN+kYLbfZocA4e45CP4QdA=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":66627},"main":"build/index.js","types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\n[![Publish Documentation](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml/badge.svg)](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml)\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=14.2.0"},"gitHead":"376e5a10ac12271b1ee1769921b13f3af54f59fc","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest,typedoc","test":"npm run lint && npm run test:unit","build":"npm run clean && tsc -p tsconfig.build.json","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint:fix":"balena-lint --fix lib test","test:unit":"jest"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"versionist":{"publishedAt":"2021-11-14T23:05:56.399Z"},"_npmVersion":"6.14.15","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --fix"]},"_nodeVersion":"14.17.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.4.0","@balena/jellyfish-logger":"^3.0.111"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^27.3.1","sinon":"^12.0.1","deplint":"^1.1.3","ts-jest":"^27.0.7","typedoc":"^0.22.9","depcheck":"^1.4.2","typescript":"^4.4.4","@types/jest":"^27.0.2","lint-staged":"^11.2.6","@balena/lint":"^6.1.1","@types/sinon":"^10.0.6","@types/semver":"^7.3.9","simple-git-hooks":"^2.7.0","@balena/jellycheck":"^0.1.5","@types/json-schema":"~6.0.1","@balena/jellyfish-types":"^1.2.15","@balena/jellyfish-config":"^1.5.8"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.276-renovate-internal-patch-376e5a10ac12271b1ee1769921b13f3af54f59fc_1636931342074_0.4586610258525261","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.276":{"name":"@balena/jellyfish-plugin-base","version":"2.1.276","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.1.276","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"0075a100382f5901986176d77f41a7c7f1136397","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.276.tgz","fileCount":18,"integrity":"sha512-xIJZ/zOfxB9Yd9Q7UJdDAKGOIzgV2RxKrDmdNInmV9yF5SBmO5DQGNv1Y6kJccbcYwmmZbDSaKwwCOPA8p/x+g==","signatures":[{"sig":"MEYCIQCg8Jxq7FckTDVQxBO2I4XGZZ2jR5yGfwVWPKkBrwzNSwIhAIZcvK5obAT+dyDvc6SbtTffenkmWkha3ZuCLmN+j0Km","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":66562},"main":"build/index.js","types":"build/index.d.ts","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=14.2.0"},"gitHead":"457d7f1d9d5767e9c35ec79c06283b88d3092281","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest,typedoc","test":"npm run lint && npm run test:unit","build":"npm run clean && tsc -p tsconfig.build.json","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint:fix":"balena-lint --fix lib test","test:unit":"jest"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"versionist":{"publishedAt":"2021-11-14T23:11:10.533Z"},"_npmVersion":"6.14.15","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --fix"]},"_nodeVersion":"14.17.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.4.0","@balena/jellyfish-logger":"^3.0.111"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^27.3.1","sinon":"^12.0.1","deplint":"^1.1.3","ts-jest":"^27.0.7","typedoc":"^0.22.9","depcheck":"^1.4.2","typescript":"^4.4.4","@types/jest":"^27.0.2","lint-staged":"^11.2.6","@balena/lint":"^6.1.1","@types/sinon":"^10.0.6","@types/semver":"^7.3.9","simple-git-hooks":"^2.7.0","@balena/jellycheck":"^0.1.5","@types/json-schema":"~6.0.1","@balena/jellyfish-types":"^1.2.15","@balena/jellyfish-config":"^1.5.8"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.276_1636931585597_0.25990337439756317","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.277-renovate-internal-patch-869bb84be818a8da4d34785aa872e0d49a9f0a2e":{"name":"@balena/jellyfish-plugin-base","version":"2.1.277-renovate-internal-patch-869bb84be818a8da4d34785aa872e0d49a9f0a2e","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.1.277-renovate-internal-patch-869bb84be818a8da4d34785aa872e0d49a9f0a2e","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"d2d9592221659bf82053187002727d27fc8e3e62","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.277-renovate-internal-patch-869bb84be818a8da4d34785aa872e0d49a9f0a2e.tgz","fileCount":18,"integrity":"sha512-p9++4KeWvHxE4Jg4xk8XbPLxDyzSI6eA8G/mdgCpJUT338CLqdPWWd+ZRZ3IbOqCf/OYXvYO8mGL3/OF6sPm+w==","signatures":[{"sig":"MEYCIQDFj1bD5aRHUzWBfko4Kbet4q0XgX+s9KvppIYNsrCZXwIhAOOSLceUyr/s3Xpqyc2jjkRT6YrGEeezFEHVB1vEDsVL","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":66732},"main":"build/index.js","types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\n[![Publish Documentation](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml/badge.svg)](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml)\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=14.2.0"},"gitHead":"869bb84be818a8da4d34785aa872e0d49a9f0a2e","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest,typedoc","test":"npm run lint && npm run test:unit","build":"npm run clean && tsc -p tsconfig.build.json","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint:fix":"balena-lint --fix lib test","test:unit":"jest"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"versionist":{"publishedAt":"2021-11-14T23:14:50.998Z"},"_npmVersion":"6.14.15","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --fix"]},"_nodeVersion":"14.17.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.4.0","@balena/jellyfish-logger":"^3.0.112"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^27.3.1","sinon":"^12.0.1","deplint":"^1.1.3","ts-jest":"^27.0.7","typedoc":"^0.22.9","depcheck":"^1.4.2","typescript":"^4.4.4","@types/jest":"^27.0.2","lint-staged":"^11.2.6","@balena/lint":"^6.1.1","@types/sinon":"^10.0.6","@types/semver":"^7.3.9","simple-git-hooks":"^2.7.0","@balena/jellycheck":"^0.1.5","@types/json-schema":"~6.0.1","@balena/jellyfish-types":"^1.2.15","@balena/jellyfish-config":"^1.5.8"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.277-renovate-internal-patch-869bb84be818a8da4d34785aa872e0d49a9f0a2e_1636931871494_0.4810863157343124","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.277-renovate-internal-patch-78fc3e0fd0aa08a56f9b91e16e2c9efd86c633fe":{"name":"@balena/jellyfish-plugin-base","version":"2.1.277-renovate-internal-patch-78fc3e0fd0aa08a56f9b91e16e2c9efd86c633fe","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.1.277-renovate-internal-patch-78fc3e0fd0aa08a56f9b91e16e2c9efd86c633fe","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"839508c0e82649f386715d6771553f22d617a840","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.277-renovate-internal-patch-78fc3e0fd0aa08a56f9b91e16e2c9efd86c633fe.tgz","fileCount":18,"integrity":"sha512-aR7e6ZtSCcZXNnTPuUsuJgyzSf1+fmzdTMR8xi2X1Q0A3I3Ummr4BUjeOiKYW7xKj1vtI13Jo2mBcpOIwZVpOA==","signatures":[{"sig":"MEYCIQC3VK1W41ijd+n74KuBs1cUgTr23NOWZcAsMKlQaTucAAIhAO5QiA2TqN+bBx9ytLNPuEfrPMkZXEUTotnzxoFYRm+x","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":66699},"main":"build/index.js","types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\n[![Publish Documentation](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml/badge.svg)](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml)\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=14.2.0"},"gitHead":"78fc3e0fd0aa08a56f9b91e16e2c9efd86c633fe","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest,typedoc","test":"npm run lint && npm run test:unit","build":"npm run clean && tsc -p tsconfig.build.json","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint:fix":"balena-lint --fix lib test","test:unit":"jest"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"versionist":{"publishedAt":"2021-11-15T04:40:33.729Z"},"_npmVersion":"6.14.15","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --fix"]},"_nodeVersion":"14.17.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.4.0","@balena/jellyfish-logger":"^3.0.117"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^27.3.1","sinon":"^12.0.1","deplint":"^1.1.3","ts-jest":"^27.0.7","typedoc":"^0.22.9","depcheck":"^1.4.2","typescript":"^4.4.4","@types/jest":"^27.0.2","lint-staged":"^11.2.6","@balena/lint":"^6.1.1","@types/sinon":"^10.0.6","@types/semver":"^7.3.9","simple-git-hooks":"^2.7.0","@balena/jellycheck":"^0.1.7","@types/json-schema":"~6.0.1","@balena/jellyfish-types":"^1.2.17","@balena/jellyfish-config":"^1.5.9"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.277-renovate-internal-patch-78fc3e0fd0aa08a56f9b91e16e2c9efd86c633fe_1636951398922_0.5191572475166355","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.277":{"name":"@balena/jellyfish-plugin-base","version":"2.1.277","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.1.277","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"bc4c723f5ffeda3c5a84faacd20d15b8076e633e","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.277.tgz","fileCount":18,"integrity":"sha512-1hrscCU0PM9YQFgUcpNM8ziYVSSUd8M+ZG418oKaZ8wcUlT5KS9K5MzuYGDwrpzt28wj07Qo9e4xfDamAJZYrA==","signatures":[{"sig":"MEQCIFxIntvQwAzfqQ4QzecB3yUOXR/qJWKxT7qei3GSn4f+AiBE/gTB2snh9B86FIvivSjjx2O72srH0Lexnk1A502tAA==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":66634},"main":"build/index.js","types":"build/index.d.ts","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=14.2.0"},"gitHead":"c2ff26370f03009f19a42a58c220fef511fd6b20","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest,typedoc","test":"npm run lint && npm run test:unit","build":"npm run clean && tsc -p tsconfig.build.json","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint:fix":"balena-lint --fix lib test","test:unit":"jest"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"versionist":{"publishedAt":"2021-11-15T04:44:48.796Z"},"_npmVersion":"6.14.15","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --fix"]},"_nodeVersion":"14.17.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.4.0","@balena/jellyfish-logger":"^3.0.117"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^27.3.1","sinon":"^12.0.1","deplint":"^1.1.3","ts-jest":"^27.0.7","typedoc":"^0.22.9","depcheck":"^1.4.2","typescript":"^4.4.4","@types/jest":"^27.0.2","lint-staged":"^11.2.6","@balena/lint":"^6.1.1","@types/sinon":"^10.0.6","@types/semver":"^7.3.9","simple-git-hooks":"^2.7.0","@balena/jellycheck":"^0.1.7","@types/json-schema":"~6.0.1","@balena/jellyfish-types":"^1.2.17","@balena/jellyfish-config":"^1.5.9"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.277_1636951584659_0.9125008350429735","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.278-renovate-internal-patch-6b8f9add260b62ff32347a74f0a921ce4e848f5e":{"name":"@balena/jellyfish-plugin-base","version":"2.1.278-renovate-internal-patch-6b8f9add260b62ff32347a74f0a921ce4e848f5e","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.1.278-renovate-internal-patch-6b8f9add260b62ff32347a74f0a921ce4e848f5e","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"6d16e7f4d784bd04d42fcff2bc8ddc773ff8027b","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.278-renovate-internal-patch-6b8f9add260b62ff32347a74f0a921ce4e848f5e.tgz","fileCount":18,"integrity":"sha512-ZQUGvxNVeDw2YQ5vct8t++vPgL1x+6DmE53fb7nDwadH7FbPLaNhfmu4BRo29jdr9YxvwTfOLCq1pe3xOSytQA==","signatures":[{"sig":"MEQCIEb+EnrjAiX0SnJyXoOQtrFmDcOMu0ZQGYeeVt8RV5LHAiBRYEjkmE+kjx6sTKn3ZVhUb22+PPdvlCFuraJc2d5ssg==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":66771},"main":"build/index.js","types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\n[![Publish Documentation](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml/badge.svg)](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml)\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=14.2.0"},"gitHead":"6b8f9add260b62ff32347a74f0a921ce4e848f5e","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest,typedoc","test":"npm run lint && npm run test:unit","build":"npm run clean && tsc -p tsconfig.build.json","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint:fix":"balena-lint --fix lib test","test:unit":"jest"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"versionist":{"publishedAt":"2021-11-15T09:33:28.761Z"},"_npmVersion":"6.14.15","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --fix"]},"_nodeVersion":"14.17.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.4.0","@balena/jellyfish-logger":"^3.0.119"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^27.3.1","sinon":"^12.0.1","deplint":"^1.1.3","ts-jest":"^27.0.7","typedoc":"^0.22.9","depcheck":"^1.4.2","typescript":"^4.4.4","@types/jest":"^27.0.2","lint-staged":"^11.2.6","@balena/lint":"^6.1.1","@types/sinon":"^10.0.6","@types/semver":"^7.3.9","simple-git-hooks":"^2.7.0","@balena/jellycheck":"^0.1.7","@types/json-schema":"~6.0.1","@balena/jellyfish-types":"^1.2.18","@balena/jellyfish-config":"^1.5.9"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.278-renovate-internal-patch-6b8f9add260b62ff32347a74f0a921ce4e848f5e_1636968949739_0.497795269293539","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.278":{"name":"@balena/jellyfish-plugin-base","version":"2.1.278","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.1.278","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"60cc1b1d072f98f1ff2e479315a867170a8f713a","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.278.tgz","fileCount":18,"integrity":"sha512-uiOmTBU4ck9LyDnfg/q0A+vNsH/rbxN4+gByntmuYmnHU1eB6B/8PbDPOV6RaUDTuiSisUw2M+aF5cdkdmkilg==","signatures":[{"sig":"MEUCIQDMfl0/l3i9uqJJcCaO+byvO+QXMO3V2oqSsjTA1wTRiAIgXOG06goSpHGqBnQXB+whxSDN8iVey+se54qAoUjdPww=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":66706},"main":"build/index.js","types":"build/index.d.ts","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=14.2.0"},"gitHead":"a7fb44938eea3e5c5fc94264faac8066ee1f6498","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest,typedoc","test":"npm run lint && npm run test:unit","build":"npm run clean && tsc -p tsconfig.build.json","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint:fix":"balena-lint --fix lib test","test:unit":"jest"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"versionist":{"publishedAt":"2021-11-15T09:37:19.116Z"},"_npmVersion":"6.14.15","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --fix"]},"_nodeVersion":"14.17.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.4.0","@balena/jellyfish-logger":"^3.0.119"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^27.3.1","sinon":"^12.0.1","deplint":"^1.1.3","ts-jest":"^27.0.7","typedoc":"^0.22.9","depcheck":"^1.4.2","typescript":"^4.4.4","@types/jest":"^27.0.2","lint-staged":"^11.2.6","@balena/lint":"^6.1.1","@types/sinon":"^10.0.6","@types/semver":"^7.3.9","simple-git-hooks":"^2.7.0","@balena/jellycheck":"^0.1.7","@types/json-schema":"~6.0.1","@balena/jellyfish-types":"^1.2.18","@balena/jellyfish-config":"^1.5.9"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.278_1636969131140_0.21916331951736234","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.279-renovate-internal-patch-485f04388e7be00936c6ddf82b1daf4f8f4afc41":{"name":"@balena/jellyfish-plugin-base","version":"2.1.279-renovate-internal-patch-485f04388e7be00936c6ddf82b1daf4f8f4afc41","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.1.279-renovate-internal-patch-485f04388e7be00936c6ddf82b1daf4f8f4afc41","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"556bfff54b25fd0ca91fc8b17c0d031465c74480","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.279-renovate-internal-patch-485f04388e7be00936c6ddf82b1daf4f8f4afc41.tgz","fileCount":18,"integrity":"sha512-va+uPrMmgA7T77t9bTAwBZOPdKhaHHyrByH5fvAyZwaTy85ke1rspWPNGisy40N5/jdpjJEr8JVimkBHiy4law==","signatures":[{"sig":"MEYCIQCUCnI240tOKt7fEsxha2Ci9x5CkYQPNZUOErTMvc9cIwIhAPGZdRY4q7bAMnXFVRISwelwc5CfAzzAOW66m7ilmneW","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":66876},"main":"build/index.js","types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\n[![Publish Documentation](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml/badge.svg)](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml)\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=14.2.0"},"gitHead":"485f04388e7be00936c6ddf82b1daf4f8f4afc41","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest,typedoc","test":"npm run lint && npm run test:unit","build":"npm run clean && tsc -p tsconfig.build.json","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint:fix":"balena-lint --fix lib test","test:unit":"jest"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"versionist":{"publishedAt":"2021-11-15T11:55:00.547Z"},"_npmVersion":"6.14.15","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --fix"]},"_nodeVersion":"14.17.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.4.0","@balena/jellyfish-logger":"^3.0.120"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^27.3.1","sinon":"^12.0.1","deplint":"^1.1.3","ts-jest":"^27.0.7","typedoc":"^0.22.9","depcheck":"^1.4.2","typescript":"^4.4.4","@types/jest":"^27.0.2","lint-staged":"^11.2.6","@balena/lint":"^6.1.1","@types/sinon":"^10.0.6","@types/semver":"^7.3.9","simple-git-hooks":"^2.7.0","@balena/jellycheck":"^0.1.7","@types/json-schema":"~6.0.1","@balena/jellyfish-types":"^1.2.18","@balena/jellyfish-config":"^1.5.9"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.279-renovate-internal-patch-485f04388e7be00936c6ddf82b1daf4f8f4afc41_1636977453035_0.29136605365554913","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.279":{"name":"@balena/jellyfish-plugin-base","version":"2.1.279","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.1.279","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"852d463041406c53791c029813c19238a94998a0","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.279.tgz","fileCount":18,"integrity":"sha512-/RvgLpOJ1umVhzxHl3H51sb2WqXX2q17QE6DCW8PYCsEynBJDlNZp3YY6TEOp0g7+J5rWQUOErk9zPv40s6gBQ==","signatures":[{"sig":"MEUCIFx3EkaiTu6vSSsfmQ+0r2x5SNkxMkD9Nj4R/ka+LgEnAiEA7uEzxIhpsEIDgZcBEARQk4Wh3HftjjdQLLMPlkIftqY=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":66811},"main":"build/index.js","types":"build/index.d.ts","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=14.2.0"},"gitHead":"cfbef4effa33fa9cf6bd01a637e10c4d18af23b2","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest,typedoc","test":"npm run lint && npm run test:unit","build":"npm run clean && tsc -p tsconfig.build.json","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint:fix":"balena-lint --fix lib test","test:unit":"jest"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"versionist":{"publishedAt":"2021-11-15T11:59:27.066Z"},"_npmVersion":"6.14.15","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --fix"]},"_nodeVersion":"14.17.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.4.0","@balena/jellyfish-logger":"^3.0.120"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^27.3.1","sinon":"^12.0.1","deplint":"^1.1.3","ts-jest":"^27.0.7","typedoc":"^0.22.9","depcheck":"^1.4.2","typescript":"^4.4.4","@types/jest":"^27.0.2","lint-staged":"^11.2.6","@balena/lint":"^6.1.1","@types/sinon":"^10.0.6","@types/semver":"^7.3.9","simple-git-hooks":"^2.7.0","@balena/jellycheck":"^0.1.7","@types/json-schema":"~6.0.1","@balena/jellyfish-types":"^1.2.18","@balena/jellyfish-config":"^1.5.9"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.279_1636977723484_0.07702942220629594","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.280-renovate-internal-patch-930a700bbe467a0f554cfa3b2a11a0b41cf01e74":{"name":"@balena/jellyfish-plugin-base","version":"2.1.280-renovate-internal-patch-930a700bbe467a0f554cfa3b2a11a0b41cf01e74","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.1.280-renovate-internal-patch-930a700bbe467a0f554cfa3b2a11a0b41cf01e74","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"63bacd5c0352b37df725db08c38b796d4b724b15","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.280-renovate-internal-patch-930a700bbe467a0f554cfa3b2a11a0b41cf01e74.tgz","fileCount":18,"integrity":"sha512-bMk6iF9G8hETTUgGr1crwqBBbYl4AKU267fzhkWOb/+RE/DFl84M6giXqdFFviZx7FuN4wPIumWvieW3+esPwQ==","signatures":[{"sig":"MEUCIQCTYbah8OSjLqK3FyYl0/xteiHEf/P+jq2XvW1kFi+yHQIgMUucDbKK5pjqLf+iIhPapCMP2gVW7OgEEGdb92QfCvw=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":66973,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJhkwCUCRA9TVsSAnZWagAAS80QAJ/tczrwq+gCHqY8mos0\nwPqo8Tjsa/fAWR7Ms/jZMMwhnHnZkc/pN73/974MPapGVRdrIk7qKHvpNJXE\nSj4Po8Sw2Kp17BLFJNuxqrjS9HymO6nP7Fwc7vOeKW73JIaHw62l6iSuXF26\n0ro35owIKV6pLT9eEuWo+YMH39bIKGKafWLnkUpfmAIM7+ylK2K+mrIqcLjw\noj1QkmtA5ewpyChTLL5a4oPduQGVEX93PcywwI+taptosXd7c2VEMDiYS947\n5zkNEnHCO0jvSd6KSVwvvA25Tf+8bDwNFnFTSjy92B4RO1Eqshd5OxJWr9up\nAFwKOmAmKYjasJDOFJuvKvEirXyBpJdBJB7h40YB+N1p8kuSeU06rRRMPBlE\nT828bG/umyVwTg+vcCDNrAVpWptJyMEYTJIN6zh253IXY68eGEc9SZ8PDv8y\nTGdIIS5zGv9eVYGEaPNQqtbCWHhBEfnFyktgtOVRMOHOKgoKbd7S31uv8Vfc\nA/NgzaMmrQyQMT+ZRA27NUR8INcUCTrfurktjfQNjXN7GZE3pAYUSOgfF6He\nIGEPjbzXan2hgC0x8msCwE3KFBPgv/k4IYD5wRuwvQQOW+xIrFcy0NkRuwlG\noApuPx2dy6zr74wFFaylfAR3xLNIrCtqtu8BdFMVokqKjAH47aMyjotsFDvU\nwpVV\r\n=CZgV\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\n[![Publish Documentation](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml/badge.svg)](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml)\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=14.2.0"},"gitHead":"930a700bbe467a0f554cfa3b2a11a0b41cf01e74","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest,typedoc","test":"npm run lint && npm run test:unit","build":"npm run clean && tsc -p tsconfig.build.json","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint:fix":"balena-lint --fix lib test","test:unit":"jest"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"versionist":{"publishedAt":"2021-11-16T00:48:38.423Z"},"_npmVersion":"6.14.15","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --fix"]},"_nodeVersion":"14.17.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.4.0","@balena/jellyfish-logger":"^3.0.120"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^27.3.1","sinon":"^12.0.1","deplint":"^1.1.3","ts-jest":"^27.0.7","typedoc":"^0.22.9","depcheck":"^1.4.2","typescript":"^4.4.4","@types/jest":"^27.0.2","lint-staged":"^11.2.6","@balena/lint":"^6.1.1","@types/sinon":"^10.0.6","@types/semver":"^7.3.9","simple-git-hooks":"^2.7.0","@balena/jellycheck":"^0.1.8","@types/json-schema":"~6.0.1","@balena/jellyfish-types":"^1.2.18","@balena/jellyfish-config":"^1.5.9"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.280-renovate-internal-patch-930a700bbe467a0f554cfa3b2a11a0b41cf01e74_1637023891804_0.44530646367901316","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.280":{"name":"@balena/jellyfish-plugin-base","version":"2.1.280","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"UNLICENSED","_id":"@balena/jellyfish-plugin-base@2.1.280","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"82007791b0e5de44bec60346da9588e2a2aeaa0d","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.280.tgz","fileCount":18,"integrity":"sha512-BBvA3i5ae0RtlgnAeibcqcp1T7/Ld6DQ60LWelaSgFqB5d4GsFilsuItr/IfDq72NY1ZR7roUjBwj+t6SKaf7A==","signatures":[{"sig":"MEUCICXw1MBjIcnbETgHiw7C/OETyNHSEjF1iMT5/bYdbil3AiEA200MNdlU5dzGmx45lqp5AnfzA0t13AdQnghcEP94RIE=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":66908},"main":"build/index.js","types":"build/index.d.ts","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=14.2.0"},"gitHead":"7082db2db9ed2b43f516bd16a021e70376edc613","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest,typedoc","test":"npm run lint && npm run test:unit","build":"npm run clean && tsc -p tsconfig.build.json","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint:fix":"balena-lint --fix lib test","test:unit":"jest"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"versionist":{"publishedAt":"2021-11-16T00:53:01.923Z"},"_npmVersion":"6.14.15","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --fix"]},"_nodeVersion":"14.17.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.4.0","@balena/jellyfish-logger":"^3.0.120"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^27.3.1","sinon":"^12.0.1","deplint":"^1.1.3","ts-jest":"^27.0.7","typedoc":"^0.22.9","depcheck":"^1.4.2","typescript":"^4.4.4","@types/jest":"^27.0.2","lint-staged":"^11.2.6","@balena/lint":"^6.1.1","@types/sinon":"^10.0.6","@types/semver":"^7.3.9","simple-git-hooks":"^2.7.0","@balena/jellycheck":"^0.1.8","@types/json-schema":"~6.0.1","@balena/jellyfish-types":"^1.2.18","@balena/jellyfish-config":"^1.5.9"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.280_1637024172091_0.8118319242649978","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.281-joshbwlng-set-license-cf1c462729c9a729206fdec51ab4a856eeab56ae":{"name":"@balena/jellyfish-plugin-base","version":"2.1.281-joshbwlng-set-license-cf1c462729c9a729206fdec51ab4a856eeab56ae","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"Apache-2.0","_id":"@balena/jellyfish-plugin-base@2.1.281-joshbwlng-set-license-cf1c462729c9a729206fdec51ab4a856eeab56ae","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"5142893da54e11b5bb4fb0d9d4ea85c5b9576097","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.281-joshbwlng-set-license-cf1c462729c9a729206fdec51ab4a856eeab56ae.tgz","fileCount":19,"integrity":"sha512-3jXFRuW0tX+TdmWeVprhyUTaBxLm3oxFcmmxyg2UmZv5KEL2T6R0U3j91+tmF1tElsc6cQuU6TqgQNNxW2J2kw==","signatures":[{"sig":"MEQCIAK7Vjk9gInBNENDydqg/rD01zXd9vX9HdAKJ2a52ZPdAiB9I/8HOAE4mgMptA9+bAvkwTl8w1AkoX9BA6HtHvqkTA==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":78362,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJhkwV/CRA9TVsSAnZWagAAXzwQAIPwni83E6Z0ybx4SfFr\nyqqKjLk+j2vJTTZP9vIFEGZWUnFYd3RHpr3ONybxf2tThXTQSRjiWLOlGNR9\nebWm4zqRxwOeP4FVKP0paohiHLW8HTofaYVk9rTynz3d0SNCCyfApDaeXqVs\nj3eWgTqOGvQq1jpiRrvo6xzl009zEeiZN+/1p0xVawtJHDhl/8UfrWEoiVtc\nkUIXwwHVTS1PCHpxXsr/CaHdWNtXrsPiF3FCtTs48DDFt9xSpjM5+0tSG4W3\nauwJncdMeGCA3aylrNhFu2nwdLfD5RbdWfRZ92K2m1EFkKyd2GUres8KcY/s\nsr2NRmOHO+1dW8wGlEtCFATnG08/L1xmf/2lhljCLA5HO1vP1/nkaEyUX02p\nAbnQ46QDXHSTcggRO9UigQrk/GDtYnGQabUK1GO/lyeBNIdUTXGDg0H4+SBy\ndXfjTsnK36bzHxqiavS54cGIyecfPbgoIDlZzcETRxgFt+H9VUB0dxGqP2Ih\ntAx4XN3aOfu5OqH1lh1q76x5umF4tGD06He3OjlzpGPzIxY+a9hRvdQ0VPBd\nYPn56dyLP5o0xSrsJHzNMfPGYMQ/kFp0FCXEmZW9nluh/B2wBA9QGAGVsSw2\nyt2z8s8Q/0RObA+bVkzR72OzcP77vHbYf/3wXK7gIC78b7cafSVvn00EY5Dp\nb4QL\r\n=bHNy\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\n[![Publish Documentation](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml/badge.svg)](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml)\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=14.2.0"},"gitHead":"cf1c462729c9a729206fdec51ab4a856eeab56ae","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest,typedoc","test":"npm run lint && npm run test:unit","build":"npm run clean && tsc -p tsconfig.build.json","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint:fix":"balena-lint --fix lib test","test:unit":"jest"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"versionist":{"publishedAt":"2021-11-16T01:09:13.440Z"},"_npmVersion":"6.14.15","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --fix"]},"_nodeVersion":"14.17.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.4.0","@balena/jellyfish-logger":"^3.0.120"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^27.3.1","sinon":"^12.0.1","deplint":"^1.1.3","ts-jest":"^27.0.7","typedoc":"^0.22.9","depcheck":"^1.4.2","typescript":"^4.4.4","@types/jest":"^27.0.2","lint-staged":"^11.2.6","@balena/lint":"^6.1.1","@types/sinon":"^10.0.6","@types/semver":"^7.3.9","simple-git-hooks":"^2.7.0","@balena/jellycheck":"^0.1.8","@types/json-schema":"~6.0.1","@balena/jellyfish-types":"^1.2.18","@balena/jellyfish-config":"^1.5.9"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.281-joshbwlng-set-license-cf1c462729c9a729206fdec51ab4a856eeab56ae_1637025151605_0.8169798293169075","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.281":{"name":"@balena/jellyfish-plugin-base","version":"2.1.281","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"Apache-2.0","_id":"@balena/jellyfish-plugin-base@2.1.281","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"763bf049c6d3b28776b5d434334204e01200abc1","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.281.tgz","fileCount":19,"integrity":"sha512-UOWoSrrJV952dKUNdpzv4OgdGFZBp/9DHHCMwde5UkHLxbYVVRPXOCHttz8Z17Yw+ELzM7rQQcLuFqcbDEXwwQ==","signatures":[{"sig":"MEUCIQDxDTJjQ4ObmUj2g6oRela9lJRktT/PP3W+3BBX78sabgIgEPT4Sfof/tJLQZFovFogrK2zffFGAgVMiD9OUjPZ5mo=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":78299,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJhkwZVCRA9TVsSAnZWagAA3sgP/RhKiRZ777OOm8yqz2xn\n8w7x90apJk0dz77MC568ZrT3LPicrm2dwlaZqcbzUxCnEnRX742KUPFm+yUG\nXRAnmCK+XtdPI+H79RHURtTql20zEqh2JR9W05XF5HouYaJseVgkhumilZvV\nU9iFjr4u9/J2pkU6XQ3dQfDPCKmXGMCPa7RephJT895fx6vAEBcIXZ5+Q/RJ\nTuBby1Z+WKo5/o8iofNTdr9bkAKYNUcF2t0WF/yWmAXAwE8B3u1vj3L36w82\nCVhLDe9U5lWFCMfh04FD72oiPVXUsXpl4hvkeGLgHElv8M3XX5TPpSTPUCry\nOBIW2omeHATGCvyVwoBkCxGcDue+gfPj9upwcO/lNUz5aF9EKe7k9y2SDe1t\nUEOcbUlACdsk3M4n4Fmgng7xHtwLFfocxAOsp2gOBMQQ2AdutJ55q2bpqm89\nQ+bneWQIRiNpfSKROextKXQFCNZR3NeqDbvsliCu0DZLir1H5QZTiFlJ+kib\nZkQZ/hnupu7Wb/E9F9Fs0m9gk9B9keuxzM/yHOZ+URBB6SMdroc9iGBfDoYZ\ndv9xzvSrE6nkhfl0ZmwZHa+fgY5NrGzZAt41L45/E/ey5NxEDw9euUfkhUUR\nCCUmFwR3DJrbe60L6cImuyG98gafR+cYA+zEz8aOO6qhUYh44u9nqo29mxtk\n1NaM\r\n=6AuZ\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=14.2.0"},"gitHead":"098fe31b2dcb0724752cc76ff4a0e4673d7da798","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest,typedoc","test":"npm run lint && npm run test:unit","build":"npm run clean && tsc -p tsconfig.build.json","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint:fix":"balena-lint --fix lib test","test:unit":"jest"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"versionist":{"publishedAt":"2021-11-16T01:14:28.739Z"},"_npmVersion":"6.14.15","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --fix"]},"_nodeVersion":"14.17.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.4.0","@balena/jellyfish-logger":"^3.0.120"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^27.3.1","sinon":"^12.0.1","deplint":"^1.1.3","ts-jest":"^27.0.7","typedoc":"^0.22.9","depcheck":"^1.4.2","typescript":"^4.4.4","@types/jest":"^27.0.2","lint-staged":"^11.2.6","@balena/lint":"^6.1.1","@types/sinon":"^10.0.6","@types/semver":"^7.3.9","simple-git-hooks":"^2.7.0","@balena/jellycheck":"^0.1.8","@types/json-schema":"~6.0.1","@balena/jellyfish-types":"^1.2.18","@balena/jellyfish-config":"^1.5.9"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.281_1637025365560_0.7172315336993051","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.282-renovate-internal-patch-9c6d91ec49b309ad3200792bdcb83621817b9e27":{"name":"@balena/jellyfish-plugin-base","version":"2.1.282-renovate-internal-patch-9c6d91ec49b309ad3200792bdcb83621817b9e27","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"Apache-2.0","_id":"@balena/jellyfish-plugin-base@2.1.282-renovate-internal-patch-9c6d91ec49b309ad3200792bdcb83621817b9e27","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"78d8932b2f9b605b1675f8865d8c08f6c0641f77","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.282-renovate-internal-patch-9c6d91ec49b309ad3200792bdcb83621817b9e27.tgz","fileCount":19,"integrity":"sha512-Vr4HRqXHF8K00lK0/dSG5shHzaVUae2azs3GjGvA6/keYhUk8EqYB3bP2iykOy/4uXSsQ9OTf9mk9O/tisQ1IA==","signatures":[{"sig":"MEYCIQDvEwBFBtWhrq2heheAJpM9uLsZrHftJbP4BxrM7rzkNgIhAM6on4t+dYtZcGb1c1oVsomB2odPk9pU7tSyA5nOc8ta","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":78467,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJhkwbdCRA9TVsSAnZWagAAGG0QAI5iv8WsolI1YwV5FznW\nQ8ZleqXXhmJbFi4k8nDCL1eZvGrSlQ7K5rk4PgNuEg9YrsVB/A6xG0YLV+Rd\ne33609zNd+jLed9/iexuKT6COHhkXPY/8O2Olz4lOULxwIEyVOBfbMkafBGT\nJFoQVeBnd+Z7I1Irfw22ImEmrD1bT4SE/v/Zd8APFARW1/mELwzHzvi1J7wT\nRk7uV4w7np2b2eMut2Ty0zucXbxeiqVmqTMQB70x/f00xazfQiPACMFnS6dS\nnMbqCgfjU8awX5ox0OvxJWOQoh9Zinins1ZVtGaDnrW3+pGCGRytDQ6Po0z5\nkOUXabzrvII//jOhFWp9fZcaytp0JUQ0pfJ3dHvxh2jnDs4Jjj82w0u6iZu2\nF1LCtkl2/Br8htti3iU7VkydLMJ9gE+U6lrLxO3ROcoxcksXqgAUk82BQigc\nzAgS27ZRo0bz2n9YHUJKnqQ1WTE0EJS0BrvxNRmG4Rtb2I7kQhEz/x38VLT+\nYYMPUBVYrmG2fQsX1iPI5+q7JHiRwVFK/I443/NW4uy6MZCkwM01cXlsAJS1\nwLw3Jj+MBDON5nD8xbHKeypMP39y26laRHLScKSpuR9JiIjICPJib2n8cFh+\nsIEJWYvRGRx7K1a2BU7eR1dtZchJtJaY0e/LFWeR4yhJ43Ha8uQ9sgkCVCfE\nsMyM\r\n=KohN\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\n[![Publish Documentation](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml/badge.svg)](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml)\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=14.2.0"},"gitHead":"9c6d91ec49b309ad3200792bdcb83621817b9e27","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest,typedoc","test":"npm run lint && npm run test:unit","build":"npm run clean && tsc -p tsconfig.build.json","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint:fix":"balena-lint --fix lib test","test:unit":"jest"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"versionist":{"publishedAt":"2021-11-16T01:15:51.167Z"},"_npmVersion":"6.14.15","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --fix"]},"_nodeVersion":"14.17.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.4.0","@balena/jellyfish-logger":"^3.0.120"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^27.3.1","sinon":"^12.0.1","deplint":"^1.1.3","ts-jest":"^27.0.7","typedoc":"^0.22.9","depcheck":"^1.4.2","typescript":"^4.4.4","@types/jest":"^27.0.2","lint-staged":"^11.2.6","@balena/lint":"^6.1.1","@types/sinon":"^10.0.6","@types/semver":"^7.3.9","simple-git-hooks":"^2.7.0","@balena/jellycheck":"^0.1.8","@types/json-schema":"~6.0.1","@balena/jellyfish-types":"^1.2.19","@balena/jellyfish-config":"^1.5.9"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.282-renovate-internal-patch-9c6d91ec49b309ad3200792bdcb83621817b9e27_1637025501195_0.15088860723016362","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.282":{"name":"@balena/jellyfish-plugin-base","version":"2.1.282","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"Apache-2.0","_id":"@balena/jellyfish-plugin-base@2.1.282","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"0f460564af61986fa5f2f9b48c171a4a23c77599","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.282.tgz","fileCount":19,"integrity":"sha512-VrAegXdxz0rJLcnQcxsbugw2nzt+qAx83fuCpuF+YngIVHwpcyo7UsG2zU71+6LCpmoSXGpOtFNjduWMVF4KRg==","signatures":[{"sig":"MEQCIFvRZFbIeVASR6gFJX6vx3kYKgFqVFT5u8eRUieaLxQEAiB6E435D7JhLyZsz/Utuz5+cRusNbh937DxGaMAi55aog==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":78402,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJhkwgyCRA9TVsSAnZWagAAd9EP/iYH7kCX/t4krEZwk/Im\n6Cmn81xPHcmNCQToS/3l5GaiKhnMEelQEiTWMAktNNOceqDWHL9BN4+K6JAF\nQaMN3Wwc4An9Qq19KO4Ni8Ji6ZXQ+G/g16gpaAo1G3tPmXHC7Gl3mkArklJ6\nrl5hcFxSkyvnCAMpDerRD0o0uEkquLYjR/a7qF3Z6pyEvwe+8TZd1Bn0lUmb\n0mFy1mF1zgbbvZX6BmoolXRQBzvMw6P6x5LaSg/UVGruj8B+iXZ1UJ8kUO9d\nDt14xkTVC4hvI/jgkeOioJblebuBLBiydkSXTsaIVNu6Pg8+xYrAhuU8Ik3F\nUzcACB5V/OE0PWsiP6CTzmS6qlcLIwvQVre2gXMtOnxenUvo/FfBAtlDl9Pf\ndgXb+4HKoEWACr6aEyVO6uBxM5A45/ynOyCTllzmT8lyv/Wzid6702ctuUeK\nbD7gdBu93zLcy0EaJ5GOXkCfQspt3Qd+fbyNeYn3L6ui5xWkkJvgZW6rwFw0\nG8IKAUHTfwTuk+weBx8xxIBU1oMLlY32Y61XeVTrwmy5OUaD6u9vscanxXaI\nry3IuOdCD5Bfai1HTrZ48SU/PNvb1QM3jZp4jTO7J/YYWIwI9D02oe+I6Tmh\n77PYhb2WtNI/tE6adBXiSyJtCf5B8LsYfS2iDx/CAFVrhfujRNxUgyTDA2ww\nw0e2\r\n=wKT8\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=14.2.0"},"gitHead":"2b13402809c4ecccc9a2bc24b832859919a1248a","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest,typedoc","test":"npm run lint && npm run test:unit","build":"npm run clean && tsc -p tsconfig.build.json","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint:fix":"balena-lint --fix lib test","test:unit":"jest"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"versionist":{"publishedAt":"2021-11-16T01:22:14.975Z"},"_npmVersion":"6.14.15","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --fix"]},"_nodeVersion":"14.17.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.4.0","@balena/jellyfish-logger":"^3.0.120"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^27.3.1","sinon":"^12.0.1","deplint":"^1.1.3","ts-jest":"^27.0.7","typedoc":"^0.22.9","depcheck":"^1.4.2","typescript":"^4.4.4","@types/jest":"^27.0.2","lint-staged":"^11.2.6","@balena/lint":"^6.1.1","@types/sinon":"^10.0.6","@types/semver":"^7.3.9","simple-git-hooks":"^2.7.0","@balena/jellycheck":"^0.1.8","@types/json-schema":"~6.0.1","@balena/jellyfish-types":"^1.2.19","@balena/jellyfish-config":"^1.5.9"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.282_1637025842697_0.5780152432242274","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.283-renovate-internal-patch-c42ad0ac4d40406eaac6f8bcfb32770ed1f7d484":{"name":"@balena/jellyfish-plugin-base","version":"2.1.283-renovate-internal-patch-c42ad0ac4d40406eaac6f8bcfb32770ed1f7d484","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"Apache-2.0","_id":"@balena/jellyfish-plugin-base@2.1.283-renovate-internal-patch-c42ad0ac4d40406eaac6f8bcfb32770ed1f7d484","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"8b2060da3dcb87bbf76f3e7478a5bdd19adb6dbc","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.283-renovate-internal-patch-c42ad0ac4d40406eaac6f8bcfb32770ed1f7d484.tgz","fileCount":19,"integrity":"sha512-OU+iuPQpoP3SuuOKmlRWEbo1WaQ7+D1d+TaUXiOgE5cgmB4GxGNRxE1NWYmBiSmi1PhQ3AZa8psdKiyEGvLlHg==","signatures":[{"sig":"MEYCIQC7J3VX5acB3OF2bxud1N77G0oUtC62+0BjHELehBzyWwIhAOSFSHzttneO/sZwXk5kJ0rbRuH65ztLSi32XTpSc3yd","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":78540,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJhkyiWCRA9TVsSAnZWagAA0k4QAI0uAsoJl+qDwdix83CN\n6spZiaep1b0ZjOLZdqtvF3+0DMZaZmPIf3aRvIJfR+9hXJJWZZreySXhVDJ1\nt1G+q2oANfAAuZ6e7ktkcGep3UqdDlOunGqqhoHbaGEO3pbHhodJNKIG1Vhf\nxN1B5EWvbdHfUj98q7dBkiGpj0k4k0XHGYtb0XJevYC9YPjOWtRjfSRX5Fax\nBPwkVEaR/KE8WI/J7+PC60rBF2voyI0o2aN7thFpqNgUmySuk7XLynFkwzg0\nwaDwFdFZvPb0ZmVxJrXIzLpk7OrF5toB13WRlH8Npv9pUBx0l3jXP/IBdfWh\n67VnxeqD/6tQCAyc7NFjr8tRs3otT4pwuP37lsESca7IwNahANZHicTYBMlW\nligZxFhyI0NDT1pLQYDrmU8xUVrHnRpUJpLHE6zA+TisJRI/EBS9UijOOKJY\nbRRhCnDWBybFgv3hLddVot/R+CvWGqXwpdk6e8gZTVIozgZn/BMRXvoetI4K\nTJ40OLu3T1YpCmYEROK7G4/JZlLZPsrw9fHBw403w2ZXV+/Jq0vroS83l6eg\nQic2T6e6Dtyq5bFwJ4X1incwp4UMZLK7BIZDD+y+5C/H664teLQOnp2CvNua\nogaTpYRDVuYcn9ucEsUIzSm/F4d4EMt3GbkcfCiRsnANx1I8lILmrySeWlip\nK7Jz\r\n=mIfu\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\n[![Publish Documentation](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml/badge.svg)](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml)\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=14.2.0"},"gitHead":"c42ad0ac4d40406eaac6f8bcfb32770ed1f7d484","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest,typedoc","test":"npm run lint && npm run test:unit","build":"npm run clean && tsc -p tsconfig.build.json","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint:fix":"balena-lint --fix lib test","test:unit":"jest"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"versionist":{"publishedAt":"2021-11-16T03:39:32.565Z"},"_npmVersion":"6.14.15","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --fix"]},"_nodeVersion":"14.17.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.4.0","@balena/jellyfish-logger":"^3.0.121"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^27.3.1","sinon":"^12.0.1","deplint":"^1.1.3","ts-jest":"^27.0.7","typedoc":"^0.22.9","depcheck":"^1.4.2","typescript":"^4.4.4","@types/jest":"^27.0.2","lint-staged":"^11.2.6","@balena/lint":"^6.1.1","@types/sinon":"^10.0.6","@types/semver":"^7.3.9","simple-git-hooks":"^2.7.0","@balena/jellycheck":"^0.1.8","@types/json-schema":"~6.0.1","@balena/jellyfish-types":"^1.2.20","@balena/jellyfish-config":"^1.5.10"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.283-renovate-internal-patch-c42ad0ac4d40406eaac6f8bcfb32770ed1f7d484_1637034134345_0.5816083868086872","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.283":{"name":"@balena/jellyfish-plugin-base","version":"2.1.283","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"Apache-2.0","_id":"@balena/jellyfish-plugin-base@2.1.283","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"8d008371dca26c62fe93db777ed1707b40fa0a12","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.283.tgz","fileCount":19,"integrity":"sha512-waC7eSyl1du31QjJeMe9UTgAphPmDqJoZ3Amkl8npEoBjBx3HStj3sVo4MGqVfFhHEqVN9Em80UEVEu7hRqyAA==","signatures":[{"sig":"MEYCIQDX1OmiL2Y6Aoduhn8lC+rT8W7cdVo8FDYYEsoKcSVF4AIhAPd6gkustO9bwnMlec02Uq35gj8fT77KSf9/vGkKyaI3","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":78475,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJhkylJCRA9TVsSAnZWagAAP4oP/3uXn+3eQg6b3r14g6LU\n0S8JznDBtfuQxuIMzzH/CdeFZqt9Z7KCLdElHDdaTydZ3REsUTFEQJQtI6Oc\nxzZ4DcNJnwvy6e9SRaLSQZZ6ff+qvlWaSuPWulx6y78usnhyyTp+ToDicpGO\n5qP7c8m4dNbt5OPWnbPZXNTxQvcuVHv3ebRzWM2yQPRg/r12F10PjMdeagDh\ny4YEzR58Rp/QWxoLyz2R9MYeN6iMotrXEMuKRdsknTwpDb1tXC3LmMgdfQg/\n5Z2ekaFSKiVi35VTEKUI3otfEGAi0QC0dd0uYWiD8R9qzIh0UqqEJ5AAKIU9\nGPJ6wlVKv+KJ2p2aC4LyTT6gZ5ZYkjvaXtMfgdrc0Gojj15UdTLAn3zco0cZ\nj0NA//VGWxhSh6hid59hDtNSJkAZLJAtfK2d0V4xvQ7yBoX+S+xlLWWaSFKw\nDpHMuIYYBeaQAa2H5X/dej/NSHT2g2X26o2IKwcaxMvnwi81dWYCv9FZSIte\npQjKczPPcj1eZ2KIV5nq24ELWduf7WTUnW2JStmEbrXB2Zozus/W5NMGlzaD\nRkRJgNAWCbJSkSvLeCefQtfpvC6u8LtfZKBbbehHP7/K7zIabn+xniFHtTyw\nEKYD/ABrmSkY1cKjhG7aVXeKpV8uEGIehBoOodnVvDE3uitSbSAWBazfDtx9\n95S0\r\n=nYf4\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=14.2.0"},"gitHead":"74b6526d50d2d56dd337fb3f793a5158164d2bf9","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest,typedoc","test":"npm run lint && npm run test:unit","build":"npm run clean && tsc -p tsconfig.build.json","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint:fix":"balena-lint --fix lib test","test:unit":"jest"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"versionist":{"publishedAt":"2021-11-16T03:43:39.933Z"},"_npmVersion":"6.14.15","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --fix"]},"_nodeVersion":"14.17.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.4.0","@balena/jellyfish-logger":"^3.0.121"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^27.3.1","sinon":"^12.0.1","deplint":"^1.1.3","ts-jest":"^27.0.7","typedoc":"^0.22.9","depcheck":"^1.4.2","typescript":"^4.4.4","@types/jest":"^27.0.2","lint-staged":"^11.2.6","@balena/lint":"^6.1.1","@types/sinon":"^10.0.6","@types/semver":"^7.3.9","simple-git-hooks":"^2.7.0","@balena/jellycheck":"^0.1.8","@types/json-schema":"~6.0.1","@balena/jellyfish-types":"^1.2.20","@balena/jellyfish-config":"^1.5.10"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.283_1637034313123_0.05136944895075479","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.284-repo-sync-jellyfish-config-default-be55f1095535b9991aecc77daabc7796d2b40681":{"name":"@balena/jellyfish-plugin-base","version":"2.1.284-repo-sync-jellyfish-config-default-be55f1095535b9991aecc77daabc7796d2b40681","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"Apache-2.0","_id":"@balena/jellyfish-plugin-base@2.1.284-repo-sync-jellyfish-config-default-be55f1095535b9991aecc77daabc7796d2b40681","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"f6f20c9cc24a09a7dcbec01e9385b3b0fdcea320","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.284-repo-sync-jellyfish-config-default-be55f1095535b9991aecc77daabc7796d2b40681.tgz","fileCount":19,"integrity":"sha512-Bh8e/wqWHjJr+bDKh7+Z+8z/cimJw9Fkr5XQrbyNArGBuAgnkcNhD/F3WCzwCGZuoRHv3JgrMnK8beiSets03g==","signatures":[{"sig":"MEQCIFjQtgcRgiAr3/t4FIt68jjf+aozlkg7IlARvkoY+HVDAiBJaKyGxTVGORUceq9jwPbdBksd4814t8X0SVPq2EO5HQ==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":78644,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJhky2BCRA9TVsSAnZWagAA2jwP+wdXvlaZ9unUJattt8Th\n7Uak0/snR6GeyC7NTbfOpBoH0XqueWzwd+4930PzFPv6C2SgHnanaj0083Dq\n7uPOBHAJF60ta04e5uSKAGHdj+D3lsf8vCBayoMAWGt6zjC28OMwsrRwF2XY\nXZI1HPQEYaYMSRLvGQq0r/kSNfarhYwav4vNV+dgfTYsXo1SQ1BwCGE7VbWe\ny0NoA/rsi8tQNE/3nTY12Tj2DhUVuDVRwm/WrsdcsYgk6fO1Z8DC3aid9SDK\nnfC9n4xkIYPqLr0dc8IC9LMmz12cewL2lKzT5c/+88jQvCLyI5FPu84SIlTH\n9x/s9dVh7qh/w18FWXfGMuSM/M9eij28tA2Ofu6ZXkMf//5LGt+BNEd7iOqw\n7/Ms0Vsgn89r1pbIkBrfaTyW842aILpLdPxYF3po9HCoEauNTo8gvT26g6LZ\nGG4+Em6+rqImh+slUnA8APBGZoCEjQPTQxkoZRKgLc2kysFUrIp5gu7H2f9U\niRBKMaa8cJSskaREx8Eop4pLitWtZQMCRAeVvmcDw/k2x0xyBXviIU3iKrdM\ntGN1h0fVrb3yXgWfDmU/Ga+15M03vaH8spOrgaukQBVMFb57vnyYm5W5C5G9\nJNKw0V5BORlvduLIgguTy29y9FuqxHadBkK/P76GwtrtNFg5CbjwTlRAKO1B\ng5qk\r\n=moBz\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\n[![Publish Documentation](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml/badge.svg)](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml)\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=14.2.0"},"gitHead":"be55f1095535b9991aecc77daabc7796d2b40681","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest,typedoc","test":"npm run lint && npm run test:unit","build":"npm run clean && tsc -p tsconfig.build.json","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint:fix":"balena-lint --fix lib test","test:unit":"jest"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"versionist":{"publishedAt":"2021-11-16T04:00:41.602Z"},"_npmVersion":"6.14.15","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --fix"]},"_nodeVersion":"14.17.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.4.0","@balena/jellyfish-logger":"^3.0.121"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^27.3.1","sinon":"^12.0.1","deplint":"^1.1.3","ts-jest":"^27.0.7","typedoc":"^0.22.9","depcheck":"^1.4.2","typescript":"^4.4.4","@types/jest":"^27.0.2","lint-staged":"^11.2.6","@balena/lint":"^6.1.1","@types/sinon":"^10.0.6","@types/semver":"^7.3.9","simple-git-hooks":"^2.7.0","@balena/jellycheck":"^0.1.8","@types/json-schema":"~6.0.1","@balena/jellyfish-types":"^1.2.20","@balena/jellyfish-config":"^1.5.10"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.284-repo-sync-jellyfish-config-default-be55f1095535b9991aecc77daabc7796d2b40681_1637035393112_0.6449194641912726","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.284":{"name":"@balena/jellyfish-plugin-base","version":"2.1.284","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"Apache-2.0","_id":"@balena/jellyfish-plugin-base@2.1.284","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"1e8ef81b6ac4187477d461b9d2ab0881d4605604","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.284.tgz","fileCount":19,"integrity":"sha512-j9e10mW00xX4tome5bG/hKfj7I56uVm1YiIzt4soOYPPjlRre3MmqxthidEExQ8emtBdtJTqO4CnwbcbnVmaow==","signatures":[{"sig":"MEQCIDNSwMDMsmeh3iizKES+J/t6CHTf1uKuDDqGwHl9GX3lAiBZvLJWsHvQE/5rq1H/hmSNqSBYzAJVN+eYc1kLSZLutQ==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":78568,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJhky5SCRA9TVsSAnZWagAA0JYP/jyxAGLachmG21dLzMeZ\nBz4f0vuirKazLQFdXYzPLx/XHQw7i78Is57EoXnmje1zNKFbnxaixm2tzzM/\nxT107BnHo/nRhQCsU09fozt5miw1q6kqME6Ft0PEm+CSuSrmgr+RsrGeUlJe\n0NponbHyp+2B+OfugLcU0uSBDlviRh53c3mtuKXmemEikv5//kZ7f40gK5aa\njNEMsa5mDy2dRUNRljTn4xPcXl4jUcDbKhL/ftsrKrQYhO3i7Whx0NWixdhe\nVqKrBXe5z4ozucxqcFkxaM8B38j3siUtcla5jezpFEM2H+hmbfx++Ae4Zf5X\n6BOC6Py1ugmAq9Hx+EhJv5IAVt7NpCzps7ZXEUZUERtfaftx/ixYXhm7RJaj\n5CnsdnVlL1fgxlyuNBALwrnJdzhP8xYsAIpAKU2n69EukL1lg70J8Piqh0pl\nMJDGrPe+WSqJl8NSbkEMaeeg2yOSYX2iguADXbQ1je3a2/QVGhNfoI2YKuCh\nF0YyUA9STOWlM+32M4XOCb9wKYG15WFCXFCPi0fpmQsJ219TDftiPS6/ykh6\nSIzXCAWBEif5p3Addk9Oc1pDZzcd6msixnYh/PbnX8vQEdimjheAdgSEaaM8\n6w1gFzJmO0bqbyMJaanUMv7zEOWqb6drksmoOqI9s/I+0hYyW2YqBZ7OdZIq\nk2fm\r\n=imVP\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=14.2.0"},"gitHead":"25514364996e268545f8c9d727bb3499cacd8119","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest,typedoc","test":"npm run lint && npm run test:unit","build":"npm run clean && tsc -p tsconfig.build.json","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint:fix":"balena-lint --fix lib test","test:unit":"jest"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"versionist":{"publishedAt":"2021-11-16T04:04:32.970Z"},"_npmVersion":"6.14.15","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --fix"]},"_nodeVersion":"14.17.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.4.0","@balena/jellyfish-logger":"^3.0.121"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^27.3.1","sinon":"^12.0.1","deplint":"^1.1.3","ts-jest":"^27.0.7","typedoc":"^0.22.9","depcheck":"^1.4.2","typescript":"^4.4.4","@types/jest":"^27.0.2","lint-staged":"^11.2.6","@balena/lint":"^6.1.1","@types/sinon":"^10.0.6","@types/semver":"^7.3.9","simple-git-hooks":"^2.7.0","@balena/jellycheck":"^0.1.8","@types/json-schema":"~6.0.1","@balena/jellyfish-types":"^1.2.20","@balena/jellyfish-config":"^1.5.10"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.284_1637035602424_0.11595758939858358","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.285-renovate-internal-patch-9c44678fa54b2c994166dad0804bf9cfc264e629":{"name":"@balena/jellyfish-plugin-base","version":"2.1.285-renovate-internal-patch-9c44678fa54b2c994166dad0804bf9cfc264e629","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"Apache-2.0","_id":"@balena/jellyfish-plugin-base@2.1.285-renovate-internal-patch-9c44678fa54b2c994166dad0804bf9cfc264e629","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"6a31390eafce3067908492632fe07022c6ee6af0","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.285-renovate-internal-patch-9c44678fa54b2c994166dad0804bf9cfc264e629.tgz","fileCount":19,"integrity":"sha512-7L81LBUqcpR8hBa4S/rcsUY+VioGZ2jk+zhuenHNb70IMGAAQ3wUNjqStOPyISa6uFPraYTrN6/E8y8O59bpdA==","signatures":[{"sig":"MEQCIHvcvWJOCRISeVtW3/63cxJ0jsMPRfbFkIy9goiy0EOAAiAfYCcE65KphrdyU9jBXw80E6W2qFbWhXIj+UmR6ePH5Q==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":78705,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJhkzCACRA9TVsSAnZWagAAfk0P/Rc5oYBlpSMdwcrqW4bO\npNs6L4j2GoAYRSsjb5yaikqprvjtpnWl8pS3pu6K7BnULZQ9/L04+u6mS5YB\nlfaWJeEJdiglr3z9AmUc6W38uZIa2dZpmOYvMWaZpEB8sSA2sIxAe0nnWCh4\nMOiw5tqvRIlSnSIzkoXw0RamPZZI9bN93Qjv7zXe7nK9mkhX++puX0wytpto\noG7JAJXXj5myVUI7tl3nCxmQbxHgmyLTsHyiryeogG1M6nQ1a4ekdaThRCZD\n2eeG3JKIrHO4YHxGVy8jHpPtwvdRpC3cJrQmyiwn2JhQC0G492OzkYJGoJ/K\n9dASVH6y6UizK6+J4OGKmKEjprDpMnI7cl8IevrTCee2Zu7mMiBbeSnc5zmO\nSlyXnMNu6OpVuS9OhnfsS9q73YyTNJ+KlqUFL3dxn1HkQC0AltFVKpWqQqoG\nubYMAwyMTA/6+VGFrnZKK5v2N73jKijile4k2sI2NxE2dXDV4pPoyVr96Csm\nDQoSgwcKK6YBICXUKZWsUZ+1Es9eb34peCZsVsGOERCBGdhohFNZ0JWmE7f1\nyuq8hrwVxW2etreW1PryQ4pZks+SwF8d8rY9hwu2ar1ZYSlMIn7b7QudhzWo\n7cbIGQVAW7tDRXj9c23LF6liA7kPd37zi6oKMyWlCCeL/4/fCLApl4JrumBT\n3wWB\r\n=/Jk+\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\n[![Publish Documentation](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml/badge.svg)](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml)\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=14.2.0"},"gitHead":"9c44678fa54b2c994166dad0804bf9cfc264e629","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest,typedoc","test":"npm run lint && npm run test:unit","build":"npm run clean && tsc -p tsconfig.build.json","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint:fix":"balena-lint --fix lib test","test:unit":"jest"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"versionist":{"publishedAt":"2021-11-16T04:12:53.667Z"},"_npmVersion":"6.14.15","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --fix"]},"_nodeVersion":"14.17.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.4.0","@balena/jellyfish-logger":"^3.0.122"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^27.3.1","sinon":"^12.0.1","deplint":"^1.1.3","ts-jest":"^27.0.7","typedoc":"^0.22.9","depcheck":"^1.4.2","typescript":"^4.4.4","@types/jest":"^27.0.2","lint-staged":"^11.2.6","@balena/lint":"^6.1.1","@types/sinon":"^10.0.6","@types/semver":"^7.3.9","simple-git-hooks":"^2.7.0","@balena/jellycheck":"^0.1.8","@types/json-schema":"~6.0.1","@balena/jellyfish-types":"^1.2.21","@balena/jellyfish-config":"^1.5.10"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.285-renovate-internal-patch-9c44678fa54b2c994166dad0804bf9cfc264e629_1637036160199_0.6438672960159713","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.285-renovate-internal-patch-fc1651ceb9dbd1b5d48ab6f475b15ef8c5707e5c":{"name":"@balena/jellyfish-plugin-base","version":"2.1.285-renovate-internal-patch-fc1651ceb9dbd1b5d48ab6f475b15ef8c5707e5c","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"Apache-2.0","_id":"@balena/jellyfish-plugin-base@2.1.285-renovate-internal-patch-fc1651ceb9dbd1b5d48ab6f475b15ef8c5707e5c","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"9913c1ba51967c28bf67726cda22c3e588752c2c","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.285-renovate-internal-patch-fc1651ceb9dbd1b5d48ab6f475b15ef8c5707e5c.tgz","fileCount":19,"integrity":"sha512-nMKNj5N9Ums0k8/6I7vK/CeMvuRC5rz+Iwp0Aiyd4k8rqTGlyzTI2bVCxbOHULD0LZPdFY1h57UHzcENxeM43Q==","signatures":[{"sig":"MEUCIBIgd3NE19+LEWQPRMk002YRouZGJXg4ToxRBbnFt5kMAiEAyLKUesINTySEGyYjBD5GsXPOP7pQ24C6vjvLOLntxhI=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":78705,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJhk1pnCRA9TVsSAnZWagAArMYP/06Quvdx4EwBZRoUDU+/\nE1ReXV/BlgAamL3S4KsSF6Y0ncTUzocqa5uKK52CHayRoKnfNjBNnEZRyygs\n9UWvYIBJKzdA13OzVG5VqKoKelwV8yShUXILurjdUQn3CEFW0ES7wwC1UcB2\nJsmSOG9GEz9wAZjIdmiSu1z/paBL4M67z2Ohgr5BpC+C2vfpzxgcrzv7txQq\nB7Q/1UzxL+xkuHVlnuR9VBo009keDDJqMyPos/SO5vcZLs7l4BTy7YuoWBUG\nxce4zjsVVxoUQEbnL/nDCbRLd0B7n0MVK+usQLYN87Hor5+hpRW7d2DFaPEB\nhIfk9XG03pSaI4QGRtDu+PRyrqBfWEEkXjLteKZP5CCCHRp/Q6ehWf04dFN4\nBLvKFHaoG+4+SCql425wrPtP/jHx7iiGrutzw0c8DWZDFosVZBcVa0ItAKH/\ngRnNg6CGODCn0OFxgJMC7KlzAPfwLoF782jQLWjRtZID+RL2nAREVbmdywIy\n/7KhiQY64XkJMQuOt1NwSkmtKYDk1txQ7e6K5hs9goQIVdz+0m16iOApTLK2\nTkWnyGyF5hYhqSxAotFhHi3mh9rMVcFkJsvlozevfHnhGv2BjDUA3LHwYM1z\nG8zO4sbPG4NYd7MSQcIBzulc42A9A+FVTTdm/Uq72PvihPsumH8P+Kmlny7q\n/uQr\r\n=K1Wa\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\n[![Publish Documentation](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml/badge.svg)](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml)\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=14.2.0"},"gitHead":"fc1651ceb9dbd1b5d48ab6f475b15ef8c5707e5c","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest,typedoc","test":"npm run lint && npm run test:unit","build":"npm run clean && tsc -p tsconfig.build.json","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint:fix":"balena-lint --fix lib test","test:unit":"jest"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"versionist":{"publishedAt":"2021-11-16T07:12:12.204Z"},"_npmVersion":"6.14.15","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --fix"]},"_nodeVersion":"14.17.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.4.0","@balena/jellyfish-logger":"^3.0.123"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^27.3.1","sinon":"^12.0.1","deplint":"^1.1.3","ts-jest":"^27.0.7","typedoc":"^0.22.9","depcheck":"^1.4.2","typescript":"^4.4.4","@types/jest":"^27.0.2","lint-staged":"^11.2.6","@balena/lint":"^6.1.1","@types/sinon":"^10.0.6","@types/semver":"^7.3.9","simple-git-hooks":"^2.7.0","@balena/jellycheck":"^0.1.8","@types/json-schema":"~6.0.1","@balena/jellyfish-types":"^1.2.21","@balena/jellyfish-config":"^1.5.10"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.285-renovate-internal-patch-fc1651ceb9dbd1b5d48ab6f475b15ef8c5707e5c_1637046887565_0.04058661150179477","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.285-renovate-internal-patch-c6656aa564ad6e684c11113a2bb88c853f445747":{"name":"@balena/jellyfish-plugin-base","version":"2.1.285-renovate-internal-patch-c6656aa564ad6e684c11113a2bb88c853f445747","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"Apache-2.0","_id":"@balena/jellyfish-plugin-base@2.1.285-renovate-internal-patch-c6656aa564ad6e684c11113a2bb88c853f445747","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"fe76b865102ccc079c3f4fcd0591cc57669e8224","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.285-renovate-internal-patch-c6656aa564ad6e684c11113a2bb88c853f445747.tgz","fileCount":19,"integrity":"sha512-t+YPrmgnf3FyqHVXQNjj/fBZvlkzIV7/b2PuMKSEstdb7Ed8dYJKs8OH60jIlGh9xrAcFDdA6x+ZrWbiNYW1QQ==","signatures":[{"sig":"MEQCIH24hkfHrwvs5mduCHdxmzl8B0AU9klCt5bhXNyPVQCsAiBdnsHt9mcNQHOBkuXUOvQJ7vJ50N0lV4s7adgYfl33MA==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":78705,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJhk2IWCRA9TVsSAnZWagAAbegP/1zh92COW0QrSSN9m30d\n85xUmVmJb114H5BILZ/3YCe0KySCguI2L4knaY3mv06CaQoKceMQcfhGDcFL\ns6qZC1hKFRXELW8YrO3exRhr6RMUjwntx8XLZWnTLlRntSyItCkqY7sfbRb2\nbWgVh0yuk0mNKkEcQbJ9TXAD89GMQR6tzAv1pV/Du2VOM/kdrJ3s5GiaEObs\nG31taEo2t/sQW6czYx/nRUeaiX+G8rS0VJtHxSgA1BbS+HfBq6JsD459/wO8\nnZjAokvhnHq3kjptEOQqBjONn/+Y1hrZ+UyODsRV59HKFg7wEfbOVzSNl/it\n8mD//1tO2y6OZUgqKVMZSOFqL9ziNWcJ8M+EpStUGpgR6UUFRaGq/pRzmgzv\nA7xS+eKO7DCn21t835bZld0ZOXB0A8S49SKumuZlN5z/uM8qGlmh77LmDQtR\nxaI+d1Yy2h4VCMvV4Erq3Q4cL8FjzXiAY355HoqXZ4rIKetWQ7x8oW7/kg1b\njGYUskyZOYyeZ9K3JENrC1vdkLj5XDzBnscW7hUEb6ZBDd+RZzPUvNM1YETi\nThSvNNBRrHlhDVBFGndFfPzcvkfVEgxfu9tXqP2ZI+f54AO0GTdYt3CH0OR/\nYP3lf2azpCcHM81WuHSgm+8hlz+/7ObpKQFadlNtl4242zgQb0O/mb6L3DsO\n6ILM\r\n=8wNi\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\n[![Publish Documentation](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml/badge.svg)](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml)\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=14.2.0"},"gitHead":"c6656aa564ad6e684c11113a2bb88c853f445747","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest,typedoc","test":"npm run lint && npm run test:unit","build":"npm run clean && tsc -p tsconfig.build.json","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint:fix":"balena-lint --fix lib test","test:unit":"jest"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"versionist":{"publishedAt":"2021-11-16T07:44:54.545Z"},"_npmVersion":"6.14.15","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --fix"]},"_nodeVersion":"14.17.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.4.0","@balena/jellyfish-logger":"^3.0.124"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^27.3.1","sinon":"^12.0.1","deplint":"^1.1.3","ts-jest":"^27.0.7","typedoc":"^0.22.9","depcheck":"^1.4.2","typescript":"^4.4.4","@types/jest":"^27.0.2","lint-staged":"^11.2.6","@balena/lint":"^6.1.1","@types/sinon":"^10.0.6","@types/semver":"^7.3.9","simple-git-hooks":"^2.7.0","@balena/jellycheck":"^0.1.8","@types/json-schema":"~6.0.1","@balena/jellyfish-types":"^1.2.21","@balena/jellyfish-config":"^1.5.10"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.285-renovate-internal-patch-c6656aa564ad6e684c11113a2bb88c853f445747_1637048854025_0.4267646454904235","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.285":{"name":"@balena/jellyfish-plugin-base","version":"2.1.285","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"Apache-2.0","_id":"@balena/jellyfish-plugin-base@2.1.285","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"7218e25e378ec64d5d8dd82c818c3b5f9d5e6bf3","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.285.tgz","fileCount":19,"integrity":"sha512-NVw43Cq5Qp4tSIIsE2Ra/dok5TPe2n+mD4yhDaIjcqFHQin+WiIQ7U8j7WIrRAXW4eku93u7QUD6Ygd+1HGF3A==","signatures":[{"sig":"MEQCIBMpZLVEbq66AXC027BMjJeWWN9d4ZRcMsbXRNOd8Vn8AiB6XCzBx2F8A05Pk6EO/fyDMoi0v1fO+yZa359u+7mHKQ==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":78640,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJhk2LjCRA9TVsSAnZWagAAKccQAI8bNNX4NeSOjawOoddH\nEztA6PLBPHhxeqXqmG7QsM9iE+isfawJ8mAqDNu93a96OPB+NaFPLwhD7pC5\nVYyZ9P4Kanwr8Qq7mUBieGSxifkWcA/LKh+4zHYZ6xGZepyzi5+mmpwQulV4\nJiceGlep/fj5F/L5K3eMGjE+Y6vBQVxzxLg8rvDUDNqclcaSD+h0Uhq8G1mr\nNR4F7FlJNc4QGBLB5HkTR1IKKSIpT4++bN1RE2Z6YYThQ9KSe9Hn0C4FDBTp\n64GX2uVigEgZRjw3yhiNme1O+687+XDnUtoA0/LZDvQ2xnPu2Hmb8ww5ch/Q\nk09EK/RW/lQiaTHufFWrOnipQbaJvPpCCF59lrqsmbHs6X8HwPhC0s1Cjmnz\nX1aVNFPqmUaspJtCmFUsaubZuKCbgkDTf/xyIf5Q84XLpMtShG4xFXfFN3Zp\nyKVU9ShmgBxe4MhOOHbvg2mv11bIsDxbwREyytMPS3GqCzJR+iFhjCD00Jta\nDbZuc48hqQkTjIAsP/wPfV+y7sfTFxutcVV47ditIlkvmclyx/nNk9aFmyFp\nWa5yOZKyW+gevTjB7LwlOf9UtJdxy3oe6NHS84vZ6fOlscO6Uj6c4O8IA1ko\nbx3S9b/5ZE5NW8ZOgI8e1F+HA0davAUXtZRuXSYgL6JbsSKShAZLc577+iWP\nIMj0\r\n=n3Fc\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=14.2.0"},"gitHead":"c7c395b3334865424e32dc9a5f660b0cd4875eeb","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest,typedoc","test":"npm run lint && npm run test:unit","build":"npm run clean && tsc -p tsconfig.build.json","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint:fix":"balena-lint --fix lib test","test:unit":"jest"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"versionist":{"publishedAt":"2021-11-16T07:49:16.665Z"},"_npmVersion":"6.14.15","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --fix"]},"_nodeVersion":"14.17.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.4.0","@balena/jellyfish-logger":"^3.0.124"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^27.3.1","sinon":"^12.0.1","deplint":"^1.1.3","ts-jest":"^27.0.7","typedoc":"^0.22.9","depcheck":"^1.4.2","typescript":"^4.4.4","@types/jest":"^27.0.2","lint-staged":"^11.2.6","@balena/lint":"^6.1.1","@types/sinon":"^10.0.6","@types/semver":"^7.3.9","simple-git-hooks":"^2.7.0","@balena/jellycheck":"^0.1.8","@types/json-schema":"~6.0.1","@balena/jellyfish-types":"^1.2.21","@balena/jellyfish-config":"^1.5.10"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.285_1637049058985_0.9937368732183118","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.286-renovate-balena-jellycheck-1-x-04f7cae524dd92e958932185ab9276d0a03f56d5":{"name":"@balena/jellyfish-plugin-base","version":"2.1.286-renovate-balena-jellycheck-1-x-04f7cae524dd92e958932185ab9276d0a03f56d5","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"Apache-2.0","_id":"@balena/jellyfish-plugin-base@2.1.286-renovate-balena-jellycheck-1-x-04f7cae524dd92e958932185ab9276d0a03f56d5","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"31a1ce174c4c7edde45aa47313b4844a50a50855","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.286-renovate-balena-jellycheck-1-x-04f7cae524dd92e958932185ab9276d0a03f56d5.tgz","fileCount":19,"integrity":"sha512-YvOMRnPZunc90X4YeF2o/Gi45DLWI1Zd2g14U+rhatEo1ZDmp+aYKaZjByLNu7+zhVijY17i8be8/W3J0BSl0Q==","signatures":[{"sig":"MEYCIQDjoffFEjJBi0LHnWoQmI1IbBkFp7RpUWjE3DNyFeYXvAIhAMVz0Lty5BN17h4zRPea5QSX7QYJ9eXdhX4vcZ24OYQ9","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":78805,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJhmFV8CRA9TVsSAnZWagAAYsMP/Rnrad+qtXtSMOXpll6T\n6BoaFKhUUSM6z2Uxb1vOOsA2QpoJ0NvQVwHwmQK6HYZyOSu12is2lxk2yzBm\nbI0Tq0Qgt4uzST85AeOg6XLJUqFlxm96Kk67uaWlGk7SVx9Yfe2gS1xrNrH+\n6yZ4Wr8VTWyzxtyvn7qfzmTVUbpjD/qywtcBGVDeXpHc8u14VZ5N1xLuvXQ8\nCZhTqkE+gxUxWz0n98tCckECDXwi7pPJJquMXc0cubMKOkU6X96HxGVBzRRd\nkenrCaqSXJLwayNx5lci16CEZbyL2IrFQu5lTKXX3YsLigu7c6ON/VumA77P\nuVpVAHnspSGAZQpqXxV1/6U4EDpeuUgNWHbQxMqzqT1Et5jzSjNwPTTu4TpS\nn2i+0h75z7m5UVYcaTCoJlL9ZH0g3VO86946GIsS3L2vhhjMOD9mZxerFkhj\nojYztikgjWWouPjlz9Km8PkaMsEWxXLYxTNDP6WLQAd86BvabKRrRVrcy6FQ\ng6M5sM1vh5WjL3DJJEJzUPILyZZhZUKyFyD7inCYtVcrf7UtzFMzeITwwcHO\n+9RJMj0foHmKFlYEYNQ5AO0OZ9WAyj/pt6YWSbYs8F5rl2RX9/vrgbbDyeu/\nwrFNnEs0pX0BOfYQAQjCQZ9pt+oMiVeimOq+e/LE263H53J8gd4AN59ugmEy\nimnG\r\n=2LHO\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\n[![Publish Documentation](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml/badge.svg)](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml)\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=14.2.0"},"gitHead":"04f7cae524dd92e958932185ab9276d0a03f56d5","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest,typedoc","test":"npm run lint && npm run test:unit","build":"npm run clean && tsc -p tsconfig.build.json","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint:fix":"balena-lint --fix lib test","test:unit":"jest"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"versionist":{"publishedAt":"2021-11-20T01:51:53.255Z"},"_npmVersion":"6.14.15","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --fix"]},"_nodeVersion":"14.17.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.4.0","@balena/jellyfish-logger":"^3.0.124"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^27.3.1","sinon":"^12.0.1","deplint":"^1.1.3","ts-jest":"^27.0.7","typedoc":"^0.22.9","depcheck":"^1.4.2","typescript":"^4.4.4","@types/jest":"^27.0.2","lint-staged":"^11.2.6","@balena/lint":"^6.1.1","@types/sinon":"^10.0.6","@types/semver":"^7.3.9","simple-git-hooks":"^2.7.0","@balena/jellycheck":"^1.0.0","@types/json-schema":"~6.0.1","@balena/jellyfish-types":"^1.2.21","@balena/jellyfish-config":"^1.5.10"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.286-renovate-balena-jellycheck-1-x-04f7cae524dd92e958932185ab9276d0a03f56d5_1637373308512_0.75371333799557","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.286-renovate-internal-patch-478d10f00ef5b318fd9c94e8b1daf18d0e1a67de":{"name":"@balena/jellyfish-plugin-base","version":"2.1.286-renovate-internal-patch-478d10f00ef5b318fd9c94e8b1daf18d0e1a67de","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"Apache-2.0","_id":"@balena/jellyfish-plugin-base@2.1.286-renovate-internal-patch-478d10f00ef5b318fd9c94e8b1daf18d0e1a67de","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"d5aa62f41fbbd6044b71fd5c2fe7fed70d66c0bd","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.286-renovate-internal-patch-478d10f00ef5b318fd9c94e8b1daf18d0e1a67de.tgz","fileCount":19,"integrity":"sha512-+sYfVgY/FBm9Flh9wjaxd2prLutzRJLxNS8/J2g3EZvRu8Fe4ivkdXJj9Dy8qld69NwMgOp9j9mpEWr9Ok2Qgg==","signatures":[{"sig":"MEUCIQCkK96Tx0/kivHOu4F4TuspKnIEVIRWJCaVvfgruqqbwgIgGQnGTddfhzw5l7zWteJbUmYGcqa+BOyRQTwBAoVkEC0=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":78877,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJhmOXsCRA9TVsSAnZWagAAmMAQAIOBSOosj9OoF27JKVlZ\nd4tBUQnDNukvQfipmKSABNqGgqhU8u+8dPVMgzHWDYIkajKQuEp6+icCdbh3\n72XZA1MciDr4yOpGmGy39pkYZwnsqXN+NS5uU1kA2y1o8QHt5JO4BcEIywC2\nhvs2PXCjwHk+JHR8R6EBDDdyZ1BTHuO4Cg0ihOEvJYKKIpZP/b/BJTWWEyoo\nI6beEHf1+WeO37JfUdBeVSk+6y07FRMPBMYWSQsT4/Of//p+hfcZ8FnGXaFZ\nX4/x9ksQ8AFgxjzC5S4EmKlje8Fe0z2wNc2xsyMlEITMf1pATC5gv8UTFIGw\nTliMSsqTWgzHKdvLLorbgbZ9FzFXAKqknKRFCPVxZkw7iro0kqKwnwgROAIo\nNdJjtcVyrCGAlIKAgASxpfmRxCrjU+abcWE5HLamZJSOWbGtDbizo99EWC3y\n3g+0pjiL/OKcGRx0bpsvjRWr6i58O0h7cL+CE/VW7JntOWcxpwqu4sewbufj\nCVZLBMUJw1yz19MvETLFdbfe/ruZ82a9pt26KNDT4T25cTXiRwn5i1TfVzn7\nR/FgPhQ3nchiY/x5Snx1PohGOylTmFFI838ZoXSIIOvQYED6lWbJmH+HcKj7\nBRbuN1MIZu9tTGeYsgMXxAWqn9KVdix5HcJ4DJMAn/rsQJXJ7o0TPoDpBt6w\nb90X\r\n=AF1L\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\n[![Publish Documentation](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml/badge.svg)](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml)\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=14.2.0"},"gitHead":"478d10f00ef5b318fd9c94e8b1daf18d0e1a67de","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest,typedoc","test":"npm run lint && npm run test:unit","build":"npm run clean && tsc -p tsconfig.build.json","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint:fix":"balena-lint --fix lib test","test:unit":"jest"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"versionist":{"publishedAt":"2021-11-20T12:08:18.208Z"},"_npmVersion":"6.14.15","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --fix"]},"_nodeVersion":"14.17.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.4.0","@balena/jellyfish-logger":"^3.0.127"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^27.3.1","sinon":"^12.0.1","deplint":"^1.1.3","ts-jest":"^27.0.7","typedoc":"^0.22.9","depcheck":"^1.4.2","typescript":"^4.4.4","@types/jest":"^27.0.2","lint-staged":"^11.2.6","@balena/lint":"^6.1.1","@types/sinon":"^10.0.6","@types/semver":"^7.3.9","simple-git-hooks":"^2.7.0","@balena/jellycheck":"^1.0.0","@types/json-schema":"~6.0.1","@balena/jellyfish-types":"^1.2.21","@balena/jellyfish-config":"^1.5.10"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.286-renovate-internal-patch-478d10f00ef5b318fd9c94e8b1daf18d0e1a67de_1637410284786_0.0003721699869869699","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.286":{"name":"@balena/jellyfish-plugin-base","version":"2.1.286","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"Apache-2.0","_id":"@balena/jellyfish-plugin-base@2.1.286","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"9067ab4bcca97ad27ba36f131c9b1c764bc0a338","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.286.tgz","fileCount":19,"integrity":"sha512-HZPIHrabc62klqugGvWraUpn19quR+M9HfsS5PiBlQXaniejAbfxL2I6iXMzc3Jg0uzhxXH96Ylh8j5gikT8kw==","signatures":[{"sig":"MEUCIEC6u040CGfJgGbL/0U2twgenej2Xfv8aqCsYgw78hqrAiEA/ozkIL4nzv4iFRBED3pdnKj6rFoUwhfFWxYA5+keJJI=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":78812,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJhmZLUCRA9TVsSAnZWagAAJ5sQAInzbDgIx53rSQ84spCy\nsIyDrWJS7cLkW+QnQcO66APgyya3WOj52wEfv2zvJr8HktHyoeXjVHDdsee1\nKR0k0UZkeUlmdcoSvpmD8Czscd8fRfGnkOA3zLBd5HWLNhVXxe2F2gQUkqwV\nW5Pb7sSBMWnJa5zi1cAwAk5G+UDFGgoFJDIEcpgTxfkxzUUlVnq04B+ClHC6\nHU/Pz3KOreXEENz6/uWJHogdxxtqhPd7L6j45N0Dz3QqlPECAjRqoNFE1NMk\nAJaJNn2UlT5qBnLkOLSB5kWpRtEHdMLYvbnhtUDLHPLjxL7v1TojNgPi+YRV\nm1/tIQ8qlenxVKkw/HHpQvFq1jt8XC8qyFtGQeMScMn4xdLeN8L3SLef1pZ5\n3sIC3khMzwL8ySnUwHipLRC8CdLPpcq6sCsheFTHIP/bETkKIiIBK0sh/rZV\n7GA9Z2/BDX5jGIk42k98S8FOuU3DktV7lB6eG1o1d8cm+88Az3SInkdIaVpy\nkVhfd7rDyUNLC+vHu3IrspHuuXpFShkelihM8Mq5mqKOgC/u79NMQP7KkgWi\nrdprj/ALUVspEk84H1EGoxoVWvpVfFSfquItoMcO9033PyNRKosI4mtpDaD+\nCpwUeVPdjGKpgy26dg1p0p1hVwLijOha1YiQr4PU5JpGN/x3IwzThhY+STMl\nzFcI\r\n=Qu9K\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=14.2.0"},"gitHead":"ad9a9cd3542c0b1fa478edc1b79b63593dd71428","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest,typedoc","test":"npm run lint && npm run test:unit","build":"npm run clean && tsc -p tsconfig.build.json","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint:fix":"balena-lint --fix lib test","test:unit":"jest"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"versionist":{"publishedAt":"2021-11-21T00:27:21.115Z"},"_npmVersion":"6.14.15","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --fix"]},"_nodeVersion":"14.17.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.4.0","@balena/jellyfish-logger":"^3.0.127"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^27.3.1","sinon":"^12.0.1","deplint":"^1.1.3","ts-jest":"^27.0.7","typedoc":"^0.22.9","depcheck":"^1.4.2","typescript":"^4.4.4","@types/jest":"^27.0.2","lint-staged":"^11.2.6","@balena/lint":"^6.1.1","@types/sinon":"^10.0.6","@types/semver":"^7.3.9","simple-git-hooks":"^2.7.0","@balena/jellycheck":"^1.0.0","@types/json-schema":"~6.0.1","@balena/jellyfish-types":"^1.2.21","@balena/jellyfish-config":"^1.5.10"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.286_1637454548603_0.8583447749921214","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.287-joshbwlng-remove-license-headers-02d1d41fdd0fffe3afd39c9e97c7fcb23a549183":{"name":"@balena/jellyfish-plugin-base","version":"2.1.287-joshbwlng-remove-license-headers-02d1d41fdd0fffe3afd39c9e97c7fcb23a549183","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"Apache-2.0","_id":"@balena/jellyfish-plugin-base@2.1.287-joshbwlng-remove-license-headers-02d1d41fdd0fffe3afd39c9e97c7fcb23a549183","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"fe8cc684d868e2801639c7397ce2b7c0ce2aa48f","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.287-joshbwlng-remove-license-headers-02d1d41fdd0fffe3afd39c9e97c7fcb23a549183.tgz","fileCount":19,"integrity":"sha512-E1GftXVFSMO8zOZjKKtHngBc0KT+ND7ZnpFqoGiJjIhFZuuhPKEIkMdhsuQpNSqF9fEcNWuhq8LKxHf1d8uJCw==","signatures":[{"sig":"MEYCIQD2I2FVMrA3woyTNdxwesYQDenL1bOmGELKXz4VrIRs2AIhALUwPDXgwEcb3900EU5WAgNgbpcP/g9/5a8vwsl7Qtxs","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":78057,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJhmZeACRA9TVsSAnZWagAAgaIP/1NYe/OlWFrO6z/SVI5A\nfXnTcx95muAGsTmtt4xvtJ3fPTRPRDqXLNm5xuOo7RsIYzC3TnjAKSf6tWWT\n+SF83m1txe0AWXNVGEJ0lPdB/fOimOfHRm3a+Pvudd1jy9hxiA2k3L9miof1\nv7YVHQ9pvj7fAgrZeAzCgA+zgR3E9g0WEE1La6kbkB2M/rByzktNFfqM/U7D\nQx+kyJ/qWKpBxDOpBQ8/GrVf7wpgEEb2o+7ms8o6kirpZuh/QnYrEN1JJ2hF\n+Wwr2M+QUb6v145ROXFYP7G7F001noCBHWZpaaH8OSIgLt/PTLJKF71fxne3\nWvcOw+HWDK8AyjTK51BiXXe5QexHmoX63oTVZuq8GR/St3uljtSFYqUXdgBv\nUZS7IMEzr3++J857sghJJn9KoY2m+2PBfIw6XOIsvCDJ+ErhrbaPsLphodZH\nUbEBb8BE+EVPzp5ZHKXKD0ZXvNdxbb1HiFuUYG/YPNha3hGiiQIyfas6mJoo\n7szkUAdUcCB/w72KzKXhpmSoQqf3/HWv3RlZ4XEUEPrGB8hcDsi/8MxhP8lH\nB3rTZz66FTwJx06UrTKt941+1dbSJ8GibXa8Y+uUC7hthzhfRUGFNJnaZ1Le\n9IlwZu4nU9c5XyKUn3Ioa40/DTgHtyyCyGCa8HVyuALVro+T6EZuELZJ1mSf\nbPPg\r\n=c7e0\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\n[![Publish Documentation](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml/badge.svg)](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml)\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=14.2.0"},"gitHead":"02d1d41fdd0fffe3afd39c9e97c7fcb23a549183","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest,typedoc","test":"npm run lint && npm run test:unit","build":"npm run clean && tsc -p tsconfig.build.json","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint:fix":"balena-lint --fix lib test","test:unit":"jest"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"versionist":{"publishedAt":"2021-11-21T00:46:08.169Z"},"_npmVersion":"6.14.15","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --fix"]},"_nodeVersion":"14.17.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.4.0","@balena/jellyfish-logger":"^3.0.127"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^27.3.1","sinon":"^12.0.1","deplint":"^1.1.3","ts-jest":"^27.0.7","typedoc":"^0.22.9","depcheck":"^1.4.2","typescript":"^4.4.4","@types/jest":"^27.0.2","lint-staged":"^11.2.6","@balena/lint":"^6.1.1","@types/sinon":"^10.0.6","@types/semver":"^7.3.9","simple-git-hooks":"^2.7.0","@balena/jellycheck":"^1.0.0","@types/json-schema":"~6.0.1","@balena/jellyfish-types":"^1.2.21","@balena/jellyfish-config":"^1.5.10"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.287-joshbwlng-remove-license-headers-02d1d41fdd0fffe3afd39c9e97c7fcb23a549183_1637455744208_0.602358492475003","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.287":{"name":"@balena/jellyfish-plugin-base","version":"2.1.287","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"Apache-2.0","_id":"@balena/jellyfish-plugin-base@2.1.287","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"bc8d153696f16d772a0562e5cfe310333a676e64","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.287.tgz","fileCount":19,"integrity":"sha512-QOr8Pu4IPQ+A3VMRGgNhULNIzTqnSaxXTVcTo1y5Coi8/mnGIHDMxpxolr2XMbghTRsop5Z/zYx/lEDzOex+rg==","signatures":[{"sig":"MEYCIQCRKiqpcbQNZffkd6won5LPWMVElOm+A5qHjfwwch6ErwIhAKjs2++tDwen508/diXoU6HMNu+A7kd9I2qGEKamGqQz","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":77983,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJhmZgvCRA9TVsSAnZWagAAwbgP/3qrGzmKQaqHkOi+gTNv\nqnDex6Rrd/fA4PlOKDz1B3KOH5/Nkv3QmQmtGHm78D9TZIj5Amjm8LwUrtOp\nk8WgdsssPgRM4ZN1yfe1FaIeJwS84xhRjpNdPlI9yxe9mjrInVlFHEw5YXwp\nlENTU9Kv1qwPBSvSKtJjdFjVdyWiC948RasgO6ty+RgqFGaDjsDhfh+J/fGU\nUzbyLikOY7usGz8foVos0otDtWrGBSAcb7ZpADbtcSN+rL2VtKw66wstlWx8\nTmP7px9KFdfaQPMYCo5rdXXmM9DWTqbaGoZHuDaQYe4o8EhYVaKlqR3ZLHfz\nAycaSvx1FeGq2L1XaWwUDZDKASIr2P/IC0g7ff3pNltvWn131X69hQi6D/6q\nvncKGtgYJ0EHv6k25MXOSpuO3nnUeQvAXpoV5Z87PS+3hUrxoFFmPKgfsub7\nAvENurT3IHGBgExlkjaqCGKLLJODiOyePQYHLzthDUILRvmPxEjbR1aNrx2y\nJgzyvJ9FSVHb0UknBB5JIUS5Sm6SHV2R9wAmCHMTN1VJyEeVO5JwNthdxLf0\nDgreQb4oHbYIZ8EW7BrQ4K0fUyY1cdQY4LfATsjshixOiS2fpfLIyy+Cc0Ff\nB8axU51Lv+erXj36DxxpXtkKcD+6CScnO7z6iZi7UszFRFQnB5b5G2MculPH\nBtSu\r\n=1AMP\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=14.2.0"},"gitHead":"893e4b9fa98322ef6fe0641f0920572d7d4220a5","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest,typedoc","test":"npm run lint && npm run test:unit","build":"npm run clean && tsc -p tsconfig.build.json","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint:fix":"balena-lint --fix lib test","test:unit":"jest"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"versionist":{"publishedAt":"2021-11-21T00:50:04.794Z"},"_npmVersion":"6.14.15","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --fix"]},"_nodeVersion":"14.17.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.4.0","@balena/jellyfish-logger":"^3.0.127"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^27.3.1","sinon":"^12.0.1","deplint":"^1.1.3","ts-jest":"^27.0.7","typedoc":"^0.22.9","depcheck":"^1.4.2","typescript":"^4.4.4","@types/jest":"^27.0.2","lint-staged":"^11.2.6","@balena/lint":"^6.1.1","@types/sinon":"^10.0.6","@types/semver":"^7.3.9","simple-git-hooks":"^2.7.0","@balena/jellycheck":"^1.0.0","@types/json-schema":"~6.0.1","@balena/jellyfish-types":"^1.2.21","@balena/jellyfish-config":"^1.5.10"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.287_1637455919643_0.44895986323112536","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.288-renovate-internal-patch-3894dd15efa2e5c24d82572fbd0f54ed6426ef2c":{"name":"@balena/jellyfish-plugin-base","version":"2.1.288-renovate-internal-patch-3894dd15efa2e5c24d82572fbd0f54ed6426ef2c","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"Apache-2.0","_id":"@balena/jellyfish-plugin-base@2.1.288-renovate-internal-patch-3894dd15efa2e5c24d82572fbd0f54ed6426ef2c","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"6fbcced7e9e851b92ea198effb9399e27f744e27","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.288-renovate-internal-patch-3894dd15efa2e5c24d82572fbd0f54ed6426ef2c.tgz","fileCount":19,"integrity":"sha512-JCeQ/HLdznkN3vJJwd4ae4K3OGh9NxyDY6FNlG86b3WS/eTD6YO3nnEgeFwj/Vv/pyPvxdnSY4OXJMypp2Mkfw==","signatures":[{"sig":"MEUCIBk52WNelGaIUAFyCj6hWmxHgR9RL85EXHUVjjzwKLOdAiEAschNVML/YQ3+a2q7NTu+//JJCFkisE7mhmSlo9T004k=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":78120,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJhmu/5CRA9TVsSAnZWagAA8bcP/RHMYGL9fum3VVFXwzIS\n0DFkPJeQ7Swl50Y12LixwcFOqEjLSbEWVRkHrVl+SIOdXMAgOYDnLY3go1oz\n5o0HnXsJ80GLPPMiYNdVwZjbyv5P8otC7E071hLFWvanVGt7V66kzguJNMXA\n1OES8r0pJav5eTu7/ME89qrt9KsCp5xYcB4mVLA9OkdZcQZRt0ni7gVoRX90\nOJLd9/Ergn6bV4tGZocdudGJPRV/QreReclSfnxXC/4bFZ3zG+dYBxlm7lSF\n7MBZZrduJHdAxcM/8ZZAss10ut66n5ecAgEaWgFm298kyTd7p8GYQZULTfk4\nlfGrpGZHfEqvCkXbAQmzomhEdRWppUhtdwNifJdy7xDO0o/JFMFszA8X5pVK\nhCBvW/nCtpt1uo6Ej+CfTS75EiI+5Lq2LiIpDvS9eC7BmMG22etfun1Puq5x\n/mptnAjPSKWSr2cmOhhw3vZC6XpUlOYduLNbCD+9ky60bsYVRSjhvqX0LW2H\n6kO3yI6augxMcG+1mqs+OL2uC/wGE1B/WeXIs6DWWhoCIoQJGf8M2z+/oZdB\nJWW/EvTQpSRgb2oduSdp8UxdzrpGOdXSpGbUfXHKzavMPtr5RjItT8qfUh1z\nADnO+iYU685xPlYePwukzEIqXgoI5ub2q1aQg9GxLz7qnff6kY+jksMNG/f0\nMaZo\r\n=7/kp\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\n[![Publish Documentation](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml/badge.svg)](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml)\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=14.2.0"},"gitHead":"3894dd15efa2e5c24d82572fbd0f54ed6426ef2c","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest,typedoc","test":"npm run lint && npm run test:unit","build":"npm run clean && tsc -p tsconfig.build.json","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint:fix":"balena-lint --fix lib test","test:unit":"jest"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"versionist":{"publishedAt":"2021-11-22T01:16:07.105Z"},"_npmVersion":"6.14.15","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --fix"]},"_nodeVersion":"14.17.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.4.0","@balena/jellyfish-logger":"^3.0.131"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^27.3.1","sinon":"^12.0.1","deplint":"^1.1.3","ts-jest":"^27.0.7","typedoc":"^0.22.9","depcheck":"^1.4.2","typescript":"^4.4.4","@types/jest":"^27.0.2","lint-staged":"^11.2.6","@balena/lint":"^6.1.1","@types/sinon":"^10.0.6","@types/semver":"^7.3.9","simple-git-hooks":"^2.7.0","@balena/jellycheck":"^1.0.0","@types/json-schema":"~6.0.1","@balena/jellyfish-types":"^1.2.24","@balena/jellyfish-config":"^1.5.12"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.288-renovate-internal-patch-3894dd15efa2e5c24d82572fbd0f54ed6426ef2c_1637543929686_0.12426634577568452","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.288-renovate-internal-patch-e54fa3b40d4505a33162c304cd6c322890e53b54":{"name":"@balena/jellyfish-plugin-base","version":"2.1.288-renovate-internal-patch-e54fa3b40d4505a33162c304cd6c322890e53b54","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"Apache-2.0","_id":"@balena/jellyfish-plugin-base@2.1.288-renovate-internal-patch-e54fa3b40d4505a33162c304cd6c322890e53b54","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"1b5d7f4f1e9f4081f9d7607ea9aaacd79363f70f","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.288-renovate-internal-patch-e54fa3b40d4505a33162c304cd6c322890e53b54.tgz","fileCount":19,"integrity":"sha512-z3v6lK4Kv4/F8FGeNJgkzrF/v/JjJZo9LRG38cQPdyI3N/W7HPTYfg2DE5kLIrKtHHdEvcsMgt43tfuwoNkIlA==","signatures":[{"sig":"MEUCIC9u0mf1qqqoKz6fKw+Q1QLw017azEgZR8STR1VKnmKFAiEA7aS9AaBRzdEqwDjg9QAFvgm2zf5YfJiN/+aQM3/Cen8=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":78120,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJhmvDwCRA9TVsSAnZWagAAtKkP/0gg8ItvidNNOXIbgu00\nHlvuOaR2/V0VM8soA2hKuHN+g0qpsw9JMTSkmESPVPOdrMfGQznuLmxDfFke\nxK5vK7mOJBHeY8UyKYkB0yw8oLOVgmrld7An3UjhX3kGFmsWFtulsfw+Bw9W\nk+eZIIQqUE31a95dzc0AvLKUkMfuWl9jcsrZmKuKwhYcve0QFIo6H0eSQWsH\nQtbQAtT6ny9YkZ4ufsBkMdyukN+/zWOLPEvYB9JS/DG8IufTh7qplqOM+XNx\nDM0XKCgOwTxE9SMPTluRKP5GVeRBWL/OmkNbLJ3PzE1GRJ2tA9pMaF/YQoJl\n+JfKGQeAGoq06ckBF+vaSJVy6YjqVLinBuOWDfkauInS9iB4V08y4pMrtudY\nZxloBQhXMic9/pU7asbOZTzeGrJVzUTnLYoEUgM0Fv72ExZLsqVL0/WlBmK5\nkGGH/m7p147oCVWh/vCDa3Lfl+oywxr/IsnNAgabQDaPwRC9ZN64WMH2NPhm\n6W9mVVfxpai5Emze3PuDdvJp4+GRyQX9xz++blTzAMcC9NHNyOB1weZzXaVS\nb5TPjArMmdXBaYbKC0gBM4vCYDwcwkQ42qQTgcgpwAGI77gMJdIDJxog4ZVP\njuDd+fFokght1M8H9izLnAkrH6Lq/CiygfQ8ZQYedndBBVCdK+oam0/DApyA\nTWmL\r\n=xqzY\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\n[![Publish Documentation](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml/badge.svg)](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml)\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=14.2.0"},"gitHead":"e54fa3b40d4505a33162c304cd6c322890e53b54","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest,typedoc","test":"npm run lint && npm run test:unit","build":"npm run clean && tsc -p tsconfig.build.json","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint:fix":"balena-lint --fix lib test","test:unit":"jest"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"versionist":{"publishedAt":"2021-11-22T01:20:01.292Z"},"_npmVersion":"6.14.15","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --fix"]},"_nodeVersion":"14.17.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.4.0","@balena/jellyfish-logger":"^3.0.132"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^27.3.1","sinon":"^12.0.1","deplint":"^1.1.3","ts-jest":"^27.0.7","typedoc":"^0.22.9","depcheck":"^1.4.2","typescript":"^4.4.4","@types/jest":"^27.0.2","lint-staged":"^11.2.6","@balena/lint":"^6.1.1","@types/sinon":"^10.0.6","@types/semver":"^7.3.9","simple-git-hooks":"^2.7.0","@balena/jellycheck":"^1.0.0","@types/json-schema":"~6.0.1","@balena/jellyfish-types":"^1.2.24","@balena/jellyfish-config":"^1.5.12"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.288-renovate-internal-patch-e54fa3b40d4505a33162c304cd6c322890e53b54_1637544176542_0.5936497387270014","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.288":{"name":"@balena/jellyfish-plugin-base","version":"2.1.288","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"Apache-2.0","_id":"@balena/jellyfish-plugin-base@2.1.288","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"6c655b704df227e1c325ef9b808295d4ccb03f20","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.288.tgz","fileCount":19,"integrity":"sha512-3IoJaitf1zGQUfizdJRPhIwtpcdn8Evfw6mAaSS5uMwThm4zFk1QqA36m1Dyz9tYNmsTIClbklMh/qnSEV2Kng==","signatures":[{"sig":"MEUCIQC0u40SHHCPh1/mWMZ+bXyUhbl+w/xL+Z7Q/pSDABrBNwIgYAgBGfBgbf2ai1nL7UqH37cjHRtTtQA5mgEbL7703xg=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":78055,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJhmvHsCRA9TVsSAnZWagAApvQQAIKk/ONP3ouoPiETFU0z\nFBq2C41Ou3vH8shleQUhVyQ6YdSv9Ive4sImAaroYx8X4YIx58fgPsv2ILc4\nOohHRsil6WIrseeOej4tKlKbypGJFxenOEcgd0NU3d6Yr1cVDqr9klqF32IU\nhe5E0LXpsO/rkUj7Rmf38Xe/waD92cgJ9VqTBQqzCi3E++sqvRLCCiCMk4/F\nG3bW3rJTK3QS4LuvzwIFY5EA3FLgvjwW6ChTiPgdVCBuebqN2mCTFf7iZoxa\nfv4adON9pLTNqv5BtLVhqZOrOzQw6EeYaeNRJp0dCoxMjPPsl+edsIS6hDFm\nGZr2MZ+py9s/ohysWYjnocBIQBoU4lykslFosOCbjyry6XYJ9CcgcWBE+aLz\npCpZHFSHPwVTba4gdDeuVmreE990ziWCFNc1yyD6vDBe7ZZ2D48/RIlGYVbU\nUBBUlk5PK2oGdAE439ke1V9Vy8kBVt/i+3N9jr9VLJzD110rq+w8eNeEWZVN\nYUOhFKNZJ3SidP7HaIGD2lNLe0FVJTRGo3H6ZPPwTGECboxgjAWrdUyy6KTT\nKqzALBaVru5ns2z9Od1BqLTG8fbM8L0Z2zfnPkGAqMRywtG/0TwOgCYvy7Rw\n/shjV2deJdPCaQeHZRsHEuC+EYJL1VG7ZtoFPw/UAynCOMipZ3TfWIsDGfJx\ns2GW\r\n=wyPx\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=14.2.0"},"gitHead":"a6005834b85d6da7cd54ea6ab061efec2086035e","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest,typedoc","test":"npm run lint && npm run test:unit","build":"npm run clean && tsc -p tsconfig.build.json","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint:fix":"balena-lint --fix lib test","test:unit":"jest"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"versionist":{"publishedAt":"2021-11-22T01:25:13.340Z"},"_npmVersion":"6.14.15","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --fix"]},"_nodeVersion":"14.17.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.4.0","@balena/jellyfish-logger":"^3.0.132"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^27.3.1","sinon":"^12.0.1","deplint":"^1.1.3","ts-jest":"^27.0.7","typedoc":"^0.22.9","depcheck":"^1.4.2","typescript":"^4.4.4","@types/jest":"^27.0.2","lint-staged":"^11.2.6","@balena/lint":"^6.1.1","@types/sinon":"^10.0.6","@types/semver":"^7.3.9","simple-git-hooks":"^2.7.0","@balena/jellycheck":"^1.0.0","@types/json-schema":"~6.0.1","@balena/jellyfish-types":"^1.2.24","@balena/jellyfish-config":"^1.5.12"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.288_1637544428095_0.9554553103777781","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.289-renovate-internal-patch-2c41ce8faa428340bf10e63f2769021462a9228b":{"name":"@balena/jellyfish-plugin-base","version":"2.1.289-renovate-internal-patch-2c41ce8faa428340bf10e63f2769021462a9228b","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"Apache-2.0","_id":"@balena/jellyfish-plugin-base@2.1.289-renovate-internal-patch-2c41ce8faa428340bf10e63f2769021462a9228b","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"b1e2e50437060c4d6600b66298960f4ae30d1324","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.289-renovate-internal-patch-2c41ce8faa428340bf10e63f2769021462a9228b.tgz","fileCount":19,"integrity":"sha512-NANQ/eBid5g99QrOf/Xh0ZigeBr+2oXaEKFLLKHFu3ajlTq4n8JFA8bquw1hn45aZ6I5SQgXFGUXeB5tXYeJyw==","signatures":[{"sig":"MEQCIDRy8li4W9VPEkPpR+pxOaWf5da7oshqJx8T/u0o6fKIAiB5DQzNow4R2ywAxcLuO1buFtaaYeHgtuTiabjjOyGPMQ==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":78225,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJhmvNACRA9TVsSAnZWagAA9GwP/1Zzo8hBW6IUdmiGUpm/\nc+/trJqK+74GR97Kb4C4SC+dLpYFEqsk48mtBgPrkC8RvuEXP5aTtrtO9ppv\nqnM0/uZ/iPvcHe79xzDJzRIywSLAfgfWWDL2x1lZlWLkR0ra15YuNbNmc8RK\nYIdyb51L5hvWiokbejc+TYwcnTWHWz3m7iZhN26YFZTTB6wwUlgIINEnJu6q\nOSc+fLbjByJzILksE3H3hujJVCSI9+hIp+QN6I0BeBsJqOwL1JFbbIsp6417\nlUwRXd1CIu8EIAmQaCWD3YPt4G9tSEMmO2iCxpi1OA0bxcFGBUBJGI20QzKy\nBKymVB2YGRLwuQh9eHpKuAZfMYKUMZXaFPC6zkGkz23lJiz9mvS2XrJo5OGu\nDeFKoX3R9b6UZNrDjIIgashOwF8ZLz16h0Mcgk6PBUZ3DDImB42jV/p0iqzT\nBNVBmpVCobFs77Lk+0AW5QbKvmofTNIXh8pwxtHRsULziKF0ZxT7kcqbcTmJ\nDmMzezLQ/Yoh+TFBUf748vr/OjDYD7AdLc/rM/2U/AHMyz4XtN3AVWbV+N5D\nd2bHaKyS/HaeXWR3NrDaDnD45ITPSMTFbEs5nzDLEBkbHiFlptUvPQARBl1C\n6fRi77wRHVDF8uH1SlNZwsEgyWrLssHqHY/77xASkzmC6cGSLThNZGuz2mlz\nSCJh\r\n=mkAl\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\n[![Publish Documentation](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml/badge.svg)](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml)\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=14.2.0"},"gitHead":"2c41ce8faa428340bf10e63f2769021462a9228b","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest,typedoc","test":"npm run lint && npm run test:unit","build":"npm run clean && tsc -p tsconfig.build.json","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint:fix":"balena-lint --fix lib test","test:unit":"jest"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"versionist":{"publishedAt":"2021-11-22T01:29:23.252Z"},"_npmVersion":"6.14.15","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --fix"]},"_nodeVersion":"14.17.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.4.0","@balena/jellyfish-logger":"^3.0.133"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^27.3.1","sinon":"^12.0.1","deplint":"^1.1.3","ts-jest":"^27.0.7","typedoc":"^0.22.9","depcheck":"^1.4.2","typescript":"^4.4.4","@types/jest":"^27.0.2","lint-staged":"^11.2.6","@balena/lint":"^6.1.1","@types/sinon":"^10.0.6","@types/semver":"^7.3.9","simple-git-hooks":"^2.7.0","@balena/jellycheck":"^1.0.0","@types/json-schema":"~6.0.1","@balena/jellyfish-types":"^1.2.24","@balena/jellyfish-config":"^1.5.12"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.289-renovate-internal-patch-2c41ce8faa428340bf10e63f2769021462a9228b_1637544768250_0.03702530237721047","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.289":{"name":"@balena/jellyfish-plugin-base","version":"2.1.289","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"Apache-2.0","_id":"@balena/jellyfish-plugin-base@2.1.289","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"60d447de643cee7c1f8d02bc3682134bd53895a3","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.289.tgz","fileCount":19,"integrity":"sha512-mMBOEaTFSa8eyUSUOYNdDy0hq/HWnZ0XyeZKT9qMRy707Ekmrx1sv7tmP5reFG/H79qyarhZUu50KeWK6O5qgA==","signatures":[{"sig":"MEUCIQCUvEwOYIiyOIkdjlyE6ZjbObmKGpKUnbmWvuHL5aQ0UwIgdDoBAHl9OIaQ+xqzGZ0GGgTIc6ZzqPd9iZ3esJuPda4=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":78160,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJhmvQvCRA9TVsSAnZWagAAvNIP/1kvC4ihCpfHJW4Ov+hG\nnv8cQaABfZbrQJkkInlRqkNzcg4F0A9qBZIG1VUesewxDTXhTAtlpJCnrEq/\nnQuSsLcAcrFzbyQHy9761L6O+rZd19g+WfpWKbudl2qBfRi2ojxWEsQlGcZJ\nyjWm7fZkgyNUhiy92gFnZPM3Whuebuxqjimja0rIahf6TlkklAgBUagMt4eB\n3hyklsK3tdpE4OUTnJCQMTu8urfh2S7t7NGLyXN6K4ixpnWzzWi0klhz9L48\nuJO2liNHcU1C08SucYOn6ihpaEpCzFXnwgvejs0PUcslF61ppNX5omalUpFI\nA49B2joY/WeDZHCkgM2ck/ILdc/vWU01tiKOiMi+5AF+lrJQ9qezHNlnzio6\n+roiZ6kC/bYe9LmDGKAN6Byk5Zio6mfxBPahReuDAQCJskh79I+/itNNOm+3\nt1h5ZyoQcj5G2gCVuuQUkNf8FhFRSu22N5LfY0btF4JjqKZ2sgOuRXgHlLb5\nlbi65FLj1V8LlHa/PfJf1sNh0SaDQDfcIvp5S95dlWcFudbzGsb7z34jplMV\nigopCVkbtr5vhRiZ2Zd6uLm93ZUd2rz98j3LfwWhJjpfLN+eMq85uNYY9+cO\ncIYv9I8nJlamu+Ml6HXLLT0QHcrkR8cXyqQ3FQ6iFPHeH8419pQCk0wLBWJg\nM0fn\r\n=l6ey\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=14.2.0"},"gitHead":"48441686376de295269d7e2b807b42aba2824728","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest,typedoc","test":"npm run lint && npm run test:unit","build":"npm run clean && tsc -p tsconfig.build.json","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint:fix":"balena-lint --fix lib test","test:unit":"jest"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"versionist":{"publishedAt":"2021-11-22T01:34:46.864Z"},"_npmVersion":"6.14.15","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --fix"]},"_nodeVersion":"14.17.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.4.0","@balena/jellyfish-logger":"^3.0.133"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^27.3.1","sinon":"^12.0.1","deplint":"^1.1.3","ts-jest":"^27.0.7","typedoc":"^0.22.9","depcheck":"^1.4.2","typescript":"^4.4.4","@types/jest":"^27.0.2","lint-staged":"^11.2.6","@balena/lint":"^6.1.1","@types/sinon":"^10.0.6","@types/semver":"^7.3.9","simple-git-hooks":"^2.7.0","@balena/jellycheck":"^1.0.0","@types/json-schema":"~6.0.1","@balena/jellyfish-types":"^1.2.24","@balena/jellyfish-config":"^1.5.12"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.289_1637545006905_0.25082376074537227","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.289-renovate-external-non-major-91af585933213d72fd8f048cfb24425695304608":{"name":"@balena/jellyfish-plugin-base","version":"2.1.289-renovate-external-non-major-91af585933213d72fd8f048cfb24425695304608","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"Apache-2.0","_id":"@balena/jellyfish-plugin-base@2.1.289-renovate-external-non-major-91af585933213d72fd8f048cfb24425695304608","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"98d2b9bf9f44fe3784e05639325f24a00726f059","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.289-renovate-external-non-major-91af585933213d72fd8f048cfb24425695304608.tgz","fileCount":19,"integrity":"sha512-M4la1TKHZDY2dxpFFHuJ0gve7+Y/y0jwaMbQ653KdJ9UQvtIl6pQflIrHWdD//jtS+vrSx6xdDRr+WFsCy5pvw==","signatures":[{"sig":"MEUCIQDdFGsce+2y66vQictYnNyEiHpiPQ5omP6ekgko6T5MtAIgUX3OlOCEfzlR63apXamYmXijy629ZUyOfzC7o7TQRJk=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":78279,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJhmvSMCRA9TVsSAnZWagAAfvsP/1+kuVWSj3DDmUkXN3Vy\n0truYiLJiyfP0V3I38jJoe2bnejpWmNZw/nBaq7nSxh7rjfOFl8Mto3WTNlD\nXB4EnAp1b4+rrzJOBhmdcla0jPn5fuIKtZIoJqMEmumYFcVuF9aWYq/EsgoS\nT5b1OOHPilnN0LwdH1Y/wKwvA9U5FSA17MZfztDlclMSZnNFiqHaPLXbd8Xg\nIk95P317o3FU8GrLJ6BeNRUc5cLk4Kupf+sxnJe1Kd0UitIK10L8DXlircIR\nh5aEGddUGktjKlqsrutEGUmu7oy5+6V2PRy5Qqt7BjJPpl3502PkuAzEmZ0o\nmetYWaOdMJ/P16tcEDd3lmvl3Fz0wZh0bxBV2qRgriYrpCvENKFlCHlTuVrQ\n03CAHXN1adUyr+wtOTPKLPjxzOOKeWExo8exLcUTLLSaWWoRWIlV2DfwwEPV\n+7arcVmBQFOM7pMwCd2G7/8tLADvHd7OBUFTz/rq5T7GkJrLDQR0ERGWDVyt\ngFIw1XNQpNj1SYKjJ79I7abrMjAGu0FACzpBZvXeSFiwgeqP3Yt/x5y/SMhK\nS8XYtSaBds71X7xlNLYsebT5wItpd48zEmaZpJqF7piiE5eNAJSKyy9WOta2\nyiTnv4EywcpYYEn0cz/9KYA/Zc9mooZnBmNXBeQw/TmOmLb4CfrgF5Aw72mj\n5FCM\r\n=tS3S\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\n[![Publish Documentation](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml/badge.svg)](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml)\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=14.2.0"},"gitHead":"91af585933213d72fd8f048cfb24425695304608","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest,typedoc","test":"npm run lint && npm run test:unit","build":"npm run clean && tsc -p tsconfig.build.json","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint:fix":"balena-lint --fix lib test","test:unit":"jest"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"versionist":{"publishedAt":"2021-11-22T01:35:45.197Z"},"_npmVersion":"6.14.15","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --fix"]},"_nodeVersion":"14.17.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.4.0","@balena/jellyfish-logger":"^3.0.133"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^27.3.1","sinon":"^12.0.1","deplint":"^1.1.3","ts-jest":"^27.0.7","typedoc":"^0.22.9","depcheck":"^1.4.2","typescript":"^4.5.2","@types/jest":"^27.0.3","lint-staged":"^11.2.6","@balena/lint":"^6.1.1","@types/sinon":"^10.0.6","@types/semver":"^7.3.9","simple-git-hooks":"^2.7.0","@balena/jellycheck":"^1.0.0","@types/json-schema":"~6.0.1","@balena/jellyfish-types":"^1.2.24","@balena/jellyfish-config":"^1.5.12"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.289-renovate-external-non-major-91af585933213d72fd8f048cfb24425695304608_1637545100291_0.5714918844460612","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.290-renovate-internal-patch-4f44b638aee8b4ca5b061a185af89d0bd6df8ced":{"name":"@balena/jellyfish-plugin-base","version":"2.1.290-renovate-internal-patch-4f44b638aee8b4ca5b061a185af89d0bd6df8ced","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"Apache-2.0","_id":"@balena/jellyfish-plugin-base@2.1.290-renovate-internal-patch-4f44b638aee8b4ca5b061a185af89d0bd6df8ced","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"38bb67a68aed94482cdda92261013736d4f0e0f2","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.290-renovate-internal-patch-4f44b638aee8b4ca5b061a185af89d0bd6df8ced.tgz","fileCount":19,"integrity":"sha512-+El1VAKOgUMhoV5IFaRTO4n5I/MaZ5y2YHOGe0PbSQyR95hqKFHaclp5Waur/r3WYoBRbZpp0j/bEQxBzOfd2w==","signatures":[{"sig":"MEUCIQC0iPJF1A+rNq4MGy36HoAIfJ4r4FfneTImiX/31rcGEwIgZjId8mOyugp8ym1VwSP/x+fF69TkPFIV6YlvM25N90w=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":78297,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJhmzD/CRA9TVsSAnZWagAAz+cP/Anmhmqre72OGvUcoGRS\nCOkY1SwXcGddTaP+KF8wIkCwlGbegHisnKCG7OOHlyNJ+7Ve2jN3HRsasi5w\nkLCMy1CM9+xef2yrrHh9WUhoUeEhUXuQg/YjQlyO3D+BSYKQ8s04wJy6lsqN\n+nIQl7lM5g2kaWzk5KoqAzVFEFjB/qYTDG6Smob0FWYvQGhgJx1iF7m2+Ual\nkxEKngfo4bdh1AnWw2+NB0Vv1I5WZdw51ouZckKSJfYo2znFRbIgrh4OYGhM\nMXvOujpIIpEKJgucbr30u5tPwSFkxniVJ13MzGpEVWl4xnq4Vuc+YfVTl5H6\nd6Rycafl34P1/OjyJP11YtTyUTfZuFEGwNxD2sE0XPAnl01Z2xYrFMlLXlrL\nt6MeylelKvjUIMcEb2XA8fqB/jRJufrKCo/yYYlxbb6netukL9HqBQ4ZiykA\neZ1Jzhok5TcOlHGcxVZrF//CopnOhtbHubzjoCAnw0FcyfY6JoBDRtADaJuZ\nAuxXvzJN//jXC1JcdFmF6lxOpXpRuwB5jUjHz/U9DM2Yh399NQmU6pqiHa3x\n61f9bMl/Byw62y5zI+VLrbJ5nixOmkx6v3Eho0W1QG0Mue8suHOqWFcRiNfX\nu1VRToFJ4ppZtwPXtxBhoJ54FZd+HkSm8yupZ4tnO4aE474BzXRXktYdwp6l\nE5B9\r\n=+I25\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\n[![Publish Documentation](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml/badge.svg)](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml)\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=14.2.0"},"gitHead":"4f44b638aee8b4ca5b061a185af89d0bd6df8ced","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest,typedoc","test":"npm run lint && npm run test:unit","build":"npm run clean && tsc -p tsconfig.build.json","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint:fix":"balena-lint --fix lib test","test:unit":"jest"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"versionist":{"publishedAt":"2021-11-22T05:53:35.976Z"},"_npmVersion":"6.14.15","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --fix"]},"_nodeVersion":"14.17.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.4.0","@balena/jellyfish-logger":"^3.0.134"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^27.3.1","sinon":"^12.0.1","deplint":"^1.1.3","ts-jest":"^27.0.7","typedoc":"^0.22.9","depcheck":"^1.4.2","typescript":"^4.4.4","@types/jest":"^27.0.2","lint-staged":"^11.2.6","@balena/lint":"^6.1.1","@types/sinon":"^10.0.6","@types/semver":"^7.3.9","simple-git-hooks":"^2.7.0","@balena/jellycheck":"^1.0.0","@types/json-schema":"~6.0.1","@balena/jellyfish-types":"^1.2.26","@balena/jellyfish-config":"^1.5.13"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.290-renovate-internal-patch-4f44b638aee8b4ca5b061a185af89d0bd6df8ced_1637560575089_0.47133296867555363","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.290":{"name":"@balena/jellyfish-plugin-base","version":"2.1.290","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"Apache-2.0","_id":"@balena/jellyfish-plugin-base@2.1.290","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"e8fc8c76924f1353de93835bddb40abac4880dce","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.290.tgz","fileCount":19,"integrity":"sha512-lgNkGmJ/wBsxUfnHFZOmZ3hxPBzUatjqGeB4dHpCgCgQl35fxc7gGj83g4wCCnbcvf/UoxCAO6+CvHKrIWVLkg==","signatures":[{"sig":"MEUCIQCOFZiguSSVD7y1ZEVKqp14FizDaeWq7iSMNc07IzaYSwIgROBq8Mbxz48nWpi3XE7vlG56DqKni9Fk7caTLL9rJmI=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":78232,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJhm5cqCRA9TVsSAnZWagAAv+cQAItpftGHt1/SQdw2R5n1\nXu8ONwI5bGVLB0ta/b54/8S95PfuZVGNixFJM29G9RR1J6kjS/0bjNIMC113\nTxviXA+J5M1xOjDPxJ5MvUtd+uRA9977tm1FEudrcu+FmqR4PLyfoEhZIcbA\nnk36h2b7OBZYoA98IOHCZ2GdRsNV+KuQphts6B1WFB2EtgcqwMefymLJfvD+\nttH7AjUCQu02zOTCx7lTIwl3dVfr9sQ7YQ/Tw0ePiIVRpm7cFm5ial3rk/H1\nwYvCDhuBGGD17PYnbtYImh8JZSxw3DePKKsc1f2ngLdmKcQYRYiEseaTkPG3\nmvKNLP0U0TwVr0L36UaQIrT3mBg1UJIlcdIdrBw9EfJr2+27++dzUOg7/ozz\n+iZRQBfIVAr6b5Qo1bgiUCVcCZN1TzXvfHmBbbMoXOeKO9AstRSYzRZPGXrq\nLUY8DxWVQXKCT8ZGuifw0oc8QvrITwDEQtuS1Okh/6mS+v5V2cGZtle1ampb\nAC4egUK35cX39AxGC1LPOmmS64VzTgVKXrIzyhhzpa28Zj62fvspHIjR41BY\nmyV6qDE0mQSVBrUTN6diostIwIJsOIOizKUFLN8o3l9lOmp6q/4moVrcC+iq\nu4zLmRxUtCMelVCRFDB8eM6/IQF3APxAB4WfSmaSTvwDDSWS50sYLga8NYnG\n8oTX\r\n=q1Ha\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=14.2.0"},"gitHead":"14d68e1834c4481467b01062aac3c4162935ed14","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest,typedoc","test":"npm run lint && npm run test:unit","build":"npm run clean && tsc -p tsconfig.build.json","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint:fix":"balena-lint --fix lib test","test:unit":"jest"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"versionist":{"publishedAt":"2021-11-22T13:09:38.111Z"},"_npmVersion":"6.14.15","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --fix"]},"_nodeVersion":"14.17.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.4.0","@balena/jellyfish-logger":"^3.0.134"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^27.3.1","sinon":"^12.0.1","deplint":"^1.1.3","ts-jest":"^27.0.7","typedoc":"^0.22.9","depcheck":"^1.4.2","typescript":"^4.4.4","@types/jest":"^27.0.2","lint-staged":"^11.2.6","@balena/lint":"^6.1.1","@types/sinon":"^10.0.6","@types/semver":"^7.3.9","simple-git-hooks":"^2.7.0","@balena/jellycheck":"^1.0.0","@types/json-schema":"~6.0.1","@balena/jellyfish-types":"^1.2.26","@balena/jellyfish-config":"^1.5.13"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.290_1637586730436_0.11025739106129828","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.291-renovate-external-non-major-bff17c4060c1daf2601af38258cfad8013d153c4":{"name":"@balena/jellyfish-plugin-base","version":"2.1.291-renovate-external-non-major-bff17c4060c1daf2601af38258cfad8013d153c4","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"Apache-2.0","_id":"@balena/jellyfish-plugin-base@2.1.291-renovate-external-non-major-bff17c4060c1daf2601af38258cfad8013d153c4","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"2512048ef3ca03f13f581a80a8c1951bfabef58e","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.291-renovate-external-non-major-bff17c4060c1daf2601af38258cfad8013d153c4.tgz","fileCount":19,"integrity":"sha512-y1jlmIB3HL5g3ZuW6NE2m0SFMcWMp1h/D8RcXFaU/6D0gnmI0jwxUbtK5jMhzbnkkPe8mz8G96sdL41xK6guUg==","signatures":[{"sig":"MEUCIA2BuuWthKOiuAet+Fd//Ebu3VZ9ihnH22Xp4yKcUUJ1AiEA2jQilOsomdOgLlPuT/stKLurHWZ3jwInZN+dhrIyGmI=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":78377,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJhm5iNCRA9TVsSAnZWagAA+5YP/3TRViGFyUUWjrpctrHp\nhQR2S+iIYwvL3PQxG5OZApQEIUxsynGSRnta61PN5qBsja9PTah6Jv5QUluS\nBDOZJPoV/GxMoje0BpG24JKvlCYgCj7lI/34T7l+xXieIWWOCgb2wwnYnWaG\nzLs71V5hcHP111uEQyMWpArXJkMVpiZ0uue+JDiKjlUKeERpRrhby8vIPwEN\nKCFXQw2j/zb/Sq/eam50nWwOe6KzmNkkaVHPj+uwFK21SqGpFhBp2VBEX7ny\nHpkNPwcZ5Fb72P1iDMw7hMET26ff3Fgp2GOGaQV9E/DO/bWblGSHVKr2seHK\nvscHKeHHXforrRPzjwgdqXT5HPKucmNMh52/yK+SyuldYTbCTMQTpGXafPM7\ne90dc93qwzxuUkABdb24nKmq7qW6pYuHrcfmDpqi4RYAmAzTZqjlo6Tl1ktf\nE7kIp69BQ5xFM3/Wk3zEWOp2M7XYv3josPXUQCnxRfN1grhswMToxOBHKFZz\n9mUKZQ+1SPnso0zFN1ufNK1wU86YWLKrNxSsoCEyQjCqXvseRhzaNoBfUAlc\nCSJbDisBWmu6mHxSx6asPrt8sM5qMC0wmeKdPVNMFiDUOpnksUXBDzYx4GDJ\nXRaR2G758jD892SfgXUUcfga64csJSf7ropgjd0rhL5UQqFjYfs9Xbqxl2DY\nlqTz\r\n=9QyO\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\n[![Publish Documentation](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml/badge.svg)](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml)\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=14.2.0"},"gitHead":"bff17c4060c1daf2601af38258cfad8013d153c4","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest,typedoc","test":"npm run lint && npm run test:unit","build":"npm run clean && tsc -p tsconfig.build.json","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint:fix":"balena-lint --fix lib test","test:unit":"jest"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"versionist":{"publishedAt":"2021-11-22T13:13:05.510Z"},"_npmVersion":"6.14.15","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --fix"]},"_nodeVersion":"14.17.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.4.0","@balena/jellyfish-logger":"^3.0.134"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^27.3.1","sinon":"^12.0.1","deplint":"^1.1.3","ts-jest":"^27.0.7","typedoc":"^0.22.9","depcheck":"^1.4.2","typescript":"^4.5.2","@types/jest":"^27.0.3","lint-staged":"^11.2.6","@balena/lint":"^6.1.1","@types/sinon":"^10.0.6","@types/semver":"^7.3.9","simple-git-hooks":"^2.7.0","@balena/jellycheck":"^1.0.0","@types/json-schema":"~6.0.1","@balena/jellyfish-types":"^1.2.26","@balena/jellyfish-config":"^1.5.13"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.291-renovate-external-non-major-bff17c4060c1daf2601af38258cfad8013d153c4_1637587085600_0.7941449964890612","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.291-joshbwlng-bump-types-jest-c5306fa6af6c823c4ddc983221b60e607aefbe1d":{"name":"@balena/jellyfish-plugin-base","version":"2.1.291-joshbwlng-bump-types-jest-c5306fa6af6c823c4ddc983221b60e607aefbe1d","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"Apache-2.0","_id":"@balena/jellyfish-plugin-base@2.1.291-joshbwlng-bump-types-jest-c5306fa6af6c823c4ddc983221b60e607aefbe1d","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"c8fbdf58375f39aa526461b74b39576840295fe9","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.291-joshbwlng-bump-types-jest-c5306fa6af6c823c4ddc983221b60e607aefbe1d.tgz","fileCount":19,"integrity":"sha512-0bBSmUWPrTDEyW7GtPsC4BmQfxkaS3Wqfa0a3MkbjorAGgH7JNapXl9asGKUxj64A4x7WpuD9lDjxuSPtR9avA==","signatures":[{"sig":"MEQCIEPKkKz+AilLes9/NtDVLwbJH+1X4BqrsHVBIsB0dRspAiBCfl52CNH5/YEQXE0RuW6+9Y6ObiME6WBUvVuxRpqveg==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":78370,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJhm6HJCRA9TVsSAnZWagAAiuUP+QBD4fHJqHkIjYryWUH4\nbdcmDS+ljPnEetfBj8yOqInjY61yJ7j2Z3+iZzpQlvDUwNT/U+Uk9ap70AcM\nYsX6sVJjt5bIDmCezozxbnSuETmON4aLLP1PIp/oTUiDEKX5qDnO19YASUqf\nMI7zHaKJyNk3R5wKiYpGU+KRRWsTi+z2iZcisymwU5GVeCLL9nJhS2h87EAW\nMzcGFb12A4OaruUPMQGLvgSaw8p0Ny7hGLoTvN56xIzUv4kN3rSXzKHPWrt8\nNHYRgqXJfKWjs7vT/cKdWRgm9FH4riqJFWyQ0oPa7T9RsqRYpzdDyfkkeIZo\nHrJCngMkIvEGekoyOTonRXbgXyUEnNaTS+zHuEhPvPNWp/iZLHq0e5aibjt9\nK1onD6fmgHNe5+9WdDR9D8Eehsxgg3E6xzgpHhc+yzWAl/6Y8ae4O1sNpWY4\n8+G3xxlwUGyLYXp2gvIR1rWylxuV50CE+T8uSvjCYXIIo2WkTfPho6b15LvR\nixd8iBxeBDfDNNMruA3tkY08hHmlZYLdMMHG894+kf88hVBisOkmeOVjTwlT\nTdIxdSQWNj4OQ860f36BG03Ync113a4tAp4Sn/dTDhX7SPzjwh6W/OAnfb6i\nNu/4MkPvmVqFacPoVxwuYSChe+DmzUdWV/k7AtLPe8AoOiCs9iXISghCvum3\nU4OD\r\n=Q0JL\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\n[![Publish Documentation](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml/badge.svg)](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml)\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=14.2.0"},"gitHead":"c5306fa6af6c823c4ddc983221b60e607aefbe1d","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest,typedoc","test":"npm run lint && npm run test:unit","build":"npm run clean && tsc -p tsconfig.build.json","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint:fix":"balena-lint --fix lib test","test:unit":"jest"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"versionist":{"publishedAt":"2021-11-22T13:54:47.914Z"},"_npmVersion":"6.14.15","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --fix"]},"_nodeVersion":"14.17.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.4.0","@balena/jellyfish-logger":"^3.0.134"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^27.3.1","sinon":"^12.0.1","deplint":"^1.1.3","ts-jest":"^27.0.7","typedoc":"^0.22.9","depcheck":"^1.4.2","typescript":"^4.4.4","@types/jest":"^27.0.3","lint-staged":"^11.2.6","@balena/lint":"^6.1.1","@types/sinon":"^10.0.6","@types/semver":"^7.3.9","simple-git-hooks":"^2.7.0","@balena/jellycheck":"^1.0.0","@types/json-schema":"~6.0.1","@balena/jellyfish-types":"^1.2.26","@balena/jellyfish-config":"^1.5.13"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.291-joshbwlng-bump-types-jest-c5306fa6af6c823c4ddc983221b60e607aefbe1d_1637589449142_0.8294426021648875","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.291":{"name":"@balena/jellyfish-plugin-base","version":"2.1.291","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"Apache-2.0","_id":"@balena/jellyfish-plugin-base@2.1.291","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"595fa31a75e725602f4fcce3fb1465692e1db452","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.291.tgz","fileCount":19,"integrity":"sha512-w5lyJtHPpCE6BDAAz5rO+Cjt/0jYjTSf9b0S43Zf2Yvf17ajnD5N+32hl7/1M1O8DrfR587maNJzHnMzs1bbxg==","signatures":[{"sig":"MEQCIHp2+C9dWrSkG4mcrIXDC1/IfYuwIsxlpv/Qy9BU58DQAiAntUq9NF1bLet7aiSxQez3/OUd7we08wVuzI6N8v2Jzg==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":78303,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJhm6KoCRA9TVsSAnZWagAA4fQQAJiYnHFeGxbxHes0a7zI\nXDY4vFpDt+ZMmHezkxP6udF8+6gayKCZ6IM7w8JMPUaB0fRkVNDyi/FHF0FO\nGk1XaMV5oacpdIPoW/s7O0kqBBnRFHqlW1JsYHEnbBTlw5c6w7Mpy2GwBM++\nqtywA8mfy78BHB8Vt7UrNhvTd7xSOIkptKtcPYOeEvhi17HhD3FlgUFEFdmu\nzYeM3HDKptPOx33WA0lfAhGVXbVx4qUiqJzUWvFJGVfZi3guW7tRFIbtPuUf\nf/heOJlEmplU20S52+B3h/HbRu5+MqyofnL0uuQMiw5Zk4/+YrnLPiEATakm\nz7tSiDslUO3RU1w0BD7uNAtJC6pg20wcsKMQKjTfPTfN6TsoXTspTGDQPNet\nG1Pl+Plk338YqyO6CsxUcNwI316u9qJ8Oa0BJyVUe/b2wm1V8urnhQOl2sKU\nI2tt1OG37WiAhod7Gb4vp0V//gO6QdPa+tlZuf4ZlCnZamM1Olw6GiXjvgVl\niEq63gVvSg7bg/i48qkxEEmyOjEpKIR8K2L9NjC/0oEndvmMtLnEQ+3z7XbK\nWaDWeBlaI8eQ5ICqjzOhV94wqnoWRnxa2LEFmFKFse94UlRao0Bq0spSdipb\nILwzlNlN1FRyHQrzUn9HKNYMDE3RJGMGW9xFj8OL29CAfdP5yg7AKZbELFsU\nfBW6\r\n=UlBh\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=14.2.0"},"gitHead":"55a781ffbb2b589dfc98a7b1466da5764588dd59","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest,typedoc","test":"npm run lint && npm run test:unit","build":"npm run clean && tsc -p tsconfig.build.json","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint:fix":"balena-lint --fix lib test","test:unit":"jest"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"versionist":{"publishedAt":"2021-11-22T13:59:12.308Z"},"_npmVersion":"6.14.15","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --fix"]},"_nodeVersion":"14.17.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.4.0","@balena/jellyfish-logger":"^3.0.134"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^27.3.1","sinon":"^12.0.1","deplint":"^1.1.3","ts-jest":"^27.0.7","typedoc":"^0.22.9","depcheck":"^1.4.2","typescript":"^4.4.4","@types/jest":"^27.0.3","lint-staged":"^11.2.6","@balena/lint":"^6.1.1","@types/sinon":"^10.0.6","@types/semver":"^7.3.9","simple-git-hooks":"^2.7.0","@balena/jellycheck":"^1.0.0","@types/json-schema":"~6.0.1","@balena/jellyfish-types":"^1.2.26","@balena/jellyfish-config":"^1.5.13"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.291_1637589672387_0.014001334003350685","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.292-joshbwlng-bump-lint-staged-5a4c273f463bd55b0a484c2fa5ef8ad1aa987c23":{"name":"@balena/jellyfish-plugin-base","version":"2.1.292-joshbwlng-bump-lint-staged-5a4c273f463bd55b0a484c2fa5ef8ad1aa987c23","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"Apache-2.0","_id":"@balena/jellyfish-plugin-base@2.1.292-joshbwlng-bump-lint-staged-5a4c273f463bd55b0a484c2fa5ef8ad1aa987c23","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"7812e0f0edfcf1f09398308f0fe5b8c9d2cb9db7","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.292-joshbwlng-bump-lint-staged-5a4c273f463bd55b0a484c2fa5ef8ad1aa987c23.tgz","fileCount":19,"integrity":"sha512-f0y3j0gR5RRGDm4EC48tWixg5xfWSB0I8E7G6Hiixtsp1jPnp0Yk/Ee6lyRZOSYgaaHyeGkGw4gJrKrTEvz2CA==","signatures":[{"sig":"MEYCIQDHERzieqzhWhqwGZKnmBfDFfiY5wanY59eMjNtobZijQIhAIQ/RNUVB/wuhrOWFJi+2ZPJ0VKJcqCccf+2GrzbFVna","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":78442,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJhm7CkCRA9TVsSAnZWagAAWfEP/0+zagqli/Z+2j1YDgq3\nH0MgtJL31kQG3eOMhoc2hFmpiI4o5gu03Jde1gUa+o/wBTCY2RC4yJXKzV2V\nPmlwxwRg2BlHgTxqQZ9KmJo3mIsNRK00biB4/vRwkpSNCVzLjjAKabag4xFC\nLo2qC+ydxsg1sUhFXdyZ58PlEVATd2O/iQd70F/ZCGdFE5KwUmkLIKf19RLa\nrv9R1wukMKFfcSU4LsGJ7I9Z2a1aRQRovSS5hVaOojx08WFfsFQjN6ZMdeN4\ng592JZ/5JB7YXjiSF3yi/Da0WDjUODmdBwgCbBoQ/88RYMLRSdcqNl1yBlUl\nd+x7coxPOd26doRXfYMWNNwInOFqmmu/oshbNfWf0PchICZFao1MvOznL/Zz\nD+KoIbmcm8xJcKwkd2bOlfYCSuwZpC+g5d95S2veZcaUon7UrRasLkr7d3vs\nSYpgESg42AdxcbBJXqHl6kjhX9XP47hVdwyDbMkJvDHLSbPUOQf5cm8dqOGv\nb51OosmQvisaRCi+BNlcmw5rhEnrQqbqksU9P63PvIQjR+6yD9xOBjVRYSah\nIxoytYdgEJt3Uwn5koE0KMRf1/Q2dU9rEN/kXgMahpsZj2S9AERM1GVa/uaR\njsQVKPAaoQN9PxHMfrGTortg4AoPdIGYVXcR9udvkvd/IDL6AgBRdp2iimuz\nB/S7\r\n=27rG\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\n[![Publish Documentation](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml/badge.svg)](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml)\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=14.2.0"},"gitHead":"5a4c273f463bd55b0a484c2fa5ef8ad1aa987c23","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest,typedoc","test":"npm run lint && npm run test:unit","build":"npm run clean && tsc -p tsconfig.build.json","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint:fix":"balena-lint --fix lib test","test:unit":"jest"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"versionist":{"publishedAt":"2021-11-22T14:57:53.169Z"},"_npmVersion":"6.14.15","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --fix"]},"_nodeVersion":"14.17.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.4.0","@balena/jellyfish-logger":"^3.0.134"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^27.3.1","sinon":"^12.0.1","deplint":"^1.1.3","ts-jest":"^27.0.7","typedoc":"^0.22.9","depcheck":"^1.4.2","typescript":"^4.4.4","@types/jest":"^27.0.3","lint-staged":"^12.1.2","@balena/lint":"^6.1.1","@types/sinon":"^10.0.6","@types/semver":"^7.3.9","simple-git-hooks":"^2.7.0","@balena/jellycheck":"^1.0.0","@types/json-schema":"~6.0.1","@balena/jellyfish-types":"^1.2.26","@balena/jellyfish-config":"^1.5.13"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.292-joshbwlng-bump-lint-staged-5a4c273f463bd55b0a484c2fa5ef8ad1aa987c23_1637593252130_0.9023909478728169","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.292":{"name":"@balena/jellyfish-plugin-base","version":"2.1.292","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"Apache-2.0","_id":"@balena/jellyfish-plugin-base@2.1.292","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"17ac8228e49d50ba5ee8dc0e6831764eb637d1c8","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.292.tgz","fileCount":19,"integrity":"sha512-GvcqLuvHwSokx8+2bFZSu5vbiPWjd0ck3UMyz8FzSZme2GIZ6JBfcIiVDkxW/i98SRlQ7/8ZWC2QoZj98DQ6Yw==","signatures":[{"sig":"MEYCIQCXyIUbL+jDRMn1jJL2U54wY5YQJPvwOihamdVbU2lkSgIhANaNaYSDDWA0a0q/ya/AoK7m8iC6W5hzM4sOOd33RAIi","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":78374,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJhm7GDCRA9TVsSAnZWagAAhWsP/0SbE8Osj/yI1xUFmWep\n2xONHzWgcPvTt5hvFllStxnjCzo0YplpnrfhsK14Y3Siqk60ybJmfhpxTm59\nCzsxSH2LBaENwrRA8wimR8JJgdnVnTd0YzaGv3Ml2a3B6sKGL06XBWb2CFa7\nxzH8F6N1OBpdvDeWMG/HfmqDY8qjVr7SozdNLjlcY/aBkTPhoCDPxSvxOj8E\nl7OJTHUSTlLjLFbJMVSHD1qryeRd6lUO1CtnH1UJ2zZVvh5TnO/spHzWAxyz\nnYvEFqpBG510/Vmzh31ulz+jgkTdHMOneONInQjyQzeZ09oGYeilDwXTREXE\nbksyX7B1RHkhQX1pi0OAI7RBJkRS/G17IugB9BnjTPSYvqwJ+64UcRIx+hSx\nURBm+yp6/lhq8HVhUX8XyHy3o8baTXL8o94RZL/xfmWmpW+4a8DOcggGDGlX\nw022F4KuvUnO9/WoK0cPy1OuKobT2vxttjC/n+RFNvgWFqdjk7z+8rpTgMd4\nhbsq7+SxaXS+zplni0P7j2AT8KVvY3juUpCX+lOZW2cOdufAGq1WvH65y+Kf\nm9zWojIlsP/D5/jX4xKToYhUkCR+YHA0o2G2gleWQXeYhPpnEA2TOhtHZ5xv\nQO9dEGSDPIqhJ0f9wDp15hnLOndtPUIK7f1T3aOmiht8UOhY1YN3X4TmC4Tv\nP89u\r\n=Xu3J\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=14.2.0"},"gitHead":"1bbe557cf5c71577b901948ab4e3ae4792e44c9e","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest,typedoc","test":"npm run lint && npm run test:unit","build":"npm run clean && tsc -p tsconfig.build.json","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint:fix":"balena-lint --fix lib test","test:unit":"jest"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"versionist":{"publishedAt":"2021-11-22T15:02:36.628Z"},"_npmVersion":"6.14.15","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --fix"]},"_nodeVersion":"14.17.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.4.0","@balena/jellyfish-logger":"^3.0.134"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^27.3.1","sinon":"^12.0.1","deplint":"^1.1.3","ts-jest":"^27.0.7","typedoc":"^0.22.9","depcheck":"^1.4.2","typescript":"^4.4.4","@types/jest":"^27.0.3","lint-staged":"^12.1.2","@balena/lint":"^6.1.1","@types/sinon":"^10.0.6","@types/semver":"^7.3.9","simple-git-hooks":"^2.7.0","@balena/jellycheck":"^1.0.0","@types/json-schema":"~6.0.1","@balena/jellyfish-types":"^1.2.26","@balena/jellyfish-config":"^1.5.13"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.292_1637593475073_0.6555551469248921","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.293-renovate-external-non-major-49b9ee74d10a9379ac38f8c4e99e30698291de42":{"name":"@balena/jellyfish-plugin-base","version":"2.1.293-renovate-external-non-major-49b9ee74d10a9379ac38f8c4e99e30698291de42","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"Apache-2.0","_id":"@balena/jellyfish-plugin-base@2.1.293-renovate-external-non-major-49b9ee74d10a9379ac38f8c4e99e30698291de42","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"d29551fb369802b89b17cf8fe2046bd1edbfcb5d","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.293-renovate-external-non-major-49b9ee74d10a9379ac38f8c4e99e30698291de42.tgz","fileCount":19,"integrity":"sha512-q82Lyl6NAAg9BhIN9Lt7G2rRv1X5UHidyTGi/cxUaQSp3m260u2SUr/khDLDBCEXbG3fmkm6AuoGXwkuj2k2TA==","signatures":[{"sig":"MEUCIQCrYFx8AnUesEwVnwOCtS/V9PLmVMD967fobJ+vACnm7AIgJEMfkWV+mw16E/SltD/C7JQ9zp0RVRS5k6jAiqeQymU=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":78532,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJhm7HoCRA9TVsSAnZWagAAN54P+QHUzD3VFfopUw1bTsJA\n20YfbqgTGYDwXTouf6Zg4Fw+sJ2ERP2cAiP00ifJ7+MLCgo3EuI36vlRJUZP\nWzDpKcctDT8AJgB72fVNAQEvW9gKJ8taOFsI23FkxoNbQ5UAaG8PMPpYUxYB\njnudmQpRtJillHnz7VhmfJ1gM8GbgQmtInGTPbo9uNJdKofLC515CmAT9cCE\naqTD6DC0O9K0IS/3pQGn7EPn5Qj4Y9ppMwVDcFhiguWht6qf/DjbKoWW+NWz\nGMy3cYM+aXWNirUnF7JJzMKkHOuzC9WpepDRwY0pEA0C+oKtFkts3XCADLVB\n8iZcnxckL0vIDUeI3LyZKPXdqb/xYh6IxqZUjwUAB5QLlPXnVuddoH8JgJhC\nkY6bs3kDvZ/ihMtx0tksmhNWXApSjhCMcSe57Jm4F/aEEOUHs622xqGJ6Ob1\n/dVZAya5Q6PmnoY5WlGBszdHgvvQK9QMa4cl5maOylOIkqSxvbGz5+pJmbb1\nxgoYBofRkQd/vIdSWWo+hA6gMOnHso/sUiZ30g0559aVQtb2dXIoQOA9jFKv\nM8IV6SoSLdihKFmtJeEJmj17OMLur4LG1HYGaa8EuqD93P3EJAtPeS+KgoFO\nIhWFyixIwj6U/WOTh+vUZK5wpQMJ9ecyAzmxpa7kNdoO9Jf3iPCFdqdyBhQc\nsPev\r\n=iz1x\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\n[![Publish Documentation](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml/badge.svg)](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml)\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=14.2.0"},"gitHead":"49b9ee74d10a9379ac38f8c4e99e30698291de42","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest,typedoc","test":"npm run lint && npm run test:unit","build":"npm run clean && tsc -p tsconfig.build.json","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint:fix":"balena-lint --fix lib test","test:unit":"jest"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"versionist":{"publishedAt":"2021-11-22T15:04:14.656Z"},"_npmVersion":"6.14.15","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --fix"]},"_nodeVersion":"14.17.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.4.0","@balena/jellyfish-logger":"^3.0.134"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^27.3.1","sinon":"^12.0.1","deplint":"^1.1.3","ts-jest":"^27.0.7","typedoc":"^0.22.9","depcheck":"^1.4.2","typescript":"^4.5.2","@types/jest":"^27.0.3","lint-staged":"^12.1.2","@balena/lint":"^6.1.1","@types/sinon":"^10.0.6","@types/semver":"^7.3.9","simple-git-hooks":"^2.7.0","@balena/jellycheck":"^1.0.0","@types/json-schema":"~6.0.1","@balena/jellyfish-types":"^1.2.26","@balena/jellyfish-config":"^1.5.13"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.293-renovate-external-non-major-49b9ee74d10a9379ac38f8c4e99e30698291de42_1637593576602_0.9388781038983254","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.293-renovate-internal-patch-b7441e0701e494f05c9a21326f0a3def35a66098":{"name":"@balena/jellyfish-plugin-base","version":"2.1.293-renovate-internal-patch-b7441e0701e494f05c9a21326f0a3def35a66098","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"Apache-2.0","_id":"@balena/jellyfish-plugin-base@2.1.293-renovate-internal-patch-b7441e0701e494f05c9a21326f0a3def35a66098","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"57cabda6deadb849de3f4d466502f46a9e8dae27","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.293-renovate-internal-patch-b7441e0701e494f05c9a21326f0a3def35a66098.tgz","fileCount":19,"integrity":"sha512-tuFiZYHF1vFkvqWAm9QzLboBI683Goy4mOizJFgWRu9V6DN/eCdQKSaFb5zNlXfp5Jjk5ou5mgxFdeqHP79ecw==","signatures":[{"sig":"MEQCIBpaHagj2+XjAm9HwRofQKOB6esKDRi1vbwEaBupaamOAiBQ6BsH+1ZZvc59uaVHUItRm2sDebGj9VkUs0+op2m6tg==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":78543,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJhnFOjCRA9TVsSAnZWagAA1vgP/185Ju1kwG2VqtrAnJEB\n5Jpwa6atu53Wwr48jELTLg6gNU+lqzBJucevGqIMYIa3kOU6dYpOd7pe4NvL\noIelhnaNP7p58utuKJauEpjUsxtGRruxVl1h4CWOOwIroC6TNpudhkywGXn7\nyNNwaYiE3hfvUZzeyCoxwki4vGzlIdOu1Ppv8hWRXiMGT7c6spGxd5U+H+B5\nXpI3w3Y+hrdW1mWaEw7Ul18gLfBvGFJmoe/NuDO9jKLHeVkRBzw9gPIxMbfs\n9Etsa74QV7q7gd4xkg8m54fRLFxoJ65ldTBw9Amj4Nc3aY5wtqUS2TTuie99\ngSf9l+cPZojjF/Y9gG1tXKjvIAV2IwhXWhV7wzW/8tcBeTV6aq9ZWcQ8Tziy\njOGBVw/laaM3Ik9mKTbn/FSnkrDtZp9F+CKxGEZhUiWCQYTdDir54AarUUnp\nSEZi8algkqh/+NqzFE6Ns1eSGcmLeURD3XjygT2k3X0wL3immXMPgYdgHSdv\nCYusvrSEnfDVb2dOF5DX5UnNOdK5r0p3jDOMdSN8zKOStlaw7wpo7XeyLPTh\nbyMP1eDf05Ztm9ajykI2B8BQa2ljrrIJAi0A1mJvtbuVaL/2J/oEF8IjrX6P\nTZGaSDFZe8yjwud/QXhcKkxjNkvKsW2ygNJsj+hdMB3z+ZsjPL2XwEwZKq4T\nYUQr\r\n=uy8I\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\n[![Publish Documentation](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml/badge.svg)](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml)\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=14.2.0"},"gitHead":"b7441e0701e494f05c9a21326f0a3def35a66098","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest,typedoc","test":"npm run lint && npm run test:unit","build":"npm run clean && tsc -p tsconfig.build.json","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint:fix":"balena-lint --fix lib test","test:unit":"jest"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"versionist":{"publishedAt":"2021-11-23T02:33:38.909Z"},"_npmVersion":"6.14.15","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --fix"]},"_nodeVersion":"14.17.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.4.0","@balena/jellyfish-logger":"^3.0.134"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^27.3.1","sinon":"^12.0.1","deplint":"^1.1.3","ts-jest":"^27.0.7","typedoc":"^0.22.9","depcheck":"^1.4.2","typescript":"^4.4.4","@types/jest":"^27.0.3","lint-staged":"^12.1.2","@balena/lint":"^6.1.1","@types/sinon":"^10.0.6","@types/semver":"^7.3.9","simple-git-hooks":"^2.7.0","@balena/jellycheck":"^1.0.0","@types/json-schema":"~6.0.1","@balena/jellyfish-types":"^1.2.26","@balena/jellyfish-config":"^1.5.14"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.293-renovate-internal-patch-b7441e0701e494f05c9a21326f0a3def35a66098_1637634979196_0.9634070593206774","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.293":{"name":"@balena/jellyfish-plugin-base","version":"2.1.293","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"Apache-2.0","_id":"@balena/jellyfish-plugin-base@2.1.293","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"011976cbf551e9d0234cebfba6d875788fa58436","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.293.tgz","fileCount":19,"integrity":"sha512-6Koz5fixB9LJuCZyrj/jrMQd7qqDRlhAQI52Sq3WPMbUItc03PIp7VIUKz9VZ8hikG0OU/rEA0Bdp4I+wjrzGQ==","signatures":[{"sig":"MEUCICLWXutbfHYRVQbzbUaZMyvW+LNtMYKYl9Ny/U0Bshf0AiEAvAhcd3M0r9qSXsD3YUl//CZwxFUtMWFG65CC9nWG68Q=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":78478,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJhnFRRCRA9TVsSAnZWagAAPYEQAJXhSYDjU54zo1M6zU04\n61eACqRVacCf0F+hRKNq8EsgEE+CV/ccZG8NIvoTWe4opoIHdIAKw3lUdgt7\n46fCcrawu57SrJvwGbLnw23qvzsRyu+vD/szk+H/evi+t4VMmyaN/05xr2os\nMeeh7FG+gQrrHp8fRJ1IVdIMxs29dgKFyYdlE3tN+oV4ju5W5UXFR3dmiVE6\nE29oMF1sfuyml8cGBZxslV2uD6qji1gVdJXvWDA8nuLKDQXkEhDmn+q4OUlC\nZj1QGof/emCUW+O71WeLRqqj06SjB1wc7fdXuFrqvr8wryEG+o85LhtcAVpb\nwumnS0OQI0CmWxWAASSqaAK+LIDV5DNzIl8AH18fGpkyul5S7AQz4KX2nz8p\nntmfcg1sGlSHT9hRZTqa6CT9USw/QCtW0gfEaCTKMAvguQrVVCPTW/Storvy\n3Qg16MiT/J6NFxTRRcnjY5jwK9tkL5aObOsI3nNbmAYYUxPgrMu/7vp3Wntx\nfmLjkRedHtmM0PdQVJyK8Sb9nUExkkH8ygAmkZrygq0s7V0r/zjT3xZhcc0s\nM/cw7F1NqIvDkftXTHzpLnyYXrxaT6fnH5+czxFfXW0z788+Em9iuBbRxICY\nOvHscG4rGVjjIOLHWu1eswhG8/xO6AVNJD3vn+hgj66WIEPkuWXZV/Ih9qgY\nrZ+f\r\n=2M4E\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=14.2.0"},"gitHead":"08a6b19cb29800d1d5ec313cd7eac50ca1b254ad","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest,typedoc","test":"npm run lint && npm run test:unit","build":"npm run clean && tsc -p tsconfig.build.json","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint:fix":"balena-lint --fix lib test","test:unit":"jest"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"versionist":{"publishedAt":"2021-11-23T02:37:13.109Z"},"_npmVersion":"6.14.15","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --fix"]},"_nodeVersion":"14.17.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.4.0","@balena/jellyfish-logger":"^3.0.134"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^27.3.1","sinon":"^12.0.1","deplint":"^1.1.3","ts-jest":"^27.0.7","typedoc":"^0.22.9","depcheck":"^1.4.2","typescript":"^4.4.4","@types/jest":"^27.0.3","lint-staged":"^12.1.2","@balena/lint":"^6.1.1","@types/sinon":"^10.0.6","@types/semver":"^7.3.9","simple-git-hooks":"^2.7.0","@balena/jellycheck":"^1.0.0","@types/json-schema":"~6.0.1","@balena/jellyfish-types":"^1.2.26","@balena/jellyfish-config":"^1.5.14"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.293_1637635153046_0.9317709451580078","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.294-renovate-typescript-4-x-ef587dce8d31cee9421db4dd9d57a7783c20fd41":{"name":"@balena/jellyfish-plugin-base","version":"2.1.294-renovate-typescript-4-x-ef587dce8d31cee9421db4dd9d57a7783c20fd41","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"Apache-2.0","_id":"@balena/jellyfish-plugin-base@2.1.294-renovate-typescript-4-x-ef587dce8d31cee9421db4dd9d57a7783c20fd41","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"9cd6bac426a7acb7ee8fa5a3a5119efa27aa5651","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.294-renovate-typescript-4-x-ef587dce8d31cee9421db4dd9d57a7783c20fd41.tgz","fileCount":19,"integrity":"sha512-uMrS5jKvFa4pGuyCxuIUwoy+7aYg2cz/rd96QUIxyCILLTR6YJOzQu/u82WAm2Z+gogeH8zJRp6kDv/GwAU8Ww==","signatures":[{"sig":"MEUCICg/BEiIpyGfSLzNQK6f0+UbXQhA7vuLVGD5QXGCUbTCAiEAiCjcC0bTABqiEPhuhovaIaU7ken8VdJ4xu7zX7ywuv8=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":78632,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJhnFVTCRA9TVsSAnZWagAAYzMP/iq1sE47JYWoNnCKWG31\n0tpUiA73ZDZIeSHgz98Jt2gqtFHn/chMCryF4fTsJAGr0Vr7Yyxhq3AwEpIR\n44EYh32FYgca3IYEpDIXCeosOaJ9pTpO1BZIC+WEf1faIOIQoMsLzLHHLOHS\nuMJhmhhXMjJ9eGxyz34Qo3q0Uc2eAcP/ek1BnjedMoPLT9MXrVfOve4X2lLn\ntm1ULILsceRHwcYnuRlH0NLgbp9E+UMr92/Ofn6WC+E28Qvx+74wLKM4k0XY\nMqOQSPwqj8r88TZxbnZT+xNhbdpzj8CN6UJaGFl5BnQ68Fz8fbfZTL7JOyad\n1bAOzxUBIiYn+E5CTzWiVYxI68AXh0yU6Sny9u6Wx1d1VoMuOyqFz9/1ln9A\niTlz/Q1LCo6t7NKfztwV/v9rFVtYYfGofqaQxXN+UcC6ytltQiaFYzroZt9Z\ntjy3U/UUuuAr1gf6jF3Jxcgtu6+d3sOqG0vctHyXYi4bYyt4b2bEJ9dg1nNI\no5jFQqhOev25xjfQyr58Lttzb9gPlX2BNBJ2eIMdzWw/LuoxSqA4lO1RowjP\ntoX524YPgo0Z1aWMD9ghnfu46H/83hUKwIrEcXUoa4ms5l2Ez6wyE+hN9nGq\n05S7xu0+Ct0INwUkFh/4+IqH+Lqnv9n/MJJukgOph4l0tR7Q5xH3qI9jGt6+\nSDvF\r\n=tR8q\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\n[![Publish Documentation](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml/badge.svg)](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml)\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=14.2.0"},"gitHead":"ef587dce8d31cee9421db4dd9d57a7783c20fd41","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest,typedoc","test":"npm run lint && npm run test:unit","build":"npm run clean && tsc -p tsconfig.build.json","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint:fix":"balena-lint --fix lib test","test:unit":"jest"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"versionist":{"publishedAt":"2021-11-23T02:41:08.364Z"},"_npmVersion":"6.14.15","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --fix"]},"_nodeVersion":"14.17.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.4.0","@balena/jellyfish-logger":"^3.0.134"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^27.3.1","sinon":"^12.0.1","deplint":"^1.1.3","ts-jest":"^27.0.7","typedoc":"^0.22.9","depcheck":"^1.4.2","typescript":"^4.5.2","@types/jest":"^27.0.3","lint-staged":"^12.1.2","@balena/lint":"^6.1.1","@types/sinon":"^10.0.6","@types/semver":"^7.3.9","simple-git-hooks":"^2.7.0","@balena/jellycheck":"^1.0.0","@types/json-schema":"~6.0.1","@balena/jellyfish-types":"^1.2.26","@balena/jellyfish-config":"^1.5.14"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.294-renovate-typescript-4-x-ef587dce8d31cee9421db4dd9d57a7783c20fd41_1637635410850_0.3300410885257672","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.294-renovate-internal-patch-90c4bc97639fc30396cdaf163335c81329eeecf1":{"name":"@balena/jellyfish-plugin-base","version":"2.1.294-renovate-internal-patch-90c4bc97639fc30396cdaf163335c81329eeecf1","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"Apache-2.0","_id":"@balena/jellyfish-plugin-base@2.1.294-renovate-internal-patch-90c4bc97639fc30396cdaf163335c81329eeecf1","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"db0b27fdf520ea98635e1b5189d4215bd69866a5","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.294-renovate-internal-patch-90c4bc97639fc30396cdaf163335c81329eeecf1.tgz","fileCount":19,"integrity":"sha512-kwREIdOIX7uDEfhsZId/e51GrCae6dMSc68iYJdGMhcZ/le9927dmu0qdlxEG79UsOWkS2HkzT9Zq5+0lQ732Q==","signatures":[{"sig":"MEQCIBjdFpkftt7aSWRQGYVV3Q/C4MmQmbYEKCaevMC2+o6yAiBRMEU2TOMJT9ADnDZMOVxby5tEQzACr6PkVX6yJUo1og==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":78648,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJhnHKzCRA9TVsSAnZWagAA3pcP/01PFtiL+qtu2ZqL1m5v\nH9qSqmrCvegRp7zBO8QyhV2dWLitbfrZtM28SiR1Z2rKg//3Si6ofpv2PxCI\nNk6ludJJgab5nQZp+ewNJUeaPPVCr51BRzATsI+5vj2gzHVcmtb3NB9FSHyT\n+UJlRCr4JVjX5lF9VU07/rk/UyvKG85Dt6niKQw3FW6jZ6raJYreUnPkAUJ4\nNZVn8Wm4bIMWqEoMLo5G6vBPbru4p+TG0tyd3MEQN/BoJPjLjOnFcJWadg1p\nnnbI64GKBdCraHZkQm/99QHBjvz1xq+3VQ/3Jn6QWbmJv4TzR+lJ2DSm7x4H\nB+y0qeaJ0PoO5ZE9w3xhdcLoZ1lYj0qCNVO6PikY3OaJ/9ryd3CBe5JHzvaL\n4qkE00UuAIBYrZDRslP8EPIOfRAl9WBIZjYfk+3GtPb5vV0yo6oGu+50+6Y/\nUGl0sxHF7oIJ6ufRFmYYFuj6TXYkYb6Q2Ep5VT1PVWqQCe6QRcb6dTe9Apy2\n/3GwyWCByniADj/1GUJq8Gfog4XMkTb8BgQGWC0OvOY1SlW2UcCFDYBTN4zF\nCzQbqzt7LOpQMOBbvzOpmjjDWZ8mz9vDW0THIKfxMmBDG0A8wHul8lLbatxq\nsbD3ZNh2MRbXtTNgaToSZWZ79kUrUs4yMclDRPJW5Pf745jdxTzRUYjNbNC7\nbtaQ\r\n=Assy\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\n[![Publish Documentation](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml/badge.svg)](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml)\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=14.2.0"},"gitHead":"90c4bc97639fc30396cdaf163335c81329eeecf1","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest,typedoc","test":"npm run lint && npm run test:unit","build":"npm run clean && tsc -p tsconfig.build.json","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint:fix":"balena-lint --fix lib test","test:unit":"jest"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"versionist":{"publishedAt":"2021-11-23T04:45:41.571Z"},"_npmVersion":"6.14.15","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --fix"]},"_nodeVersion":"14.17.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.4.0","@balena/jellyfish-logger":"^3.0.137"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^27.3.1","sinon":"^12.0.1","deplint":"^1.1.3","ts-jest":"^27.0.7","typedoc":"^0.22.9","depcheck":"^1.4.2","typescript":"^4.4.4","@types/jest":"^27.0.3","lint-staged":"^12.1.2","@balena/lint":"^6.1.1","@types/sinon":"^10.0.6","@types/semver":"^7.3.9","simple-git-hooks":"^2.7.0","@balena/jellycheck":"^1.0.0","@types/json-schema":"~6.0.1","@balena/jellyfish-types":"^1.2.26","@balena/jellyfish-config":"^1.5.14"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.294-renovate-internal-patch-90c4bc97639fc30396cdaf163335c81329eeecf1_1637642931042_0.2667177583499569","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.294":{"name":"@balena/jellyfish-plugin-base","version":"2.1.294","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"Apache-2.0","_id":"@balena/jellyfish-plugin-base@2.1.294","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"ab5257bc41e878c34317b749938f4680a2ed7aa3","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.294.tgz","fileCount":19,"integrity":"sha512-AxQzn6B7VLEoVPuv8cdbfViij22t7e5wfpSthn3RN5RobaT2v5vfM12d8RS7EY+x4jztqYnVQwOrBuD0/6AI1g==","signatures":[{"sig":"MEQCIFsH6PMYxtCq7ib+kT7DI/xdoIPdatM19JoKCV2KC/ypAiArMgjDVOJiQ2+5GJiz6xlZyhLB1bfpmYWVHjfWAIeZvQ==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":78583,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJhnHNqCRA9TVsSAnZWagAAe88P/AsxR86/zYLoAPoHb3y9\nVVEQb4CG9ODJbHEO9+fkm0N7rSCgClVQhHO0FgM7chG7KsdbO8vH1aogMma+\nDEZ4uHcvX2/KBYWBh2SZTSBW/mt2lxQncqyOWJSZ02hZ53wm7m/aOoWjT5Pc\nBnCwczIUTSIMH9bF50YJXkZ739sMChM2fv7ODVd6zsCiL2Azv76zRZCyJBcm\n19y13WXGcZa41c+XJSSm2IX6qq2PHJbFuoOpsKwzBduLkZiluMtb/nNw6Xvu\nwbXehcwvCW1YSkm5OcY3DNqp5tnSJCrPl9/AgsrDCvsTbege9CPjOTda4QUy\nrNGtb4fIrz0MBk+262/WRjPfQtvOeKvtbbvlo+2KT4XVavmi/ov6EfK0kCbv\n+i3hmgzov0fXYA2PSHmX0JahD3k4IOiB5ZpNKiPqPe19avQQPFHzuCWCaM5m\noCafT3kKuch3rDd1bUo5Ee0KXPMj1751gAy5MrVMb79APt+5P5hScq5hIeiV\nJZmMjbHg/EbWMTHy8wG+DkGl+vjoxf6nD5AgQ5b+JlWR/l42Gf6pinJIWmSy\n4qxRlmLzE7WhuAPzfSpj3+UPISVApA1JMuwB+CTuG9/9Dd0RSUnOqmdYOaBC\neupGgTxQlWYUkdDBJNXPxOjjVNsqYlP5U5dKu1KKZJnur+/oY74+X0m5kyIL\nE8w+\r\n=EuUT\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=14.2.0"},"gitHead":"a52f3eae160523b7b32eef20a3014d760476d9e1","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest,typedoc","test":"npm run lint && npm run test:unit","build":"npm run clean && tsc -p tsconfig.build.json","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint:fix":"balena-lint --fix lib test","test:unit":"jest"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"versionist":{"publishedAt":"2021-11-23T04:49:54.486Z"},"_npmVersion":"6.14.15","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --fix"]},"_nodeVersion":"14.17.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.4.0","@balena/jellyfish-logger":"^3.0.137"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^27.3.1","sinon":"^12.0.1","deplint":"^1.1.3","ts-jest":"^27.0.7","typedoc":"^0.22.9","depcheck":"^1.4.2","typescript":"^4.4.4","@types/jest":"^27.0.3","lint-staged":"^12.1.2","@balena/lint":"^6.1.1","@types/sinon":"^10.0.6","@types/semver":"^7.3.9","simple-git-hooks":"^2.7.0","@balena/jellycheck":"^1.0.0","@types/json-schema":"~6.0.1","@balena/jellyfish-types":"^1.2.26","@balena/jellyfish-config":"^1.5.14"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.294_1637643114390_0.3252440752372392","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.295-renovate-internal-patch-580fcee14c348c746a44673d5820af580f63e0d9":{"name":"@balena/jellyfish-plugin-base","version":"2.1.295-renovate-internal-patch-580fcee14c348c746a44673d5820af580f63e0d9","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"Apache-2.0","_id":"@balena/jellyfish-plugin-base@2.1.295-renovate-internal-patch-580fcee14c348c746a44673d5820af580f63e0d9","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"8ffdbd3d7d8f73844da59b7449cc618df5a2091b","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.295-renovate-internal-patch-580fcee14c348c746a44673d5820af580f63e0d9.tgz","fileCount":19,"integrity":"sha512-NJtxvkuc/RyNCshs79jwsxn6blco/JgYO564yv5dnjSjw6DJV1uJEgGvpgj1WMqJGmWWQC7Ii8Whk0awf/zxPg==","signatures":[{"sig":"MEUCIQDYyreDGsjaWydGSPMAq/dhkWwx1Iq1inJQbBP1hJbD5gIgLslK23KArYTOlDaIC29CLjc1sfSemry+5hdQ/S/DYno=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":78753,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJhnZc7CRA9TVsSAnZWagAAQyQQAIgPPOHIy4BHIUr+wV6+\noW7y9fgG+4WBUetVPCqo1sBNBOfOdTI8qTVn6XkFAv0ItIQ3oAyyZZLCAK1H\nfAE8gA0ijX1Bf9YfMSarX8p/IwmHYTqW2nekJIE8yqJ1P4fmtHRpp5b2W+mM\nWw8D6ASXRwag4JwmBeZdOVo7+XVIVg2fneGIGG3RNoqyL3z0uiNU85c8Jck4\ngEblc0M8q81lKrOsLz2U1Eyvo8S56gihoug57Ee0/GBICJv0KCJ2eh74Dyqo\nuhbZ2fB03je5ksQ2IQj9aU+TnXuA4VKjJzV8uxM6GSCltcncldsf9/pcHoW/\nYdbJrVsHJbqWsNTuF1WxHrmPtAioXPHankA5T6A/W3AEtJZT4vgrh8Pw1SlD\nX3S2jHwUkP7hTqJvz5DFqSVJcnlugIC02PBkBm+ejgqy75OG6vo05kJuo3wJ\nBHKIPGFGtnpJrNGmIi4H2WZjs2or4FeTb9PyabR3g7UlDJ1kekGA6tRMZ8kK\n6wCqoe2+VVCJ/oHhVbkPNN9lZ+7NiqM9eCAtQBmfI+uXXK/bFQSnBuKBIcfh\npgeGNseQQeNeqUz8oBTO8gZOwixDCrCafzKtDY3xhDDJ7jMA9gWATTQBYfsj\nc+5plhiqx63Ycpy2TzLgonbuykaL2t5k+e4UNznSE9jVcDCxvwVN0IK5TP5x\nUy9k\r\n=eQdx\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\n[![Publish Documentation](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml/badge.svg)](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml)\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=14.2.0"},"gitHead":"580fcee14c348c746a44673d5820af580f63e0d9","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest,typedoc","test":"npm run lint && npm run test:unit","build":"npm run clean && tsc -p tsconfig.build.json","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint:fix":"balena-lint --fix lib test","test:unit":"jest"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"versionist":{"publishedAt":"2021-11-24T01:33:52.193Z"},"_npmVersion":"6.14.15","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --fix"]},"_nodeVersion":"14.17.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.4.0","@balena/jellyfish-logger":"^3.0.138"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^27.3.1","sinon":"^12.0.1","deplint":"^1.1.3","ts-jest":"^27.0.7","typedoc":"^0.22.9","depcheck":"^1.4.2","typescript":"^4.4.4","@types/jest":"^27.0.3","lint-staged":"^12.1.2","@balena/lint":"^6.1.1","@types/sinon":"^10.0.6","@types/semver":"^7.3.9","simple-git-hooks":"^2.7.0","@balena/jellycheck":"^1.0.0","@types/json-schema":"~6.0.1","@balena/jellyfish-types":"^1.2.26","@balena/jellyfish-config":"^1.5.14"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.295-renovate-internal-patch-580fcee14c348c746a44673d5820af580f63e0d9_1637717818968_0.06551117532204431","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.295":{"name":"@balena/jellyfish-plugin-base","version":"2.1.295","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"Apache-2.0","_id":"@balena/jellyfish-plugin-base@2.1.295","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"0d0c6bf2bbd33e6267546396cf8c642f1bd6b0af","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.295.tgz","fileCount":19,"integrity":"sha512-Gsebw4d6TZe8MsToPZy88nsDvuDURIiick8Ma25gDZktTAbvLtBpXkitEHq83ZTn0v9Zm1hOoMkuonTBSDOrQA==","signatures":[{"sig":"MEQCIE8YHYAb6a6WefrD6iid6eASCUVyxN+sGZB10kD/k1OxAiBrze7Z1g+Xa0Doq0croUEnszCMKqGJQgpxPFShoNCMxQ==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":78688,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJhnZf7CRA9TVsSAnZWagAAmPsQAI0SzLNBLEb4kzZoykfK\nDvUwP+cCwabjEpEN14OZstBdsLDbzar+u4pvlrLEmwXHjexIWDDLNuYQEyRr\nYSu/cdcmSxzkTFJGRTN3ji03qPLSps+StLai8F1wQ6q9PL6wr/ZC1dhSvpjg\nCutVE5uZ7MG9rZRAD/oesTrINCfyBOLWf3/XyalSR6nBx1tpwaz+rcRViTkG\nkYu8rml7OqHFWTdhY5l/Dp9ljmKqulCHuHmYKtMdHNmOKFdk8pMB3Hp8YBR6\ntnsFtKpJ1J92eaxNRL5YbTvcjy9CQmEXMDRSbg2zWX56Ufq14OrSTrRzgGSL\n+u1brQepP1CLtGbgZX+jEihMDda6B/1TAds0VyPusgCNOlh3Dreug46Himss\n2WUNzfH4F3rlM6qt46yIipMooaNsvdAczZ/+D1X3qX9ao1sinTGd8HovEjvz\nEqxVX6OItFZhsVx2l/kpSWVbUoKqpwpGuzhCTxopn3GSjkS9q+JhaAZ7xXCZ\n4y7oQDYiKpJv1M0o/mugiwnmGU7yVH646qW60oZeO6vGKmOtgW9htTY1h2Ux\nm6VT41cS9FVfBNpR+ex0QyASXK/iFjss6fP7RPu4+RH2d4rxlJvZbdQIW3QI\ne+4j0KHuBK44OYCjv39XdKVDy0Rq+26wxnlK8tVp01Gp5ZLQg+1auR734zbH\nFht2\r\n=KAUD\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=14.2.0"},"gitHead":"d4437c56296f8d0de4278e0234be3cec5cc8d0ee","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest,typedoc","test":"npm run lint && npm run test:unit","build":"npm run clean && tsc -p tsconfig.build.json","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint:fix":"balena-lint --fix lib test","test:unit":"jest"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"versionist":{"publishedAt":"2021-11-24T01:38:10.271Z"},"_npmVersion":"6.14.15","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --fix"]},"_nodeVersion":"14.17.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.4.0","@balena/jellyfish-logger":"^3.0.138"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^27.3.1","sinon":"^12.0.1","deplint":"^1.1.3","ts-jest":"^27.0.7","typedoc":"^0.22.9","depcheck":"^1.4.2","typescript":"^4.4.4","@types/jest":"^27.0.3","lint-staged":"^12.1.2","@balena/lint":"^6.1.1","@types/sinon":"^10.0.6","@types/semver":"^7.3.9","simple-git-hooks":"^2.7.0","@balena/jellycheck":"^1.0.0","@types/json-schema":"~6.0.1","@balena/jellyfish-types":"^1.2.26","@balena/jellyfish-config":"^1.5.14"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.295_1637718011154_0.21829348815816063","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.296-renovate-typescript-4-x-0a56c6d79488b7e8b32b50383b900e7b4fa3ad8c":{"name":"@balena/jellyfish-plugin-base","version":"2.1.296-renovate-typescript-4-x-0a56c6d79488b7e8b32b50383b900e7b4fa3ad8c","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"Apache-2.0","_id":"@balena/jellyfish-plugin-base@2.1.296-renovate-typescript-4-x-0a56c6d79488b7e8b32b50383b900e7b4fa3ad8c","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"b088119d962db48413980591bf2838368e3132ee","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.296-renovate-typescript-4-x-0a56c6d79488b7e8b32b50383b900e7b4fa3ad8c.tgz","fileCount":19,"integrity":"sha512-1lra4L5iSGLXPy+agFku3NC7M3sYKFBN7hD9a2+xQmQ88QWAq1dCboX5Zq7/B2yZe+d6E6Hm3gUPkMEHFNDIPA==","signatures":[{"sig":"MEUCIAnL4RtGYewJTrsBgWtN79uaHMdArhsNDpl/Jvwk/bKNAiEAx0ZdG3Ux4B7gJtIeWCr7JuPfWCBwt7IwAfNnoFjebQM=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":78842,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJhnZiYCRA9TVsSAnZWagAAVdIQAI6JbN9vQNnXMC7AHx/n\nUYu5zgcmubdEVqKnGy4DemE7j5MfG+kRuln8kMe6wYy/r9JmRwbNPMPmg8sR\nq5CQ992Ba0Q6ncRz0K2hPMo/y0W+uQ7AS4S0K1ef33eC/OjgdmA2/eFuEk/x\nYza/CpdTcM6UetPJOwXzH4sDr7pHo5RgOuq958G85FktGXWX0X4y/NOyXirA\n7aUvsKHqirxKz8d+7LZLjc951HDQORoa3LHrsP2kbtumbc1DIFYQUqONeUeL\n+mcLD7Jka8boORrKjBOnIK7G/adXDrPR5Qk8gva2JiGrBWVLUc7P9G74g0tR\nqKDnBN6DdvW2BvrPeJMKviJmJKsCHkGuhj2wa0XIKMXHL79NTt/eIAtYkqVK\nt12JzzwrcU91zskDhaAbgyNpQl9j+cOBKN5EGI4o5ASekLpZznGwV/xa0Z+P\nQl/n/7XmDpqkEJIGUZUzvU3FHMv1jC+9esbnfgAkNvBtR7H98q8pP22miOOx\ntuCFMZ5ne8e1m9BkQIyJqJbHZQeA3pZHpMyQnGlyr5F3xPXEk2gZln9q74CF\nPB9RlzpTODjU1H5nI6rkQc262imuI/bHK0En2Yjg55dZ2/1Vbc/A1E8ZXFQY\n9O3n2zZw58YotgoH7Ce3jEO3fuuTX+lEqh2baNPaqwvNY6eWb1UvDOVV6na5\nkcMP\r\n=EtDo\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\n[![Publish Documentation](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml/badge.svg)](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml)\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=14.2.0"},"gitHead":"0a56c6d79488b7e8b32b50383b900e7b4fa3ad8c","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest,typedoc","test":"npm run lint && npm run test:unit","build":"npm run clean && tsc -p tsconfig.build.json","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint:fix":"balena-lint --fix lib test","test:unit":"jest"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"versionist":{"publishedAt":"2021-11-24T01:40:16.764Z"},"_npmVersion":"6.14.15","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --fix"]},"_nodeVersion":"14.17.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.4.0","@balena/jellyfish-logger":"^3.0.138"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^27.3.1","sinon":"^12.0.1","deplint":"^1.1.3","ts-jest":"^27.0.7","typedoc":"^0.22.9","depcheck":"^1.4.2","typescript":"^4.5.2","@types/jest":"^27.0.3","lint-staged":"^12.1.2","@balena/lint":"^6.1.1","@types/sinon":"^10.0.6","@types/semver":"^7.3.9","simple-git-hooks":"^2.7.0","@balena/jellycheck":"^1.0.0","@types/json-schema":"~6.0.1","@balena/jellyfish-types":"^1.2.26","@balena/jellyfish-config":"^1.5.14"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.296-renovate-typescript-4-x-0a56c6d79488b7e8b32b50383b900e7b4fa3ad8c_1637718167844_0.5232497367644386","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.296-renovate-internal-patch-bbba7e12e98d15a5426118fc1f04da64fe3bb720":{"name":"@balena/jellyfish-plugin-base","version":"2.1.296-renovate-internal-patch-bbba7e12e98d15a5426118fc1f04da64fe3bb720","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"Apache-2.0","_id":"@balena/jellyfish-plugin-base@2.1.296-renovate-internal-patch-bbba7e12e98d15a5426118fc1f04da64fe3bb720","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"3527525757ef207c4b31801516a0c8620066d1cf","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.296-renovate-internal-patch-bbba7e12e98d15a5426118fc1f04da64fe3bb720.tgz","fileCount":19,"integrity":"sha512-UMi9PrpDgItviH7pbe09c5zm3ONAtRSUtbpwTFpDiGOUur43IsqToao/bqwWvCQgAvl+9rIOBdGv1ZrmNkV3yw==","signatures":[{"sig":"MEUCIAtMJ90qgdFQW8FWTZG0romoF9SiB2DblLzw1x4gwHdtAiEAjoKAcH2JHPL/mbUt3pj5is2u9O9Q1gZF4Dj7ST0icGk=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":78825,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJhnbYwCRA9TVsSAnZWagAAPRwP/R/FkuZnjaZyN5ARGsF8\nzVlIm+aFLoEf6cthn2o5Vqhyr8f4f//k/5QSYAkSIHfe572C+6NEGzU/yV7E\nwSwZOfx+eDey6sXQZgwNwZPCwCVTnHKaTGo12RGUb+gWVPr/w7wld4mYx+P5\nBZFBCpjqtl1jxlmO8UaBYDF0x0wEh2zjk7NkSZb0HPxCUZp/AyqyFy40SJaR\ne0FIzPaIAKsFfblL3cVC74K5s7aqUqgJWM5yrk7Qd2gxKG9q80ObT9nno4tc\n88faBL5WZ4T03PhKLDGQ2PHTvxQ01+Y3Kb10hVKXF1XTzisI0zYuLuYwTnVb\nHQJoVT8LbKrKe1G4zohN+huI8lrJSQQ9DsH9W69Rep+kd4Ud5fWsG+aPPzn2\ntgcuHhRtgZEQcddchnRlDkM9l2PuhBF/3ijP1t5pajRvUpHE0R6P7/lHBUdX\nmOPiwK5XglF8ZoZBtb2CXvAjeB2/evIxiu+fMiQn1SyVUvKLt4RXaaiWyFJD\nlYeNs0/bsUBeBC3BV2BEwCqzhddNs54wMcCtEt9hnVzpo8l1CzEJHu46nxSg\niIIcnevIC+irRMHUZNFuOeKtSRxRKX86ZukSNGo3JMxdva3fYEnXEQs8J1Ou\nPZBYvTFzAKYyPlSkdnGqSufGoALQQEu+vBB+YenVR/maGCQAMZp9HG+hWdgK\nDrKk\r\n=Z+E0\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\n[![Publish Documentation](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml/badge.svg)](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml)\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=14.2.0"},"gitHead":"bbba7e12e98d15a5426118fc1f04da64fe3bb720","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest,typedoc","test":"npm run lint && npm run test:unit","build":"npm run clean && tsc -p tsconfig.build.json","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint:fix":"balena-lint --fix lib test","test:unit":"jest"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"versionist":{"publishedAt":"2021-11-24T03:46:16.540Z"},"_npmVersion":"6.14.15","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --fix"]},"_nodeVersion":"14.17.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.4.0","@balena/jellyfish-logger":"^3.0.139"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^27.3.1","sinon":"^12.0.1","deplint":"^1.1.3","ts-jest":"^27.0.7","typedoc":"^0.22.9","depcheck":"^1.4.2","typescript":"^4.4.4","@types/jest":"^27.0.3","lint-staged":"^12.1.2","@balena/lint":"^6.1.1","@types/sinon":"^10.0.6","@types/semver":"^7.3.9","simple-git-hooks":"^2.7.0","@balena/jellycheck":"^1.0.0","@types/json-schema":"~6.0.1","@balena/jellyfish-types":"^1.2.28","@balena/jellyfish-config":"^1.5.15"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.296-renovate-internal-patch-bbba7e12e98d15a5426118fc1f04da64fe3bb720_1637725744479_0.9852548515190478","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.296":{"name":"@balena/jellyfish-plugin-base","version":"2.1.296","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"Apache-2.0","_id":"@balena/jellyfish-plugin-base@2.1.296","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"5988e077ab4274eb3cfad09f9239429f92d200c2","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.296.tgz","fileCount":19,"integrity":"sha512-kW3xC9kZBppy6bObqKJN7px2v8StFQkOj0+33/iYDS11VcJMrndrQJfqygxGJdUEmh6o3YtkxsdE9OCqkYkX6g==","signatures":[{"sig":"MEUCIEc12NJFWMrJCmwQXJRo5GZDedoBy1dzew6UOcBMJ3iSAiEA9PzX+uwd+9VrLhvV4lx8Bh0y3ZSf/R17NTohuj2OhB4=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":78760,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJhnbb2CRA9TVsSAnZWagAAwL4P/3t3pH+RQkEMEvcXrwsj\njoVmb3sgSBpCV+q9b5aO2QBGsDMs1TTDDr7R3w4V9LLiwV4j5d141AmfBgBV\nzhi1We4XtUR1ODYlb4Z2qIY18uF9bcDXjgp42PJO7RCiPv8E+ZaYBd7clbbt\n3z/35KFkUybgahuFOQa8GF1AFtRC915nBeRUfYVwIwKkjpK2Whj7dQLCMKPV\n9MkmfwD8i2+SMyk2iFlW9kD4NVK2uzzeEXa92ICjyMmJtHxj0xrJItVXcVgm\n197tcEfBcvqkt+nlr1QK+iuaXi/RSlOgWfN9EvXsJTb8UIwgHCJM06UUpvwK\njgOTTFilC5Gwb8p9NhlJw/0nMc1Tge4YisjIEz1yo8fF3tp4ImJ29cPkOCUl\n6WdWrf86Bs72hZdQ1unaxQifYK+urbY3XRoBWL+MXnNk4J8uGTkRo3NkmFUe\nYaFBE1k7tRZMNFE2MtloXw5sgIsETOEf4MCY/ihBa9w5dPNV1kQxlLUozyKH\npe/Mf9VB6jhSN+fMkoL1A6s97zf/EvHgiow2yz0Tgot5hcJyPkBjRCyHxs2U\nu+BmvnLokeCJe1FWWloVkxoaPFuN8ogaM3O6/xRhJwG3F9q1hVhx3FTkr5cp\nTa7uhoDAuptronYFKo0yzGPzaSzZ/JSACXOIhZvLehzK4VcWcAWdAxr025ze\nwgIb\r\n=PBor\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=14.2.0"},"gitHead":"53bebc1aaca298e3e9a586fb871a7bc0599c8900","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest,typedoc","test":"npm run lint && npm run test:unit","build":"npm run clean && tsc -p tsconfig.build.json","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint:fix":"balena-lint --fix lib test","test:unit":"jest"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"versionist":{"publishedAt":"2021-11-24T03:50:06.569Z"},"_npmVersion":"6.14.15","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --fix"]},"_nodeVersion":"14.17.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.4.0","@balena/jellyfish-logger":"^3.0.139"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^27.3.1","sinon":"^12.0.1","deplint":"^1.1.3","ts-jest":"^27.0.7","typedoc":"^0.22.9","depcheck":"^1.4.2","typescript":"^4.4.4","@types/jest":"^27.0.3","lint-staged":"^12.1.2","@balena/lint":"^6.1.1","@types/sinon":"^10.0.6","@types/semver":"^7.3.9","simple-git-hooks":"^2.7.0","@balena/jellycheck":"^1.0.0","@types/json-schema":"~6.0.1","@balena/jellyfish-types":"^1.2.28","@balena/jellyfish-config":"^1.5.15"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.296_1637725942258_0.7118166024490422","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.297-renovate-typescript-4-x-1f4989a4217a45b8060293a43ae075a5f29a42ad":{"name":"@balena/jellyfish-plugin-base","version":"2.1.297-renovate-typescript-4-x-1f4989a4217a45b8060293a43ae075a5f29a42ad","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"Apache-2.0","_id":"@balena/jellyfish-plugin-base@2.1.297-renovate-typescript-4-x-1f4989a4217a45b8060293a43ae075a5f29a42ad","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"6d29c0f71b6b17a33ac69c1c87c222c317c47a0b","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.297-renovate-typescript-4-x-1f4989a4217a45b8060293a43ae075a5f29a42ad.tgz","fileCount":19,"integrity":"sha512-BIuIAgyO3P3Po9CmrlK4YRXEF8/obemBacEgc1QmIolEZcRmqSUgEKil6DIS68IVZlmsq5wJaQos23EV9dQgfg==","signatures":[{"sig":"MEUCIQCL2FFj5z93WSU6USyTF05vmSe9PbZDXi5JhjcbDZremgIge/CAXe+4joiiNXcJwOvM8MqyVm0j9aFKcmVoXOQkbu0=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":78914,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJhnbePCRA9TVsSAnZWagAANBYQAJBWKNmi5uyN6XxNWiQ7\nY14zeT8/ThBHYvLQjck2sbkej7SbY0n5Ar9H5XLRKoewrbp5nqsn+mtsbcs4\n4RjNTUoUiOAdPL4ttprZVyKAfVfCBhd6IEyboVSu5CCUrNxkqAtOJCPEBP0F\nbNyinCW9I7qz7fu8UrsYFFY4/A7/PbGJBiVBOjnPL4Ww8LsZcoq3mX7elrvJ\nBHn5VqydtzfWO8QCzX42SQs8vD6Tlop8vB8gU2YnyhMb7fp0KuNKyE+w49Vc\nmArZkLbWGVtsuIEYKDNtxhd2aj8BAI6DWeWEHD91jB4xMitwta4qYrp5GFrk\n7eAeGRZXYHKdH74WfHzBoJrpPSTEMVZe2vF4Y3snqD9kdDs3sfxQjVXa67qF\nX8whk8vIi4cPS6yBxbUa5goL9wKF5CaNa6WMVlpk8De0cUdQc1hwzirHSZ8b\n5a940BEXunli/suK348SMZCvK78XNmxjkSLzXRKgFnSAa542B0dYqmtb5jrq\nnvzOttaTcplDoOWO1nLWYdQDR6je1GfNk4wAJIaQvHPKzAANotjD9Lvi3FXc\ns6t8VIcmxnVmmaNxY6Nt9geb3vkFETUSN03W6bBOc8gx6Z7/7YzX0HKmbo0K\nRrUlShNc5CiqQu/eao6Mkie6u8EimR+Rv6G8J6GY953scfIIZ/5ICA7L6Zf8\nFvtx\r\n=6YuC\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\n[![Publish Documentation](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml/badge.svg)](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml)\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=14.2.0"},"gitHead":"1f4989a4217a45b8060293a43ae075a5f29a42ad","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest,typedoc","test":"npm run lint && npm run test:unit","build":"npm run clean && tsc -p tsconfig.build.json","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint:fix":"balena-lint --fix lib test","test:unit":"jest"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"versionist":{"publishedAt":"2021-11-24T03:52:05.083Z"},"_npmVersion":"6.14.15","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --fix"]},"_nodeVersion":"14.17.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.4.0","@balena/jellyfish-logger":"^3.0.139"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^27.3.1","sinon":"^12.0.1","deplint":"^1.1.3","ts-jest":"^27.0.7","typedoc":"^0.22.9","depcheck":"^1.4.2","typescript":"^4.5.2","@types/jest":"^27.0.3","lint-staged":"^12.1.2","@balena/lint":"^6.1.1","@types/sinon":"^10.0.6","@types/semver":"^7.3.9","simple-git-hooks":"^2.7.0","@balena/jellycheck":"^1.0.0","@types/json-schema":"~6.0.1","@balena/jellyfish-types":"^1.2.28","@balena/jellyfish-config":"^1.5.15"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.297-renovate-typescript-4-x-1f4989a4217a45b8060293a43ae075a5f29a42ad_1637726095569_0.7068881027164724","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.297-repo-sync-jellyfish-config-default-33469805bc0882844eac67315944b88a5f57947c":{"name":"@balena/jellyfish-plugin-base","version":"2.1.297-repo-sync-jellyfish-config-default-33469805bc0882844eac67315944b88a5f57947c","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"Apache-2.0","_id":"@balena/jellyfish-plugin-base@2.1.297-repo-sync-jellyfish-config-default-33469805bc0882844eac67315944b88a5f57947c","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"4734028624cd38abceb07bf2e9793f3515651fb9","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.297-repo-sync-jellyfish-config-default-33469805bc0882844eac67315944b88a5f57947c.tgz","fileCount":19,"integrity":"sha512-4aV6IQcyvNn9gIjL1NyBPfTsEAqlIZWkJ6PdF0sfoM589TvkS0nM/R74gVq9BILpYWS3aC4IqufArU1pQxaL0Q==","signatures":[{"sig":"MEYCIQCtoVf+OQ1U7a7sOo81UBBaxwGMQnZqfUrfZ7TEi0Y2owIhAKkysJM+jTd1sFGvc0iwscBZ2DtnH+58PbldFBgUXkhA","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":78929,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJhneCACRA9TVsSAnZWagAAKuQP/jpszaFIpS3qXXYlD2+I\nG3v6xMGVzUTXdY5JFfUMD5o6pp8lgY5Ox8aTn5+zOzCppiNO5astnBqA4fGY\nzRgyVlFMRW1Zg/41ET9DIwZ46L7QMv1RvyEI6BStg3KGF910YaGCwV1FORdK\nQqMwF5f+M5iKYp/Th7ud64xxsX916ptAtR/V79c7+eFK2geiR0ifG6rlemLE\npKX27GfmJ3y0IVmcPT/+nPbkF9GsuupAUSTyHu4wCzWZN19SCRxUqnnqIwPO\nbwnLvHxBwX5vGrsyYROVJH+DTlSnLMZLUMnpbnMaRDSjaVdyYvhkYTerKZOX\nBjV8m5CkePG3INslb3q8shHX6TFqP1hyALXssnkLIOW8ZgYZM8lA6CddZR4C\n1weA5DTaAMXHnHpGCxo72kgq/UCtVTBcgeTRuQImHjnSpSHFEP1/NDj3GTDA\n6VJPLpr+OLn6tfP74KHizV+3ZMNqGVlECAVSDxH2LIydyPLEyUubgvvvY0ns\nl9bZ50g7BXE8BXxLTHKLj3yvpe6VRW1xRSKv+yhsH2/IQ4lFbAMIFXMyH1tG\nmpqO3mQfl1VIz9KU6H/wHHRoEYkoU82JIPaMZKBflLLfZ58UcNb/IRqoP3T4\nySJQtFUqIyO33CnhUY0Yxpz1+ePXjSWHiWKushf8TJcHXl2XGu6pnP4bRKmQ\ni02n\r\n=mk1d\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\n[![Publish Documentation](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml/badge.svg)](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml)\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=14.2.0"},"gitHead":"33469805bc0882844eac67315944b88a5f57947c","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest,typedoc","test":"npm run lint && npm run test:unit","build":"npm run clean && tsc -p tsconfig.build.json","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint:fix":"balena-lint --fix lib test","test:unit":"jest"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"versionist":{"publishedAt":"2021-11-24T06:46:35.437Z"},"_npmVersion":"6.14.15","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --fix"]},"_nodeVersion":"14.17.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.4.0","@balena/jellyfish-logger":"^3.0.139"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^27.3.1","sinon":"^12.0.1","deplint":"^1.1.3","ts-jest":"^27.0.7","typedoc":"^0.22.9","depcheck":"^1.4.2","typescript":"^4.4.4","@types/jest":"^27.0.3","lint-staged":"^12.1.2","@balena/lint":"^6.1.1","@types/sinon":"^10.0.6","@types/semver":"^7.3.9","simple-git-hooks":"^2.7.0","@balena/jellycheck":"^1.0.0","@types/json-schema":"~6.0.1","@balena/jellyfish-types":"^1.2.28","@balena/jellyfish-config":"^1.5.15"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.297-repo-sync-jellyfish-config-default-33469805bc0882844eac67315944b88a5f57947c_1637736576675_0.36310704963664886","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.297":{"name":"@balena/jellyfish-plugin-base","version":"2.1.297","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"Apache-2.0","_id":"@balena/jellyfish-plugin-base@2.1.297","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"0b3c5e79ea627fc948ae7b5d46151097809655d1","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.297.tgz","fileCount":19,"integrity":"sha512-0nVX31VZlfUGKMa38M6j5L0Ift36Umz6XM495xDdtvPVOIxyUHeM0NfpdBRZ5dc92/TLRTn+ykfVozqdZSTgqQ==","signatures":[{"sig":"MEQCIGkk1KIE3KZ+8kui4PV1D3jWwN+ALkM0Wx7kMhTPsSx+AiBMO0G6xyg+QurmA1A3PGCGVUTM1E1owT5C/XiAkZ4U/w==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":78853,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJhneFpCRA9TVsSAnZWagAAzq8P/1+U1SuSGeNhn6vJeWXr\ndERWw7i4df2Fj2/HxSyeyLBaHxq/69eRkHkrWQFx+1Eb9beUTERnCk9sDN2b\nkYBssftVPevFNJ1l4HT0RRaAVJvziPETdE3gZkF00YI8mMjNAAz6uBdEkMmj\ndBmLHwjnxvPl6B20K0lW20kur5G6/DZCSuihKZ4SDjQRYiUxATQjniB4dFQb\nGioz2y7DiTaizeTih9pPoarucBDz6I73OWue9o7nLjeWvkUtdOyuzoN08RM+\nIosTOUEiEOo593wXYeYHYo/9MgCjDPg9XHFLnd9W5FaymSswbuQ+iwYbaaaG\n1/o+TbI0Te/uExJfcow8fCSwDcscePKKfZv7KdTZqxobhgAT1dZF2DyDTxS7\nDwfBQfS5+LJdQhPJIByoPb4LVZ88vZF4MCrMzXhg0wKeM7k0sBOXwEuDcGQi\nm8Rlh1GFI+8Vibdy3D+iqBma5dScyKH5aTjJmvDqB3yl4XRurBfTV23hdWRV\nTRgw9CfksUdebZXVk/Vr7Gba0Z3H1/ds/lC0pmxqIPcCkqncLQBLLeBJb/AK\nRro6aNpEgIjVlWrfovagNWN3HrL6TZHsANK3opf6xo1Q26Uh2BV49810rg/X\n+8skN4cpKiPAeY7sAgnPwSR6qof7z8+RbKSMA6kODuGG3QxIym3/1Q3eoa8R\n/KGt\r\n=lBRm\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=14.2.0"},"gitHead":"54cfe90d6f34865175f5974b6425fce769902885","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest,typedoc","test":"npm run lint && npm run test:unit","build":"npm run clean && tsc -p tsconfig.build.json","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint:fix":"balena-lint --fix lib test","test:unit":"jest"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"versionist":{"publishedAt":"2021-11-24T06:51:31.041Z"},"_npmVersion":"6.14.15","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --fix"]},"_nodeVersion":"14.17.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.4.0","@balena/jellyfish-logger":"^3.0.139"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^27.3.1","sinon":"^12.0.1","deplint":"^1.1.3","ts-jest":"^27.0.7","typedoc":"^0.22.9","depcheck":"^1.4.2","typescript":"^4.4.4","@types/jest":"^27.0.3","lint-staged":"^12.1.2","@balena/lint":"^6.1.1","@types/sinon":"^10.0.6","@types/semver":"^7.3.9","simple-git-hooks":"^2.7.0","@balena/jellycheck":"^1.0.0","@types/json-schema":"~6.0.1","@balena/jellyfish-types":"^1.2.28","@balena/jellyfish-config":"^1.5.15"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.297_1637736809483_0.9911822341169871","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.298-renovate-typescript-4-x-6f0e550e6f01da557edfc11b2d4eb7321c6f280f":{"name":"@balena/jellyfish-plugin-base","version":"2.1.298-renovate-typescript-4-x-6f0e550e6f01da557edfc11b2d4eb7321c6f280f","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"Apache-2.0","_id":"@balena/jellyfish-plugin-base@2.1.298-renovate-typescript-4-x-6f0e550e6f01da557edfc11b2d4eb7321c6f280f","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"24e7579eece4a2d6b373e2743d786a3f3dbb99a4","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.298-renovate-typescript-4-x-6f0e550e6f01da557edfc11b2d4eb7321c6f280f.tgz","fileCount":19,"integrity":"sha512-/pHgVQX2uayGPF42InVLX2QK0QuVcWZw2APpGIomTdwLKTU9xApV6sjKApNPThOVIxqyeFE6oRViIt4NVTi/MQ==","signatures":[{"sig":"MEQCIBFhaqPW6gN3JgLqqflAy75kl9xqQqccShmN8HEOnh5NAiAEey4Az0Se7h0oqGJb98UGxwEXGtK+HYunHkv9bYTmLw==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":79007,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJhneJgCRA9TVsSAnZWagAApeYP/jRPznQF47Ck9whqNeRR\nD8mzQsYUkJL3enxv3kuBNAqvaluO/I9dp4iPW2Gko0c8396LIqYFZCHNsWpL\nENm/c2+1/fa9zTpsIUz3pvhL0EziuQOLFpxtRyAFgGVjUbntMzCWIR6kkUkA\nzcXH2+emtv6/snZf63LzO+6hVP8XUeab2C7Xor0g9dkgmKqD3MoDGdxHaNav\nZNgXchSdOvAtNBklRYc4W2xShzt9f27xcH4AWNbrDMzgzkeRATOSD/MSJil1\nBBrNFewXfZD75MkXldnKD9enTEM2X2PJg9MDZ4ac0HvhM/cW5K4/WOyKW0sO\n4IGG3g4KkY5THCt1vt/UnBHPEF1wR6cppJpKeWGkAUgPBmZsqFvv0ch922iB\nSB1LSqOqF74gO2MdTyQGLWPVc0RdxXDiX2p09HWE3n9R6xZqq4FBUUHRkaVn\nhDfsAXuu9BFhYcsyjYGN/PspZWuSx1ScGAAI/jKYWaCKt14ofVO1hHGGqSl2\nrkTl9Ay/3mDf7T9ImIbBy4dHHFZahbS8NgRY96LX4Wel123K/OsIl5edNEQB\nnE9ephEHMLK9XNEaOdHDkociYtU1SigIf0md2kXNZnzpg6HD3qdj4Nadq6w6\nOvUakLVLyYnf4MRLe6RvGH9yA1sTDhuqKhCelIinC3DcCAzZfkgIHmsNXgiP\n33aC\r\n=5brZ\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\n[![Publish Documentation](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml/badge.svg)](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml)\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=14.2.0"},"gitHead":"6f0e550e6f01da557edfc11b2d4eb7321c6f280f","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest,typedoc","test":"npm run lint && npm run test:unit","build":"npm run clean && tsc -p tsconfig.build.json","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint:fix":"balena-lint --fix lib test","test:unit":"jest"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"versionist":{"publishedAt":"2021-11-24T06:55:11.510Z"},"_npmVersion":"6.14.15","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --fix"]},"_nodeVersion":"14.17.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.4.0","@balena/jellyfish-logger":"^3.0.139"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^27.3.1","sinon":"^12.0.1","deplint":"^1.1.3","ts-jest":"^27.0.7","typedoc":"^0.22.9","depcheck":"^1.4.2","typescript":"^4.5.2","@types/jest":"^27.0.3","lint-staged":"^12.1.2","@balena/lint":"^6.1.1","@types/sinon":"^10.0.6","@types/semver":"^7.3.9","simple-git-hooks":"^2.7.0","@balena/jellycheck":"^1.0.0","@types/json-schema":"~6.0.1","@balena/jellyfish-types":"^1.2.28","@balena/jellyfish-config":"^1.5.15"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.298-renovate-typescript-4-x-6f0e550e6f01da557edfc11b2d4eb7321c6f280f_1637737056117_0.7900791354219698","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.298-renovate-internal-patch-38d87b84a0bdb9fadf402ba66b305bdcd672f661":{"name":"@balena/jellyfish-plugin-base","version":"2.1.298-renovate-internal-patch-38d87b84a0bdb9fadf402ba66b305bdcd672f661","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"Apache-2.0","_id":"@balena/jellyfish-plugin-base@2.1.298-renovate-internal-patch-38d87b84a0bdb9fadf402ba66b305bdcd672f661","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"97dbc4465a8d79902a39ace3723046328ee344c1","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.298-renovate-internal-patch-38d87b84a0bdb9fadf402ba66b305bdcd672f661.tgz","fileCount":19,"integrity":"sha512-XD6blKXjf7vmRxCm1yHESpBS5dB5mS6923H2Wknt9+1NMj/q0fPgBtxaEj0pLjKziVmjq9aZQbl2lox1VhY+qg==","signatures":[{"sig":"MEQCIC4vDl6g/fTAZ+JHT96qsaJxqGL7fiEFc3s72fH7RVXwAiAJnyQNFr/SwABhvptH9YIir6uEgirhPQZjP7bEGxZiSA==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":78990,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJhnj4gCRA9TVsSAnZWagAA0wAQAKCXoSBmTBIWKUa0c9C2\ncupPrgwDD0oHJDrUJPkVOztgf/wxJD8U2Y/9T8GXvz2al+MO9aQw2hgY6XrL\nSkAPyuSWy32gN9F9PHwD4JJ2aSrJwr/wCk8L9igNIdLO4OuTazRm6YPEuV9G\nKcpKWz8SBC2ctIms6fFik5PQVy9ORwT3Ejz2u3nTN1Q4APgu4cBLHdcE4ozn\ny1xNLJ4soQ95buMv/E0C7fa4dIHYYb72/XtBTJlENHUNKtiZRAQjL6F9235e\nMHHWdVcPVdGJjXWqzymWEBuUINuJKe+lBzDR83/CuCH7mxVGOGY4fXK0s7C/\nydOQJwo3t42JxZLyC15Jo3TZhS9vngHQVATIM2F3QhdZyaizeycMv5DHL9/5\nnWl7ALA0JeUGcf3A1aq8LZM9kpPAiQC2tWpTHSkoy1SxN4dd7aYjndW9Fm1a\nvU/yL15j/Tb79lciOXf3ykNEDp7yPLkZ9G5H9jt3Ex1XWO+m2kdnUyejzIoB\np4oZfSNzqSfN/vpq8+53roV/aWA24sLUK5IWfxJXFIv1p/v3kE2Xk6dicllG\noxYWo+I68b7bQhLEHZif7cQBcvdixo8K2/uQzjCSyiQqi5ZIg5P7RvbsusTP\nU8Ns1VSRkO/OoV0+cPpCPm3s23MOhI9AlKpM3Bft8jtYiz+njaq7Te1e3FYL\n3Vtb\r\n=MvPP\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\n[![Publish Documentation](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml/badge.svg)](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml)\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=14.2.0"},"gitHead":"38d87b84a0bdb9fadf402ba66b305bdcd672f661","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest,typedoc","test":"npm run lint && npm run test:unit","build":"npm run clean && tsc -p tsconfig.build.json","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint:fix":"balena-lint --fix lib test","test:unit":"jest"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"versionist":{"publishedAt":"2021-11-24T13:26:30.746Z"},"_npmVersion":"6.14.15","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --fix"]},"_nodeVersion":"14.17.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.4.0","@balena/jellyfish-logger":"^3.0.143"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^27.3.1","sinon":"^12.0.1","deplint":"^1.1.3","ts-jest":"^27.0.7","typedoc":"^0.22.9","depcheck":"^1.4.2","typescript":"^4.4.4","@types/jest":"^27.0.3","lint-staged":"^12.1.2","@balena/lint":"^6.1.1","@types/sinon":"^10.0.6","@types/semver":"^7.3.9","simple-git-hooks":"^2.7.0","@balena/jellycheck":"^1.0.0","@types/json-schema":"~6.0.1","@balena/jellyfish-types":"^1.2.30","@balena/jellyfish-config":"^1.5.16"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.298-renovate-internal-patch-38d87b84a0bdb9fadf402ba66b305bdcd672f661_1637760544289_0.08722059913769753","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.298":{"name":"@balena/jellyfish-plugin-base","version":"2.1.298","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"Apache-2.0","_id":"@balena/jellyfish-plugin-base@2.1.298","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"0fb09d55641f72eee77bd05d8fc16129e225271c","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.298.tgz","fileCount":19,"integrity":"sha512-EAIj5ZqMdJqFf3DgCIBgN4JWD5g892AZJV2sc4ap2E2hn4irvro8V07+lCykxbvC3x61PO/I0xT4anFwK+JN4A==","signatures":[{"sig":"MEUCIQDsBEdOWlQEubzY35SQ4NyHZLONiJpaEcg18TPwClVS0gIgK1idrj9SI1PD9hMd4yE37RD5wNfwZJM6qv8rFLv8wFE=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":78925,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJhnj78CRA9TVsSAnZWagAAgZoP/3T/lW/3YCTH3OEbwJV5\n5dlyB/LYskeeXNbR/nhQNJCCiojCogX8LFLWRW8aCDJBtMBVPHCPBzvUQ/xS\nIqK0Ocin3oBk7voE53Sipjv1/QWbzdEPIpUOR65SyaSNPQI0l0QX2l2UdtX0\nhhtxmJMPX7iauAbB1YZoVuqPS3htriTKnFhAntJL03F0H3ASiXTm3u7Un0bT\nYOrt55Z2GnqnYuUvOMTlO1avhYvCfWfPCAbBBWGIvwLnuLn2rKkHVMpZg1jW\ne48Nh8bTD7iLcgDedSsA2Ve83PkrZhI0Awo+uHg7qDBNgrpPOa7Tr3PatZxw\nR45gtdbprIxjS0SPlOWlrswAswBoE4vt91u8Cnh4UQ3OqUFXXrn6OHb3T05O\nyJxU3uhFB0nqjXwUaAs68n+Em45vfWjfI/HIYE1sGbHDg5rJfAu5HZl+3FtD\nM3TlhHWJ7e29hDulUv0Ho2Jpu2KIqFvfttpJFJAweiHJocmeFsvt07mZi5hX\nwYsWWVErZggId+14r2znb0bTTBTsQW3xkZ6dz9COWlOWKO01+VhEx9h+6jO6\nmk6NtOrIKrg+4AZ/aBlzX6GtfWs7HvGLXdLZL3zpiKrpV7uKr7jz3dCqEziD\n3abI7jkDZdE9mUWmHh+TOnI17hXPNnzikqqs4soOG3dgsdZgRcEqzWTc5HJn\nNAdh\r\n=vvto\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=14.2.0"},"gitHead":"b6e7fffbca32dc12fe626fa536bc050aae4d1f88","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest,typedoc","test":"npm run lint && npm run test:unit","build":"npm run clean && tsc -p tsconfig.build.json","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint:fix":"balena-lint --fix lib test","test:unit":"jest"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"versionist":{"publishedAt":"2021-11-24T13:30:37.491Z"},"_npmVersion":"6.14.15","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --fix"]},"_nodeVersion":"14.17.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.4.0","@balena/jellyfish-logger":"^3.0.143"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^27.3.1","sinon":"^12.0.1","deplint":"^1.1.3","ts-jest":"^27.0.7","typedoc":"^0.22.9","depcheck":"^1.4.2","typescript":"^4.4.4","@types/jest":"^27.0.3","lint-staged":"^12.1.2","@balena/lint":"^6.1.1","@types/sinon":"^10.0.6","@types/semver":"^7.3.9","simple-git-hooks":"^2.7.0","@balena/jellycheck":"^1.0.0","@types/json-schema":"~6.0.1","@balena/jellyfish-types":"^1.2.30","@balena/jellyfish-config":"^1.5.16"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.298_1637760764626_0.16036090360788613","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.299-renovate-typescript-4-x-33246a8f41c22fd7b98e5f48a0e29ba8bcba8b02":{"name":"@balena/jellyfish-plugin-base","version":"2.1.299-renovate-typescript-4-x-33246a8f41c22fd7b98e5f48a0e29ba8bcba8b02","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"Apache-2.0","_id":"@balena/jellyfish-plugin-base@2.1.299-renovate-typescript-4-x-33246a8f41c22fd7b98e5f48a0e29ba8bcba8b02","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"cf37d4dd0d05b000f27cf77b6f4dfe7147cbdda8","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.299-renovate-typescript-4-x-33246a8f41c22fd7b98e5f48a0e29ba8bcba8b02.tgz","fileCount":19,"integrity":"sha512-YbEwjM7WGRZvCoqcWCJ+uziRVkQiLZNE/Qzw1BujDTSMQYkpVMM1sZTCDIQdBAm/GUtkOo0ZmUNVIrIdPqy3ng==","signatures":[{"sig":"MEYCIQCe7aZWpVilBRtbJIoULrOFYaEaMAn7If5pcHYuk+6WwQIhAOH6PoUcqh1+esw1KDIhVIbDdzRY3UppmVT55Z1eif6W","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":79079,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJhnj/BCRA9TVsSAnZWagAAudEQAICFhR7LM24sOGKMOnTC\noASdcLf9mLw/enlmhgOS8HlF4mgsUQjkIM+NE6bp7Hb1oRBlQyDj7Hulvfwi\n9tmr16397NiamzDnRrBsEYXDLyzvkmzKB+HL8GUHenIZofUpKTnRxhVA4gEc\nWvmagqudQZ3lwG+FW4b7pMMACq09LpqTiPEWr1AhdZV5El8J2AyapgHS5vb4\nT6u1Z9Wpe+2AvipPdcsZZ6gHyGdWccSx7MX/Orvp7l/kY2BHyfiE8jnbXORZ\nQ7VKT0jfKtorCgCDrMqRhfrmM16q1niNyuLNrck8IdMytMf6A8VkVLjDce/Z\njAbOEVpfZmDyNDwTT7KpTdZwVTg1KQ4wqgZn2EGgfhmOriUFVunhdIoe5nka\nVPC2vHBnLwwqpZ29rsvg9gluzYdcRtL5hYlFg/hq2O805cL7dAZ1O2kNspEl\nEMIH+t+q105ThQnnRiZOD2uY6PS3JukXWaa0qJrTHIycvp5s+e/5uoeFMCfJ\n4wewvIkUoe1FR9KNJ5PDj2ZTpO8YSxGqGJyf3HHd8lI6WfDbgqAbitSFQTlv\nJbPjPVwcilWlWwM1H3y8WU9H8gNXxtJirFYb1+KnK6cg4ewA8S4GQsEi7Jdf\nRkg/kXRd+59UoCz3IpR2rJfUfBhL9ikL0wq3G3bykTKPiodrlt2t4R50hDzu\ngxXp\r\n=M4Wo\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\n[![Publish Documentation](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml/badge.svg)](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml)\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=14.2.0"},"gitHead":"33246a8f41c22fd7b98e5f48a0e29ba8bcba8b02","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint lib test && npm run check && deplint && depcheck --ignore-bin-package --ignores=@types/jest,typedoc","test":"npm run lint && npm run test:unit","build":"npm run clean && tsc -p tsconfig.build.json","check":"jellycheck","clean":"rimraf build","prepack":"npm run build","lint:fix":"balena-lint --fix lib test","test:unit":"jest"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"versionist":{"publishedAt":"2021-11-24T13:33:23.133Z"},"_npmVersion":"6.14.15","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --fix"]},"_nodeVersion":"14.17.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.4.0","@balena/jellyfish-logger":"^3.0.143"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^27.3.1","sinon":"^12.0.1","deplint":"^1.1.3","ts-jest":"^27.0.7","typedoc":"^0.22.9","depcheck":"^1.4.2","typescript":"^4.5.2","@types/jest":"^27.0.3","lint-staged":"^12.1.2","@balena/lint":"^6.1.1","@types/sinon":"^10.0.6","@types/semver":"^7.3.9","simple-git-hooks":"^2.7.0","@balena/jellycheck":"^1.0.0","@types/json-schema":"~6.0.1","@balena/jellyfish-types":"^1.2.30","@balena/jellyfish-config":"^1.5.16"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.299-renovate-typescript-4-x-33246a8f41c22fd7b98e5f48a0e29ba8bcba8b02_1637760960948_0.6090487765457884","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.299-joshbwlng-remove-jellycheck-640ade4aaebcd97b8d1322de72b18c580bfbccd7":{"name":"@balena/jellyfish-plugin-base","version":"2.1.299-joshbwlng-remove-jellycheck-640ade4aaebcd97b8d1322de72b18c580bfbccd7","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"Apache-2.0","_id":"@balena/jellyfish-plugin-base@2.1.299-joshbwlng-remove-jellycheck-640ade4aaebcd97b8d1322de72b18c580bfbccd7","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"34e113be3c23e607233417064ade42aca7fa8fd6","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.299-joshbwlng-remove-jellycheck-640ade4aaebcd97b8d1322de72b18c580bfbccd7.tgz","fileCount":19,"integrity":"sha512-zqeU02CgxxH+15qAZ6NHjEH0Fej80P26e8KXqNnOtRItTRDi45a4+7KiKt6RUsr02aEp1+r4Lt5TSTXtjzNjTA==","signatures":[{"sig":"MEQCIAwjaQd/uS3cO17iuVgmTVn5fI1cnBEZ9rr/uuoIZfrQAiB6jhJwo8bq3vSpCXr8grv3XO0xDxGkoRd0BczxZHj64w==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":78975,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJhnvU9CRA9TVsSAnZWagAANnwP/Ay0zNxr8iwNpXTdFAKo\nv+hcpmFUCkzoczzEVR7VEiFTe6vprTXsiKe8ywd+1EH8jC8MxlBhJQ1EoeWy\n2vbFnvW9uri++eGc9QQBdDb/CEkMwbkJMbSRjj0whjYnHx3LyE942tbgujHy\nd8EYUNvgUOHx4lmPsNtRTC6jZrevGV9mwXpVZpFKZ8nht+5i1u0hznbmVQSi\nzgN+4+m6RzHF/gI7LRYmFNAzKN9XAXFYam+vJLNBRM4/u8aTkQVvq5HnhRC8\nocCkAsGpSkdOQ5Q29Mprwa2SQz3C0HZjcJ+FO2wak5CmDKGfaE6SLxAIpn9y\nhG/JBKRALO09gI0mgpoCuoQV10s+GDEacsGIrUOIRHQRWlXM0231ZZap4JEf\nU4tmkyq3dC+78sj4WmJDTmCJYpWfMamI771OSeRGMU0A4aN9V9BhQ3b7TDrd\n1/vCjTCChL8qrxLZzOsYMOvgme5ZLC/BsakbUooPXJFnIEYHMfgN+virFuu3\nDOmyXMkozwHpeM5O/AsETIPB8DC1wVYTOjBZqCFmouCsqMipWhgDPoZHsCBW\nVLVtMH13u1wrdqxuQLLz0M8pUJxTJZygdBtamptCeUu0h1FwZ4tp3V2kheZO\nq5y5eYOu7f6kxJKkklGnGVLfnvPOukMmzSXUU+ZR13SE1SVKbmNQks5ib/id\ntacy\r\n=CW3Q\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\n[![Publish Documentation](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml/badge.svg)](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml)\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=14.2.0"},"gitHead":"640ade4aaebcd97b8d1322de72b18c580bfbccd7","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint lib test && deplint && depcheck --ignore-bin-package --ignores=@types/jest,typedoc","test":"npm run lint && npm run test:unit","build":"npm run clean && tsc -p tsconfig.build.json","clean":"rimraf build","prepack":"npm run build","lint:fix":"balena-lint --fix lib test","test:unit":"jest"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"versionist":{"publishedAt":"2021-11-25T02:28:04.971Z"},"_npmVersion":"6.14.15","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --fix"]},"_nodeVersion":"14.17.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.4.0","@balena/jellyfish-logger":"^3.0.143"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^27.3.1","sinon":"^12.0.1","deplint":"^1.1.3","ts-jest":"^27.0.7","typedoc":"^0.22.9","depcheck":"^1.4.2","typescript":"^4.4.4","@types/jest":"^27.0.3","lint-staged":"^12.1.2","@balena/lint":"^6.1.1","@types/sinon":"^10.0.6","@types/semver":"^7.3.9","simple-git-hooks":"^2.7.0","@types/json-schema":"~6.0.1","@balena/jellyfish-types":"^1.2.30","@balena/jellyfish-config":"^1.5.16"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.299-joshbwlng-remove-jellycheck-640ade4aaebcd97b8d1322de72b18c580bfbccd7_1637807421452_0.5500914736279154","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.299":{"name":"@balena/jellyfish-plugin-base","version":"2.1.299","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"Apache-2.0","_id":"@balena/jellyfish-plugin-base@2.1.299","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"ec3c034f0ef2b1dd4140fa456662c8798152bea5","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.299.tgz","fileCount":19,"integrity":"sha512-pJdAvpy+3NykCZnUTRAh5pSSf/6VV0D64mO6bISX9XtL5xnH++YNuBqmbxxnWHHKyAjJG/E7X6fK8XK6HZOASQ==","signatures":[{"sig":"MEQCIB1JGpXztJVi4ocAV2szLm8OLsXIPl341B/DzAGGJ1A3AiBGjwYKrKmpR4keWAGogNAcDLk8hh57zFI3jvxMgJaCvQ==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":78906,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJhnvX5CRA9TVsSAnZWagAA8woP/2BQtabrFcWEyoty0iBF\ndgbP0/77/pbc8yT7hgZwySWuEfZgvPG63sVSykmjn2MOVbAJmEJY29NDuKCI\nE+tfbA0Js43SG//XcVPz5+JjYOmzgxbQoHyqUI26qC1tsO4QVQv1keLpHfK6\nlmosMiS6EKVNeBeFRbmtJqqaTiCHCsAYdEvG9asflAcSGlUdkrC8zpGx0Dia\nJgGbc6xgu/FBFid7d3QUuObIuLh27VbezlsbRCJ/g3JZ20izf2C4l9ms8ZW1\nIW6rsSjikT79FDb1hTJL2ZcMsCfBby+S0GZIQBHjdS8lIbJW8ClHyD9u7PDl\nmYxUzqC4gjoReZfnA3G/P9e+LMGlzVl8kb+f1huYm0xdCS5yxDsyCAw5+ZbL\nirL+a6FU6q/L43YOSXXIbXb9kGUGsIhCoFnSzOaa2dW8MxI+JAaK+1sBAMSy\ncqqRVifsTdW5qVJ/YRkIqalF2ROCh20/mh/JlGy0nHsMbQlbErHuLpAosv1q\nHSmbRllBCUiqtLTXmeMCg3acvkXfrx9WCsuZzx4vudXfw6Bb+lSRYFUzm9u0\nZHWmCHi34evNMO3RiMoQVbCRksh4JGhSW2ca8X9k08mQPtkbZMr38WxNz0rt\nrXKfFTZ3S5pTF4A8/X45+k49X2SxVivqR6Kn05WgetvbmUv44QtakPeCta6w\nMn/t\r\n=rq3t\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=14.2.0"},"gitHead":"84afbe38e1afa49ea3cf6fd0342b2ae0cca74dff","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint lib test && deplint && depcheck --ignore-bin-package --ignores=@types/jest,typedoc","test":"npm run lint && npm run test:unit","build":"npm run clean && tsc -p tsconfig.build.json","clean":"rimraf build","prepack":"npm run build","lint:fix":"balena-lint --fix lib test","test:unit":"jest"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"versionist":{"publishedAt":"2021-11-25T02:31:37.207Z"},"_npmVersion":"6.14.15","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --fix"]},"_nodeVersion":"14.17.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.4.0","@balena/jellyfish-logger":"^3.0.143"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^27.3.1","sinon":"^12.0.1","deplint":"^1.1.3","ts-jest":"^27.0.7","typedoc":"^0.22.9","depcheck":"^1.4.2","typescript":"^4.4.4","@types/jest":"^27.0.3","lint-staged":"^12.1.2","@balena/lint":"^6.1.1","@types/sinon":"^10.0.6","@types/semver":"^7.3.9","simple-git-hooks":"^2.7.0","@types/json-schema":"~6.0.1","@balena/jellyfish-types":"^1.2.30","@balena/jellyfish-config":"^1.5.16"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.299_1637807609782_0.2902209971444032","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.300-renovate-internal-patch-7ab36468826a98007409a77b66187f8186d68e7a":{"name":"@balena/jellyfish-plugin-base","version":"2.1.300-renovate-internal-patch-7ab36468826a98007409a77b66187f8186d68e7a","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"Apache-2.0","_id":"@balena/jellyfish-plugin-base@2.1.300-renovate-internal-patch-7ab36468826a98007409a77b66187f8186d68e7a","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"a2d2cc6edad9f6b890e3a1b6819b156c3d619c6b","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.300-renovate-internal-patch-7ab36468826a98007409a77b66187f8186d68e7a.tgz","fileCount":19,"integrity":"sha512-xazptLAb0hHk05UYLjSftaHoTJQowLj8Q/zn7XWSxt/8futD1ybs2/1EJFc/Mlwct7d0veu8GFG8pgyG54EnAw==","signatures":[{"sig":"MEMCHy23pBS4heEgzyxfpNiDXvsvLoLBi6tVUiZsQ8jVXBoCIESV4+/oRDLCrwoSvqkOJ0KLjlrXUUX1mWZscLZmD9gn","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":79043,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJhn0irCRA9TVsSAnZWagAA/0UP/1irZufLzvZap0aRqx3c\nAYJw4FSTHTk46WlfLTZrVpT224Rb5mHL/vwfXrXciA0R9Ea7IHdu7fm15dXy\nOMwjNdh1LXE1FEjtEvJtzs3holi588B+SmwVXY0/0yUvFPe48iwIDs280hqz\n3uc9yxfZSjnssUBWAgN8Qll+0//iTQFjTuW6WH+ixLcwzpXpZUm3IaAF+4Qv\nwbF2vjtDPkJoTQOt8Ta3gfBydDQ6oyjTtzLdECZwPSrNqXh6PmJTyh3ZHNRt\n+eWC9SOT+IdWCDG5PPMbFjR+r3C1i9TbrLtZ5llBbC3xMOqWj9q9KtP2eEGk\nY6HwBFRcGdRftIqB6GzOejoO6+RJCcZp5v8zvjMFkvDZnnKkeV24D856v0/m\nvAmTnmafVjCra/bk/+icUyTg30rmvcZDpOcTD/XMsUwjgWL/ps6bSivT/q3P\nYFdopy2LOqUjYA23RSnYd9Ish4IKGQ34h0thX3dpn5x7ifc3+HYcqO04CIsG\nFrChweGmOFteDdjWNnzvTqXSI8VXMnqRTj2UomWx5fSyulBHv7K/eIQywgDa\nQmgGmOBA05yEgGW7ZR94yPnZ+gWl668QCsCwk40CUK/1ychgNQ0uVdywgPix\nG/fioaEc9/z/NIyFdnDlQbwmj+KRwgf0DyuvMheAht/mwFpNVx78InmSK+RF\ndLzP\r\n=zLNq\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\n[![Publish Documentation](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml/badge.svg)](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml)\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=14.2.0"},"gitHead":"7ab36468826a98007409a77b66187f8186d68e7a","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint lib test && deplint && depcheck --ignore-bin-package --ignores=@types/jest,typedoc","test":"npm run lint && npm run test:unit","build":"npm run clean && tsc -p tsconfig.build.json","clean":"rimraf build","prepack":"npm run build","lint:fix":"balena-lint --fix lib test","test:unit":"jest"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"versionist":{"publishedAt":"2021-11-25T08:22:57.147Z"},"_npmVersion":"6.14.15","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --fix"]},"_nodeVersion":"14.17.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.4.0","@balena/jellyfish-logger":"^3.0.147"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^27.3.1","sinon":"^12.0.1","deplint":"^1.1.3","ts-jest":"^27.0.7","typedoc":"^0.22.9","depcheck":"^1.4.2","typescript":"^4.4.4","@types/jest":"^27.0.3","lint-staged":"^12.1.2","@balena/lint":"^6.1.1","@types/sinon":"^10.0.6","@types/semver":"^7.3.9","simple-git-hooks":"^2.7.0","@types/json-schema":"~6.0.1","@balena/jellyfish-types":"^1.2.32","@balena/jellyfish-config":"^1.5.17"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.300-renovate-internal-patch-7ab36468826a98007409a77b66187f8186d68e7a_1637828779566_0.2594697466280247","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.300":{"name":"@balena/jellyfish-plugin-base","version":"2.1.300","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"Apache-2.0","_id":"@balena/jellyfish-plugin-base@2.1.300","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"c21ca89502baae25d1f8c6920e3570ad9b2a167a","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.300.tgz","fileCount":19,"integrity":"sha512-ZWKtmNWbtQiuqm5FSbPJamJH/Sk15lqn0znYZc9asVGApK/Uhc6XyFyky4GfOGCjpwe1P2IaSP7GwNvZqyEUFA==","signatures":[{"sig":"MEYCIQCzvAgKXYGeXT56fUHCyQTQypq3trk3HYcz0NCGsFTf/AIhALjYh8FCmrA/SECdysxL6i98Qc5iwEw/Tz63KawgEFr0","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":78978,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJhn0mmCRA9TVsSAnZWagAAF8oP/iynMrOhdKhPFLQbCUeU\nc2x0oXY0M97n2cttDJyDDDCb9lSZTlgh5bw9KhpqcKJooEtfhMjsH0eLORsg\nyA3duUo4a3qam4pmRL5ka2XOzq+zY+N8I0kk8qV8o/Lw+hxcMQ9he9KXMvoR\nyo8HqyPuhn+XuzjOLKZ6GbL/coO6Ghpr/NZK9so9P0IDFRKigf9adGeWpKWL\nVj1SFnrqky5QmbYlHt2w9VZIt+LZ+oKlQHn6S14q0C9ogUGV7aMB//cwIotv\nD2egHzRnE5kFzboZljvdwb9W2pf1KhmJc/KPc9qg2mjq3y7nyXEjHobadCGU\nHJeN3Ge5fQAvytt9jgPyYTADzfCzrBWSiW2oL+3COyC9OLj4Ft4WHpCQ+xeJ\n+TZAEluHXrTS2bpAmYO2lZacFrzev1TFVcFV3h16m01zdR0wTQhf6G0Jp0qu\nw7yvGin8eYiRdiaEY4cSvZwM2uZvP9lef6MRKGgS/5mH/H9+I1dLFjeugdRH\nxVU0TEKMq8o/7sT3JZgZ+5lPUWrtjvmAByv1COkRDlVoMghl1ygiuOQFU3Rm\nqvObxxCWu5rBgmE8nNi5LTA94LrkeJeSc3vipC6gogZCIdzRGDoyFx5FehZ8\nHtCfUo2tRXznixvzZtSuGvGhpumHQlCU+Hq8oY5EbMcJIaB2KjSXB83fhiE6\nz9pW\r\n=EJo8\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=14.2.0"},"gitHead":"a027477a7b96a96016c6975ed58cc9663fdd8935","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint lib test && deplint && depcheck --ignore-bin-package --ignores=@types/jest,typedoc","test":"npm run lint && npm run test:unit","build":"npm run clean && tsc -p tsconfig.build.json","clean":"rimraf build","prepack":"npm run build","lint:fix":"balena-lint --fix lib test","test:unit":"jest"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"versionist":{"publishedAt":"2021-11-25T08:28:25.012Z"},"_npmVersion":"6.14.15","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --fix"]},"_nodeVersion":"14.17.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.4.0","@balena/jellyfish-logger":"^3.0.147"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^27.3.1","sinon":"^12.0.1","deplint":"^1.1.3","ts-jest":"^27.0.7","typedoc":"^0.22.9","depcheck":"^1.4.2","typescript":"^4.4.4","@types/jest":"^27.0.3","lint-staged":"^12.1.2","@balena/lint":"^6.1.1","@types/sinon":"^10.0.6","@types/semver":"^7.3.9","simple-git-hooks":"^2.7.0","@types/json-schema":"~6.0.1","@balena/jellyfish-types":"^1.2.32","@balena/jellyfish-config":"^1.5.17"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.300_1637829030245_0.4237588981685756","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.301-renovate-typescript-4-x-ff8f925f3611dd9dbdf804157dd58150d93e2308":{"name":"@balena/jellyfish-plugin-base","version":"2.1.301-renovate-typescript-4-x-ff8f925f3611dd9dbdf804157dd58150d93e2308","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"Apache-2.0","_id":"@balena/jellyfish-plugin-base@2.1.301-renovate-typescript-4-x-ff8f925f3611dd9dbdf804157dd58150d93e2308","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"7145f1bf5c891f6d3ce7a8fed561d69e798ee945","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.301-renovate-typescript-4-x-ff8f925f3611dd9dbdf804157dd58150d93e2308.tgz","fileCount":19,"integrity":"sha512-KEWc7RzLW3e/J5ne97QnBtXEawbS1BbWh4FUZ6LrkDP4gWO0Nzde1EkDevD2MgX7HQa56fIsvF1fNwaykE287Q==","signatures":[{"sig":"MEUCIEPr1qmdsA9PTfW9ltAh9plq3vvQMmsqdZvWe1AofMdWAiEAl3CsOzSgA3aRipLhX5XMa0WCMtLfOy1aPQlVTkkDL04=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":79132,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJhn0o+CRA9TVsSAnZWagAANegQAIwOG1G5Nc0w+mg/NkHp\nqtqKfaedt46RER+9/AqRYDHgL1tsyMqE88wyTWE8HJFihYP41WRBtdohbzWP\nSyX5Gb+lBfM0dAaQwBBP7gtUHcOYy0GduQ/QTfMsGt8f5XEUNCbn7ASoYi+q\n4xCFtb2dtQPMNYjVImYUvo1HBIag26psxQ6N9jt8Zvj5UQQ9HGlTFlGr1ap9\n7dVQGgf0njsPOFpvVjufjf6/Iz8rMInpLyL1mPTFyGXkd8xVehUddfsY106p\nJEmFRXnWwUWiIC6+BYA0dN3ItQq5N1lipMsOAW6VlXHIqP1OKv1S+MnZJZo3\nGORhLKP1mOM80SV85eUKfnl0ukyQxuM58oesPDO6CHa/yhQDSEVnwwdfZHVx\nGpIzkcKT7koRKAnJDgpKtroUzQtXPRCI2UQIGUpFBTITyMHhDRKRSQTMHjzq\nA3VdoH7AWGOqrQsDzgR+2hytGsqGkU9rgSmbc+PpeEZ8906tmMi+91vpaCRY\n3rUFTuEN/r+XDxncscPPZnl8RoE0sMkYN//3QigaaQkA+S58jh4Yp/Cvz6mb\nZNj/+UaX55B1vPPKU7KpAO4fK4n4tXur1OLxcsyo5lYJeJcstiIF7Gg2Bxoh\nKor8lWYVKM3eyg47OdSjcytco1e0E9hSgC+lZY0040z+njT6fegGN6gX+gBd\niFU4\r\n=QpDe\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\n[![Publish Documentation](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml/badge.svg)](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml)\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=14.2.0"},"gitHead":"ff8f925f3611dd9dbdf804157dd58150d93e2308","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint lib test && deplint && depcheck --ignore-bin-package --ignores=@types/jest,typedoc","test":"npm run lint && npm run test:unit","build":"npm run clean && tsc -p tsconfig.build.json","clean":"rimraf build","prepack":"npm run build","lint:fix":"balena-lint --fix lib test","test:unit":"jest"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"versionist":{"publishedAt":"2021-11-25T08:29:53.126Z"},"_npmVersion":"6.14.15","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --fix"]},"_nodeVersion":"14.17.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.4.0","@balena/jellyfish-logger":"^3.0.147"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^27.3.1","sinon":"^12.0.1","deplint":"^1.1.3","ts-jest":"^27.0.7","typedoc":"^0.22.9","depcheck":"^1.4.2","typescript":"^4.5.2","@types/jest":"^27.0.3","lint-staged":"^12.1.2","@balena/lint":"^6.1.1","@types/sinon":"^10.0.6","@types/semver":"^7.3.9","simple-git-hooks":"^2.7.0","@types/json-schema":"~6.0.1","@balena/jellyfish-types":"^1.2.32","@balena/jellyfish-config":"^1.5.17"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.301-renovate-typescript-4-x-ff8f925f3611dd9dbdf804157dd58150d93e2308_1637829182090_0.44571406112886436","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.301":{"name":"@balena/jellyfish-plugin-base","version":"2.1.301","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"Apache-2.0","_id":"@balena/jellyfish-plugin-base@2.1.301","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"1c3a2c096bfe8798a5c19999beba1a3eee6d6102","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.301.tgz","fileCount":19,"integrity":"sha512-q8K8TsWD0FONdI7RPjjg3silVSeADYexgqD61eBPYUUnSL+yq/QgRZ80ydmDze6Vh7FSlLMsKuLSzU13AxnSoQ==","signatures":[{"sig":"MEUCIHgZbqBEyzlwEFyHLTqfDu3jtd4Qzf1KgSpfQtg5wrocAiEAiy9iejWXEfkLLDSVMu5fqFT4dBk+Dp4aDH1SIT8Jff4=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":79067,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJhoDQtCRA9TVsSAnZWagAA45sP/3cD9VljWG1USrySVxKR\nvKC6arOH6/bDnZ6Eply0hHxzQCa4biQM/Y4I8n7yxjatW9NpEQXTzrtL1DQw\nZskqS63152KNJaOst3yA4b3YUdzyfuClB9Lx1UN/XEtlZq7tpIMsKOGFDt/U\nxwm8hxq6RLbtVu+iNdGTifO6rMu9IkXVIllwyWRmza01YcmvKF1F8i6J+if+\nufxwpBqdKg4sglC16s9oaG01mcMbRQLkt2/saAsDVRICvO1nvyC6PvrvPWJg\n/+nRjfmE20XwFKbdAcK6vM2sjL/tixd+LihreJ7++Kc6C9cFjb/e9wR5R897\nIGVy+PO9hdTxj/nKqp573ZzV83I8vTm3eZHqp/yRskAZSU8wDXEOJ2PJfFzR\nWGhytjY402zmMKqxLm/QwGk0bO2KqZo/m8i5BHLKRhhfu1fXnXfMkGActpJe\nK4bsdNl7B3jsoVb+CjB4rsUuGW5sbQr3Y6B3PX8nF3d2Fkg0+uIKGiOC03No\n6RupgPeoRlBmNFr3zqV4hZt0+A8xQ/wp1XIX5qS9UKEW0n4xpCqIq6WZAW7K\nsmiVYyJuyPY4KNxm4oc/xvLaSL4Sz4ydYYrIKx1csYsgFt9JnGy7k1QepHzH\nNhStd1jBWk5fgIy58QucsK6qiJSD4+o7CuS7GVFJWnijJCLtPol1EcGO/ATT\naaNM\r\n=LX4s\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=14.2.0"},"gitHead":"0d974f1247f8c8536680ce20c92e3398c62ae06b","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint lib test && deplint && depcheck --ignore-bin-package --ignores=@types/jest,typedoc","test":"npm run lint && npm run test:unit","build":"npm run clean && tsc -p tsconfig.build.json","clean":"rimraf build","prepack":"npm run build","lint:fix":"balena-lint --fix lib test","test:unit":"jest"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"versionist":{"publishedAt":"2021-11-26T01:09:13.817Z"},"_npmVersion":"6.14.15","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --fix"]},"_nodeVersion":"14.17.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.4.0","@balena/jellyfish-logger":"^3.0.147"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^27.3.1","sinon":"^12.0.1","deplint":"^1.1.3","ts-jest":"^27.0.7","typedoc":"^0.22.9","depcheck":"^1.4.2","typescript":"^4.5.2","@types/jest":"^27.0.3","lint-staged":"^12.1.2","@balena/lint":"^6.1.1","@types/sinon":"^10.0.6","@types/semver":"^7.3.9","simple-git-hooks":"^2.7.0","@types/json-schema":"~6.0.1","@balena/jellyfish-types":"^1.2.32","@balena/jellyfish-config":"^1.5.17"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.301_1637889069745_0.1497392346754267","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.302-joshbwlng-use-renovate-config-c590c3b8c3a21f11e56ef290736bc38180d3876a":{"name":"@balena/jellyfish-plugin-base","version":"2.1.302-joshbwlng-use-renovate-config-c590c3b8c3a21f11e56ef290736bc38180d3876a","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"Apache-2.0","_id":"@balena/jellyfish-plugin-base@2.1.302-joshbwlng-use-renovate-config-c590c3b8c3a21f11e56ef290736bc38180d3876a","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"b369b1628c4c6b356c37432eb2866b0d4b98c32c","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.302-joshbwlng-use-renovate-config-c590c3b8c3a21f11e56ef290736bc38180d3876a.tgz","fileCount":19,"integrity":"sha512-b3en9PScTcnwFa34F2QzRWxY9Vmig++whu/JDnxszVU/nKATmN916AvHWlVcJgl532xLO/1t4pkIlEH3tFlhmw==","signatures":[{"sig":"MEYCIQCKdwrLEDWfQQPAo8TOaiKa31oFS9OPPX+VXgiMwJMRIAIhANb7TA1cR7D34mzOVuDDxbdwHQme4h3O7KJcfLVU9oNj","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":79212,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJhoGl+CRA9TVsSAnZWagAAxhUQAKQHTCBzI8ZlLB57XKkO\n1Jj6XrhXXao6xIxGyRJdze7kgVpoVaFVTl5x4w79XntE6BsLsTD77Ix/ja4g\n8qQrkCtEWe8KMwnZLWYJTrUeJ5XAAAlMY5bzbmxSqFbo6KngYcJECR3GQ1uo\nsmG7r7Oo1qY4T0omZ0ILT4c3lERjrWHuVi6py/qbRhllWuEWKB/bpD8O1p2m\nW8qqFjJ7jGe3KNE3xMiiNAlQoOR03Ef7+zCx1wq4L9qJZOphj/TnNvQFX3In\ni+DDmQiijSdMCM+403kCgxFbP3YQlpDSO7rv/0VdhvxDEBFcvDfa2RsDWUo9\n+Z3tiLBJEp/yOwQyhHo+glCG381WfI6cCT+nvdSUaD0+WVVowHxvTkl46kBC\n/TvCWwuwMuDfEug63ZbX6XV+COiuVl+LeRixJCg/0n2dPjT+fKMbyP+pcW7V\ni9VaBYvn1ljE/16OvFrS1JibGBklM3HruaWVfwsicCOQnx8oqDC0rmtrPMvv\n7tEJdIeHaTJhy1PrtakNGcD8vF3lxJN/xTCTOz/uacqrCdkWx+4wM2tWT3CL\nnSKTDMvq0HbidYgHYgKqlETXVzE7JrRGgwBBOM5hZna+DgGOzB+RvH7T1BSR\nCfhPeJBRnKq9vcMFFoQDGX2kMwTV9m40/sysXrOqJrKNAze4Pb72JwWkMRjf\nGocj\r\n=sxAI\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\n[![Publish Documentation](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml/badge.svg)](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml)\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=14.2.0"},"gitHead":"c590c3b8c3a21f11e56ef290736bc38180d3876a","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint lib test && deplint && depcheck --ignore-bin-package --ignores=@types/jest,typedoc","test":"npm run lint && npm run test:unit","build":"npm run clean && tsc -p tsconfig.build.json","clean":"rimraf build","prepack":"npm run build","lint:fix":"balena-lint --fix lib test","test:unit":"jest"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"versionist":{"publishedAt":"2021-11-26T04:55:38.987Z"},"_npmVersion":"6.14.15","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --fix"]},"_nodeVersion":"14.17.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.4.0","@balena/jellyfish-logger":"^3.0.147"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^27.3.1","sinon":"^12.0.1","deplint":"^1.1.3","ts-jest":"^27.0.7","typedoc":"^0.22.9","depcheck":"^1.4.2","typescript":"^4.5.2","@types/jest":"^27.0.3","lint-staged":"^12.1.2","@balena/lint":"^6.1.1","@types/sinon":"^10.0.6","@types/semver":"^7.3.9","simple-git-hooks":"^2.7.0","@types/json-schema":"~6.0.1","@balena/jellyfish-types":"^1.2.32","@balena/jellyfish-config":"^1.5.17"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.302-joshbwlng-use-renovate-config-c590c3b8c3a21f11e56ef290736bc38180d3876a_1637902718620_0.31983254736309963","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.302":{"name":"@balena/jellyfish-plugin-base","version":"2.1.302","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"Apache-2.0","_id":"@balena/jellyfish-plugin-base@2.1.302","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"cdd82e41ffacdb950cea1008d5797429b84fbd8d","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.302.tgz","fileCount":19,"integrity":"sha512-5JG5TXGsfhVC9CZY1Pg2q2/S6Xx+dv2CqxfZ8x4gRn/RYgTnJFd6uQRW5aeDfcMBmqVwLlFaCV9z4TIgGY4PCQ==","signatures":[{"sig":"MEUCIQDtIFU3CyyK81uhlK4hlaxSUAnUAwnyS1JuF1LTNPGkwwIgVKLIRR181wRXIxc0dK3/bOwuoA3seyV0wdR20E8TyBI=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":79141,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJhoGpjCRA9TVsSAnZWagAAiOAP/2yMLBmXZBtLieSYmTs2\nTcNt7Be2ZJNKBYi/uCPfAC9kRUwSAbwN/IRuGaYrmJcgltRBXIjSCtRgWA+O\nLmwF9kr10MpRtvTu38WRRBGpH6wWLYSiE1/iiiYXV7tS7CslDYCgnxsrXOL+\nP7HIc8LQVrxQEFGYIi7o/vx92+vQq+1eb1mIvmD5KympJw3Mrsu51hM265rT\nPJ4CdWti/j80GUS/ursb2on2WaGsYSq4hdU37SgV6Oz+doYX6dhrhW8SApai\nMjaRndlg72RYyn94w4Oo8HOy510siIG/vwn6WR2TQtPeg/bYKD3ceAhcChfj\n9KDB3qj3JmQTlZcCIgORCcjP8s31Hn537RfRTX5KYQxJz8pSXVAh4W5UtmnZ\n98ZWm7JrBb3iLel1vpfkHADFK7EO8dyyi21jI8tgLjFh3jBKsEsrlb0keec3\nfCfwhJ4U58QQTEq+RTdQNCBpzHkDa1NF4UAJZAgQG4Rkg8mQYmZPjtdRa71G\nip6puwMt6Y9ZU0k8NdUNt0LeetY3n67JJl4mGn7ZmE7CwxIUGbCfgTT7aG3C\nvmJW3fMgZnIUBxty2wAfFGUNNs1O1/HjTn0bpnNrDD3DCRUM3Xurp+zWCu33\nFL8+BnKyekNXdGOp9RBowS9MQUEXnv0ADspsc3dk6VLQuXlmQhzGbfNpfbBx\nFJvI\r\n=zsGU\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=14.2.0"},"gitHead":"699da7bf208c31674c5d2f7e421426b5f4136927","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint lib test && deplint && depcheck --ignore-bin-package --ignores=@types/jest,typedoc","test":"npm run lint && npm run test:unit","build":"npm run clean && tsc -p tsconfig.build.json","clean":"rimraf build","prepack":"npm run build","lint:fix":"balena-lint --fix lib test","test:unit":"jest"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"versionist":{"publishedAt":"2021-11-26T05:00:31.795Z"},"_npmVersion":"6.14.15","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --fix"]},"_nodeVersion":"14.17.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.4.0","@balena/jellyfish-logger":"^3.0.147"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^27.3.1","sinon":"^12.0.1","deplint":"^1.1.3","ts-jest":"^27.0.7","typedoc":"^0.22.9","depcheck":"^1.4.2","typescript":"^4.5.2","@types/jest":"^27.0.3","lint-staged":"^12.1.2","@balena/lint":"^6.1.1","@types/sinon":"^10.0.6","@types/semver":"^7.3.9","simple-git-hooks":"^2.7.0","@types/json-schema":"~6.0.1","@balena/jellyfish-types":"^1.2.32","@balena/jellyfish-config":"^1.5.17"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.302_1637902947049_0.2111596644346736","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.303-renovate-balena-lint-6-x-b7e91be1bfb793a787f9f12306ccdb63ea15fb85":{"name":"@balena/jellyfish-plugin-base","version":"2.1.303-renovate-balena-lint-6-x-b7e91be1bfb793a787f9f12306ccdb63ea15fb85","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"Apache-2.0","_id":"@balena/jellyfish-plugin-base@2.1.303-renovate-balena-lint-6-x-b7e91be1bfb793a787f9f12306ccdb63ea15fb85","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"864a700d1c7b0b4b16e950f8c1774bf3def13a0d","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.303-renovate-balena-lint-6-x-b7e91be1bfb793a787f9f12306ccdb63ea15fb85.tgz","fileCount":19,"integrity":"sha512-EVKp2jxzQjY6Z2rsETS6Ur56rKjg9dhc4VyYZc+F0Ae7l53r62lwpfqwAuy/T6lQ+JUJRBrIvYh0BtUpiefa1A==","signatures":[{"sig":"MEQCIC80FMtJG3PSfl0Jlap5aMOCjxl9Vno+WsdRsCDEaKoVAiA/E+Pe4i0wFcWQraocQMj2xgvkZiJniETFfhAzkBeIFg==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":79298,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJhoR8aCRA9TVsSAnZWagAApYkP/2sYMPNEb9bvF8jnn1D5\nMrjeEAf11jOqdiMott5BBARyaYsQJN1R0zB5dELyzagNuR+lFm28XHaiAmHW\nXor665QTbZiINETmHEKbB0vYvEYwWUQqIu6bTxPWY/oOKyhnuw6Es9InEMwq\nURf4VMfiRKcwAY9RJzoFQxjEmwMrNeDQ0lJmo+Q8ArzLtk5LM78S+6OXKo4q\nDONWUTf2bor7OuFcPCKVtfBlmVYftBiG7nZSaFSNfpr8xhfrBJLXg3aO/1yd\n7KMtueO/4rR/pV/7hlAa25OToCpLkaKAQzH8cD1Fo67gtf6uN3RKtEtPLBNJ\n0cuNvemaPzZuNuw8ye2LGd5KlgHp0J8a8VTDxitml2moYnmyyqej4YKaF7S5\n11CniJJblCLHRFFqbQCG3xUlVTlDiKkLSeklBhOAw1WnUSB2fTv7Fqqs9ynA\nuL3jjxhM87ol9oDwZPKxP7GSTr+8lo7+BvkjKojPClCIbs9klNMGz1T5e/BI\nd3zExhc3inR2ceIs0rqWKbY7r//W0ydCzgVom8WPVbbFi1sda63XXSIvhBua\nsK4xy+pirP2xAp1rWv5t/Waz9PxkWUfzNQ9VkuLUnnUWNuWBzsYy2DTQlSTP\noLQSWXGB3yjNLWrUtI+mVq4CzNrz9YjdO3dOAF4oW0mEJ8VxbCvUL12vcmEx\nLsd2\r\n=R38F\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\n[![Publish Documentation](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml/badge.svg)](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml)\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=14.2.0"},"gitHead":"b7e91be1bfb793a787f9f12306ccdb63ea15fb85","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint lib test && deplint && depcheck --ignore-bin-package --ignores=@types/jest,typedoc","test":"npm run lint && npm run test:unit","build":"npm run clean && tsc -p tsconfig.build.json","clean":"rimraf build","prepack":"npm run build","lint:fix":"balena-lint --fix lib test","test:unit":"jest"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"versionist":{"publishedAt":"2021-11-26T17:50:36.791Z"},"_npmVersion":"6.14.15","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --fix"]},"_nodeVersion":"14.17.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.4.0","@balena/jellyfish-logger":"^3.0.147"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^27.3.1","sinon":"^12.0.1","deplint":"^1.1.3","ts-jest":"^27.0.7","typedoc":"^0.22.9","depcheck":"^1.4.2","typescript":"^4.5.2","@types/jest":"^27.0.3","lint-staged":"^12.1.2","@balena/lint":"^6.2.0","@types/sinon":"^10.0.6","@types/semver":"^7.3.9","simple-git-hooks":"^2.7.0","@types/json-schema":"~6.0.1","@balena/jellyfish-types":"^1.2.32","@balena/jellyfish-config":"^1.5.17"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.303-renovate-balena-lint-6-x-b7e91be1bfb793a787f9f12306ccdb63ea15fb85_1637949210213_0.8104971869970754","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.303":{"name":"@balena/jellyfish-plugin-base","version":"2.1.303","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"Apache-2.0","_id":"@balena/jellyfish-plugin-base@2.1.303","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"8b821ed27bb9922673c6667727a149eb830428df","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.303.tgz","fileCount":19,"integrity":"sha512-eI0k14uLPduNiYyGqiXQJmE6+lXjDZ2rtzZZeg3FYVYvQ02tJuYT0c80Q5baYSXT8FFjGZF9KDA3Jkwo0fyFZw==","signatures":[{"sig":"MEUCIBWuZEtWFmGQcS3rSn7kQnNM0CbLAbakqerEWvz5LKR4AiEA9Cpp3xLdvq/UM/4PGbz7mFDDVG30bg/LqviMykvqLNI=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":79232,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJhoSAMCRA9TVsSAnZWagAArO4P/ijzWr2D+FfrJNacDZTJ\ncnqTziPZ9IBnUxlTIFczFQ0c1uBYFCnatG2mLIyH5Lbs1kD3kuKuVLBACa8T\nw4MY2RDcKIw9BzOuz0sqVgZn9xRBbI3c6ZikEm1roJLE7hlwsfZ28fIAb7gD\nd9v94TklgrsTQMYLSrVvFtegtweanc7olXHSsr0tMPBNY7GF+6G9203mm1n1\nHFZ0foNIEuuk9MKcrqexpd69GxAQaB9q0j0ur4XnolvqTUBIpgl2I2YKdav2\nAhFcG+lQn5tXnqcNPvpZ1SXe8MGcoEFjpz4k0fIvA6aOTCKe0I6SXY9O0Vdt\nc6OOpCXF4j90vSiR8yNutN6FCgLvGnM+dMFAwz8llCQTyWtxwelThHziVFsl\nZ9z6k15gSHFPbMy0dR/lsNcohNq4jj+TxEBUmCjkk/exFOmwUXP3jizluT1b\nWOB9BuevQV8GO6Q5flqwF8T0+TzJ/XIMyEO0yt5XmnA/M/uc/EMeYsPXwtr8\nq1ctO4pP8XmB/AYky7LaKT1llXP1i6xw5higUZmfnyDhxEvdldAVdJsh/oEy\nPFUQXsMEQJCLrV4cupksAIGba/dSqWeA1GARZmfhEYNnlrrliuhjvKthSXey\nqbQ0JnFnfq2vbHS2xFkpcVjboTywXdqboQuq5cw0WO/qVpLAooF6x1ze05uQ\nvuWZ\r\n=3XoB\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=14.2.0"},"gitHead":"8024fa6ed68764366e3d2021ce7190641c687fe6","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint lib test && deplint && depcheck --ignore-bin-package --ignores=@types/jest,typedoc","test":"npm run lint && npm run test:unit","build":"npm run clean && tsc -p tsconfig.build.json","clean":"rimraf build","prepack":"npm run build","lint:fix":"balena-lint --fix lib test","test:unit":"jest"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"versionist":{"publishedAt":"2021-11-26T17:55:32.848Z"},"_npmVersion":"6.14.15","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --fix"]},"_nodeVersion":"14.17.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.4.0","@balena/jellyfish-logger":"^3.0.147"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^27.3.1","sinon":"^12.0.1","deplint":"^1.1.3","ts-jest":"^27.0.7","typedoc":"^0.22.9","depcheck":"^1.4.2","typescript":"^4.5.2","@types/jest":"^27.0.3","lint-staged":"^12.1.2","@balena/lint":"^6.2.0","@types/sinon":"^10.0.6","@types/semver":"^7.3.9","simple-git-hooks":"^2.7.0","@types/json-schema":"~6.0.1","@balena/jellyfish-types":"^1.2.32","@balena/jellyfish-config":"^1.5.17"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.303_1637949452581_0.16709500311702863","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.304-renovate-balena-jellyfish-config-2-x-5b4604bda669951a66a78340ed1d0df6e528abd5":{"name":"@balena/jellyfish-plugin-base","version":"2.1.304-renovate-balena-jellyfish-config-2-x-5b4604bda669951a66a78340ed1d0df6e528abd5","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"Apache-2.0","_id":"@balena/jellyfish-plugin-base@2.1.304-renovate-balena-jellyfish-config-2-x-5b4604bda669951a66a78340ed1d0df6e528abd5","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"2f33f8736403dfc83291527e39b6b3f187442b76","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.304-renovate-balena-jellyfish-config-2-x-5b4604bda669951a66a78340ed1d0df6e528abd5.tgz","fileCount":19,"integrity":"sha512-HoCISyU+MNBh1pPHmku8U6PTIsXfOna9BxXRSR5RW41Utd9Df4m7rnXRIw2PMh0M/G0k42BVul/4/meN9o/AEQ==","signatures":[{"sig":"MEYCIQD0qazv/a/QX8IEjsL97WVhcw62J8Ye89V7fhYvHKiqBAIhAPnK+HeUZ3vlx/tPC1xT+R4DamYot701yB3KGa2kO5B7","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":79408,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJhoSCRCRA9TVsSAnZWagAAC90P/3WTKKSdQ7AUf9wN0jzS\nGW28UROengg9N9zyeleHMN9+CSOfpSZw9b/zFhN9CuQTkTQG5mYg1b8IVIfN\nz9wvJRwzcY7VIORWZCUKgYsnxvlDKZheT7qtH9lYDvitxms4u65mWGJ86c4X\nWXncyEh8KtQhAbF55ZLUHlfHSp+cgxW1oAXjzJDbmaMXGcq++ysth7SyL9el\nmza7T65STY26kZCsd/mm3dvs0qdUG4wOXnG6B0C1nB9188mat4T/RF4kuShS\n4ahwvuWMIs4vR7/lag87Vt+zHzuV+SdZ4NosNgSSpTXQ3jIcNWRzDMmv5dJg\n3oW5dA1a7L4lMlDJ7iYVeN32Wd8XgLJPBa7pTI9iCquBxZAeao5jJp8bpW0p\nJp5E4coSehraE103n7qM+5VwOme6jEP9GYz2CByjuUx6Axds435RrPJ8/Iyq\nrizQyu8kUb5zJvmdPFO2/VYNhuhYja1pFuCGEZxtogKzPOqvXk0F3ruYaj0t\noaI2v9OCKWZtl+0fytlufnP4aFBpCASPy8emTJTZRKlUWflK4MT3r2GIRtvm\nMQaa9UXe3+F72w95fVWgXUEef0b+IRJpRKs1YFxb3SZQwCsUBvsofgns/3P3\nekUd97Imj5fIFNW7eN1SS5tIJx7JhvsbJSPVqxUC7mm/MsrzsjXEbM6e5mI/\nYGVM\r\n=Fb1K\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\n[![Publish Documentation](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml/badge.svg)](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml)\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=14.2.0"},"gitHead":"5b4604bda669951a66a78340ed1d0df6e528abd5","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint lib test && deplint && depcheck --ignore-bin-package --ignores=@types/jest,typedoc","test":"npm run lint && npm run test:unit","build":"npm run clean && tsc -p tsconfig.build.json","clean":"rimraf build","prepack":"npm run build","lint:fix":"balena-lint --fix lib test","test:unit":"jest"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"versionist":{"publishedAt":"2021-11-26T17:57:11.478Z"},"_npmVersion":"6.14.15","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --fix"]},"_nodeVersion":"14.17.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.4.0","@balena/jellyfish-logger":"^3.0.147"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^27.3.1","sinon":"^12.0.1","deplint":"^1.1.3","ts-jest":"^27.0.7","typedoc":"^0.22.9","depcheck":"^1.4.2","typescript":"^4.5.2","@types/jest":"^27.0.3","lint-staged":"^12.1.2","@balena/lint":"^6.2.0","@types/sinon":"^10.0.6","@types/semver":"^7.3.9","simple-git-hooks":"^2.7.0","@types/json-schema":"~6.0.1","@balena/jellyfish-types":"^1.2.32","@balena/jellyfish-config":"^2.0.0"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.304-renovate-balena-jellyfish-config-2-x-5b4604bda669951a66a78340ed1d0df6e528abd5_1637949585062_0.704271937810522","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.303-renovate-internal-patch-7469788dcfdcf6ccd68f403d8ab34270f0cd82af":{"name":"@balena/jellyfish-plugin-base","version":"2.1.303-renovate-internal-patch-7469788dcfdcf6ccd68f403d8ab34270f0cd82af","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"Apache-2.0","_id":"@balena/jellyfish-plugin-base@2.1.303-renovate-internal-patch-7469788dcfdcf6ccd68f403d8ab34270f0cd82af","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"a87df17a88c8f2589f54de9ce59368ade7073721","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.303-renovate-internal-patch-7469788dcfdcf6ccd68f403d8ab34270f0cd82af.tgz","fileCount":19,"integrity":"sha512-86ljg2Quy3yon/PDc2zU91BEuzt9T2h5TeoAT+vehX3aT2aZDbRKSSW7XQSmvTlNXiasdxcjtMSR8bbg82YsaA==","signatures":[{"sig":"MEUCIQDt9WmzHbvBKyRseNdqexYEhr5HRNKQcekznkUS1BQNcQIgS0P7TeaElyvFfyiiN5SSWrq6eUstoxA1ltzZwWicC+I=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":79343,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJhoSCoCRA9TVsSAnZWagAAJYsP/2NGfkr5OeTjj5yxQGNa\nWqY4C6v8Ubx5jZq4ihfiiua0X7H80Kv6T+AfV3CbmsIgagUG5krx1lz2MGEV\nGMY8xAT/swu0WYwLRDky1o6buGr+XSyvxrksttWvS2faZoDMRTT44TE4zHqu\nK+yHB3xjgK2eeGxf/9XajRwtdUNnoj8plDMUs7T/bXDpDC1yX0i1a9T8zoK+\ndhcQZ1dE2guhPjR2xw4dyjtMSsMQ07C2+hW8jCSWs+y/vr6iKpL3coLUyoVJ\naMB8/BgI6dim9yMdfF/0XH/6Ud1m0/m3XR5yz2fj4tIN+ZXGzcdloAhcZuZA\nUR8+52roPsOag0IPn74Jcd4Q/sCLmpF+TbrHy0RBmTKSJ/gp6Ursn35WnWnT\nl5fZgUqjwl91HOkWBSiy4x19i60Q//ToLiiiYrN2DLHu8nWcjLxpEpvhsZzE\nY53Iv9BPxP+6/GCSDPDbPeZvehhhaLQbi+4owZXPIqsjT/tj7cSZOBusMAwg\nVqOuJlY73tP/8t/VTcqiXAA3qfkRZNDksdDN1LvvAfvDLEW3kSsUvrwdx+n+\ny5wbZJ7AACPnfyMBA1aJnYdguZzIk5s9kdSNNT7Bf76Cpzb/o7yYpGfwMxxS\nvuZyfv8v5EK/9SNZtqv2ygiTqLeP8BfYDFdldZxWHjsRxoKywC+HLvmip1yy\nKyaL\r\n=ch2+\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\n[![Publish Documentation](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml/badge.svg)](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml)\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=14.2.0"},"gitHead":"7469788dcfdcf6ccd68f403d8ab34270f0cd82af","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint lib test && deplint && depcheck --ignore-bin-package --ignores=@types/jest,typedoc","test":"npm run lint && npm run test:unit","build":"npm run clean && tsc -p tsconfig.build.json","clean":"rimraf build","prepack":"npm run build","lint:fix":"balena-lint --fix lib test","test:unit":"jest"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"versionist":{"publishedAt":"2021-11-26T17:56:43.638Z"},"_npmVersion":"6.14.15","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --fix"]},"_nodeVersion":"14.17.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.4.0","@balena/jellyfish-logger":"^3.0.151"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^27.3.1","sinon":"^12.0.1","deplint":"^1.1.3","ts-jest":"^27.0.7","typedoc":"^0.22.9","depcheck":"^1.4.2","typescript":"^4.5.2","@types/jest":"^27.0.3","lint-staged":"^12.1.2","@balena/lint":"^6.2.0","@types/sinon":"^10.0.6","@types/semver":"^7.3.9","simple-git-hooks":"^2.7.0","@types/json-schema":"~6.0.1","@balena/jellyfish-types":"^1.2.34","@balena/jellyfish-config":"^1.5.17"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.303-renovate-internal-patch-7469788dcfdcf6ccd68f403d8ab34270f0cd82af_1637949607962_0.266007107409016","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.304-renovate-internal-patch-4d62ce1927a5e0787f43e66dfea6e89446c9db67":{"name":"@balena/jellyfish-plugin-base","version":"2.1.304-renovate-internal-patch-4d62ce1927a5e0787f43e66dfea6e89446c9db67","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"Apache-2.0","_id":"@balena/jellyfish-plugin-base@2.1.304-renovate-internal-patch-4d62ce1927a5e0787f43e66dfea6e89446c9db67","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"482bd8bfb5f29752d8ea9132b8ac1cdf23ce308b","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.304-renovate-internal-patch-4d62ce1927a5e0787f43e66dfea6e89446c9db67.tgz","fileCount":19,"integrity":"sha512-rzTYz3Rq69sP3Vd/FEk4iKhCGKbVA0/5csCHCwrAoXZhDRlncrX5jkDuBRwMRAMBHEUDwTyxpRuH2ErybInomw==","signatures":[{"sig":"MEQCIDVd0M9CmCNavwl2f9JfoMSZr9/Hha8CpBer4xzd1Tx8AiAb/uWvoAkz/h0fuq/WT9BHw5A2mrNX9Oo5c7cLcjz4Xg==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":79369,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJhoSGpCRA9TVsSAnZWagAAf0cQAImh6vwHaKNe+kzcZygp\nNgZSkUEj+3ROP5spJ+1+/WKit0M1uB8F60WZhHthc7BSYrTQuwisj+4Jk8de\nU43JGI6Zl/iAVrjLiNh5zv8NUJKIzi4nzozHJQ+Q8Aa6jC2ycbHOb9wW4eiE\nyS8gbHrMuzBdSOZkRAMF9icbPyLRUs9lNeG/TN1LY/WRSW3/QGzVxtQrBqWI\ndMDUiKOO+QttU9xGghuCxFQwdQVNE+PYet8lgq2AuLK64qKYYhZhZoBfCmTQ\nqxfFzdC0dW4X4hSlkmbWbGWp5Cuj5NoXeLt7RTW7kxZc+G1AJ+YJGwXcAJgY\nTOP38i87KLL9VSuJ0JVLTm0zu7VFrxDq0/hVQAnH5jcNkFQEEE1F3H5enBFS\niM9QudE5IQsixqYOo035vcgMCuLkrHqUiLroJcT9Te63zQ+GDo43+aS77HWv\nEm5UXTz8zA/EINt8YKKWe0w/NmQwhrlFf/rUN1HgzfvdoDiajOZcJI+OqOTw\nrMREKv0DXqzOmpF12rLkeC0EOJZCfGtqjYJmzCBSUhDoFYqwHVKsTpzqC0ap\nWBOfVIWQyY9bcx3qEwQpDhDo7lXfR1iDkWrYCiHrhFHEzjkwEqZ/FKKJ2Wzi\nfBaMX0QNQfkOMDkRFrfCZZVIvoOftCnoHdbn0yEWoeaXcgnV4fSAoMhAc2N0\ncvnD\r\n=yO61\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\n[![Publish Documentation](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml/badge.svg)](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml)\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=14.2.0"},"gitHead":"4d62ce1927a5e0787f43e66dfea6e89446c9db67","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint lib test && deplint && depcheck --ignore-bin-package --ignores=@types/jest,typedoc","test":"npm run lint && npm run test:unit","build":"npm run clean && tsc -p tsconfig.build.json","clean":"rimraf build","prepack":"npm run build","lint:fix":"balena-lint --fix lib test","test:unit":"jest"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"versionist":{"publishedAt":"2021-11-26T18:00:12.265Z"},"_npmVersion":"6.14.15","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --fix"]},"_nodeVersion":"14.17.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.4.0","@balena/jellyfish-logger":"^3.0.151"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^27.3.1","sinon":"^12.0.1","deplint":"^1.1.3","ts-jest":"^27.0.7","typedoc":"^0.22.9","depcheck":"^1.4.2","typescript":"^4.5.2","@types/jest":"^27.0.3","lint-staged":"^12.1.2","@balena/lint":"^6.2.0","@types/sinon":"^10.0.6","@types/semver":"^7.3.9","simple-git-hooks":"^2.7.0","@types/json-schema":"~6.0.1","@balena/jellyfish-types":"^1.2.34","@balena/jellyfish-config":"^1.5.17"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.304-renovate-internal-patch-4d62ce1927a5e0787f43e66dfea6e89446c9db67_1637949865766_0.07541429225877039","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.304":{"name":"@balena/jellyfish-plugin-base","version":"2.1.304","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"Apache-2.0","_id":"@balena/jellyfish-plugin-base@2.1.304","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"36ce349f04560a34e509d7affe7925cd638788d4","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.304.tgz","fileCount":19,"integrity":"sha512-igtjeauaWIwKf82pNkbyDUTgiG5elhwn7N7QIxnIWRPLBrkw1FC+VG/FnTDQZSznVt8oXYyW/upg44liDTau8A==","signatures":[{"sig":"MEUCIAT46wev1bceoqlEt5JszxqkxrHFBYf4MeQjA/yBerGLAiEAlka5m2Bb1gyOAnL4hiQ09Vq4LX46IsWh9ywDm88IJ9E=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":79304,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJhoSLWCRA9TVsSAnZWagAAr3sP/j9gPDn3cqID4hGcJ4T/\ncWXqXDHCx3nmQmjobSo6DPVvBwZbGU1/um0ie+ZCx5z7/m0BTP7YK29QUgB2\n3sx9wZ4yEv5r5OywRVTXJT0xl4VvQlboSucW5s1phlsnQlIGxI/E3o8v0o4C\nr6O7q9Oe+hE3w3mDcycu3BzUTXE09AhDOis+RqbtC538EsLIJcI2fPPMcPNT\nqczoSvgUB/fLJcspLmr07TQfRDnYwhFvIW9weFuUc+bi+m/3ih1lAMe/eTCk\nRv7KsG0Eh6SPIBa6A/V3O5zj33r97AAEAv6RYtgwdIZFeEzOSCKAAQCgsjSX\nvpk5JaSur1pln880s0a7OV1M7JXuhAeAdyqVABo21c2leYybIc7LhReWppq0\niuqDe/RunhurI160ugqgkC7/YWn6fwbKEqBrF/xnAu8BeJ8lLnxm/xmHoPTM\ngFhmV4IwuF9vQd1dyvoDpULVNREGzRD1hDfR7cypl4BlemfeOr3u6xKlTnJw\nNhG2p9EqWXC7K1HyO6OIIEEtjeRPkeEMFw41/Tc877YxP1KGR81e8yXZG80q\nWa1vHkIt6vb4IlmjY1wi0mf9ao84fcSDn63VANM5nofeN4LTlfFh5CirJhhA\n6kug8B3Brgm5n0dfDRloKIvu+AT4Q+RMsFnhc/xxrrZpCsj3wEYyZsJAK7BA\nCnmJ\r\n=8rLS\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=14.2.0"},"gitHead":"bda8ca5f31bc192cbd4677fc36b532cad2a31a16","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint lib test && deplint && depcheck --ignore-bin-package --ignores=@types/jest,typedoc","test":"npm run lint && npm run test:unit","build":"npm run clean && tsc -p tsconfig.build.json","clean":"rimraf build","prepack":"npm run build","lint:fix":"balena-lint --fix lib test","test:unit":"jest"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"versionist":{"publishedAt":"2021-11-26T18:06:23.949Z"},"_npmVersion":"6.14.15","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --fix"]},"_nodeVersion":"14.17.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.4.0","@balena/jellyfish-logger":"^3.0.151"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^27.3.1","sinon":"^12.0.1","deplint":"^1.1.3","ts-jest":"^27.0.7","typedoc":"^0.22.9","depcheck":"^1.4.2","typescript":"^4.5.2","@types/jest":"^27.0.3","lint-staged":"^12.1.2","@balena/lint":"^6.2.0","@types/sinon":"^10.0.6","@types/semver":"^7.3.9","simple-git-hooks":"^2.7.0","@types/json-schema":"~6.0.1","@balena/jellyfish-types":"^1.2.34","@balena/jellyfish-config":"^1.5.17"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.304_1637950165869_0.4431397453231505","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.304-renovate-balena-jellyfish-config-2-x-fdcb0ca31609a52a3bfc915e9784e10d225655f9":{"name":"@balena/jellyfish-plugin-base","version":"2.1.304-renovate-balena-jellyfish-config-2-x-fdcb0ca31609a52a3bfc915e9784e10d225655f9","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"Apache-2.0","_id":"@balena/jellyfish-plugin-base@2.1.304-renovate-balena-jellyfish-config-2-x-fdcb0ca31609a52a3bfc915e9784e10d225655f9","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"6ffe5e45ce148d22d03032610cd782c1a9be15f6","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.304-renovate-balena-jellyfish-config-2-x-fdcb0ca31609a52a3bfc915e9784e10d225655f9.tgz","fileCount":19,"integrity":"sha512-VVR1zywscNvwfdwBqqIWz+HN8Tce2WLtVcmnoF7QJD/siF+5Z3OXWCrf39X2587XUdpPVhbnuxgDl2pW8JqDEw==","signatures":[{"sig":"MEUCIQC4DE+zyat5J4hTqu66azRw8hmTYwC0rklICLsippxBRAIgPEfZWAnLu9VqxM8uLP1z4Tckum4cTZz+zSchFepRdGs=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":79454,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJhoSN/CRA9TVsSAnZWagAAfS0P/R0lyHf8qVQUR8zaT5ol\nWFIVUFq04e0gKJJMoyMYImAgoVZUaoxCMKCR8IuJWz0zcCO1zCgPLqUFXHaZ\netL8cyeIXkIa0C3yzAMZvugo7KIMO7+dBeqiPcCjV2XDEtBfpvtwwCQV68y7\nwd7UDUVBYJEXESFxa8HjCPxQKmSIHu7/ts3+NXYn8g0fLCBl9PObdf0MCntm\n0N7HxkmWqGdzzrArrEYncbP+H+OjDMkISpdS/TUL3sdcoqVK4R38LcH1HTa3\nehE8VR9Wy0Wglf94NEkp3Ak/tSJsRflPNEylDru8+8Y9R8PwcWqDxqSThgei\nZs1VRmdVae9psjr5YUNTjLG36fetozvpDhw0+FtzOt0TjkwnCQsUsbjv5i+9\nuzRB3idVZhnRTTKTbcuSMtmJHBRwufwrgfElEwnfyXVHa6x2U1k49HpKigGN\nkmgPGeUua4DcCLoH166xHDwiAlrg1J6DXRv426o6BNCIWj1Qy+YJQ9secpxr\nn23aC4zwBun4OgxCCiHAE46/GY+dfXjD5Tc1TLkklp8QRjylfki71/MrOtJV\nxaGksrHYPGm7LiAgxoljrp6p+LiNL5maYlwDA4n9FSr2hdnFGrmwQXAksQxD\nWBTOE4ziJN/DoopYeXhysqlahcdRaODLDbeYe90uj44wyt3T8oCiKJI6Znsw\nlhPM\r\n=0vPT\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\n[![Publish Documentation](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml/badge.svg)](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml)\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=14.2.0"},"gitHead":"fdcb0ca31609a52a3bfc915e9784e10d225655f9","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint lib test && deplint && depcheck --ignore-bin-package --ignores=@types/jest,typedoc","test":"npm run lint && npm run test:unit","build":"npm run clean && tsc -p tsconfig.build.json","clean":"rimraf build","prepack":"npm run build","lint:fix":"balena-lint --fix lib test","test:unit":"jest"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"versionist":{"publishedAt":"2021-11-26T18:07:54.112Z"},"_npmVersion":"6.14.15","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --fix"]},"_nodeVersion":"14.17.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.4.0","@balena/jellyfish-logger":"^3.0.151"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^27.3.1","sinon":"^12.0.1","deplint":"^1.1.3","ts-jest":"^27.0.7","typedoc":"^0.22.9","depcheck":"^1.4.2","typescript":"^4.5.2","@types/jest":"^27.0.3","lint-staged":"^12.1.2","@balena/lint":"^6.2.0","@types/sinon":"^10.0.6","@types/semver":"^7.3.9","simple-git-hooks":"^2.7.0","@types/json-schema":"~6.0.1","@balena/jellyfish-types":"^1.2.34","@balena/jellyfish-config":"^2.0.0"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.304-renovate-balena-jellyfish-config-2-x-fdcb0ca31609a52a3bfc915e9784e10d225655f9_1637950334869_0.7732125286513054","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.305-renovate-balena-jellyfish-config-2-x-494bf9b7582449137cd97098ccb424bcfef5b744":{"name":"@balena/jellyfish-plugin-base","version":"2.1.305-renovate-balena-jellyfish-config-2-x-494bf9b7582449137cd97098ccb424bcfef5b744","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"Apache-2.0","_id":"@balena/jellyfish-plugin-base@2.1.305-renovate-balena-jellyfish-config-2-x-494bf9b7582449137cd97098ccb424bcfef5b744","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"7fcb5ac69b897edc256ceeabab975600a484f958","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.305-renovate-balena-jellyfish-config-2-x-494bf9b7582449137cd97098ccb424bcfef5b744.tgz","fileCount":19,"integrity":"sha512-mk6wO8SrRWBjmikSfBlvadvpYeiTHD8RKVBG2d6fCOXtTQezKDdtC1t8T0IpEZbTnCVEMsWyyBlbD8oqENHOUw==","signatures":[{"sig":"MEQCIBbHMTpPeTIMxF9T4vhag87+/2PsxhnJKsXpdcNGnAo8AiB4UzTtUaCR/u2qjSpDw70wGwRq2EMMFqD0lzV4jaAvOw==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":79480,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJhoSQXCRA9TVsSAnZWagAAKTsP/29ohwty8UuVqkB4uaMW\ndH0bedZXjidUAVQRhmXz36R8c/WhDvzkYPcz/YQtyPl0Ag90O5LxTGZa+XrR\ny3F3wn7m94VZmBxWqOvmc6SnzEHpPdZLEJNd1Duv8VginnWNCOMa5aOrQRYq\nzIUr7KK1obSGIldOPFVAD2iVXRKQ/NXyj2YAXWfk7oV6as2vlRhSCnVNHPaH\nlA0VLWe6YBTymy+O0msTNDGmNUECmbYd+SSL62rsTmvCwBAa7hxQ+TM7BryS\nzmwHZ4edb7l+priU2Z87S+5uriuLqA+F1SjAmWvz0ffwJNzUcO0r/H1cyb2v\n6XYaEYZvTJvUntre5FfkY3dcjv38NWqct8+wrcHCkl5J7p5FfDh5g3/ltare\n8KrT6I2+cTA6PubYKUNpaRVl6kT0itAFsM3qtqJYXdKdlq6cYsY5sVbL5O/N\nZ/34Fw+LjitY9h+jfLsfOPkwgGTCslNduK0nsflBYwF5mZ4IkFgHwCAKnw3y\nNjo8URWbJ6mPnDkDL4ssW+5AA/wnQ4qtIboilk0hl5izzb158xLy3v/7NGsN\nHnt/9PTYeqsyaP8nPibnEntBHi362ys/t3exnJxQUFhXzUqLV56xoD3NnxoJ\nOHECpm9fQP7SH2wvd5p5OTzMPgsNFmmNwXmbeJp/d9VFC4iIIZ9XM3r1Y8Kv\nqayp\r\n=4x9d\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\n[![Publish Documentation](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml/badge.svg)](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml)\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=14.2.0"},"gitHead":"494bf9b7582449137cd97098ccb424bcfef5b744","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint lib test && deplint && depcheck --ignore-bin-package --ignores=@types/jest,typedoc","test":"npm run lint && npm run test:unit","build":"npm run clean && tsc -p tsconfig.build.json","clean":"rimraf build","prepack":"npm run build","lint:fix":"balena-lint --fix lib test","test:unit":"jest"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"versionist":{"publishedAt":"2021-11-26T18:11:23.763Z"},"_npmVersion":"6.14.15","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --fix"]},"_nodeVersion":"14.17.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.4.0","@balena/jellyfish-logger":"^3.0.151"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^27.3.1","sinon":"^12.0.1","deplint":"^1.1.3","ts-jest":"^27.0.7","typedoc":"^0.22.9","depcheck":"^1.4.2","typescript":"^4.5.2","@types/jest":"^27.0.3","lint-staged":"^12.1.2","@balena/lint":"^6.2.0","@types/sinon":"^10.0.6","@types/semver":"^7.3.9","simple-git-hooks":"^2.7.0","@types/json-schema":"~6.0.1","@balena/jellyfish-types":"^1.2.34","@balena/jellyfish-config":"^2.0.0"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.305-renovate-balena-jellyfish-config-2-x-494bf9b7582449137cd97098ccb424bcfef5b744_1637950487162_0.519485580506224","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.305-renovate-internal-patch-d9fa35c9aaae8c773dc3250462babfc191aca421":{"name":"@balena/jellyfish-plugin-base","version":"2.1.305-renovate-internal-patch-d9fa35c9aaae8c773dc3250462babfc191aca421","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"Apache-2.0","_id":"@balena/jellyfish-plugin-base@2.1.305-renovate-internal-patch-d9fa35c9aaae8c773dc3250462babfc191aca421","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"d96f7cc10943f3b88af2c00b64e2821caf430e57","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.305-renovate-internal-patch-d9fa35c9aaae8c773dc3250462babfc191aca421.tgz","fileCount":19,"integrity":"sha512-cG0YvMjhP2HTtzsJaCi7VG982mOIA48fB1Sg9NJHaGYcrflbekENNEZyQ/vLhTC2cvGCUrThArvltvzeAbGbJg==","signatures":[{"sig":"MEYCIQCX7qIkYJ4w7gCK2I2PnFVsk1zamORFG6cxZcIL17ZELgIhAOaN5EbJcXS9VensN1IgXklRxjFX+UfK3lYoLCXHmuFA","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":79474,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJhoZU+CRA9TVsSAnZWagAAsnMP/1VYZv2PjeHXXHCduhHI\nwJQc+Z+oTzct7iKlBP2F46v7WPJ+pyQEJVrtroDgEJBY41cO4K2envWKeFSr\nvLf4cFcUWWvBdDyb2wwFvoTpIZEWSOt2lHPcBM9hwKX7LGVV4IyjKmjZy29y\nOylIEUjMy1mcxgqLYJcs8QTTJUMAxKkDqZEgG7szpljgsjE68Fb0iSoaWyy+\nIKA3ckWkdoabvhbZH0oH9TqH1iF7XrCO29W+dJ8HI4H0jyD9yNLt9+nTgEfb\nwN0DOadPtw8e7W91ocLZIc5tfNErRMlcm/vHETXV9YJSjm2GIEegjxiz896L\nE/r86vcb/D6pKlWBH83MEj3d5Vy/EyengPnOJZMtKpTtGK0WyQe17lnmr+P8\nbV4JluyO0NldzYBWK1U6yqwcSynSXwKTbn1P+7Y0y52fALokoHylroK9kjep\nJKxmV0VycJzF5R3WnUCvgcQJrM/6y4ix4Fbx+2D2y2pJxYO9IUE2w1ZmLp3M\nWaatAHeL2uj569McXrvpaqZz2CVssxUOxEkz5ZySDuX9spAnfnHOg6M9hZyg\nyBRkHb9WYPK8DPTdwsN8/Znz3/Uh0M8CCdWwHYitUsdgYRmVJvIX0PrHW4jB\n7KEa3Zfl2fq69jAp6w6TJdO7KFdHm669vIoCDA7BkCL27JLdKFW6JeB9ufCq\np7sv\r\n=dvV4\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\n[![Publish Documentation](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml/badge.svg)](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml)\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=14.2.0"},"gitHead":"d9fa35c9aaae8c773dc3250462babfc191aca421","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint lib test && deplint && depcheck --ignore-bin-package --ignores=@types/jest,typedoc","test":"npm run lint && npm run test:unit","build":"npm run clean && tsc -p tsconfig.build.json","clean":"rimraf build","prepack":"npm run build","lint:fix":"balena-lint --fix lib test","test:unit":"jest"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"versionist":{"publishedAt":"2021-11-27T02:14:01.007Z"},"_npmVersion":"6.14.15","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --fix"]},"_nodeVersion":"14.17.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.4.0","@balena/jellyfish-logger":"^3.0.152"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^27.3.1","sinon":"^12.0.1","deplint":"^1.1.3","ts-jest":"^27.0.7","typedoc":"^0.22.9","depcheck":"^1.4.2","typescript":"^4.5.2","@types/jest":"^27.0.3","lint-staged":"^12.1.2","@balena/lint":"^6.2.0","@types/sinon":"^10.0.6","@types/semver":"^7.3.9","simple-git-hooks":"^2.7.0","@types/json-schema":"~6.0.1","@balena/jellyfish-types":"^1.2.34","@balena/jellyfish-config":"^1.5.17"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.305-renovate-internal-patch-d9fa35c9aaae8c773dc3250462babfc191aca421_1637979454011_0.16194464948255272","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.305-renovate-balena-jellyfish-config-2-x-9375c824378ff1ece67d24a48f048173c5825462":{"name":"@balena/jellyfish-plugin-base","version":"2.1.305-renovate-balena-jellyfish-config-2-x-9375c824378ff1ece67d24a48f048173c5825462","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"Apache-2.0","_id":"@balena/jellyfish-plugin-base@2.1.305-renovate-balena-jellyfish-config-2-x-9375c824378ff1ece67d24a48f048173c5825462","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"a91ed5a88763715d7dcc220ed32c9b97e72cf87a","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.305-renovate-balena-jellyfish-config-2-x-9375c824378ff1ece67d24a48f048173c5825462.tgz","fileCount":19,"integrity":"sha512-I72JzUjqhV3OvfODXxSRcO/+8tK5bwMhW2Xl4fobW2lxT0sOpVKmou5s5QhI9BYJOsVv8WSpuAMZXpRnRCazqw==","signatures":[{"sig":"MEYCIQDGmM8HtGxbbxpxWWox8opSNz3W0XbbyBasZy5PybL3HwIhAOTsc5cUAJ7lqzqWsaOHDY37iMdJTyXQidXxd/9JVGvc","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":79480,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJhoZVkCRA9TVsSAnZWagAAJ3AP/0W4khJ9suIj5u2LC7tP\ngeFesY+LQkjCxeejJVpMUlD55DBs1TGm1xsgnABE7SzgkbIGt+ec4luaET99\nSqAEkVYDHPi+M9bA8Rv7AhVwZIxJx4lfy30alsoC7hMHcZ/ZhmcuBdNUHla3\nCwwOP56bt5z8IknDQGBo6zzYPVsZ2DltSI0xwniRkOFmRLn8SIcDKysFafLK\nwoXxZq8vRfoIG5Y63nulInfrN9bJB7clM1CGlRzjq9nJSBhgd7SrESBytKmd\niCGc+dCs8fZr/I8JWyrN9oI4mUssOAGXYUTN4ZvVcRCV+Vr+2im4pn1pjtm7\nPrycCtd0Ih+JAQdDw44uJwcKQj7x8Y/Dl6p8BOuftg9v6BomuTs3/cxqHlGo\n28hP67PciWZ3jx5qOzLCjzOuZV5xXewN+831DSvgVwN45qWUymlc6zpngsfY\nKRcNtcENS0/F7ub+b5mVWvdYb17LN9b0edCjygvBQXBnI+9FvA2i1kLFipob\nxTqcmZGaevNFz8Z1/2+eOtUFiHIN7nUNc+ynR8I6YIfg2i0ACPnq1T/nldqx\nzzX/Cnn1sq4euPT75rlCmaEmEPMQh9THP5khtd3L6jtA4yTh7fRDAGdBbLjz\np89idEsUe8jq7LSqelz01W5ajPIiRKUzk1FVeqWPcx2VRjAXUXBXulDAH8SN\n1UaQ\r\n=n5zT\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\n[![Publish Documentation](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml/badge.svg)](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml)\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=14.2.0"},"gitHead":"9375c824378ff1ece67d24a48f048173c5825462","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint lib test && deplint && depcheck --ignore-bin-package --ignores=@types/jest,typedoc","test":"npm run lint && npm run test:unit","build":"npm run clean && tsc -p tsconfig.build.json","clean":"rimraf build","prepack":"npm run build","lint:fix":"balena-lint --fix lib test","test:unit":"jest"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"versionist":{"publishedAt":"2021-11-27T02:14:37.320Z"},"_npmVersion":"6.14.15","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --fix"]},"_nodeVersion":"14.17.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.4.0","@balena/jellyfish-logger":"^3.0.151"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^27.3.1","sinon":"^12.0.1","deplint":"^1.1.3","ts-jest":"^27.0.7","typedoc":"^0.22.9","depcheck":"^1.4.2","typescript":"^4.5.2","@types/jest":"^27.0.3","lint-staged":"^12.1.2","@balena/lint":"^6.2.0","@types/sinon":"^10.0.6","@types/semver":"^7.3.9","simple-git-hooks":"^2.7.0","@types/json-schema":"~6.0.1","@balena/jellyfish-types":"^1.2.34","@balena/jellyfish-config":"^2.0.1"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.305-renovate-balena-jellyfish-config-2-x-9375c824378ff1ece67d24a48f048173c5825462_1637979492134_0.4501586837438065","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.305":{"name":"@balena/jellyfish-plugin-base","version":"2.1.305","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"Apache-2.0","_id":"@balena/jellyfish-plugin-base@2.1.305","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"67896d2e810d140a4e8596a38f18d02feb232702","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.305.tgz","fileCount":19,"integrity":"sha512-9h4wcHbrEnTN15mwjJ7qa+Pw33BK1bnT8vtq+h65LY1pRg8y1GkuiAstKjDOvlkO9yuQPs+0qOtnRlYxQgpf5Q==","signatures":[{"sig":"MEQCIBI/nC/k241H90OE3Lr1XAetAMH7Ewcd5S8DBYYGF51uAiBQe8l4yqiXgX9U+bfKULiC4bkeHUXsPHO5wHvfiJ5ybQ==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":79409,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJhoZZZCRA9TVsSAnZWagAAn9UP/3qq/83WwVK/FVPEwiqu\npLi8JudOrC5pPb2+gz3MswxFZzLI1ZIYKXgAkM6S3HFyqFOL8Zpv66WFKbis\nH2DG5iAxB+HZThAjeA13t6Vd/VADjZmu456+dpZ2oh8aafdPkxfw1MsMAQzv\npLpr5Zu4dsF6W3S5O4uNZo0H8V+gXP0m3vdxeLmMsTlu+p4nq2HT8F1EJSeJ\nhj7PazwKC6umF/PdAjyZY7fhwk6bJAxHzsiWzAskdZyYcWXTETZQYbedCUlc\nb7Is5WUM6tu2Poc7vsGfuNQ/uG1GwnkiF9adYs2hddY3nMlY+XsDaDbFpr5s\nYey2Qb1Ail4R7+CQVlMd2/IcwQVoQCX443OrEoFkqJ6VGdkd8+1PFaM6KvdM\nNUvAgtOWdEdqJ+B2biw2yCvYCY0nn2io1L9uPU5M17I4LMO3UtIG+8GmWkYX\npt6GT+Oqo3T5AcdaZD+WuS0yZdjk8ytQ3t3ez/hJv2yeDhFj1Fhp498Gca7Z\n7V10jBC/fA+/SFzS5RQ09JHAfW1Wg7Pz2an3cjxNzxPgtF9McNqd6bhUa+VT\nziID1LxzG+nbOCtw1P/oloIQC6OvR3wwWJAiYIgoib8v9a+6OTiOgp9ABoAl\nSOxUNoyML/QiOeRZQB/c68SkaOe7Frnullvm91X4b6/po04eoV4clfXdPS/7\n8XYd\r\n=H7ac\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=14.2.0"},"gitHead":"2de2ddb0f5f1b9115f0a62d0ff7ea1f8ba8de475","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint lib test && deplint && depcheck --ignore-bin-package --ignores=@types/jest,typedoc","test":"npm run lint && npm run test:unit","build":"npm run clean && tsc -p tsconfig.build.json","clean":"rimraf build","prepack":"npm run build","lint:fix":"balena-lint --fix lib test","test:unit":"jest"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"versionist":{"publishedAt":"2021-11-27T02:19:29.901Z"},"_npmVersion":"6.14.15","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --fix"]},"_nodeVersion":"14.17.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.4.0","@balena/jellyfish-logger":"^3.0.152"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^27.3.1","sinon":"^12.0.1","deplint":"^1.1.3","ts-jest":"^27.0.7","typedoc":"^0.22.9","depcheck":"^1.4.2","typescript":"^4.5.2","@types/jest":"^27.0.3","lint-staged":"^12.1.2","@balena/lint":"^6.2.0","@types/sinon":"^10.0.6","@types/semver":"^7.3.9","simple-git-hooks":"^2.7.0","@types/json-schema":"~6.0.1","@balena/jellyfish-types":"^1.2.34","@balena/jellyfish-config":"^1.5.17"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.305_1637979737800_0.44343310695803595","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.305-renovate-external-non-major-a07032d48003a89a9b39b00699a56f7b15f69ff6":{"name":"@balena/jellyfish-plugin-base","version":"2.1.305-renovate-external-non-major-a07032d48003a89a9b39b00699a56f7b15f69ff6","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"Apache-2.0","_id":"@balena/jellyfish-plugin-base@2.1.305-renovate-external-non-major-a07032d48003a89a9b39b00699a56f7b15f69ff6","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"008670f57fecb48d2e0be7ffb90488a4d27d4e21","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.305-renovate-external-non-major-a07032d48003a89a9b39b00699a56f7b15f69ff6.tgz","fileCount":19,"integrity":"sha512-Apcf639utGsfAj33UW7WWZeBP/Ho4+Z4zy7IUTxVaVTqO6h86JceoWn/Mra+625qj7qYWEBh5E0RHWiGTgcZNA==","signatures":[{"sig":"MEYCIQD4cBuvC7dWZrmlEIfyy6ev7YjBuZtNx3FswDJy2CNxtwIhAL1HISLqgGAobJ7jNE7wGqLMr53Y22WMQNDuQOGKwPW4","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":79541,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJhoZcBCRA9TVsSAnZWagAA9UEP/jRDFH0TLM9+9u5zpkaf\ngtSutN0fhbbls0MTHu4lx7ulOHV/KWfgjF6B0JI22HCrmupeQ+pubZdMnRQ0\n+G3x3PcW1EDYtV1kNHoUYwvPcNGwlSoMvJcAoe6E9QBmk+hLi8XBLNztRugr\nnHV+hJNJyZjbwE6oScFDyfwB78bFXTs9mlkZAjtoLrwtfnYlm7e/AppJ0k3j\niYci8QZVyXeT5bNyJXYoGYuIeiOPB3wY/ZlBSFL69YVfT7we0ScfcAa7eQa3\nasA/4XWewpblCH/32+6Rd0pVYWd9GgIwrElU/GmSU0BQK6g9jdD623uIDD5l\nMAq4ZggNy30DWa0EWgyRUkwfE3Xzdv+AsnV3tHo3WfRL90l5sHR/TbWm/Tl/\n9wtehvH0r29Ve5aw2T0e7KGGEFfaSVj/xyE/IoH9wZbS9GYM7QAIru86B1Bk\n9o285rqnL55iQKqrafTVdFGNRhmvkVCsSz5kEA9PmD8EAXEAgFbO0wueqU9j\nHeIKJ3dYe+BI5lnt9QsTf45hLOJjfgt0G0kOEwEfKxYSrtupD+ZXO8w1HkbE\n2r65MnCcT903Ni77I3aC9OxYcwNrrGp3e5eDpIUhDNJohN7sIGQOSGtZdilS\ndxx5KK3HmQ50aMBEGvFsmEwWeyhyEwfPKDEyf9DEFY7Mevz8TWR4Dk6ky3Uc\nMUpJ\r\n=TNfx\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\n[![Publish Documentation](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml/badge.svg)](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml)\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=14.2.0"},"gitHead":"a07032d48003a89a9b39b00699a56f7b15f69ff6","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint lib test && deplint && depcheck --ignore-bin-package --ignores=@types/jest,typedoc","test":"npm run lint && npm run test:unit","build":"npm run clean && tsc -p tsconfig.build.json","clean":"rimraf build","prepack":"npm run build","lint:fix":"balena-lint --fix lib test","test:unit":"jest"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"versionist":{"publishedAt":"2021-11-27T02:20:58.664Z"},"_npmVersion":"6.14.15","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --fix"]},"_nodeVersion":"14.17.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.4.0","@balena/jellyfish-logger":"^3.0.152"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^27.3.1","sinon":"^12.0.1","deplint":"^1.1.3","ts-jest":"^27.0.7","typedoc":"^0.22.10","depcheck":"^1.4.2","typescript":"^4.5.2","@types/jest":"^27.0.3","lint-staged":"^12.1.2","@balena/lint":"^6.2.0","@types/sinon":"^10.0.6","@types/semver":"^7.3.9","simple-git-hooks":"^2.7.0","@types/json-schema":"~6.0.1","@balena/jellyfish-types":"^1.2.34","@balena/jellyfish-config":"^1.5.17"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.305-renovate-external-non-major-a07032d48003a89a9b39b00699a56f7b15f69ff6_1637979905715_0.9775677932709077","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.306-renovate-balena-jellyfish-config-2-x-82f735eb5fd820ee871622f33a827bd9f818a2a8":{"name":"@balena/jellyfish-plugin-base","version":"2.1.306-renovate-balena-jellyfish-config-2-x-82f735eb5fd820ee871622f33a827bd9f818a2a8","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"Apache-2.0","_id":"@balena/jellyfish-plugin-base@2.1.306-renovate-balena-jellyfish-config-2-x-82f735eb5fd820ee871622f33a827bd9f818a2a8","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"9e8ee493c7dc49b586869f91834a291dbb118091","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.306-renovate-balena-jellyfish-config-2-x-82f735eb5fd820ee871622f33a827bd9f818a2a8.tgz","fileCount":19,"integrity":"sha512-M8HBrGOhJX9AUCULcDIDXfkEcWD46DDtFWaLiF0UQsDH2IP2RXv7jpuYdnp0GjiSN712ZSd6s8B+E62ysEGQvw==","signatures":[{"sig":"MEUCICEuc0adThbOICDQJqOANGusCFM5V0mIynNcEVl0VppBAiEAjcZxef/IqJFmEh3JrMlwA1TNnbp+mKFlPImM1kDGk64=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":79585,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJhoZeZCRA9TVsSAnZWagAABt8P/j2c+2oVDAfqvbrpyx7g\nRRIUohmwx/Sbl7tXvy8SnSsn3hXHB/hZz5a7Sc2FDqykZEdjoDDzyn30+1fR\n328SqzSwh5hm1qR/9NQI6UHX7pSbtgOqbnirWiaujG98aQdv6eou8/5UPWEd\nszXlm96sUqWEQ2BHQ2ZCOBLqSfBkANsbEDh9g9WRdimwVZFZV2I47laLJZcI\nHSPa6cqLm+DEclhVWkmHkwk/vT5P1S3tgS55QiSqsNYaITKXbqnwO1XogaXg\nhpNUVvN+NTlr8N4vVeZXMF6eMkzieXQhUGjCYT2mGT2gR+GlwaQldIbQWxWi\nxZnhS4TCVCzLULpvWtY1x1OnHd2dZL4RdslERWH3W7HiMUhkLQQ9z48Rxox1\nRqAH0hFcGd9XTa/BW2ZPCur/PqSBzjqWfOfNHYYQjA250DsHRDY8HLT0Wt+o\nYpczSZ/fC8q/Dljy3obenbq6xoG79f9lAzzCtzZXt1XkswusGpSo4SvRVYZK\noDBmzXKj1TsqelIV8ZRY4+oOCc5FUx4zdvPpZPKlf3ilkT8MyYYQr3m9qFXk\nECAJlY5LRUNwTc4zp+iA3Pq+ptPndo6oFvIYlwaDx10auaLGCkTciDzA2D8l\ntFX533LqgibIFEBusWQolWssmnAnjC+6HP9BJGEjh81fSzjnjLv+MExIHDVV\n/VfQ\r\n=+iHk\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\n[![Publish Documentation](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml/badge.svg)](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml)\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=14.2.0"},"gitHead":"82f735eb5fd820ee871622f33a827bd9f818a2a8","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint lib test && deplint && depcheck --ignore-bin-package --ignores=@types/jest,typedoc","test":"npm run lint && npm run test:unit","build":"npm run clean && tsc -p tsconfig.build.json","clean":"rimraf build","prepack":"npm run build","lint:fix":"balena-lint --fix lib test","test:unit":"jest"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"versionist":{"publishedAt":"2021-11-27T02:24:16.658Z"},"_npmVersion":"6.14.15","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --fix"]},"_nodeVersion":"14.17.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.4.0","@balena/jellyfish-logger":"^3.0.152"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^27.3.1","sinon":"^12.0.1","deplint":"^1.1.3","ts-jest":"^27.0.7","typedoc":"^0.22.9","depcheck":"^1.4.2","typescript":"^4.5.2","@types/jest":"^27.0.3","lint-staged":"^12.1.2","@balena/lint":"^6.2.0","@types/sinon":"^10.0.6","@types/semver":"^7.3.9","simple-git-hooks":"^2.7.0","@types/json-schema":"~6.0.1","@balena/jellyfish-types":"^1.2.34","@balena/jellyfish-config":"^2.0.1"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.306-renovate-balena-jellyfish-config-2-x-82f735eb5fd820ee871622f33a827bd9f818a2a8_1637980057494_0.6375428535462633","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.306-renovate-internal-patch-cce829d034fddd01e6558f8f14365d3752ba8bcf":{"name":"@balena/jellyfish-plugin-base","version":"2.1.306-renovate-internal-patch-cce829d034fddd01e6558f8f14365d3752ba8bcf","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"Apache-2.0","_id":"@balena/jellyfish-plugin-base@2.1.306-renovate-internal-patch-cce829d034fddd01e6558f8f14365d3752ba8bcf","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"ab206b535c437ec3a0fa34c847118287b6cac97d","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.306-renovate-internal-patch-cce829d034fddd01e6558f8f14365d3752ba8bcf.tgz","fileCount":19,"integrity":"sha512-wP7PA1Ayk0OUJj7PwGJ1wMJxToKLTQtmoCCTRalykde9wsNl9RZdh80vcOYhLwgQtXB8khkqiIVhteYG6DYG+A==","signatures":[{"sig":"MEQCIHMqsZsF/Pn50Lph3Pd+0fHLKvIoXuj4x6Ok3X5ZC/+BAiBRWyDxAvq0RukW9AKZFWoaK38lozB21uPRHqoRRl0aqQ==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":79577,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJhocBxCRA9TVsSAnZWagAA2SAP/0cDL09dYW9Ki0SBNMEB\nrsMIRUbyKuL4RO2n5lxyDU1+Xm5oqAQatUgfEN5umBlFZsIZIr+daZFWXlf+\nzRiXaQLojK02tmrPXEWa8KRLtLmPFZoYEOkfzLxW+FoYTk+y64X+xXZPQMRX\nW24aCQe7c1tZsW9ejFBFJ2rUZLBKjWAuYOIAWEeHZEg8XwPxJ6DdWemSYc8F\nMLGMsjctB0kfjuleNeoZAmiwSLnXy2b2QUQKRZfwWIxWd0ucB2lA6A8uJAbz\nYAo6hpR7EsrqY1mKlCFa05hzfhgjdpUWsE+ptfqRSLvsBh/8PmvJg9C5tNAG\na61MyoyE79IDRGnh3sFtugI7BsPjP4OXNQcWy9faQLzvX13uWp4jwE4tkVk4\nAGywnEbhpYXrURwJK8BTQL8a3AtC5Yje8DW7+VvtvW7czXAIAKYQEIc+td4F\nA5NNRVHYJF469Y+UUHmTwTO49AUVDFEM22bqfjO/DO/9IGkM4F+IkmNXH811\n8COLN4TWyyFfDEJCHlSI7YfHyYJMfCv7yrxaRuypBQfWEW+lI+10IAnHN9nN\n8cTQ51fXrLEDxNwnT29wDPhrKjbi6q7wB+prZAui13s43m8l+d8LkFsrzXqG\nnI6bomnhAoRZtvQE7DRVyYV3CxBHEPS2SCKjD64xYbwdzjd7h3GqheDsMUu2\nXNVF\r\n=P/pQ\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\n[![Publish Documentation](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml/badge.svg)](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml)\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=14.2.0"},"gitHead":"cce829d034fddd01e6558f8f14365d3752ba8bcf","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint lib test && deplint && depcheck --ignore-bin-package --ignores=@types/jest,typedoc","test":"npm run lint && npm run test:unit","build":"npm run clean && tsc -p tsconfig.build.json","clean":"rimraf build","prepack":"npm run build","lint:fix":"balena-lint --fix lib test","test:unit":"jest"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"versionist":{"publishedAt":"2021-11-27T05:19:15.117Z"},"_npmVersion":"6.14.15","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --fix"]},"_nodeVersion":"14.17.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.4.0","@balena/jellyfish-logger":"^3.0.152"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^27.3.1","sinon":"^12.0.1","deplint":"^1.1.3","ts-jest":"^27.0.7","typedoc":"^0.22.9","depcheck":"^1.4.2","typescript":"^4.5.2","@types/jest":"^27.0.3","lint-staged":"^12.1.2","@balena/lint":"^6.2.0","@types/sinon":"^10.0.6","@types/semver":"^7.3.9","simple-git-hooks":"^2.7.0","@types/json-schema":"~6.0.1","@balena/jellyfish-types":"^1.2.35","@balena/jellyfish-config":"^1.5.17"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.306-renovate-internal-patch-cce829d034fddd01e6558f8f14365d3752ba8bcf_1637990513753_0.9628291234436459","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.306":{"name":"@balena/jellyfish-plugin-base","version":"2.1.306","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"Apache-2.0","_id":"@balena/jellyfish-plugin-base@2.1.306","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"2b815d97ef86b487e3a68e568df8dec76ebacbbc","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.306.tgz","fileCount":19,"integrity":"sha512-tnRfVy7ABXcVGDhCShj12dhn3K//Ry8JvdRTFMYnjyN78OCo7RG9hZkaI6QkQGF/yi5c+vfs2Vb8xMBdYVGgAw==","signatures":[{"sig":"MEYCIQCd8/luPlLx606HDMPUP0G6NEMngiQuLgmf+loO621TUgIhAIZgYYeOlwNk0AHBzzrO82QgFZJ/9QSjVeusCsZi7bC9","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":79512,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJhocEfCRA9TVsSAnZWagAA0woP/iUx/pkheyHzsXt51oQW\nIkgTLlcfn6IRn0I1mn8QZhwDg9n56MiN1TpsKzHDGI74vDmnWkA77Xc2qaL2\nZRYI3l3tWphQ2t43U6C18Wf/l4l5ZWxYecwofr3R88f0Uwc/XXXjSHpkun2x\nNx1sDadn8KpWTsNjNCF4jSIT5SuIye0BRsndaQmXqtA0CujaSDH79YYZL9Wv\nZM9vizocwSxy7YImmgPfgQmT8E+jtV6qoyxqfDkAnwex//j7eUSha3dgGOrU\naM63brvKa4KM4T8JihVlPJ8QVrX2BwNu/v50saxmge7ksiKDbmYVApzRZ+BR\n2fB1N+r+B56SiP5+EfIv9BzCa9rttZQz1b+I4FEfZR56kD7lILyhFBOlU1Zj\n9tUIuKCbLc6P1l4ubDvXfpOnKQtrr9hK9vjbgziezRRbawcURNGNQjkPU6wK\nHmjpXl57FoEMXjxHnAaKCRp8y1Fld+XDGq6cabiG5803ipoRzsNBVvU2UI76\nQwT6QzJFIXTmq41NQQQaxWMgVq0JTIyEfecvldpertkCERnLcaNpt35NOQY+\ndz5o9BhEXINjXculQPdFHOlrQ/LM9HWo9U2EnUwEkFNud0DBk2YeZS4NZNof\nVXlhi5ahp/nB3F5z3iHBliMQY7rBRW0+Sy9XgA3PKZBodPoDNaqoNrC05piU\nI6Wj\r\n=SlRl\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=14.2.0"},"gitHead":"0f6357d4753d64becf9ba0e5ccf7dbe9ccda5d21","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint lib test && deplint && depcheck --ignore-bin-package --ignores=@types/jest,typedoc","test":"npm run lint && npm run test:unit","build":"npm run clean && tsc -p tsconfig.build.json","clean":"rimraf build","prepack":"npm run build","lint:fix":"balena-lint --fix lib test","test:unit":"jest"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"versionist":{"publishedAt":"2021-11-27T05:22:52.590Z"},"_npmVersion":"6.14.15","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --fix"]},"_nodeVersion":"14.17.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.4.0","@balena/jellyfish-logger":"^3.0.152"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^27.3.1","sinon":"^12.0.1","deplint":"^1.1.3","ts-jest":"^27.0.7","typedoc":"^0.22.9","depcheck":"^1.4.2","typescript":"^4.5.2","@types/jest":"^27.0.3","lint-staged":"^12.1.2","@balena/lint":"^6.2.0","@types/sinon":"^10.0.6","@types/semver":"^7.3.9","simple-git-hooks":"^2.7.0","@types/json-schema":"~6.0.1","@balena/jellyfish-types":"^1.2.35","@balena/jellyfish-config":"^1.5.17"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.306_1637990687033_0.9081150873108874","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.307-renovate-balena-jellyfish-config-2-x-a84c1681f12b23641d8faaf00fb39f9e9cc866bb":{"name":"@balena/jellyfish-plugin-base","version":"2.1.307-renovate-balena-jellyfish-config-2-x-a84c1681f12b23641d8faaf00fb39f9e9cc866bb","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"Apache-2.0","_id":"@balena/jellyfish-plugin-base@2.1.307-renovate-balena-jellyfish-config-2-x-a84c1681f12b23641d8faaf00fb39f9e9cc866bb","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"dfbe9b9db40d2fc72eca8d8b185692d21495974c","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.307-renovate-balena-jellyfish-config-2-x-a84c1681f12b23641d8faaf00fb39f9e9cc866bb.tgz","fileCount":19,"integrity":"sha512-53k5GNbOnIuW54+0apQOwI/momKjyX9q+OzuVqVv9NCg0J7SOC0SN2qY68PamrnN/Y/EerFX2PEe6A6acS2eBw==","signatures":[{"sig":"MEUCIQCYrI3GjM7Zh0be47LgI7aq/xNI0PvWDvRHS+qTvGhlbgIgbswFo0TTe/KDW1zmb5xa3iwhNd1XNzkaJLiY0lEA3l8=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":79688,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJhocIvCRA9TVsSAnZWagAAhigP/in879jSfM5p3r/6gkBb\nDo7zMJdvXVRiZDvbUrGF+9xmYqrlvx+eLHdFVWiWZklVVaY0976iakcxmhMR\nw6NeyB2H9ynrqvoAAUA2eridP/PrMywEmEMSEw3/HTgenWWNt3sryCc+WzkQ\nyEWR3vZnZIz9YourmISQcVWOOI8brKRn97M6pFs40P1BTVuFdthwFmOhWBHd\nrE1c5KcI8xk6wSysZFbQewBQawBRJ+4Dzi8WzP4DQlmhow/yFRV4PCSjm8ZD\nYRoBRNw7j46roHqqtU37bNQh2t28lqf3vjNeZnwWEw+O1ljqpyheu5UZPQ1D\n0i+I8eQix/1K0JKJnJeQaFX0O+qVNm70h49m/XToLxBuxE2yoiF8ZNuqe18K\nU2n6epvUNEDkbV9wfC3OkijwmnfRvc532LWFM8QdmPlzpPn3g/Y7D7X37K+/\nt3zJBl7H3TDfEtjlXgFgByqsPr9P4aTaSkjijQVHstNAFl/+nbI9pwvl9d1g\nEm8H+aIrZSDN5sXYKf5cUwlX9H96NL0dCxPNP8hCy3iVqf/G2iwjVMXwUY4o\nppVHYf9IDUgLdEefsKAO7NWJFluvnQLfDIQDsHSLa18Jg2fT5VJX5gurFhEu\nj0IO7EjcsRjcJIr6r+2bJOEje6ycRHtDPXVs5RPmXiVKoz6tdLo8L+VYu5oL\nb9MJ\r\n=FlsK\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\n[![Publish Documentation](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml/badge.svg)](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml)\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=14.2.0"},"gitHead":"a84c1681f12b23641d8faaf00fb39f9e9cc866bb","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint lib test && deplint && depcheck --ignore-bin-package --ignores=@types/jest,typedoc","test":"npm run lint && npm run test:unit","build":"npm run clean && tsc -p tsconfig.build.json","clean":"rimraf build","prepack":"npm run build","lint:fix":"balena-lint --fix lib test","test:unit":"jest"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"versionist":{"publishedAt":"2021-11-27T05:26:11.742Z"},"_npmVersion":"6.14.15","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --fix"]},"_nodeVersion":"14.17.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.4.0","@balena/jellyfish-logger":"^3.0.152"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^27.3.1","sinon":"^12.0.1","deplint":"^1.1.3","ts-jest":"^27.0.7","typedoc":"^0.22.9","depcheck":"^1.4.2","typescript":"^4.5.2","@types/jest":"^27.0.3","lint-staged":"^12.1.2","@balena/lint":"^6.2.0","@types/sinon":"^10.0.6","@types/semver":"^7.3.9","simple-git-hooks":"^2.7.0","@types/json-schema":"~6.0.1","@balena/jellyfish-types":"^1.2.35","@balena/jellyfish-config":"^2.0.1"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.307-renovate-balena-jellyfish-config-2-x-a84c1681f12b23641d8faaf00fb39f9e9cc866bb_1637990959837_0.285215214304388","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.307-renovate-external-non-major-77a996821fcc7a46773b073ba3e7c673abe63b3e":{"name":"@balena/jellyfish-plugin-base","version":"2.1.307-renovate-external-non-major-77a996821fcc7a46773b073ba3e7c673abe63b3e","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"Apache-2.0","_id":"@balena/jellyfish-plugin-base@2.1.307-renovate-external-non-major-77a996821fcc7a46773b073ba3e7c673abe63b3e","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"c2b45f4d77229e1a82b8835f30ba858f77971d16","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.307-renovate-external-non-major-77a996821fcc7a46773b073ba3e7c673abe63b3e.tgz","fileCount":19,"integrity":"sha512-SKQ3TkGU578M8ThjhzznIl/5I+gNdh+Xj2EO1cAiQKzdSmrpK943QvrALeWxkXs61PLPm0w7BkIHtZ0UFZ3b8w==","signatures":[{"sig":"MEUCIQDeaFc0BHf1AxB/T26dbm8AV3Dj0VK+QGtNlRK0CKUXrQIgGgYgFnUtMFgj65ko0MGr4of94wbiqWk/a5hSI75yJVw=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":79742,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJhokUeCRA9TVsSAnZWagAA4pEP/jQnenB9lD4qdrnd9vW/\nWBEDVslNQZ3NnOhZfv6dybXyWvKhViIsJaYx9P5j9k0mKXcbG9uvNI03xkKr\nPODD6oEjX/ROKIBgDpnLadOkkXfO1qyTbcTGpRLCO5cN/bECpuCYR0thygoj\nsUB2mrHs2SUw0FtGgTqoY9D98Nu9YalL+WXaNnwH0dq6XUmM+XqBNheCwp7a\nd2AmB+/5WbqWCmWC7o9NLsJ9jZRWwA13zPOgaXF+rJjqKt5mnyeOw6NeutPf\nfFmZJapkTMI2TR1F/6+0SZj7gN5TVmPHk5WA0g0ZwMVdo0N62pB6lgSbVye+\nb0hPVetNVu6lixoMx8gziLfjI/inzHQxyJMYG831Y+XCwGrzROl6PRbQcRSt\nAJT0cPwJlRH33O6BpqsPOeXlowKbYLtMLLTcGFqwP7tPUp5oX1VjNb+t/NK7\nm9np1GPM1BnAX/1p4kA/2AAhfgnqgfckkDw5CW1Jdio9n1zbrC0WXaRt2zZT\nWDvWlWUComcLkH4Xha/M3jVOMcJElgxi3JKFHzHoBNH6hyRVyG/Q4/Wu1zgR\nGXSgX475GVVlJFUfnHriV6lrKV+4ve+BtPpxjC5m1/weJIOunGeSnnYx+HKD\nkK8TOpONSLhvbk+hKw3f1UFtDFjklpsHlklCe1y5pLOyW4murcXZ85NxPmkZ\nvGJY\r\n=l6v8\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\n[![Publish Documentation](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml/badge.svg)](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml)\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=14.2.0"},"gitHead":"77a996821fcc7a46773b073ba3e7c673abe63b3e","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint lib test && deplint && depcheck --ignore-bin-package --ignores=@types/jest,typedoc","test":"npm run lint && npm run test:unit","build":"npm run clean && tsc -p tsconfig.build.json","clean":"rimraf build","prepack":"npm run build","lint:fix":"balena-lint --fix lib test","test:unit":"jest"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"versionist":{"publishedAt":"2021-11-27T14:44:09.886Z"},"_npmVersion":"6.14.15","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --fix"]},"_nodeVersion":"14.17.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.4.0","@balena/jellyfish-logger":"^3.0.152"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^27.3.1","sinon":"^12.0.1","deplint":"^1.1.3","ts-jest":"^27.0.7","typedoc":"^0.22.10","depcheck":"^1.4.2","typescript":"^4.5.2","@types/jest":"^27.0.3","lint-staged":"^12.1.2","@balena/lint":"^6.2.0","@types/sinon":"^10.0.6","@types/semver":"^7.3.9","simple-git-hooks":"^2.7.0","@types/json-schema":"~6.0.1","@balena/jellyfish-types":"^1.2.35","@balena/jellyfish-config":"^2.0.1"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.307-renovate-external-non-major-77a996821fcc7a46773b073ba3e7c673abe63b3e_1638024478405_0.336303077059132","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.307-renovate-internal-patch-64d72d8b9599aa22d1b211bf424a06dfa5a241dc":{"name":"@balena/jellyfish-plugin-base","version":"2.1.307-renovate-internal-patch-64d72d8b9599aa22d1b211bf424a06dfa5a241dc","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"Apache-2.0","_id":"@balena/jellyfish-plugin-base@2.1.307-renovate-internal-patch-64d72d8b9599aa22d1b211bf424a06dfa5a241dc","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"66a08005ad1a2fd896ac74ec4688f0c10b8e8071","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.307-renovate-internal-patch-64d72d8b9599aa22d1b211bf424a06dfa5a241dc.tgz","fileCount":19,"integrity":"sha512-uWCQ6OWsoBGN7XQ90RXz7X7MFWhzsVyvzr08EeRQyxiruwmmyVRZCWN73188qyqjWyi1G7szZIYpBo9+lIQ89w==","signatures":[{"sig":"MEQCIAczgrA3/hSXiarVueRU1mZ0b7XjgeDnbhCHRTFM7wXbAiBhbSuUFC6nx/cORVedopvHu526vcDIUaoENitVGsgHkw==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":79817,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJhokYmCRA9TVsSAnZWagAAlbYQAJ971eiHlBo6Ndy8s3/1\n/5k+UsFgZnpCFRMECWI192DESKe1SzafL+JqcbpGSNPtpkR2O8460BkPJVhG\nIZPr3nJEyfdjPIx0JmfKpYZqpIRSEPR2I9aIi95HneFIGcgDZyxgVfQHBULW\nnJ1PJl9dfjhPjS1kdEc0GS0urAnVkdca1vKpHOyZoIifd+jqRQJZGd6uVYxZ\nobqFMPvj/lkMu0jAiJfrXBB9bEHl/LFEATyfCtIqBJ/V3tGQqT9rxW8noeMk\nOUV6PlF+MCW3BIs6ZhvG26yz1ZQqbDe9kiIbUfuO2n9v4J6QaXo7/P472//7\nVkGvnSzFgBi6ImEsHUnmOWBLnx390QZNsoBAaZNCT4CCsdH39Jnvi+Htfsvt\nfzoX+7AeSsDTmoztDMb1eabDTL7x7bENRatugnouyFrdUkudDQssd5h38xpR\nsvoo9Y6NtKQ62FbJtpg5gVzzFwg+FWUJUDMz2dLi5zfYb7TK4ZihfjnD43xf\nPlTFS5sB2oAD1ysL7FIHWjK0m35Q2jnpSB2TL/Sbln1/Bz9eg+gt/zfQC3Wj\nvWMbAzoYWKrJYus4E7fA54Wk7FWjZl2NbFhcVWpGtGgt+ZyOQraPUbBRYvBq\nJiU5ehmLU59405DZnXlqydddMOByPhiayrJdWByzMMVe+iclWNB0I9YTHcoS\nk6DM\r\n=Sca7\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\n[![Publish Documentation](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml/badge.svg)](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml)\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=14.2.0"},"gitHead":"64d72d8b9599aa22d1b211bf424a06dfa5a241dc","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint lib test && deplint && depcheck --ignore-bin-package --ignores=@types/jest,typedoc","test":"npm run lint && npm run test:unit","build":"npm run clean && tsc -p tsconfig.build.json","clean":"rimraf build","prepack":"npm run build","lint:fix":"balena-lint --fix lib test","test:unit":"jest"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"versionist":{"publishedAt":"2021-11-27T14:48:49.609Z"},"_npmVersion":"6.14.15","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --fix"]},"_nodeVersion":"14.17.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.4.0","@balena/jellyfish-logger":"^3.0.153"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^27.3.1","sinon":"^12.0.1","deplint":"^1.1.3","ts-jest":"^27.0.7","typedoc":"^0.22.10","depcheck":"^1.4.2","typescript":"^4.5.2","@types/jest":"^27.0.3","lint-staged":"^12.1.2","@balena/lint":"^6.2.0","@types/sinon":"^10.0.6","@types/semver":"^7.3.9","simple-git-hooks":"^2.7.0","@types/json-schema":"~6.0.1","@balena/jellyfish-types":"^1.2.35","@balena/jellyfish-config":"^2.0.1"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.307-renovate-internal-patch-64d72d8b9599aa22d1b211bf424a06dfa5a241dc_1638024742292_0.6235496089615906","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.307":{"name":"@balena/jellyfish-plugin-base","version":"2.1.307","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"Apache-2.0","_id":"@balena/jellyfish-plugin-base@2.1.307","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"70bd1f811a2beecba3fa6d8036dd62a5f3608133","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.307.tgz","fileCount":19,"integrity":"sha512-6Edq8C9hSZYmYDejqZGj5krpOkFVVqQQFdGA5ooLVJ6m5oh25AfsDlJl78acJj866wy0QwpdqymXlIzrskuzPQ==","signatures":[{"sig":"MEYCIQD7HUmGhXTNMgt6wQQOFeKEu0ZxiZHw8TW2Wf6P2roEJQIhAOUGN34bmJbJyTe8dPF0B9k1JMUF4GC1j6dCdVw0LMpG","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":79673,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJhokY6CRA9TVsSAnZWagAARi4P/1/cmHfq4MfzpidObIHG\nm9yiQHNMJ/gWknMbuQON4FDLs2JkiMXIsxZllfmqcXyEgIcYcofdAZxqG7CV\nHFs46LKOjabSWGkz/r1TRSZOhc5Ik6xkpwZFAfbjz3unU5FIFUTrMswIv6d3\nClC0iE3lsskDuJ/S+v8Xsx0noYkFXS0Ygxmir1M+i7+4aIYdXPB5ibc6/43B\n+d2KowSUo8J/+FZQreM5qX3F2lrJnIaldXnsYbg0pHnuaJ4EY9iBmlyrIDPm\nBhI6PIGCn9eTGx+p3BKxoFKEFeunLB45y5j0/5z+Zhsb6ZWj56bJDJMzFNCj\nlUh/JrLWv3mjPTafdi8TqVthoWnin5WibMsaGlndUkBV3U0y0hfpwVTCmYmP\nXdM2XwRUqjGb3xlRenKMeq/9NkvxUYBASf6u2Xw3btxNXa2/qbCZf6I2yNWx\nDDyOmL/sjaAtebqmqB+kNi5+U48qpU8n1Wy2nTuvPd5j7Fws2rbjosV0UHy5\nZXdIpTmSNhV9BITiWfON3BlUWm5MoF7S6VbCsLaS1LzPwPA19Sy3rWFwPLTh\nu2BWG6kzClhLFoV0P/yXt0uq6M2yfreO+oZ0n0/5GfgSgO3vRwwXVYXzRN3R\nUZJ92JHQh5MXb4O4fRV/LzsQOvnoRuRnI0JjVGtSzVc/y6JGlbqjxF4RiaMj\n3zid\r\n=jiJx\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=14.2.0"},"gitHead":"8e4776621e35a7bd6674db179732159d0a1dd71d","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint lib test && deplint && depcheck --ignore-bin-package --ignores=@types/jest,typedoc","test":"npm run lint && npm run test:unit","build":"npm run clean && tsc -p tsconfig.build.json","clean":"rimraf build","prepack":"npm run build","lint:fix":"balena-lint --fix lib test","test:unit":"jest"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"versionist":{"publishedAt":"2021-11-27T14:50:01.426Z"},"_npmVersion":"6.14.15","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --fix"]},"_nodeVersion":"14.17.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.4.0","@balena/jellyfish-logger":"^3.0.152"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^27.3.1","sinon":"^12.0.1","deplint":"^1.1.3","ts-jest":"^27.0.7","typedoc":"^0.22.10","depcheck":"^1.4.2","typescript":"^4.5.2","@types/jest":"^27.0.3","lint-staged":"^12.1.2","@balena/lint":"^6.2.0","@types/sinon":"^10.0.6","@types/semver":"^7.3.9","simple-git-hooks":"^2.7.0","@types/json-schema":"~6.0.1","@balena/jellyfish-types":"^1.2.35","@balena/jellyfish-config":"^2.0.1"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.307_1638024762269_0.056261082112148975","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.308-renovate-internal-patch-a5ea76660b8cb1f89d210fad5e14b40eb3911b4d":{"name":"@balena/jellyfish-plugin-base","version":"2.1.308-renovate-internal-patch-a5ea76660b8cb1f89d210fad5e14b40eb3911b4d","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"Apache-2.0","_id":"@balena/jellyfish-plugin-base@2.1.308-renovate-internal-patch-a5ea76660b8cb1f89d210fad5e14b40eb3911b4d","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"e3d2357596f33c0c7d1ea5d47b6cf7b0e287be74","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.308-renovate-internal-patch-a5ea76660b8cb1f89d210fad5e14b40eb3911b4d.tgz","fileCount":19,"integrity":"sha512-aJUp/c+WASAFCbp2Yi4BP4kka2OQom1SlSOZIcs6sdwNAbiplwGJK1ufybjQt9p+APvfc0yX56pb/W2UTJmtbA==","signatures":[{"sig":"MEUCIA233JrHBglpvjFVRb4/c2BrN1+AKsk1ekwxxLJSbeiwAiEAlEiTEV5PKWFgU/rVG6wwWYf81GTexHmWtPbw3Vi+Bhw=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":79843,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJhokeKCRA9TVsSAnZWagAAavMP/3OKasXZQXYucron6D7e\n7lYdFE2ix/uxTpa/Vu1pYo6xDWQUniwGp7QDcWFHtClU0wueEuoAOOsWzs+x\nvl2IOGMG5okUZJpCETE3qNtPF+hQDZkmyikr3wuyfWlqVfiMrYdWUgI54A7t\nU/JbAZNVbba7ARIjqlwQmLjS3ltU7bXRvcU4y5nW0lN1BPu0ssZTZJLk9qyc\nwXkogBinVU0dDEDqsc8Q1znyD8+S6vGFnw7stt4MMC0twX3pGWZCwquTqmBj\nslT4vKYzcqIGaB7xP9I3nU3WkvBSQqSIIy+qBX7h+i+bmYUVJySN0RvnO3iT\nYneQkwPT2w2u9hYEKvgXzb/5dTHAiVxebCz4sH8BTyaTCiQJ3Z/bMULowe4k\nLifBkxBeb8BCuF2f9l1vN/B/wnjFoK+s4d0Uy4lPnjTLss953/fPwbLqSJOm\n4w4GFF7SCI7OQaeyZYiCobOyF92wQMgpD4OmQIrsRBlrtMu3LCjCPg+UFlJ3\n8ZvZubVYpifsS+dnGz33JRqYCeHd2b2dA2DrACSqGnW5ipn+lV9myL1tf+Lt\nesCX63NN8NWNQ1Msj7mZZl8AFd7t0TduI+KS1V/mKHPSHpypRMmJqpPp9gfq\n5kKzJ7iGQvDeGqBenSt1W6vcx9uYAy6LpVEBrlPLjQ5ygnt3i/V2revCowST\nqOsE\r\n=hXaP\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\n[![Publish Documentation](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml/badge.svg)](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml)\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=14.2.0"},"gitHead":"a5ea76660b8cb1f89d210fad5e14b40eb3911b4d","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint lib test && deplint && depcheck --ignore-bin-package --ignores=@types/jest,typedoc","test":"npm run lint && npm run test:unit","build":"npm run clean && tsc -p tsconfig.build.json","clean":"rimraf build","prepack":"npm run build","lint:fix":"balena-lint --fix lib test","test:unit":"jest"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"versionist":{"publishedAt":"2021-11-27T14:54:29.536Z"},"_npmVersion":"6.14.15","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --fix"]},"_nodeVersion":"14.17.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.4.0","@balena/jellyfish-logger":"^3.0.153"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^27.3.1","sinon":"^12.0.1","deplint":"^1.1.3","ts-jest":"^27.0.7","typedoc":"^0.22.10","depcheck":"^1.4.2","typescript":"^4.5.2","@types/jest":"^27.0.3","lint-staged":"^12.1.2","@balena/lint":"^6.2.0","@types/sinon":"^10.0.6","@types/semver":"^7.3.9","simple-git-hooks":"^2.7.0","@types/json-schema":"~6.0.1","@balena/jellyfish-types":"^1.2.35","@balena/jellyfish-config":"^2.0.1"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.308-renovate-internal-patch-a5ea76660b8cb1f89d210fad5e14b40eb3911b4d_1638025098279_0.12882000145724626","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.308":{"name":"@balena/jellyfish-plugin-base","version":"2.1.308","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"Apache-2.0","_id":"@balena/jellyfish-plugin-base@2.1.308","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"ffd17b7d0392cc1a7d0e5df33975ab237c0996ea","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.308.tgz","fileCount":19,"integrity":"sha512-BCl2jg3ljE/My+FoQKRD0/gnO+sD9OK6z9ZMJDsb7SD7rx5hN/Jggsbxct93I2a5WDGN7sHuJ/FkbSdnjrf64g==","signatures":[{"sig":"MEUCIQCUdSHmHvR8qbTcCOgYLJ5qTyC44/HLguzHuqFce3KGMwIgfepcek8lEN7n6Pue9CrzcY1AzWN+23TiQYOaPxhnaoM=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":79778,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJhokjICRA9TVsSAnZWagAAGwoQAIqGhhWUJZxezTGG2gBY\nWDQI/mYs2b3AoMVmzinCwN7KIYPpQ8wR0eVSzyC0EJ69KML8wX0w9hFLqWTS\naxdYeNdW7hkPI3i40AK6fxP0JQseh6Jb1LvnMSo0DEnlCNijCmbm7ovVowS2\n8+qpc1i9dfhdSYISw2Io6fwYRY790AJo4sKJkDcAdTtl/BHSHHfTjqd6LmqR\nz4gdRJuAchC5JjYpkt/xuTgdY873k2Y9eJFlBWgNhCR9MkpgnjGGPwHPl5im\nqBgGNVfSWyZLly9ExXdKVdsjv94jsrOX4nFiE+oKXiC/9UvEMSmHM9pZzKp7\nD61KwdYMvLh3qyErsLv+oFniy4sCE7E61RjNuIBFqB7oJ8tVLScnmhzXmSy2\n7OBkc1l0QEAOJYF2ZAB+mIe+cTfWKfzJepIoxDsmB21IGcJTb+BTj0mz4Nsk\nQMuBzCMUkX+jzk+DpSuvuQycLjnWgwO8FrO5kncenWrom+DWdaj7OuhYS+0+\nF729j4OSkMmL0E7LcWfQNjK/pnjf6EG7UriRBTQN/wQv3Wnnu+c5CR5z4/C1\nAVOix2X9kjAEkJMiz2gDG9b7Fx5yfbw7McrhbPPK97sbGvNyQT9ls/6wkQ4K\noTbdzYI2QNKm9xldR895JmuwkCZzjDvEJKBGwo8V/fTZnEl5YfDxXt92Eqr8\nPw3D\r\n=MKJv\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=14.2.0"},"gitHead":"ba4767855351b0bb27c724694024bb2d26f97b52","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint lib test && deplint && depcheck --ignore-bin-package --ignores=@types/jest,typedoc","test":"npm run lint && npm run test:unit","build":"npm run clean && tsc -p tsconfig.build.json","clean":"rimraf build","prepack":"npm run build","lint:fix":"balena-lint --fix lib test","test:unit":"jest"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"versionist":{"publishedAt":"2021-11-27T15:00:34.795Z"},"_npmVersion":"6.14.15","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --fix"]},"_nodeVersion":"14.17.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.4.0","@balena/jellyfish-logger":"^3.0.153"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^27.3.1","sinon":"^12.0.1","deplint":"^1.1.3","ts-jest":"^27.0.7","typedoc":"^0.22.10","depcheck":"^1.4.2","typescript":"^4.5.2","@types/jest":"^27.0.3","lint-staged":"^12.1.2","@balena/lint":"^6.2.0","@types/sinon":"^10.0.6","@types/semver":"^7.3.9","simple-git-hooks":"^2.7.0","@types/json-schema":"~6.0.1","@balena/jellyfish-types":"^1.2.35","@balena/jellyfish-config":"^2.0.1"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.308_1638025416723_0.0650149627124399","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.309-renovate-internal-patch-2d8854bdfa4d53056fc78f23e89b635e3b7a0dcc":{"name":"@balena/jellyfish-plugin-base","version":"2.1.309-renovate-internal-patch-2d8854bdfa4d53056fc78f23e89b635e3b7a0dcc","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"Apache-2.0","_id":"@balena/jellyfish-plugin-base@2.1.309-renovate-internal-patch-2d8854bdfa4d53056fc78f23e89b635e3b7a0dcc","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"b4f7976a4626dbcb606d6ac646155ec3b77b0de9","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.309-renovate-internal-patch-2d8854bdfa4d53056fc78f23e89b635e3b7a0dcc.tgz","fileCount":19,"integrity":"sha512-5GtFgfDM+0RjzWPM4znIiabouMl1JgQL8MNStst21Y9JZPXvFBIShzfqWRK0wReafLSfDGEPXJjb8TFy3DDYqQ==","signatures":[{"sig":"MEUCIQC78dRHcaZf79KfhaGzYcm76lKvS7WWvJVhm+MH1HnkuwIgVEi/nDzb8h5lAj5MKkS+LTwtdOBkBHEtHWSgfFzCx7s=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":79948,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJhon97CRA9TVsSAnZWagAAtX4P/27rtj4L3ArG+PB+n+Bt\nw4AHXCaGxb47n8whhGyhdO89JD6+XSEuDkJns21WuiuIa/pA5TfKYrlvjtGd\n7Ttz2wHcAFUZ4NeZ/Ef9dVPYYJNxN7iNSGLqX3NiXaBAZPfL1xjC4GWbmY3/\n31Z14hmokib6E4vX5P/D1JpZ0kdLNgr4QJqABzin3RPZgWyZGygDHnYzLnJi\nWD7u+gL6Csa7jcQVUiI0wtpGS8Q4PYUZJ7csbDrtGl50r9nzFOPIdJppHOB/\nUjB0CFnF+jHz4QY83fO5XygzN8a6asOBId+7FO9ff9eRsWN9SavQVBPTPoCT\nAu4pOu5ESaEiAUqwnjjdrxMfC4lD3XA9DdCK2ia1dl8d9TY/duciXs9UpRqC\nRi3uKjSwPgKeE6koo2wS7X4yNFwk7L/W+NbWXI+4eZR2l60gh7qkZLMhSdrM\n4qUtf51/xBF4yvUg1WQEHgbP1gBWoQi/6A3cEyX6avBp220JXCcKDPofWzto\nDIVAKuxSVgfmj7p6dja7D9a+FL3J7ZNtFlqUTHN8eL4idoJTB53Ri6Yd07/S\nIYHxPoPzjifwdY5C/Aer14wJk1s19hze31CakYqNhlGoGX37tN2q1MSYmPW8\n2lvtew6oK2+68TPqA4x00na/4DlBdjaG2XuOMDDSrvidDfHPcGB7WBXRfnyi\n4CIW\r\n=W/yo\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\n[![Publish Documentation](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml/badge.svg)](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml)\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=14.2.0"},"gitHead":"2d8854bdfa4d53056fc78f23e89b635e3b7a0dcc","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint lib test && deplint && depcheck --ignore-bin-package --ignores=@types/jest,typedoc","test":"npm run lint && npm run test:unit","build":"npm run clean && tsc -p tsconfig.build.json","clean":"rimraf build","prepack":"npm run build","lint:fix":"balena-lint --fix lib test","test:unit":"jest"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"versionist":{"publishedAt":"2021-11-27T18:53:37.536Z"},"_npmVersion":"6.14.15","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --fix"]},"_nodeVersion":"14.17.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.4.0","@balena/jellyfish-logger":"^3.0.154"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^27.3.1","sinon":"^12.0.1","deplint":"^1.1.3","ts-jest":"^27.0.7","typedoc":"^0.22.10","depcheck":"^1.4.2","typescript":"^4.5.2","@types/jest":"^27.0.3","lint-staged":"^12.1.2","@balena/lint":"^6.2.0","@types/sinon":"^10.0.6","@types/semver":"^7.3.9","simple-git-hooks":"^2.7.0","@types/json-schema":"~6.0.1","@balena/jellyfish-types":"^1.2.35","@balena/jellyfish-config":"^2.0.1"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.309-renovate-internal-patch-2d8854bdfa4d53056fc78f23e89b635e3b7a0dcc_1638039419596_0.7125325677800778","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.309":{"name":"@balena/jellyfish-plugin-base","version":"2.1.309","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"Apache-2.0","_id":"@balena/jellyfish-plugin-base@2.1.309","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"1decb6a890a77b22f7a983d0cef10557c17f1acb","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.309.tgz","fileCount":19,"integrity":"sha512-BSlOkiLZh5NLofYPTNcukWiBkeZ9qwy3NsK00SYBGMOr/Drcdtkq/PI3W9b4NXitB6YE4d8ngmDjP7B6Yy8wLw==","signatures":[{"sig":"MEQCIBLiESyxGOwOqKS8PtwnEGN0jrx77jIKp47UkM32uu2ZAiAy/0JUOSdKAgsKbohdFAwIyXftpwg40Du3pUtJNWxDkw==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":79883,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJhooBxCRA9TVsSAnZWagAAvWwP/0WFDFY9vnpNMvgBOOz+\nDiVN/wfcLwuNgsn5z5Tj0kqvPcFMDEu/YG4BCE0shgEogM63Rp3ibGsreEgM\nLlYiQJMFzznAZ3wR69zrTP5C0WSDaAJ8DVfBbUpmvfeObd62XQPWl5tis6KG\nFpVG6cnYGyrWIotEk0uks1VDMFiu6e6gGwphYvdylV2Z9oGUbAcSnnJf8NgK\nJmB7abijaiqrg6KNIz75MTcedPs0KpTeVybPrWThfID2Z17bANAEDdVW3v9W\ntAM7YfQeqUq14tjRXWIf5BRJumCJW253QGm6OfgwtnH9Ujj8fYcfHcim3DZZ\nGlKUW9uIXzpyb19Jz2dkZV14+md/DEXMuZgjLGl/BVUvf8d2YcsVqNlU4q6I\niu2sE6O6Is+d9PWlRwfDlrHcaesrScLIEvQHO5nPBah8rgpjmzPghXELXCLO\ncjxw+SK7Js/zoZ0n0qkNNBH89Ydt9tzGFCrrLtnbb8xEMGrDZEThK+IZVCYv\n3828dyzgGNQ6KtWYd0tfMIEYax+TbHMeZCe4zFSHEoL+oSOISQXJrD6gen/o\nsnisUxHHrVdfRFShiU13ACfGDovTo3N5udqjCgD94LoaupiSn3jI6B32a5Az\nkkWNBtlIWuQz2h+cyrRA+bGkJjKZSFIanCK/NMut5uMv2025ysUaBa5E3ISR\n8nrv\r\n=pQyS\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=14.2.0"},"gitHead":"670581181bca17ba18a75d583dee9c4bcd38e473","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint lib test && deplint && depcheck --ignore-bin-package --ignores=@types/jest,typedoc","test":"npm run lint && npm run test:unit","build":"npm run clean && tsc -p tsconfig.build.json","clean":"rimraf build","prepack":"npm run build","lint:fix":"balena-lint --fix lib test","test:unit":"jest"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"versionist":{"publishedAt":"2021-11-27T18:58:48.033Z"},"_npmVersion":"6.14.15","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --fix"]},"_nodeVersion":"14.17.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.4.0","@balena/jellyfish-logger":"^3.0.154"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^27.3.1","sinon":"^12.0.1","deplint":"^1.1.3","ts-jest":"^27.0.7","typedoc":"^0.22.10","depcheck":"^1.4.2","typescript":"^4.5.2","@types/jest":"^27.0.3","lint-staged":"^12.1.2","@balena/lint":"^6.2.0","@types/sinon":"^10.0.6","@types/semver":"^7.3.9","simple-git-hooks":"^2.7.0","@types/json-schema":"~6.0.1","@balena/jellyfish-types":"^1.2.35","@balena/jellyfish-config":"^2.0.1"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.309_1638039665804_0.4719876196901933","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.310-renovate-internal-patch-153f90f052dfba58acace27da3d8876fb98ac5a5":{"name":"@balena/jellyfish-plugin-base","version":"2.1.310-renovate-internal-patch-153f90f052dfba58acace27da3d8876fb98ac5a5","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"Apache-2.0","_id":"@balena/jellyfish-plugin-base@2.1.310-renovate-internal-patch-153f90f052dfba58acace27da3d8876fb98ac5a5","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"2caf182bf43d7425841afee74c3737b49d0f7a97","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.310-renovate-internal-patch-153f90f052dfba58acace27da3d8876fb98ac5a5.tgz","fileCount":19,"integrity":"sha512-huCGfAUlIFx8I/i+qjdTOYnxYQgP1a1Nw7pc6jC+GQk8zK6jgEP0KeyZKYlFqc5zinnbw6cAH93dNd9zwgNVNg==","signatures":[{"sig":"MEUCIEr93epORy5DS64T+qhhZU9Hpr6Q64LmXR3JGs6qFXw2AiEAuTpLy9uqLTCwy2ECHr3QGILbW88aA4u7RPn8WQYVfT4=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":80020,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJhpN6KCRA9TVsSAnZWagAA7DkQAJL/fz9WMbyWVaCRMzoU\nWDdr3AS9jmzEbu6y1o9WlUhF1ZtfzBAHBKgSMcKPYHgMRodoOLQlhXdn9N+M\n18ojXNj7JphW+ZK+5fzaod0TXFeeYFJnOEdLlINfC/Oqqb+Lx7NSnO3cvlY1\n1ThgYmE8PwR5LtvSXPG5acxfw2/1198+KjXk9eRblr1yYGnwD2u2yoLtKsxW\noUvFqDp6e1R2WleM7BwDcsaxxTz9OGw/4iDny3gt4y8eNfrvsO3FPcyL51yf\n/vH52TUO8XQac+XIsvarY2salLS91kdmk0FcdPfNtQJrRBm6sr25ZGi9WHqA\nWcmBTZfFsbBc6D1eYk/hlZ3cBLa8nt+QZ9NfgKamcAlntnAzMVl5f0CW9RCL\noA0koQCigWzSMTe/5S3kokor7Y2e3R1iiQ5IPr/+BC4NfrbSL6mnbsxD049t\nXsjX+RQj7ApVrNQgE5vXXHoBg/KZAmnZywMyiWWM3yeZx8O0oYPbbFDXGqoM\nV1X100cD6kME0GKkxyILfXToLg19tNeLsGwxnslTSvdstd5e6x0uwqfwTQrs\nJ+kR2/RiES8Jn4MWQFhdudhFePaIVZpz7vre5ri+7u+CxjREUuo82/io7cQH\nZJoY5pAgnTGhhe5dcHcwMjL6hC2VBjZgbw2LgyOEZlSn6ealeEavlvKRALuV\nPRqO\r\n=R9zX\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\n[![Publish Documentation](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml/badge.svg)](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml)\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=14.2.0"},"gitHead":"153f90f052dfba58acace27da3d8876fb98ac5a5","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint lib test && deplint && depcheck --ignore-bin-package --ignores=@types/jest,typedoc","test":"npm run lint && npm run test:unit","build":"npm run clean && tsc -p tsconfig.build.json","clean":"rimraf build","prepack":"npm run build","lint:fix":"balena-lint --fix lib test","test:unit":"jest"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"versionist":{"publishedAt":"2021-11-29T14:04:13.526Z"},"_npmVersion":"6.14.15","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --fix"]},"_nodeVersion":"14.17.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.4.0","@balena/jellyfish-logger":"^3.0.155"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^27.3.1","sinon":"^12.0.1","deplint":"^1.1.3","ts-jest":"^27.0.7","typedoc":"^0.22.10","depcheck":"^1.4.2","typescript":"^4.5.2","@types/jest":"^27.0.3","lint-staged":"^12.1.2","@balena/lint":"^6.2.0","@types/sinon":"^10.0.6","@types/semver":"^7.3.9","simple-git-hooks":"^2.7.0","@types/json-schema":"~6.0.1","@balena/jellyfish-types":"^1.2.36","@balena/jellyfish-config":"^2.0.2"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.310-renovate-internal-patch-153f90f052dfba58acace27da3d8876fb98ac5a5_1638194826697_0.7152853714209688","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.310":{"name":"@balena/jellyfish-plugin-base","version":"2.1.310","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"Apache-2.0","_id":"@balena/jellyfish-plugin-base@2.1.310","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"72c7fab9a580abb5b11572dc6b33ae4fb3cb9b92","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.310.tgz","fileCount":19,"integrity":"sha512-rD2gtmlBFjb4fvV+bkvmpQV2KTprwrAjTqfsnnQpLga+S5wcd+B6WEtG2me7SLeofX/2rPXeb9IRvKFkC0vV4w==","signatures":[{"sig":"MEUCIQDXDbg8Jh9w2xWcRJaaQQGk4EHvHQlMUE/xr6HWVOMrCQIgav6XVAgVIA7Mi5q/bc6988jxeAEm6Ipxc7x2iqj4ciQ=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":79955,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJhpN9SCRA9TVsSAnZWagAAJKkP/1ORG3NqMWKDsuYIB8TC\ndDnVczBH7p51a6LMkQyfzfn3zk6VU2DFN8Mw4C/NPGI/J+FN2JlsVIV2YTcQ\n7qfuOwgQBv7KkyPFhMyltMjEHGA39s1Q91EaqL5QwAmXV3yCzX+SyU7sRIeE\nw5MJNLNKcQsC6b/sTHgR9RZqzFtBIhl1a9IgN/iq9SSnTZFmADYrZNwoHfUQ\nc99a2NHUm65zhLN7i0Fz+rUgzDA+ypll8t2dicqWCJ2xNp77zTPC9CkPdELM\nwe/TJNJ+3jRrbVe460CCuTpX5NtC+GBHanvT8/4n8s3NVa27L+3woy1PIafq\ngkGdiPcEdpaKtEpEYalFYKCVzft8Yni+fyM5K0OuhMHGEBWS32THGBdhZo6N\nTlJ/9S9w9B+iKau/5iiN/0jOb/qDfyErfKyxrOQeHo+qD9QT2jJ9jQbIID+e\nNO6gC0ONJWqOMgVf3/daPJocnRpq5urZSeuQ5z75ERqY/E1BF+WUwpV4sj0x\n7t++H2XplgApm2Fa3xpEPrzh0X86nzuePphJKYVBzm4x35cjCU7h+SyocG/6\nnzfmOWaE4tvPCIccEcBWyGt8n4FoNSOqyl8Euy96KyY/1iEV9URP/e1Ia+3M\nZyd0AdweuTr07sQsPyq5npLa0K+10Qaz/85/aETeuseXFsUPbUFnS5hSxZVz\nyUWw\r\n=Xnzd\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=14.2.0"},"gitHead":"21e333fc68e2da85078bdc6fc44989b7ffa59c48","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint lib test && deplint && depcheck --ignore-bin-package --ignores=@types/jest,typedoc","test":"npm run lint && npm run test:unit","build":"npm run clean && tsc -p tsconfig.build.json","clean":"rimraf build","prepack":"npm run build","lint:fix":"balena-lint --fix lib test","test:unit":"jest"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"versionist":{"publishedAt":"2021-11-29T14:08:22.630Z"},"_npmVersion":"6.14.15","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --fix"]},"_nodeVersion":"14.17.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.4.0","@balena/jellyfish-logger":"^3.0.155"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^27.3.1","sinon":"^12.0.1","deplint":"^1.1.3","ts-jest":"^27.0.7","typedoc":"^0.22.10","depcheck":"^1.4.2","typescript":"^4.5.2","@types/jest":"^27.0.3","lint-staged":"^12.1.2","@balena/lint":"^6.2.0","@types/sinon":"^10.0.6","@types/semver":"^7.3.9","simple-git-hooks":"^2.7.0","@types/json-schema":"~6.0.1","@balena/jellyfish-types":"^1.2.36","@balena/jellyfish-config":"^2.0.2"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.310_1638195026201_0.3613461149235493","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.311-renovate-internal-patch-03415071796e77e39fb34090f6f5edabfcc9c672":{"name":"@balena/jellyfish-plugin-base","version":"2.1.311-renovate-internal-patch-03415071796e77e39fb34090f6f5edabfcc9c672","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"Apache-2.0","_id":"@balena/jellyfish-plugin-base@2.1.311-renovate-internal-patch-03415071796e77e39fb34090f6f5edabfcc9c672","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"2051141bf21658c48eccf07fbbe7824bb13ffc9f","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.311-renovate-internal-patch-03415071796e77e39fb34090f6f5edabfcc9c672.tgz","fileCount":19,"integrity":"sha512-n1VYQ2GItzijtZlBdAaTnHmv8+BXlS6dogqYblA8lZlLAMp5+KGZUt8/4x7QvPUNSfLI+cznkILnrVsJFaGZiw==","signatures":[{"sig":"MEYCIQChxPcuODJ4ZmWfOVvasg/8mZeaPvx6Uluk98Qjnzk+iwIhAOAV2mAPPUu/9Z2y4UTJ5+gC/A9m4IuMqR5SoSDt9esD","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":80125,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJhp2YrCRA9TVsSAnZWagAA4AQP/1qZlorZnMmtHhm51XUs\nz3fRmzEG4Y0LB2mVDs35ee8dod+rvtNZUNFjsFaECD37Cd+orVfuPC7olByC\nxf4t7KL+1OCflQd+A7HAS1/kU/KM9iq8F/G1iodcNaIanD/ZNcmF7tbnB1z2\niV9VUQsuM0jX/GQ6y6/3JycOFMnA2mMNbmwh8Rs3yCbAohDt9fYUVv8wgbfk\nbTv1tpuoQIhuZaV0Mfjp3K/oKFQnGJ1rjLTVQq4VoBtLe4ajiT+xn3py35Ez\nwJI3cY3QSGL2TwHywE9naVv1eHNI4gnAUrRw9kwJRfN6m3MoBfo5ghzaO7mu\n8m+DNatj9uPPOvac7Tegt399NzOnIZO4bgRnde4iWSXHIsvhhJQt9wZaX5n8\nfWtyZnyJGvIHi1S1btfGlG0T1+Ew0qpZl2APo/59BxV+5cQkMYJWQn+MlwIp\nayDUhf1cFFkuj6gke3rnrKAKSxPZcV3pHptWLMTAxmo95izTOleJuPHhZplk\nB+ghJsnSS31Afe4brvhF09c1aN1mHloYHHt0aNZywl9qHrnYlTdkD7nMbo52\niDhXrUnFmBupDB1kPNwRnDg9Ok5vhP3dtBYhiPM4Lj8pO7Jdx2Ufq5b74hjZ\nypCaMRET5kdoFKlef9Gh5Uy/ztu6dMeG2yOAZfRMVgT9q+tMMyqkTsSoSQOC\nvT8R\r\n=P0C5\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\n[![Publish Documentation](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml/badge.svg)](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml)\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=14.2.0"},"gitHead":"03415071796e77e39fb34090f6f5edabfcc9c672","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint lib test && deplint && depcheck --ignore-bin-package --ignores=@types/jest,typedoc","test":"npm run lint && npm run test:unit","build":"npm run clean && tsc -p tsconfig.build.json","clean":"rimraf build","prepack":"npm run build","lint:fix":"balena-lint --fix lib test","test:unit":"jest"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"versionist":{"publishedAt":"2021-12-01T12:07:29.306Z"},"_npmVersion":"6.14.15","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --fix"]},"_nodeVersion":"14.17.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.4.0","@balena/jellyfish-logger":"^3.0.156"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^27.3.1","sinon":"^12.0.1","deplint":"^1.1.3","ts-jest":"^27.0.7","typedoc":"^0.22.10","depcheck":"^1.4.2","typescript":"^4.5.2","@types/jest":"^27.0.3","lint-staged":"^12.1.2","@balena/lint":"^6.2.0","@types/sinon":"^10.0.6","@types/semver":"^7.3.9","simple-git-hooks":"^2.7.0","@types/json-schema":"~6.0.1","@balena/jellyfish-types":"^1.2.36","@balena/jellyfish-config":"^2.0.2"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.311-renovate-internal-patch-03415071796e77e39fb34090f6f5edabfcc9c672_1638360619504_0.7751733908782952","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.311":{"name":"@balena/jellyfish-plugin-base","version":"2.1.311","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"Apache-2.0","_id":"@balena/jellyfish-plugin-base@2.1.311","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"0414523014543e8cbe9d6440dbcc04122a5991b8","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.311.tgz","fileCount":19,"integrity":"sha512-F4HIQ1ZraCZYGKmf/PwEt/Sn5bqFslGQc0mbTZoHvqjQNGyir0qe7LXnELIb2zSTx+2+DXaCPG+thGY6t4me9Q==","signatures":[{"sig":"MEYCIQDBzcxG7JAGLFBSvEZB6kc76s+oQegbuOKxpTEv4zBSEwIhAInwfjzsBY+72EfriqDm6WW0LB32hqDzhqWCaORSh2Zc","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":80060,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJhp2bsCRA9TVsSAnZWagAABw8P/jkcJUaRUGpLo+eApmer\nHMeWFZbveOgzW/NXwd3ZIap89beiMugi/UdUJn+MKqN3qX6mXBOgmxmRq0W8\nxe4DETc0nXzqTWGCad2WnA/824sn0VHUAcX7O+tuGbW80JgiGQCof/sFhNY3\nxR55onyIBnc86LS9nzerVaJfJOc0yOhP0hYB0wWpCaPB3SRNZjQTS5QZaahg\ndfXuwNmoTCoopDDnlkB/od9oy8IFYquECrtebEfG6RZU8nOB1XVxKBk3shQp\njv4nlhPcirD4R6TuIQkjy7N4Ly0O3AtkoYW16nL+8XLQlOtPiSmDgnycgHAN\nfZS2ldsl8EbKg/CWgaL5yQoi2bmLd7ngf3AuWP0QweWZnQiO2/eqe1AL1sxY\nEJTEcJZ07HtCIMU4QRd6JiMC10n49rm/3WhnArp4ZNgY4cRcy027v6x0+pOO\nEkkujlgx9EEEvqRZ3wKjzV2lwWMy9SUxFAPv0wDVvNJqTSvF29rtvfnbTDkm\nMAV9R95kuUt3yASjV05THrY34YWMsp5Nq45DWrVzMK/GmZUoyPPxmkJ+Mzlp\nlPNfmiSF/TUHH8cl570qUbjzRyDtWXcb291rGOxvatPcXYhhZlEaPrUNON2F\nd7HIP9YhwA0BNC8LPlF9tQF+gjRd8NKnIO+fVFflSja+qvTuxJpfy/FNb8lS\nNEO/\r\n=gbNe\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=14.2.0"},"gitHead":"c726ab8376bf8f5f6e466db4ef40907c62cd404d","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint lib test && deplint && depcheck --ignore-bin-package --ignores=@types/jest,typedoc","test":"npm run lint && npm run test:unit","build":"npm run clean && tsc -p tsconfig.build.json","clean":"rimraf build","prepack":"npm run build","lint:fix":"balena-lint --fix lib test","test:unit":"jest"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"versionist":{"publishedAt":"2021-12-01T12:11:44.983Z"},"_npmVersion":"6.14.15","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --fix"]},"_nodeVersion":"14.17.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.4.0","@balena/jellyfish-logger":"^3.0.156"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^27.3.1","sinon":"^12.0.1","deplint":"^1.1.3","ts-jest":"^27.0.7","typedoc":"^0.22.10","depcheck":"^1.4.2","typescript":"^4.5.2","@types/jest":"^27.0.3","lint-staged":"^12.1.2","@balena/lint":"^6.2.0","@types/sinon":"^10.0.6","@types/semver":"^7.3.9","simple-git-hooks":"^2.7.0","@types/json-schema":"~6.0.1","@balena/jellyfish-types":"^1.2.36","@balena/jellyfish-config":"^2.0.2"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.311_1638360812053_0.9100211673569334","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.312-renovate-external-non-major-1a85cde751fa03ffd6bbb70c5ea915f687ef1365":{"name":"@balena/jellyfish-plugin-base","version":"2.1.312-renovate-external-non-major-1a85cde751fa03ffd6bbb70c5ea915f687ef1365","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"Apache-2.0","_id":"@balena/jellyfish-plugin-base@2.1.312-renovate-external-non-major-1a85cde751fa03ffd6bbb70c5ea915f687ef1365","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"277473b7999e0658b9ab5accc7e51b7f5b68c3e9","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.312-renovate-external-non-major-1a85cde751fa03ffd6bbb70c5ea915f687ef1365.tgz","fileCount":19,"integrity":"sha512-qerie9zNW6/Wy8Oo90Zs/RJVYkBkzqdANH99fPPpwT7bnJThjLStzOSt1r9fTSnRD85DxdXAcLK+13SddM5JKw==","signatures":[{"sig":"MEUCIQDAeFuYh8enqa1R+w2Oh3o2wwfZYsDVuwLoD7ggFGEmDQIgYAqWj7JxYxtTvVyK2ESJPTBL8xdwRrYGJlkT3aCuvuw=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":80213,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJhqsOhCRA9TVsSAnZWagAAYi4P/A/cGAqlaERAGbR/ZIq8\nP+CWMyNSeRuZlKTOCiZHMXjK+LBOP3aVsYKmICSpxnI6PKHKnz3l9VaMO9f8\nqix276W9IulS0cbp+xqrc25aoeUGCCF+h6XeSbOP0SCKSlrOmH8nbPVLthRt\nAPwWji3QemlxSK9D2Btg5eG/3gLvv3b/2QcGt/rVHkCz7Vqzi6LDNjrZidKN\n8E/076TGyacWGjZfPAGCfAEqYWPp7vMaqa279HLwoU35IXaQy8GBhrp8enK/\n7H+hpVZm3o5CN5VdDtZSi75BuPuHIKq7WIOoMw82XxHHBYeZQcCK4IpJpvo1\nVPKt2uzf4NHAjkYYchCHMw+VgwBFRgn6YE1BEOzNHRkCTW98puJiR17qJWY2\nUTTcWLsjRq1ObeIt0KiSxSwSIGRmvKyftm9yE+qCoisLYkX2MajNVrewQEWg\n6u6OzT3TdU5H97xTVLH6JL5U+gmc+mUpN5SGs11NJGgZXb7nP+qCXFtv5lLe\nke93ULcOk9C5LMUxeDX3X9TJvJjlcTguRRZx3eMg70S1WtJe2qHcfLV4Lb3Z\n6FoAmnw1w+QaL9WXPtbzWGeJAJMWJgnIsggBtw/nqe3tCUE4Ok52pO+3H3Ro\nnPFEYs3aEMMsZffsbP/acDEQLGh9iX5TvX3GlDeK5Wgki+2dJlrNT2iVXgOp\n3vXs\r\n=+iKv\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\n[![Publish Documentation](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml/badge.svg)](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml)\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=14.2.0"},"gitHead":"1a85cde751fa03ffd6bbb70c5ea915f687ef1365","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint lib test && deplint && depcheck --ignore-bin-package --ignores=@types/jest,typedoc","test":"npm run lint && npm run test:unit","build":"npm run clean && tsc -p tsconfig.build.json","clean":"rimraf build","prepack":"npm run build","lint:fix":"balena-lint --fix lib test","test:unit":"jest"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"versionist":{"publishedAt":"2021-12-04T01:22:57.935Z"},"_npmVersion":"6.14.15","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --fix"]},"_nodeVersion":"14.17.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.4.0","@balena/jellyfish-logger":"^3.0.156"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^27.4.3","sinon":"^12.0.1","deplint":"^1.1.3","ts-jest":"^27.0.7","typedoc":"^0.22.10","depcheck":"^1.4.2","typescript":"^4.5.2","@types/jest":"^27.0.3","lint-staged":"^12.1.2","@balena/lint":"^6.2.0","@types/sinon":"^10.0.6","@types/semver":"^7.3.9","simple-git-hooks":"^2.7.0","@types/json-schema":"~6.0.1","@balena/jellyfish-types":"^1.2.36","@balena/jellyfish-config":"^2.0.2"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.312-renovate-external-non-major-1a85cde751fa03ffd6bbb70c5ea915f687ef1365_1638581153265_0.7325710169199766","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.312":{"name":"@balena/jellyfish-plugin-base","version":"2.1.312","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"Apache-2.0","_id":"@balena/jellyfish-plugin-base@2.1.312","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"17227724d638d30eeefc5d45d49de21cc4d7a337","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.312.tgz","fileCount":19,"integrity":"sha512-9934g5t7vFlR2Pcm4AMTUX/VZf3xMKFP0quQb06EynRTIGxLeUUrjw6XcdzoYHcmzZ6meNI2XQrmOpDxxqjhUw==","signatures":[{"sig":"MEUCIQDDB14q3UhDDSI57DPSCQUxMrnM6/QHMGzUGfMGCMLwdQIgT7urMQDykfH8nJ1WFOnm+4eGNgQVNYU473duR2C4NG0=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":80144,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJhqsRfCRA9TVsSAnZWagAAz5IQAIYInnmk1X0sGFbWFMZo\n4Rhx4GyAdA1LaO6GH8uldiGngCBMUjVNo8txKSbnbnaKH4h2oACZOE9GWoh0\n4uI5Fe+rW3/wGQd7xlm+UHAKVfJ6jNPJaCBsCIVLnEje1UM/tUq4wcnzBchv\nKPwJ6akDGvEtlUuogx4U/4UIryKAeYKuTAotVEdzG6e0lFXQokV4Tyjodbqy\nCYe9/66kzfG5tWEEsE/Q+74ilqv6Cc2EhlSNkLCKU2zB9iyqXb3hTxt8ynU5\nwi1JgTLKYAnMXvkt++RPnXUsxf+xq0D8wQT3pZsuY3OkpbDs1vVHwjOnLO8w\nhDl347N985LUn1yy6E4yDA5RqJKsLtM6j0L+cKDTtgIbxEoqadRUIONrf+PU\n71Cm9XsNtNH2ySYOeZ0qFA+g4HgKTLNcCHsh2xPFAtRW+FDLcKkeS9FqnKQz\niXj75vtmR31dNgaTKCfFzmZkw+AEQ4t+cgwXwsO4AArSRwSXHdJVyv7h0UjO\n5CbgSrEs9pn+ZMHIcVTmaOwGkJYVGcjUUQLqostwvcLkgRyElcJrlL4sWozy\n9LIxBbM4tnLzv5zFgXkdM6rRaNriqYHMjedtiCID5rtFKPT3GoNMsrKbkLSx\njCAegLrL49E+qU54TxcfW+CKWcwWahUtFrOindDWdn9aqbmCsuxZvzMTE29j\nfG6l\r\n=SIzY\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=14.2.0"},"gitHead":"8e6c3e335c7d28cbd6cd3a2797bb07c1ed7739b1","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint lib test && deplint && depcheck --ignore-bin-package --ignores=@types/jest,typedoc","test":"npm run lint && npm run test:unit","build":"npm run clean && tsc -p tsconfig.build.json","clean":"rimraf build","prepack":"npm run build","lint:fix":"balena-lint --fix lib test","test:unit":"jest"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"versionist":{"publishedAt":"2021-12-04T01:27:01.028Z"},"_npmVersion":"6.14.15","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --fix"]},"_nodeVersion":"14.17.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.4.0","@balena/jellyfish-logger":"^3.0.156"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^27.4.3","sinon":"^12.0.1","deplint":"^1.1.3","ts-jest":"^27.0.7","typedoc":"^0.22.10","depcheck":"^1.4.2","typescript":"^4.5.2","@types/jest":"^27.0.3","lint-staged":"^12.1.2","@balena/lint":"^6.2.0","@types/sinon":"^10.0.6","@types/semver":"^7.3.9","simple-git-hooks":"^2.7.0","@types/json-schema":"~6.0.1","@balena/jellyfish-types":"^1.2.36","@balena/jellyfish-config":"^2.0.2"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.312_1638581343393_0.5655717532742095","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.313-renovate-internal-patch-09e104896b324e2656cd3f558cacbeeb877460bc":{"name":"@balena/jellyfish-plugin-base","version":"2.1.313-renovate-internal-patch-09e104896b324e2656cd3f558cacbeeb877460bc","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"Apache-2.0","_id":"@balena/jellyfish-plugin-base@2.1.313-renovate-internal-patch-09e104896b324e2656cd3f558cacbeeb877460bc","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"7905e100db52d86ac6abb644fa32db6d6fb0f29c","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.313-renovate-internal-patch-09e104896b324e2656cd3f558cacbeeb877460bc.tgz","fileCount":19,"integrity":"sha512-JkfTprgZq17ANRO9BtlYyaAKhFf1YGIyBnfaReIjgOTNqRQ/zT3ZseW84W0JHtdJf7gTQUkak+KQeOEZYdYKCQ==","signatures":[{"sig":"MEQCIGHwmIOUfVFwPOZs4CXI0OZeCG72+eXCy08OE1ywKeXoAiAl3YnpWm2xqN8WJm+1ZAbWxoQ1dw/F6is53QHekdPZ2A==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":80314,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJhq7cgCRA9TVsSAnZWagAAbV8P/jxY2YdvmaOM21j2pLhF\n0Byzo05TgoAi4WTEKNxVex3Y48yWBNLs6NI8r8j8i/l1Ig+UI8IGJOr5x0Yy\nqWqSM4N+E9UH2jkSp1mXErM8zOwR/kWHPNScbGyRkVCQEBNqF+nKutue9kw9\nozBdaX4NP9SQ78Ek0Kk3jrIHqs2PPtn+5Rtkr2naXBIq7cV+Hfg+MgPGFDLb\nzon24vz/4l03ahTkU72lUZvF4pdPM13TPbRm8AZnwwCE5WyTYsdyDFiJD+ZC\n5JPargxiVutLj3w0LGq+nH9Z/3VuuDdNpMsGjBGaeNFD+dEiZRYwYrJm55p1\nGR7Hkg8jNZreYCdJNS1rdcVMvZ6U7ICHKekgkBJCF68/d2g1/2X0is91831+\nmsOk+4kwuKE349G0I9V2WiYCZawJuVz1iZ716rw0ohw8/jlT/1MIuiRIgF8F\nhBCYmpohNd+d/YZ+40EExRtO4k3NE2ZjodwMtZ7rOgEFIqF76Upp8Ftho/yp\nvf8XsyW1u1KGsf65rp58pAwya0m7Mg0mj8myVrCiCudVIVpvZg07XQvSshwt\nNqSQgMLVV0m9SBiBf9UU5VFbsDzG01QKlHjwG7tj+SCq7uERBX7Jps8Go2cS\nkiXRaF3DYO9nuEsS/qo/XpWltP/EdBsKt9WhfIF1/5kAQSS648JfPGhSrEvZ\nJBHp\r\n=UAri\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\n[![Publish Documentation](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml/badge.svg)](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml)\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=14.2.0"},"gitHead":"09e104896b324e2656cd3f558cacbeeb877460bc","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint lib test && deplint && depcheck --ignore-bin-package --ignores=@types/jest,typedoc","test":"npm run lint && npm run test:unit","build":"npm run clean && tsc -p tsconfig.build.json","clean":"rimraf build","prepack":"npm run build","lint:fix":"balena-lint --fix lib test","test:unit":"jest"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"versionist":{"publishedAt":"2021-12-04T18:41:40.244Z"},"_npmVersion":"6.14.15","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --fix"]},"_nodeVersion":"14.17.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.4.0","@balena/jellyfish-logger":"^3.0.159"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^27.4.3","sinon":"^12.0.1","deplint":"^1.1.3","ts-jest":"^27.0.7","typedoc":"^0.22.10","depcheck":"^1.4.2","typescript":"^4.5.2","@types/jest":"^27.0.3","lint-staged":"^12.1.2","@balena/lint":"^6.2.0","@types/sinon":"^10.0.6","@types/semver":"^7.3.9","simple-git-hooks":"^2.7.0","@types/json-schema":"~6.0.1","@balena/jellyfish-types":"^1.2.36","@balena/jellyfish-config":"^2.0.2"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.313-renovate-internal-patch-09e104896b324e2656cd3f558cacbeeb877460bc_1638643487911_0.11969080902194862","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.313":{"name":"@balena/jellyfish-plugin-base","version":"2.1.313","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"Apache-2.0","_id":"@balena/jellyfish-plugin-base@2.1.313","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"ab7de87043ef6fb91c0fe832233836184e89928b","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.313.tgz","fileCount":19,"integrity":"sha512-AIOYxh+1zLJ8CaM/5yEDVTD7o9iNb+ec91FOABqpsr2Eg5vLKore2IWSO6WyP4nHGaaol7bRNlxube1NTbWhPw==","signatures":[{"sig":"MEUCIQDcv25orvNk4HSvNhGZkZ1YcUqLmMgU0BKf2qZ6JqkdrgIgFYtIEd90hLcVVsbbtKHZOmU2OHX/2JXSuJ4dZoR9qfw=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":80249,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJhq7gGCRA9TVsSAnZWagAAqOsP/iIgyt3zJ3heBXRDEt3m\noWytiVL24xANzGcpiNtCOrlrcUcSLVMoQqjDL4hRWGxAzzhlNSEkMbLh/wkV\n0ZXujKMO2PX6KbbbaZTNdavAkoPvSeGAZmD47d0Pt1VDXDBWq8Isdd0dtEul\n7H0CNooFlsJFGhD8QocgenewF52PDpc+Mlqw2ZFp+wnUWVFXsWq49jp6JW5m\niKPCmi0PtDsnhzHZV8AhjjDU5oOnQbc3lLZk97GX76a3hi9wnXwETHUWWh+r\nTTvC6FQcguRH7xbirEaSPjxCcyn7TSDuIgSVYAtPREWALIVnosZq0MmnYmgd\nHflYqb+/twoDtLFgsLuEUlQXjbZBRP70CbV6zZllT3KK//brsWr8YkOAx5NF\nnOWQodFgoKZv5RVCADPQE+xqDqUE6MjeZOeBx/amyV1diuCPRLPmK5S4o9P1\nJWlxiUzwk0yxDnZZX5c+7cxvdC9+GUQaXYsCw2U5/fAlmOtDMGRr6TzFtXm/\n2sYINAC5Wf3O3wz/fYUKt9nlCYHwkJa7QdV5nZLESyxGencel3RVT0xtE38o\niDQt5A3QLyd9czSfe1TyZjqZig446MX2WP/zSu7wP9uPS1CW+/JnQDW0fzgh\nt1/NQGITXU9Zh7/wEomvGuBzDtGv1vp4w3rT3Gstx58TWKwCH23oYj6+gNLr\nJxQ/\r\n=kPFx\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=14.2.0"},"gitHead":"6c4dc3cd5a0a1505d565988faae9854b07deb396","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint lib test && deplint && depcheck --ignore-bin-package --ignores=@types/jest,typedoc","test":"npm run lint && npm run test:unit","build":"npm run clean && tsc -p tsconfig.build.json","clean":"rimraf build","prepack":"npm run build","lint:fix":"balena-lint --fix lib test","test:unit":"jest"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"versionist":{"publishedAt":"2021-12-04T18:46:28.366Z"},"_npmVersion":"6.14.15","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --fix"]},"_nodeVersion":"14.17.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.4.0","@balena/jellyfish-logger":"^3.0.159"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^27.4.3","sinon":"^12.0.1","deplint":"^1.1.3","ts-jest":"^27.0.7","typedoc":"^0.22.10","depcheck":"^1.4.2","typescript":"^4.5.2","@types/jest":"^27.0.3","lint-staged":"^12.1.2","@balena/lint":"^6.2.0","@types/sinon":"^10.0.6","@types/semver":"^7.3.9","simple-git-hooks":"^2.7.0","@types/json-schema":"~6.0.1","@balena/jellyfish-types":"^1.2.36","@balena/jellyfish-config":"^2.0.2"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.313_1638643718275_0.7489706432116048","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.314-renovate-internal-patch-18828bbad73b4eb9de9dc4bd26188ee57a680d93":{"name":"@balena/jellyfish-plugin-base","version":"2.1.314-renovate-internal-patch-18828bbad73b4eb9de9dc4bd26188ee57a680d93","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"Apache-2.0","_id":"@balena/jellyfish-plugin-base@2.1.314-renovate-internal-patch-18828bbad73b4eb9de9dc4bd26188ee57a680d93","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"aab7f48f5e6fe742a9267d9156025634d4d58085","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.314-renovate-internal-patch-18828bbad73b4eb9de9dc4bd26188ee57a680d93.tgz","fileCount":19,"integrity":"sha512-+kDZ2eaw/R9xcFj2M6u99sfjAPRs5evgfLQ1Zp33njQnyXUmwsQfoiVuAThcCCJaGaeBm6HhCL6hYfs2EmoMqg==","signatures":[{"sig":"MEUCIQDNl9IQQ/di02EDHlXq0IO7Td0UjzYcIR/BkpEweRiefgIgKFBrfFZvf6RRmxAwWJrCBJt00Uon5QguriAtA2Ciqpk=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":80417,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJhq9nuCRA9TVsSAnZWagAARmQP+QBdPOTyX+bqXyM4H6xe\nnGxA179S5KVSuTDhoEU148eF7GqSkJgkNgP53hS73dJl3wQRvIzLsqzLJ1yh\njZk5dPZ3XOtYb2V7YUQXakymPEXG/wkH3ifYgT8hVonsqISxrwA/fPr6fHAU\nhqQBvmyxAi1GdPbccCNztfSMBWlb5JCwcMKbWGx0hIWAYL/QaZGofWX1eSkS\nvw3jo14BsjqpCHAT5/lzGZE9pX2/OCvZXXjhQMwIvcbGtxk1pg+uq0tZwOdv\nzDvZRqL1/KfpRSOftLRHlg/9H13n0+6UHknDhgk4ktVFyJmMFS1NunVkorlB\nhsdCdqHbI9DhsJPPsZRWI6zdFdwdRxnpKiYF6M9zjqdj4XpzLRoIj8ywYep7\nnPvqLCcRHBYj8YW9YkXWaBHwYGNHqT+PGbq25i59jbCym0qUGA9eZglSGn9k\nKflHEhQpKsJw6daXhv1275fOxErznzS0CFqDcuaKlFw8hxhqKpz4vD44ir2i\nTmjTcB+OPp1rTJ3ktdljkhjVU9UeTFnx5+WzLBYRn3XuujZAQGp6fdfYLdnQ\n9FhBx6h8kEF56eMuZhU6po+rQ/4mBlNSnncZG/ecHjU6BWv1WHsX/zJyENdt\nXc8dueFO9t4i+VzfmKleC+cvs3Yq/6TVj7tJsir1WxTEedHZzylQkMHZZtNj\nBf7e\r\n=nc8C\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\n[![Publish Documentation](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml/badge.svg)](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml)\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=14.2.0"},"gitHead":"18828bbad73b4eb9de9dc4bd26188ee57a680d93","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint lib test && deplint && depcheck --ignore-bin-package --ignores=@types/jest,typedoc","test":"npm run lint && npm run test:unit","build":"npm run clean && tsc -p tsconfig.build.json","clean":"rimraf build","prepack":"npm run build","lint:fix":"balena-lint --fix lib test","test:unit":"jest"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"versionist":{"publishedAt":"2021-12-04T21:10:33.005Z"},"_npmVersion":"6.14.15","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --fix"]},"_nodeVersion":"14.17.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.4.0","@balena/jellyfish-logger":"^3.0.159"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^27.4.3","sinon":"^12.0.1","deplint":"^1.1.3","ts-jest":"^27.0.7","typedoc":"^0.22.10","depcheck":"^1.4.2","typescript":"^4.5.2","@types/jest":"^27.0.3","lint-staged":"^12.1.2","@balena/lint":"^6.2.0","@types/sinon":"^10.0.6","@types/semver":"^7.3.9","simple-git-hooks":"^2.7.0","@types/json-schema":"~6.0.1","@balena/jellyfish-types":"^1.2.37","@balena/jellyfish-config":"^2.0.2"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.314-renovate-internal-patch-18828bbad73b4eb9de9dc4bd26188ee57a680d93_1638652398594_0.8974842980750444","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.314":{"name":"@balena/jellyfish-plugin-base","version":"2.1.314","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"Apache-2.0","_id":"@balena/jellyfish-plugin-base@2.1.314","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"90bb5124891a7b484a97f61a4aaf2d925c8408e9","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.314.tgz","fileCount":19,"integrity":"sha512-wDxPzRHoxD3cfEOXmt3HJyy4c1smSy2FLszymB+CJCMOYOxm60VcTtLOnRoLon9CEwWsuPNmPi9oyLVcg2MPww==","signatures":[{"sig":"MEYCIQDXKeRYiP0ANTB77CYHqtqx2pNmLF6aPemesxYtME5+hgIhAN4ZqhWrN1S2GEhkw+RQyQ8pVNCz2xyJedMFV6q9e690","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":80352,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJhq9qnCRA9TVsSAnZWagAAqw0P+wXWQK0fyGNvMJvFLKN9\nhsSqpPtI4bCfQBH2NR3Nkc+HddwYGWzjhzWkOlUurYNy/K4b8GCVF6WtA7ph\nLMvFIgjUBGxuRO5ItvETqOJPPhYcAXoyZLVLAjHbtMb+uQWYLzl0+ZLIk8Ty\n6/kFA87KVsxi15bIGbNEoI1t8T9md49gvGefczLEFeGmp8P4pqOoyMjCbYjH\n+KnOHOm3RlQ5LQKXKpI3+jHhBE87hmDR6l1Jzy5tyxTFspCNwH9t81rdlG6R\nWyo84C64XxwLVd3m/W/Sk5DOZiaPHr4v9G77yFBIGXy2uf9CzDZnzeFwvXyF\nyO8SdvLtMtyIDATSNeePaShPcy8DLpq8n6gpVDRqZnogGHWYjk06+q5E7/om\nC5rGAm/OhBKkcur6zh5IanAo1qoi8LcOBf3jq+DjX6HAEdsbiOCKzGKL7wOQ\nRyD3Kqzq7tLo1WYVBb7JrTQkgWZXGDeUdV10zQJUW+oCk8N9FS1u+SEnR6z4\n0u3NoW/enPLLqjPn7S1IT8y+nZTs2ufoiAzaj7cdjW5dx2qch7u/ZmV+IhRW\nR7Gzyj7QkHEP7r0/6XMKl3vwJ4gS9fPD2aVjlXuCxErsbPt87MpYYmZXFzFc\nOP3o+/Zz5Fk5dlt/MY1C8sQ7ElEZDGEg3xX1o7ANCotwWTvptIYO1RHmMX8o\n5ayA\r\n=xyY/\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=14.2.0"},"gitHead":"46eb17cc13c0f97bcfb3db5a26fc8071bdf3323e","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint lib test && deplint && depcheck --ignore-bin-package --ignores=@types/jest,typedoc","test":"npm run lint && npm run test:unit","build":"npm run clean && tsc -p tsconfig.build.json","clean":"rimraf build","prepack":"npm run build","lint:fix":"balena-lint --fix lib test","test:unit":"jest"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"versionist":{"publishedAt":"2021-12-04T21:14:28.179Z"},"_npmVersion":"6.14.15","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --fix"]},"_nodeVersion":"14.17.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.4.0","@balena/jellyfish-logger":"^3.0.159"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^27.4.3","sinon":"^12.0.1","deplint":"^1.1.3","ts-jest":"^27.0.7","typedoc":"^0.22.10","depcheck":"^1.4.2","typescript":"^4.5.2","@types/jest":"^27.0.3","lint-staged":"^12.1.2","@balena/lint":"^6.2.0","@types/sinon":"^10.0.6","@types/semver":"^7.3.9","simple-git-hooks":"^2.7.0","@types/json-schema":"~6.0.1","@balena/jellyfish-types":"^1.2.37","@balena/jellyfish-config":"^2.0.2"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.314_1638652583605_0.22256555561651492","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.315-renovate-external-non-major-0a67ec791167c7a2f80daced563b436aedfe4a9a":{"name":"@balena/jellyfish-plugin-base","version":"2.1.315-renovate-external-non-major-0a67ec791167c7a2f80daced563b436aedfe4a9a","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"Apache-2.0","_id":"@balena/jellyfish-plugin-base@2.1.315-renovate-external-non-major-0a67ec791167c7a2f80daced563b436aedfe4a9a","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"8ce19404d9c6f39bd81bbac1591558aa0b4b45f2","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.315-renovate-external-non-major-0a67ec791167c7a2f80daced563b436aedfe4a9a.tgz","fileCount":19,"integrity":"sha512-vWNZp1xvSSKxUDp1ZtCKzed3ffu8pKo7wCOT2jzJJxfIEYqYSTZrjt4O/KYQYyS02JpdvdxipNX0ZgMKzE0eAQ==","signatures":[{"sig":"MEYCIQCuceQ1uAWkn+98jR5FYk9jicONZSF0KHB8jaGNsrXNxwIhAKo3Ke5JXKnSQAACzMhIl93r8LNPuPuOOciKibNCCboE","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":80508,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJhrIjZCRA9TVsSAnZWagAA5NsP/ROVPAOP7gMjAjebsoFh\n4Q/UZciyjaqnpBtZ8y7/5uV1zM5XIKAZjowrJfPdAqXOk2B406hppafvqLj8\nvcH8ETQfsSBbLgD2GTmKInEqeGkZEojxohG0KEe5M706anGD3NaTF9QVuNLo\nmpWGgNk7BUW9ROlJ0cx0e2V5WsNIn/8TrawIVXJk3v3AljQzSYFmCuo5oqdR\nQM4RCAGEPzpXXqnKQTb1LpS99equgxTVjfbUkpQQCNtZRsThukinlH81s8pm\nX/HWqrRN+HUyT9ncMmlGPw+o1mQBlgK5yq1/f8JI1NoxZsYvqz5bLyg/Xu7H\nOe52s6O4SLn/Cl3kN8/IuPldHHT/PQqRAgwPZJP9IV2JiZWBLHDhlKNfMtgP\ni+3mo0bFeMZlP/PP/PFYkVvUSDdNzc4i+OC/uFQzpHydvjMqqrUldXW/9GAV\nd89CwDuET5WWi3Rc8MVegyOXFu0Y9clnUHgvCaeWvyK+zCI2FZBPcVM4AeL2\nBZUASxxW8SCUu/ZqbDn4uckejk+wHuJDF6BJljOdJaFYnNWd+S63PFVdfSzv\nILA93quAiesBeylAq+9S4RceQ7eI3BJN0+nY6ZG9GUrIGTL6qkuw96+tdlUn\nR+6HC7e6BOAKXN45H+fgwqo4X9AnO2Sfg3WRskwMozL8XDIMqDAwE8ke7efy\nced/\r\n=1OM9\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\n[![Publish Documentation](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml/badge.svg)](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml)\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=14.2.0"},"gitHead":"0a67ec791167c7a2f80daced563b436aedfe4a9a","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint lib test && deplint && depcheck --ignore-bin-package --ignores=@types/jest,typedoc","test":"npm run lint && npm run test:unit","build":"npm run clean && tsc -p tsconfig.build.json","clean":"rimraf build","prepack":"npm run build","lint:fix":"balena-lint --fix lib test","test:unit":"jest"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"versionist":{"publishedAt":"2021-12-05T09:36:21.410Z"},"_npmVersion":"6.14.15","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --fix"]},"_nodeVersion":"14.17.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.4.0","@balena/jellyfish-logger":"^3.0.159"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^27.4.3","sinon":"^12.0.1","deplint":"^1.1.3","ts-jest":"^27.1.0","typedoc":"^0.22.10","depcheck":"^1.4.2","typescript":"^4.5.2","@types/jest":"^27.0.3","lint-staged":"^12.1.2","@balena/lint":"^6.2.0","@types/sinon":"^10.0.6","@types/semver":"^7.3.9","simple-git-hooks":"^2.7.0","@types/json-schema":"~6.0.1","@balena/jellyfish-types":"^1.2.37","@balena/jellyfish-config":"^2.0.2"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.315-renovate-external-non-major-0a67ec791167c7a2f80daced563b436aedfe4a9a_1638697177647_0.749210700384866","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.315":{"name":"@balena/jellyfish-plugin-base","version":"2.1.315","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"Apache-2.0","_id":"@balena/jellyfish-plugin-base@2.1.315","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"ce4533bcbf4fba7e5aefacaefbd60c2f458ecaf3","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.315.tgz","fileCount":19,"integrity":"sha512-dZ+pAYdmEtWJRTfJhHR8vu9LTqw27Dftt0TAsKs1V/gGHXk4doqXDebuF7VDWMj4Cb6jl5DizYJMKHmpU4VsAA==","signatures":[{"sig":"MEUCIQCFELGnzOdaUWEK+m4HasncLDv+Im645DCOgejGlSYEXwIgQGHcIQo57xw43Txj4dAJlgfeNeEuXGuNahmMnLjYPQc=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":80439,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJhrImnCRA9TVsSAnZWagAAj4sP/RVIy9fBXEcQQ5DBVW53\nntsVQSm4neQkJlVDNRhTQVp9jAuJ9bgKQP5BonplHoOWYF9gNaPY/AN95x4Y\nPjy8VvZPmYHiRxBMYZk77lv60jG5ItHlyWakYLqk2GHllgXrFHPazKPF9W1W\n8k2mexdg3bS+T6met+ap7ilnsHlnWeCiarh83BgGdUh/CKV3Vqu1yINe6l3v\n9hq2DLYsdtYWAMaQDPK2P7IUrHvNFShkMUbJbQPylqdyRe9okN0s83AH7Byc\nXH6oF3iblpRInMz6zSMkniDK7AY10vY8QVxPAWFwGZnC3jGC1N3osPx9Jxp1\n01mayafJ6zwku2xw7wkgXDcHbbnj+qPWSt6KHTkrL5MyMs9lWWR2IiqXmMcK\nDbzAzPRy6MI2tIHkS6vVS7ow6jExV83pIS7mOG7e+C19qb9N43pLUn7bwwZ/\nMcdIzBHcpygXwpEjF16TtPvpFtq0WYWS52z6cnAzXRflDLwOUGP1Xu0BZRDS\nnepGyuB30KS1TgtiVfGdSbQWi0DPil2sh0CVUY21auB5VPUYUam8HQewDT2O\n3a3JQKmfLdCo2da7NqGnR6wolDSlb9N006ngp0H0GwynPHAW4+/j0y1qN4NZ\n7mhuv8+eVGAMppPALnWt3ggPIJMBK+EvvuFjpOIg2D4w8UyrbaKtkzKD1+vR\n1gGH\r\n=4mKj\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=14.2.0"},"gitHead":"c009a837e494e4b981fab2da122a5949376bb59b","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint lib test && deplint && depcheck --ignore-bin-package --ignores=@types/jest,typedoc","test":"npm run lint && npm run test:unit","build":"npm run clean && tsc -p tsconfig.build.json","clean":"rimraf build","prepack":"npm run build","lint:fix":"balena-lint --fix lib test","test:unit":"jest"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"versionist":{"publishedAt":"2021-12-05T09:41:10.928Z"},"_npmVersion":"6.14.15","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --fix"]},"_nodeVersion":"14.17.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.4.0","@balena/jellyfish-logger":"^3.0.159"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^27.4.3","sinon":"^12.0.1","deplint":"^1.1.3","ts-jest":"^27.1.0","typedoc":"^0.22.10","depcheck":"^1.4.2","typescript":"^4.5.2","@types/jest":"^27.0.3","lint-staged":"^12.1.2","@balena/lint":"^6.2.0","@types/sinon":"^10.0.6","@types/semver":"^7.3.9","simple-git-hooks":"^2.7.0","@types/json-schema":"~6.0.1","@balena/jellyfish-types":"^1.2.37","@balena/jellyfish-config":"^2.0.2"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.315_1638697383827_0.8491997244727874","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.316-renovate-internal-patch-4d693212afb7a82b0c8832430b2cb411bce1bb91":{"name":"@balena/jellyfish-plugin-base","version":"2.1.316-renovate-internal-patch-4d693212afb7a82b0c8832430b2cb411bce1bb91","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"Apache-2.0","_id":"@balena/jellyfish-plugin-base@2.1.316-renovate-internal-patch-4d693212afb7a82b0c8832430b2cb411bce1bb91","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"0e58da43d283376524f4c8261ad90dc653e5953a","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.316-renovate-internal-patch-4d693212afb7a82b0c8832430b2cb411bce1bb91.tgz","fileCount":19,"integrity":"sha512-ESPJkg5CLrDMml1rw23vEKBoKxDcI8oqpE71r4QGW8VdipyD491uvRK9T01jbFxNznVsPmQOHmKbLHQWU7+nPQ==","signatures":[{"sig":"MEQCIA0meKHK61/ftQ9jl/V9v9HRPH2n7VY3R+QpcCGZQ6h3AiAN45R2gdxToPCE6I3MNwXtnV016vHB4KYuMuieeloHJw==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":80607,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJhrIr2CRA9TVsSAnZWagAAZzwQAJnUfIEmBPrYJH2vBalk\ni0VVlGGj3sX/k6z07bBQ8m79GI3SEGr92GnkuK+cPDROO1UjLHdGqTtzSDDY\ngAlFrxLdBZeCccSv/dFrMpeEVt0d0vBJtFzu5fchKApb4T6MfP5x3WKjNNUh\nnug9JmoUC2JvqMWVRBHmLkL8jEcjNCu/t11aG5RoaidYPMZq3v0uX/AaAfgd\nvxIS9zp2lNOuIHIzNQ242aSWUixm9u01i4tCW93dyoVrEXy2BbrMKFMQd6Cg\nbfkEXxY6iu/j9hn2k1MMfMM2nDCMJW1S5a9q082cal6u39DDQTeXHYOzCgfu\nQ1H3KkHtsa/KZu8yHR4pa9KXPpfHPzPt3xpuSBLGiGrG2vozs+6+eBPP11jQ\nCmslpIANnkeE7WegMOHOjAhDIaE0BMbCW4Z3bQOZGxLo+QYeO7INRwZULTmA\nUaAiZSpiKSunlJzsQsFFMQ+aBZj4zt/axa1247nv8AhXd9xCIzV6W4GCqCGY\nNJwrLEX/2bFy4ungFqqtVTgGi1RhRVt+VlgxeJD2ySFekzUX0IL27FAp0o3B\nNta0Prz8Astoh6TJT5OzSlfy9uTC5jE8zGSa1EUuUsXpkNGOs26m8e0zF87L\nVA8jbaUZR7G3IDN2M9oyZ14SkG71yXYZBNojSR4fnFSLe/c9Z3noC9mudKx7\n2fqQ\r\n=Edm1\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\n[![Publish Documentation](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml/badge.svg)](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml)\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=14.2.0"},"gitHead":"4d693212afb7a82b0c8832430b2cb411bce1bb91","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint lib test && deplint && depcheck --ignore-bin-package --ignores=@types/jest,typedoc","test":"npm run lint && npm run test:unit","build":"npm run clean && tsc -p tsconfig.build.json","clean":"rimraf build","prepack":"npm run build","lint:fix":"balena-lint --fix lib test","test:unit":"jest"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"versionist":{"publishedAt":"2021-12-05T09:45:03.212Z"},"_npmVersion":"6.14.15","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --fix"]},"_nodeVersion":"14.17.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.4.0","@balena/jellyfish-logger":"^3.0.159"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^27.4.3","sinon":"^12.0.1","deplint":"^1.1.3","ts-jest":"^27.1.0","typedoc":"^0.22.10","depcheck":"^1.4.2","typescript":"^4.5.2","@types/jest":"^27.0.3","lint-staged":"^12.1.2","@balena/lint":"^6.2.0","@types/sinon":"^10.0.6","@types/semver":"^7.3.9","simple-git-hooks":"^2.7.0","@types/json-schema":"~6.0.1","@balena/jellyfish-types":"^1.2.38","@balena/jellyfish-config":"^2.0.2"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.316-renovate-internal-patch-4d693212afb7a82b0c8832430b2cb411bce1bb91_1638697718580_0.0853133302332536","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.316":{"name":"@balena/jellyfish-plugin-base","version":"2.1.316","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"Apache-2.0","_id":"@balena/jellyfish-plugin-base@2.1.316","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"8847fefb50b7c66f063a2a0665e6a66ca8091c95","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.316.tgz","fileCount":19,"integrity":"sha512-mYPi5p4wE5pqNHMSRFxnxGDvdIYJjzSxKGyz2l/m/AjW/EmqdDKgGi2NKnJmBpYdDE2mmcUHQTTNaXm20+3Blg==","signatures":[{"sig":"MEUCIHsd2B52Rd9d2BjissxgXVbrjVyVGlUx2O9a2XbGFsEkAiEA22IaHdu8/UkKggEQdOFd3DXkrHLrhnINIoxrINmK39o=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":80542,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJhrIvVCRA9TVsSAnZWagAArHYP/jQp6RjraezMpO8yoRsJ\nBjKVpjoWy8xYeojMFcQ7FFklH7aTpGtiiUVBEa1SM3ggC+TF64COsA3caKQl\nXIn2QkA9vHeD+EUsycFwdtKM62xM9jRCUD9WcHcVmmcd+tCp04Ci1FNVKPw8\n3Z18wEm6vvlz33xUTJXC10jppugXa+39tl0Jx6KWrTb52pMlRBjSg909+38x\niHd0InD4/0rr6Pja4ApQ/2uqcV2T8jEMNWBfb/7dNgbcjQV8aqtAWtuPliYU\nZ7jmFaWkGlwDy9IQYrMVmM89TMAP+HW2jlCY12misG2TuRxchjvysNt3EJ54\nwHVEnNq5Yoqw8FIZUUWQ5l36xAaCi/j1OtqXN0RfhcXqIqa+dr3yPqxh9AQc\ncwLIpJnez7vgytQEIUV8HXi9FTiKWzAl07Ia7+uZN1lNydLK9+xkGlrQklkr\n+HTxZns2c8cAIDEQrhqLvk8J2a9fFfpYrPKowNATqiz6QPOYRZbg08LNlgwx\nvM7Y9yycGZny4Emmt/lrhLkaluKGrCa2USgFPsjzDmFFw3j0g8ChKJHwzOm8\nARl9QxfmZHxUzw3Z913sCXfvDKmk3Ybmugml0GB1Jg82DHoRWzQSd24AeCcu\nR9drormBXg46+LZ3Zrg/vL6xY/I6M4MiEb3TNb3hDkiIN4eH8vaxPw7ikQOQ\nIUXW\r\n=9GCY\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=14.2.0"},"gitHead":"891fb838c3fd5f3d3cefdf6b5e5be7f83da57371","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint lib test && deplint && depcheck --ignore-bin-package --ignores=@types/jest,typedoc","test":"npm run lint && npm run test:unit","build":"npm run clean && tsc -p tsconfig.build.json","clean":"rimraf build","prepack":"npm run build","lint:fix":"balena-lint --fix lib test","test:unit":"jest"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"versionist":{"publishedAt":"2021-12-05T09:50:15.303Z"},"_npmVersion":"6.14.15","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --fix"]},"_nodeVersion":"14.17.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.4.0","@balena/jellyfish-logger":"^3.0.159"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^27.4.3","sinon":"^12.0.1","deplint":"^1.1.3","ts-jest":"^27.1.0","typedoc":"^0.22.10","depcheck":"^1.4.2","typescript":"^4.5.2","@types/jest":"^27.0.3","lint-staged":"^12.1.2","@balena/lint":"^6.2.0","@types/sinon":"^10.0.6","@types/semver":"^7.3.9","simple-git-hooks":"^2.7.0","@types/json-schema":"~6.0.1","@balena/jellyfish-types":"^1.2.38","@balena/jellyfish-config":"^2.0.2"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.316_1638697941395_0.7090687445101371","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.317-renovate-internal-patch-0772a3791d2658e555b70435dda7f502a2a59be1":{"name":"@balena/jellyfish-plugin-base","version":"2.1.317-renovate-internal-patch-0772a3791d2658e555b70435dda7f502a2a59be1","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"Apache-2.0","_id":"@balena/jellyfish-plugin-base@2.1.317-renovate-internal-patch-0772a3791d2658e555b70435dda7f502a2a59be1","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"dce8feacf40a9888ac260568773afe6637653c2b","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.317-renovate-internal-patch-0772a3791d2658e555b70435dda7f502a2a59be1.tgz","fileCount":19,"integrity":"sha512-nEC+LxhTg4tYELHopTmys/ZvMnUuiGOyrNtpW7wcKqGlo18dEtAoXUuqXqAyuAzeDiE00ZJBySiMC8jV785ATg==","signatures":[{"sig":"MEQCIHXBlr3HxdyjX6mhYH3qbAdkVHZleYNgC1EFc26oRZCGAiAfUAKxZQJMZMox856JE3RJBCC4eVG6FiqPtj8uq7Q3KQ==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":80712,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJhrKhHCRA9TVsSAnZWagAA3kUP/1iWu4pUy3LHI2Pe1+6C\n5wI5YOPp2Ucbocn5yZB+XyXZD7lw78RK1nqtqIuXvuC+xcpU86C4+LaRvu3g\nrmERvFMHCbo6rVUkUxeCi3Sawe/4BVVGMVEy92vBxR1sRCarSl8/fj7FhE+m\ntNw/bK479lkPILoEjUmBUOQkoPfM13hc6oAV4NZFc3X81JfQEMjZ/85sou/L\njsXf7yBqsiRIrufBsPtf9PYlG8ou0YGr4M1fzFlsE6D4V6FiqP+zz9/rzrVu\nk8prJAHI+Fc5FEA01n/GzKZ4X89X5Vsf6qzkQSv/ZuFLicyUkKIYioKDPdNV\nL8YudaGbvLdKZ6MBQXnk5uxBmNY6EhU2uV2CJpxFyzuF7Gzl/fbPoVTUD7zz\ndaVvsUXOYXtdzgznZmQO8EL0R+B5+4kjJPQsN1ytcyMVpIxxyEvTNusDytS3\n5IcR/cXXVLgDJCDIorScmr7TW0cX/rQQCUqYBSrvOJKz/0Kk34kMIa0IQ5Wh\n1vRPtuvYpgyp3j/ECQX6q2JTkvKBJlS76EdjEsz9A/+RcN6Go73/ql7J7XLz\nRLqnvL7neKjygeHpKBEfXRbWhl+gkjfVbYjlm17jH+LB/4HeO8l+SWE83iVT\nRY5k2nUUYn6mrmwjyPpc1Ev+/YPWw5TEzPRpoh0w+oRDE+Cs1HbveHMFUfxr\n0z6p\r\n=KN0I\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\n[![Publish Documentation](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml/badge.svg)](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml)\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=14.2.0"},"gitHead":"0772a3791d2658e555b70435dda7f502a2a59be1","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint lib test && deplint && depcheck --ignore-bin-package --ignores=@types/jest,typedoc","test":"npm run lint && npm run test:unit","build":"npm run clean && tsc -p tsconfig.build.json","clean":"rimraf build","prepack":"npm run build","lint:fix":"balena-lint --fix lib test","test:unit":"jest"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"versionist":{"publishedAt":"2021-12-05T11:50:45.844Z"},"_npmVersion":"6.14.15","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --fix"]},"_nodeVersion":"14.17.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.4.0","@balena/jellyfish-logger":"^3.0.161"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^27.4.3","sinon":"^12.0.1","deplint":"^1.1.3","ts-jest":"^27.1.0","typedoc":"^0.22.10","depcheck":"^1.4.2","typescript":"^4.5.2","@types/jest":"^27.0.3","lint-staged":"^12.1.2","@balena/lint":"^6.2.0","@types/sinon":"^10.0.6","@types/semver":"^7.3.9","simple-git-hooks":"^2.7.0","@types/json-schema":"~6.0.1","@balena/jellyfish-types":"^1.2.38","@balena/jellyfish-config":"^2.0.2"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.317-renovate-internal-patch-0772a3791d2658e555b70435dda7f502a2a59be1_1638705222949_0.7843831072310652","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.317":{"name":"@balena/jellyfish-plugin-base","version":"2.1.317","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"Apache-2.0","_id":"@balena/jellyfish-plugin-base@2.1.317","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"fd969545cb123d461e344fee9569cd0c709fbf2e","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.317.tgz","fileCount":19,"integrity":"sha512-bhv8wRENrqsPKUA6mr4ODptmRA0vU1aFBbrCKj/IkuL0U65jlGnQJtt7vdv1Vt0M0sekRaKAdGlpN029mV/SlQ==","signatures":[{"sig":"MEUCIEpZvGAmhvoGvmAk586YwnpcfyVllzrFACURgK+uyIBvAiEArvAclbQTgTMqr/IiFzqy8L6BZ/i8rCZpEtWpcoAeCUU=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":80647,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJhrKlRCRA9TVsSAnZWagAAy74QAIBMTCgky6ujKKbEP22l\nHmCerTQTNex1VQHHHJXy5w7H3UGM4Wz0v9Avc7HT1qd/a0EmZOkCVZ8gqrTz\n5+x5dVYMZkl+UeCKnN67l5YRydZZ57DIisvV1So5T7xkPRIbXUaqcLAJ9R1A\nNMlJGpieJZDyLU5yQkrQL+lR7I8Zn7Gbpu5Ga/m448qppbc7sNIDAxwiO5Ur\nw3QH4pCQgf25jUoWxrotuMqRV4INFL4mQg/Se8g/Gq0bMNStIHA5pXSBrBAZ\nMBDfc07P2yRstgPxUOtdE2S3jfp+TcrGbP+oXJynmIMG9ic7wBC8K76Z776P\ndQzNDsiUdqNWVTfFI26z7A/mnSR+MXE8Ul46LxStQFLF/tDXgs3lva8FuIGE\ndQNYWVzn9ifl4PiK40oVM+c0d+10nejl3ntYgh7Cegmz512MgS+qgH8qKegs\ndAJiX21Ssd8cHhtFHuJBMcqo53v7MrLqjr/Nxv1x4Y1lrgx64U8mKzPEB6az\n4+QXd8As2KIowTP45i4x5UjK3MBMh9lQorGP4AvMrF7nccWcJ+EtqS71paW7\nS//2kHNnVaLGjEiuLem8/vUKUlGVdO28IOEaNIZ/nr24KwAvpUet4RaXzj1K\nNSOGrHtx1ZZ3TW+BsRVU2A6UwfjzAR7RadbO01fsiMtJnMRXbxEEt/rWJEmf\nfRvt\r\n=4t5t\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=14.2.0"},"gitHead":"3f4eb8402126a672073fe200b33e7e30462d2385","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint lib test && deplint && depcheck --ignore-bin-package --ignores=@types/jest,typedoc","test":"npm run lint && npm run test:unit","build":"npm run clean && tsc -p tsconfig.build.json","clean":"rimraf build","prepack":"npm run build","lint:fix":"balena-lint --fix lib test","test:unit":"jest"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"versionist":{"publishedAt":"2021-12-05T11:55:33.289Z"},"_npmVersion":"6.14.15","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --fix"]},"_nodeVersion":"14.17.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.4.0","@balena/jellyfish-logger":"^3.0.161"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^27.4.3","sinon":"^12.0.1","deplint":"^1.1.3","ts-jest":"^27.1.0","typedoc":"^0.22.10","depcheck":"^1.4.2","typescript":"^4.5.2","@types/jest":"^27.0.3","lint-staged":"^12.1.2","@balena/lint":"^6.2.0","@types/sinon":"^10.0.6","@types/semver":"^7.3.9","simple-git-hooks":"^2.7.0","@types/json-schema":"~6.0.1","@balena/jellyfish-types":"^1.2.38","@balena/jellyfish-config":"^2.0.2"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.317_1638705489264_0.2152769026931074","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.318-renovate-internal-patch-adbf57d49e6ef14c07dcb1cd62db604b13a117bb":{"name":"@balena/jellyfish-plugin-base","version":"2.1.318-renovate-internal-patch-adbf57d49e6ef14c07dcb1cd62db604b13a117bb","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"Apache-2.0","_id":"@balena/jellyfish-plugin-base@2.1.318-renovate-internal-patch-adbf57d49e6ef14c07dcb1cd62db604b13a117bb","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"9e35bc18c03f2705c14fa6d810d4fde4abdb9e80","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.318-renovate-internal-patch-adbf57d49e6ef14c07dcb1cd62db604b13a117bb.tgz","fileCount":19,"integrity":"sha512-gTbsEtgIyERyymho4JxNtyPyq8SONkflJmz5m8+qMykJNnUdZXnYLq2KHjCRDm0uHVanJo5vZQEPlqJV5XpmLw==","signatures":[{"sig":"MEQCIBDW24TvdNsGwlaza5/vKFDz+9TC3eJkqZd3JIESZnp7AiBuVCDQxXBhIBGTfa0A5wsQ90XubcfjfN4tsizB3RNhCg==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":80817,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJhrUkDCRA9TVsSAnZWagAA/bgP/ArPn/6xUuJZVP2rZ2i6\nIif+n2bYpQEpmt/Q4nVEgUEd9pdyKE1PsgOH0siQgIPaILnZQM9RltmaPXkv\nEjiLLOqRg6NF9yjmU9OA6e/Neo+1KNTo6FPVx/lBM7U5/DqNzVuv6MqKtDqg\n45o0NBT7FQO9+1aFF27P/3/Zjvqvap/ZTZsrETp6ED6YQhChbgcAQtxn2+uC\njo3a9HXBeAFgR82kMX3ygRj9DyOobou8EGVkvX6qgDCb322QmDzjRiFSupuA\nn9P/DuC9+2A7PUuySpAdC9m7A4rmpvPqazlDuIxlAiHeszfpUkFx2lGEypKw\nPDXzW9axKoAVIKe09nhWxkVtlTZBOFQTWIK1ceFXOUTOOTLYIFP7R1/cgvpf\nfAXis2gWYvhXb2S0treLPel1Y0Kkl1wUOTjq/PB75k2GzzeOpYNw0EP2faOt\nKag02N1VXD/Z5Gmu2Q6cwrGkg/987n8OnEptYFVg8HDih2YB1qe+2FO2vLKT\naG8vDBA5RuOAXjz7FMwi2QCM1lU7dNojeA1AzNFQPl5Il1d7Ux/0fbnPtaeQ\ngAB+yum5BEqo5vllBzqANywfnhcdSx/H/R6omT7cvzhpCVPyNq6G5IR6mPb0\ngFb48/mZzybWbG0TrpBOIpcNquvGITM0P2zW5Kr384acvuQjeFOBBqYuhFCE\nhEaZ\r\n=ibFB\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\n[![Publish Documentation](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml/badge.svg)](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml)\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=14.2.0"},"gitHead":"adbf57d49e6ef14c07dcb1cd62db604b13a117bb","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint lib test && deplint && depcheck --ignore-bin-package --ignores=@types/jest,typedoc","test":"npm run lint && npm run test:unit","build":"npm run clean && tsc -p tsconfig.build.json","clean":"rimraf build","prepack":"npm run build","lint:fix":"balena-lint --fix lib test","test:unit":"jest"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"versionist":{"publishedAt":"2021-12-05T23:16:42.260Z"},"_npmVersion":"6.14.15","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --fix"]},"_nodeVersion":"14.17.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.4.0","@balena/jellyfish-logger":"^3.0.162"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^27.4.3","sinon":"^12.0.1","deplint":"^1.1.3","ts-jest":"^27.1.0","typedoc":"^0.22.10","depcheck":"^1.4.2","typescript":"^4.5.2","@types/jest":"^27.0.3","lint-staged":"^12.1.2","@balena/lint":"^6.2.0","@types/sinon":"^10.0.6","@types/semver":"^7.3.9","simple-git-hooks":"^2.7.0","@types/json-schema":"~6.0.1","@balena/jellyfish-types":"^1.2.38","@balena/jellyfish-config":"^2.0.2"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.318-renovate-internal-patch-adbf57d49e6ef14c07dcb1cd62db604b13a117bb_1638746371682_0.40631071933538254","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.318":{"name":"@balena/jellyfish-plugin-base","version":"2.1.318","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"Apache-2.0","_id":"@balena/jellyfish-plugin-base@2.1.318","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"477c781ceff752b7e0b377a4bdc63ac15e10ee14","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.318.tgz","fileCount":19,"integrity":"sha512-jvl9ktS7kH/BPswp6LkioQQUr5hsXzYbKi9+B+8BZFOCT515E+FsP7O8nXQaTh2DPBeZb9BhUMTJKkVuA8pw2Q==","signatures":[{"sig":"MEQCIHQU5l1DhRT4x8oNYCW3IyihE/RO5T98P0ysvvXE314MAiAje5Jz9GzrYFLKP4tV3/zlw30f1iBi7xzHKYY69H7ecA==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":80752,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJhrUnOCRA9TVsSAnZWagAAczEQAJqR+uiMlyH67GZV/dZ+\nDWmyHilYraqZcyj1iAd5GPL+6VnmAm3KqEuq/DQHztqOdPHh4R+Qe8qnb36q\new28zAWMbr7rCKURik5nCa+FiH+qSsSHtijot38W7mRkXcjqFtrncXLZXcNM\nABMrWQJOAvd/NZUnTmCUfAULNuCMr6bw7CvWWk+uhDThtTFtRTpp1wdyZB/+\nRPxn9Fdk24DwObHI4kOR2sGw8pdX2IUZ7yo8J6t2jOPsGhhqR49erDXLQhRE\np6cPMApso0j56kXlTH2CebqZIgcvb/N/HHCD1h44yLuocVclpLyYMRPK12Qx\nPBKyrqdDmjvMl+avTr8B6bF5ftPEERQHf1ov5QPqYCVtHY2MT9AD1Z9+onzu\nqfc+XwrzF7e1aosg+3DeXMALCJWRINIQCiddcyM1c01+FBJyOyeoSODXSxGA\nkADSO33MJ6eUnyiAY2pcsb2wSJxld6ReSf6g662JeUXNCHc2IlRzD0zR15ky\nBOiPIQ0fagx77SObMjSlTzcWRk2edKIHID40gECC+Q9MjIUbIpPO4+OVdCWC\ngTtGJShTexlGJP2i8zt4gUiMKR3GB7VICpMr7OEQ+i+IBXDcYdotC+gxsee3\nGP8DxuVjp4eAJCTJRC6k0yRGm9c+qh4qouAWZ6H/qe4oW97gUF0QPcFwOjQV\n6EX3\r\n=0KPZ\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=14.2.0"},"gitHead":"f05c5dd3a5b69fceb3337ea24db91b28a8e9e68b","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint lib test && deplint && depcheck --ignore-bin-package --ignores=@types/jest,typedoc","test":"npm run lint && npm run test:unit","build":"npm run clean && tsc -p tsconfig.build.json","clean":"rimraf build","prepack":"npm run build","lint:fix":"balena-lint --fix lib test","test:unit":"jest"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"versionist":{"publishedAt":"2021-12-05T23:20:50.475Z"},"_npmVersion":"6.14.15","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --fix"]},"_nodeVersion":"14.17.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.4.0","@balena/jellyfish-logger":"^3.0.162"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^27.4.3","sinon":"^12.0.1","deplint":"^1.1.3","ts-jest":"^27.1.0","typedoc":"^0.22.10","depcheck":"^1.4.2","typescript":"^4.5.2","@types/jest":"^27.0.3","lint-staged":"^12.1.2","@balena/lint":"^6.2.0","@types/sinon":"^10.0.6","@types/semver":"^7.3.9","simple-git-hooks":"^2.7.0","@types/json-schema":"~6.0.1","@balena/jellyfish-types":"^1.2.38","@balena/jellyfish-config":"^2.0.2"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.318_1638746574235_0.4885506118197287","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.319-joshbwlng-update-upstreams-f5d36b20c12426988b394dcdbaf2647bcead45a7":{"name":"@balena/jellyfish-plugin-base","version":"2.1.319-joshbwlng-update-upstreams-f5d36b20c12426988b394dcdbaf2647bcead45a7","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"Apache-2.0","_id":"@balena/jellyfish-plugin-base@2.1.319-joshbwlng-update-upstreams-f5d36b20c12426988b394dcdbaf2647bcead45a7","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"85fda31ccc14351de3e7906ec6884c9879dd869b","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.319-joshbwlng-update-upstreams-f5d36b20c12426988b394dcdbaf2647bcead45a7.tgz","fileCount":19,"integrity":"sha512-9tBmtVYMzbDgEYRY++YuIOx9P4KwIp9F2KtO16aK7u1PMwFh/0JNqjKsbRtpvHSEiATOsjL5jRsdd3FG8AXLGw==","signatures":[{"sig":"MEQCIAyWuAhR03wTGjbZfMA2qeiFbSFfH+gGRRhGtk+XiLA1AiBY4aXLyi3sLkFbzo5RtPIoyr0EAoP4Rxc70VTqkgEZOw==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":80885,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJhru7ACRA9TVsSAnZWagAAmFUP/RiydBVey+D/+UPQHXhK\nvoUMJN679d/WGwUcfUsyq55U7fkrS4BcURxvDB7gB/WMDGyCHeP+zITs/Wn8\nAyDrSvyglHvTgLSqDlcwXN036YxCKzL+a2rbo7HVW7f9UxsXoo5I1Y9f43cs\npnUOR/9o4lO99i+4wRdAesB1G0vtzCccM/R4exZJS5mUzKop58cbTGCI8Ab9\ncmyFzp1vmn/bcyEyuC6meHXDaQb0sUyiR3w5PJ2Cilo5nYVN0yjdtpif6clq\nxyJnRD5g4xlCFTUE3WyU138SNqLQ9OgYfbiRigMhP/vWuUY5JBw7DVNTN9m3\n3kK+Irsb1zVlx0ECYvAcW/6fYUwOKi9JSKCtHY//suIdSfraf6hoZS5o5oVj\nKp/t7P7VmKX/AhP4GkWI9QFd2zsHA6L1XDkxwDHBGy1jo0Cz7ziV8VfqcqGf\nn9/vDS1kiGI2+eL8KQMtilLPpM7brqjWitrC371n6DpNhipY9jyb/DHBa+sq\nR7IYlyKBddA1RdYRggRSj9fAUgLYazY9gPYwtz9/BN7ng0DM5T8+GSFrQ3LZ\nVY7MZdvZoi0QVFAJKC1S6bWtEVU5K2PCWICSdyCUR7j4/FB0rW7lQwdbEufT\nGE+Q+NrOAP0OiYMvtastTF4N30gcOwhndg2mg55uZz9xbKZ8WoBu7zAwAHTv\n5H42\r\n=XiXc\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\n[![Publish Documentation](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml/badge.svg)](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml)\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=14.2.0"},"gitHead":"f5d36b20c12426988b394dcdbaf2647bcead45a7","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint lib test && deplint && depcheck --ignore-bin-package --ignores=@types/jest,typedoc","test":"npm run lint && npm run test:unit","build":"npm run clean && tsc -p tsconfig.build.json","clean":"rimraf build","prepack":"npm run build","lint:fix":"balena-lint --fix lib test","test:unit":"jest"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"versionist":{"publishedAt":"2021-12-07T05:15:05.276Z"},"_npmVersion":"6.14.15","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --fix"]},"_nodeVersion":"14.17.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.4.0","@balena/jellyfish-logger":"^3.0.162"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^27.4.3","sinon":"^12.0.1","deplint":"^1.1.3","ts-jest":"^27.1.0","typedoc":"^0.22.10","depcheck":"^1.4.2","typescript":"^4.5.2","@types/jest":"^27.0.3","lint-staged":"^12.1.2","@balena/lint":"^6.2.0","@types/sinon":"^10.0.6","@types/semver":"^7.3.9","simple-git-hooks":"^2.7.0","@types/json-schema":"~6.0.1","@balena/jellyfish-types":"^1.2.38","@balena/jellyfish-config":"^2.0.2"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.319-joshbwlng-update-upstreams-f5d36b20c12426988b394dcdbaf2647bcead45a7_1638854336433_0.15174911323434137","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.319":{"name":"@balena/jellyfish-plugin-base","version":"2.1.319","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"Apache-2.0","_id":"@balena/jellyfish-plugin-base@2.1.319","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"cb2ad7502746478f152dfb03acfe03e32a941328","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.319.tgz","fileCount":19,"integrity":"sha512-f3nrwxv0zCT0umoK3m7814MvUufEpFAIFYGA+dfGoaj35bERb2f4Oxx4MPhfGv+aJjA42kRUK2J2jw+18WRURg==","signatures":[{"sig":"MEQCIHEZEC2CzyiHD3MZcgQkGuO2nzP5kAg7e0acb1IPeHFYAiBT08XQR2ZIKDevhldT1OZrgrx0gosQMFjaDLe8QqV1jQ==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":80817,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJhru+hCRA9TVsSAnZWagAA/SwP/37H80VbgZ6JQbZTrdxb\nTcspbCdzFJA2cJVKLkruAwB/hgNwRGBpZo1GLu9IYtADAxil/A2VxNxeRCIB\nMAUpyebXAAe7jPVOxmr0mnij3OBZhDZq9W4GQkt9U6JyHDcpK4fJ4rlCD7CY\nidcqiLyYPRGrH2TnG/bytiNsg1ynP7QR16wSuNViOF/UdOCnCPWRAEGrv1ug\nJVlwR2ZRGLAsWTW9sB6Vf8oNEmKK1KCNwUcXnMyMfC/XoCtJZNPWuN28RyIb\nCVOk5n2lDet/P0e7WZEZ8aiqYLbZTaDJ2bZBV7fDZPCa/n0WIvmz7s/+sNIE\nSnbRjgJEI3paBDdnD36uCtkgMWEizSGOkWRiAwzn55+bbUmtxH61rYy5tBZH\nVQHK/UdU1nqmZtA9VT3G0+Y6sWhTs0KzqXEnWLQp69cIJh329IEC0qG6luR1\nxjYlYUu7GuO8c4salR1PUESPWSHIOJEmTbAPku+eg/PHVkg8kBNynSqIYYlf\n82Q8sHvpRltopU2KQw05baPA+jOtfZ+SnFfI639NsDhWT3bI2JzN4+QYGmVD\n/epzQiAypZtEI9EfbqHzgC5pkrp4zqCWT0fH/JVwnOWdTEkxozuCm2c2Lcnt\nBhJ7Ojx6UbJo6dl2rx2rngGgKjJ9RtqCU5SeKM+ytJOoh/Iql/UPS1w+TBZ4\ndBNV\r\n=i9Ks\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=14.2.0"},"gitHead":"9ddb8b516962a4c94d82b10debc7361dbf3f44d2","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint lib test && deplint && depcheck --ignore-bin-package --ignores=@types/jest,typedoc","test":"npm run lint && npm run test:unit","build":"npm run clean && tsc -p tsconfig.build.json","clean":"rimraf build","prepack":"npm run build","lint:fix":"balena-lint --fix lib test","test:unit":"jest"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"versionist":{"publishedAt":"2021-12-07T05:20:51.063Z"},"_npmVersion":"6.14.15","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --fix"]},"_nodeVersion":"14.17.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.4.0","@balena/jellyfish-logger":"^3.0.162"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^27.4.3","sinon":"^12.0.1","deplint":"^1.1.3","ts-jest":"^27.1.0","typedoc":"^0.22.10","depcheck":"^1.4.2","typescript":"^4.5.2","@types/jest":"^27.0.3","lint-staged":"^12.1.2","@balena/lint":"^6.2.0","@types/sinon":"^10.0.6","@types/semver":"^7.3.9","simple-git-hooks":"^2.7.0","@types/json-schema":"~6.0.1","@balena/jellyfish-types":"^1.2.38","@balena/jellyfish-config":"^2.0.2"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.319_1638854561764_0.11625155435368884","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.320-joshbwlng-bump-jellyfish-logger-a6457daa552dd622867b59d90b0b7eb9b002e46c":{"name":"@balena/jellyfish-plugin-base","version":"2.1.320-joshbwlng-bump-jellyfish-logger-a6457daa552dd622867b59d90b0b7eb9b002e46c","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"Apache-2.0","_id":"@balena/jellyfish-plugin-base@2.1.320-joshbwlng-bump-jellyfish-logger-a6457daa552dd622867b59d90b0b7eb9b002e46c","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"3698e52ff0b707953651d9fd7a2b54b9127705fb","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.320-joshbwlng-bump-jellyfish-logger-a6457daa552dd622867b59d90b0b7eb9b002e46c.tgz","fileCount":19,"integrity":"sha512-kT2/icmEqDPyvYlv/JoGAlrbHMuWSarnsraCbYmBqzBRfXfA9GtXo+0QI+8uRjqBgCUbTaN2c+2I49fNxyoBLg==","signatures":[{"sig":"MEQCIHxbIiocFC5gvU74EwiyRCVNTKGK8eCJCtqrJeaONKNkAiA4TyUcBf5cOUhTNZx9U6wxZXPFElWFUKzNeFsY9xechA==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":80991,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJhrvOMCRA9TVsSAnZWagAAOJIP/A60TbnEM05tQ6KlzVKd\nJtxojsJrgaJ+njtMX2JUlCvRdUP4AO16SxkJv5/cSv692eByXFNZ7nYLNC7S\nBSVgdTP4LMoCUrws83PgOOw4HkWH5kkgqDKEUKVUfwRL7ktwtYsmJFQQxcB0\nABJK0Sjb+zAHWHnVNw2sOeDOS4oSdpJI+b1v+LTc/WlaOJWu4cKGmieXX8Qb\nN9it9E74R0Ieyr08FdfQB5PfbpzOT1SgUP3ooPDNS2AB9PBLGjv1WCNS1vSR\noNevzW42igFl1mHRr+EhMgMNegHAFRtmDoP8G8kWOgf6xDv5CB+NaF7OgqVG\ne3cuOcEQ9svxdGybRV6NxpGVsHMHyoZ7Dn2H1uybyldHMVDIIpUpQogf5d+l\nEjuIA1fJ1ohgMhr0biHP2Pm1g46Eiq9Isvph5esOKgBD1BrF69K6JwwY+rj5\nLlFJQb96BphYFYrf3oEm34zm2bvfeLx6UdVI6ZOxIf/MPl2g78J96SzBcZbx\nrCBtfLKz4MG1+dVwmxA7EjRG/wwvLmymsG7/FZig6vsjQh1kvjlKbOsqZBpZ\nHYdJdbTDDPkLgWjtZT0GYxxSbz0474/H+JspqC0g7vuUgzAOx23Daajd+98G\nfb7ZDQ7U2FcunuuzBswCqa5G0ZQ4Eu7Vm7MXs0QWGCB5tQLFrM7GEo0dXvJ3\n8vXy\r\n=VW7K\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\n[![Publish Documentation](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml/badge.svg)](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml)\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=14.2.0"},"gitHead":"a6457daa552dd622867b59d90b0b7eb9b002e46c","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint lib test && deplint && depcheck --ignore-bin-package --ignores=@types/jest,typedoc","test":"npm run lint && npm run test:unit","build":"npm run clean && tsc -p tsconfig.build.json","clean":"rimraf build","prepack":"npm run build","lint:fix":"balena-lint --fix lib test","test:unit":"jest"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"versionist":{"publishedAt":"2021-12-07T05:37:00.598Z"},"_npmVersion":"6.14.15","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --fix"]},"_nodeVersion":"14.17.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.4.0","@balena/jellyfish-logger":"^3.0.163"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^27.4.3","sinon":"^12.0.1","deplint":"^1.1.3","ts-jest":"^27.1.0","typedoc":"^0.22.10","depcheck":"^1.4.2","typescript":"^4.5.2","@types/jest":"^27.0.3","lint-staged":"^12.1.2","@balena/lint":"^6.2.0","@types/sinon":"^10.0.6","@types/semver":"^7.3.9","simple-git-hooks":"^2.7.0","@types/json-schema":"~6.0.1","@balena/jellyfish-types":"^1.2.38","@balena/jellyfish-config":"^2.0.2"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.320-joshbwlng-bump-jellyfish-logger-a6457daa552dd622867b59d90b0b7eb9b002e46c_1638855564072_0.3054891155808861","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.320":{"name":"@balena/jellyfish-plugin-base","version":"2.1.320","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"Apache-2.0","_id":"@balena/jellyfish-plugin-base@2.1.320","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"0a3baef520785bb15188826ddcf6a28d79c1183d","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.320.tgz","fileCount":19,"integrity":"sha512-tNEDJC2v5zOhSnxun5ZfU3CLAjL/pa87I5CmFeivVOO5hObtwz/scUQjgjD3XBZSWW7+yzWKUJZxb9prvyOATw==","signatures":[{"sig":"MEYCIQC/BsaknRotbeFVYZu2WgY8TpSfNkHRlMEsbdLLryQ5ggIhAJRgHxrhe4z4C2zyK346Q6t5K7oo6TXSfOcajQGtUP//","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":80918,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJhrvXmCRA9TVsSAnZWagAA1bcP/R4Urjs/ubu9SiXoOB3M\nWP2jN7dqsZqlMpaQWvzLFh7JLJSyZ+9DwbmeAUWe86Kyj8hViE1Ult6RPByG\n0qQE3T66Uwu6ns2pFXSWBsoLeGQ2JA+t3A+jty6OgSkyBteB+1IgmsuU0INY\nRVJHj0Nc6WllDqigVHufivo64BhassNubzG+IwX8NywmyStUBbus/tklYcD1\nTkSuU2gek0wiypGUP7GZhr4kML0kp1iXbkMsG5Bxq5MukKbu1+zCByeZFsXX\n8hhpM6JOfgqpWXj1Jyjr3GJKaC9IYeA5Dem5sD4zs49er/j+EBHHZeQGIjgM\nZ74Evvn/UEdsSLufw0SrF6pV1DoMdEZnIIaOAnQJZCYx0mrAeA20nIbFKo7j\n42dY62fMmip1qWkls79hwxudPprz53RMFhzvwFv60B2RoH4Mxg688DjvAxae\nfOt0MZ5qJ1r/+zUV9w9aYafeHfuyOSB6i4BC8Lhg1DSN7hm6jomMUiL933Wd\nwiOPeidJwgzlXtpQWOvsr4b5U3OPtOBPBVKk6Pbmrmg5IzAY/As173cDBlPT\nIo4FMUEpq4l7oag2RSbd5DCS8n9ay5rvIsQIqNNMScv2C1ZGiRU5HiZlOqRD\np6lyYxuk2QPDGdg1raYUwua6QKu4ibI0h0J7W3s+/ngszapzQYz5boVD9WSU\nAbeZ\r\n=s7RP\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=14.2.0"},"gitHead":"be10d6991f32ec7c1df51f140457c3877c75031c","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint lib test && deplint && depcheck --ignore-bin-package --ignores=@types/jest,typedoc","test":"npm run lint && npm run test:unit","build":"npm run clean && tsc -p tsconfig.build.json","clean":"rimraf build","prepack":"npm run build","lint:fix":"balena-lint --fix lib test","test:unit":"jest"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"versionist":{"publishedAt":"2021-12-07T05:47:25.747Z"},"_npmVersion":"6.14.15","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --fix"]},"_nodeVersion":"14.17.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.4.0","@balena/jellyfish-logger":"^3.0.163"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^27.4.3","sinon":"^12.0.1","deplint":"^1.1.3","ts-jest":"^27.1.0","typedoc":"^0.22.10","depcheck":"^1.4.2","typescript":"^4.5.2","@types/jest":"^27.0.3","lint-staged":"^12.1.2","@balena/lint":"^6.2.0","@types/sinon":"^10.0.6","@types/semver":"^7.3.9","simple-git-hooks":"^2.7.0","@types/json-schema":"~6.0.1","@balena/jellyfish-types":"^1.2.38","@balena/jellyfish-config":"^2.0.2"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.320_1638856166395_0.3209177331418762","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.321-renovate-typescript-4-x-ad164ef06916fb58992d494025b2dcf8650ff89c":{"name":"@balena/jellyfish-plugin-base","version":"2.1.321-renovate-typescript-4-x-ad164ef06916fb58992d494025b2dcf8650ff89c","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"Apache-2.0","_id":"@balena/jellyfish-plugin-base@2.1.321-renovate-typescript-4-x-ad164ef06916fb58992d494025b2dcf8650ff89c","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"e78a0b4052945d6586ac0129674c6689ece4fad0","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.321-renovate-typescript-4-x-ad164ef06916fb58992d494025b2dcf8650ff89c.tgz","fileCount":19,"integrity":"sha512-ohyR0TtrIgmQjMVG2d/4Bqdneo60L014cP5jkOk8c+oYUSADtXJj2+2K2zMlw5N0+pR6z9jN04SHfUH5So6g1g==","signatures":[{"sig":"MEUCIQCJOdt1GPq+P9aWESc4uiMz/ZusmmMINmexoYbxmr6u7gIgZlNIPldlOC5dwoO7VcOc4MTwTijP22UmuQnqU1lLWTI=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":81072,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJhsojFCRA9TVsSAnZWagAAaPMP/1pIoD/HZ7vNsNXF8+U7\nYQqklSdm8vicLDaSjJrwrz+l2wEfa+rI9WccO/n8iJNKoO3QrtVNo0NfXC8H\nJoagJS0KDx/T32uTjhzpO7zcctlwR2q0VLB9huZIwWyRJv6kXxQS87KXFWbi\nbzv6Bkm/TfdZD8eJjIJUZMoMIgs2ky0nXbUq8qqqt0Vl2jJ4QUEy+KQ0Neif\n8KpjGpSMwzlT1bN71cUB+9x/br+QOerQJcct0AEQNhtUFtEoyFIuHyDakQTp\nrj7+eiwUxh5IdDc9OE2Q2tqk5NNXE68Gpl7IuXAXxeUq2VE7shQ5QSTxmbcE\nQi3lsOsPTpSoWNHcrVb3dOcsFsWXI3L59Ck3NLCtW0dowWeJRZkwEp0wM7/E\n0hQ8OOFdG/fb9ZbBPoiRK1rYp9ruVdmSBTuXeIFs4wz2Q+g3eG5Ou5ek4lUH\n9E2fnCpEVLWTCrv+dTIrDH3XbxznyxE94C5bQ7aaeYiaZIARL50YsthbDCPq\no4F9CeXAt3c7Wmu/vhdTHg2EV9cOt47vfkVVwMgWSUiWw8B9s/k4tOP8Jggf\nNemeVRySBSjoK6zpBpYw6w3NqLUCKEp0uhRQjy8LWuZ5Y6AVwk9Rw5u7J606\nlb2cezcYTxbULSgawaJ4ia2OCAEKYiuwctvnak1HOzZWcALSxHw1n4JnjGjL\npdgs\r\n=c3eQ\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\n[![Publish Documentation](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml/badge.svg)](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml)\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=14.2.0"},"gitHead":"ad164ef06916fb58992d494025b2dcf8650ff89c","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint lib test && deplint && depcheck --ignore-bin-package --ignores=@types/jest,typedoc","test":"npm run lint && npm run test:unit","build":"npm run clean && tsc -p tsconfig.build.json","clean":"rimraf build","prepack":"npm run build","lint:fix":"balena-lint --fix lib test","test:unit":"jest"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"versionist":{"publishedAt":"2021-12-09T22:50:12.497Z"},"_npmVersion":"6.14.15","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --fix"]},"_nodeVersion":"14.17.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.4.0","@balena/jellyfish-logger":"^3.0.163"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^27.4.3","sinon":"^12.0.1","deplint":"^1.1.3","ts-jest":"^27.1.0","typedoc":"^0.22.10","depcheck":"^1.4.2","typescript":"^4.5.3","@types/jest":"^27.0.3","lint-staged":"^12.1.2","@balena/lint":"^6.2.0","@types/sinon":"^10.0.6","@types/semver":"^7.3.9","simple-git-hooks":"^2.7.0","@types/json-schema":"~6.0.1","@balena/jellyfish-types":"^1.2.38","@balena/jellyfish-config":"^2.0.2"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.321-renovate-typescript-4-x-ad164ef06916fb58992d494025b2dcf8650ff89c_1639090373261_0.018704677589986396","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.321":{"name":"@balena/jellyfish-plugin-base","version":"2.1.321","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"Apache-2.0","_id":"@balena/jellyfish-plugin-base@2.1.321","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"33907619b5002b40d2d58a40271b5c34450acb8c","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.321.tgz","fileCount":19,"integrity":"sha512-JPjZw+7FglKtQJWpetVNhIsKRMvnwBW09/WLEPdm0ySJgGrZTx6Ps8JaN6VmKKgZgI2zb99Rz/TLk8n1Z7ktNA==","signatures":[{"sig":"MEUCIEPK8LsWW+yoOp27i/9xTvrub4KetNnx9/l5xqfa1liRAiEAzZxa6SBwBqwkIwTx2dFV/0ZtCN3r13IGCrfH/VfDcyI=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":81007,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJhsrhTCRA9TVsSAnZWagAAaV8P/10Be53/yaU9YCAsoUEl\nc098SmjSQ8F8uTaBQBbv2lXUwJ1zhdlw0/8ln+5q2SFKHr5q3eOnxafsMAFL\nJA0W2ihuwSucWq5Sois5u2ABBHgjNd3E4QIUmwCZoL8pivCPNkDP1uDzkkks\nCrvTQtRP/52CQOSA53Hp+YsdzQQFWmcmtrRTAdUf/xVnLX8jbv7opPA0HMfP\no7mrUx6Nh5vtfajyJvDVUQ6y5iCLRCOqpxsrOZp5ZP2wNlqBevT/prhH9MrJ\nlIHWMoNbNbnFIxU9TRkiJVxAsNwlUfo8jyd+UEcglgW1eBtQHKUxdsutZHmq\nLgia+p9YTPtXV3Qh+SG6QVaZqh+4reysMw9rv0seynClC5cCs9b+YvtDCKIO\nP4Afng+E62cIxj0Is8GVTabzTat665TusvcNxpRDqc0FxWOmhCnGcUXhCfgu\ndfoW/LxZIPMMhC0xbqVMRk4JXMReUmEX2BtZBtBeNeZgoBjS17qUo762I3iA\ncIWS8NYXXAHxQLXdj7owYMiUppFL054mBN4C/eZ+mr+G4qb2z0/1p7KPLFid\nMe99VR4AdsP5gP16L9LluSy9ewRQDnwf+zxOinI3D5TXzkKRvNq1yUWlyHzy\nv4NOMCf+YpCwgiKuz88VtSRT8a5oKLAHozoVFRCvrGmr1LFpbtUGZohdrOIK\n4czT\r\n=GW8y\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=14.2.0"},"gitHead":"2fdd238712e180536126ab3840bc7e59ddf53c18","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint lib test && deplint && depcheck --ignore-bin-package --ignores=@types/jest,typedoc","test":"npm run lint && npm run test:unit","build":"npm run clean && tsc -p tsconfig.build.json","clean":"rimraf build","prepack":"npm run build","lint:fix":"balena-lint --fix lib test","test:unit":"jest"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"versionist":{"publishedAt":"2021-12-10T02:10:56.930Z"},"_npmVersion":"6.14.15","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --fix"]},"_nodeVersion":"14.17.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.4.0","@balena/jellyfish-logger":"^3.0.163"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^27.4.3","sinon":"^12.0.1","deplint":"^1.1.3","ts-jest":"^27.1.0","typedoc":"^0.22.10","depcheck":"^1.4.2","typescript":"^4.5.3","@types/jest":"^27.0.3","lint-staged":"^12.1.2","@balena/lint":"^6.2.0","@types/sinon":"^10.0.6","@types/semver":"^7.3.9","simple-git-hooks":"^2.7.0","@types/json-schema":"~6.0.1","@balena/jellyfish-types":"^1.2.38","@balena/jellyfish-config":"^2.0.2"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.321_1639102546862_0.9822491248645455","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.322-renovate-internal-patch-af3250f34c88277fce7aa11190a129bd317c0ee5":{"name":"@balena/jellyfish-plugin-base","version":"2.1.322-renovate-internal-patch-af3250f34c88277fce7aa11190a129bd317c0ee5","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"Apache-2.0","_id":"@balena/jellyfish-plugin-base@2.1.322-renovate-internal-patch-af3250f34c88277fce7aa11190a129bd317c0ee5","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"8ea437c214e6f069bd766edea79d6e289f74e6f1","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.322-renovate-internal-patch-af3250f34c88277fce7aa11190a129bd317c0ee5.tgz","fileCount":19,"integrity":"sha512-VWT3HdRyX78k+NLZw6ZAUL5VK8AOrqThO94ijXKx1oU0qcpEt0IXDu8LwQdvXY5xfxFBaZEKMWRz7YvNYAmnvA==","signatures":[{"sig":"MEYCIQDK9q79uLbva68Q3IQ5RcP6mACbnOnimWebJRM7UauWkQIhAM1FPaQUFB2v7HuQtCBboJS7HKVi7nJe/C2DnAtuuA5F","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":81144,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJhtGnWCRA9TVsSAnZWagAA3/wP/jSWUlRi6fPJQpkscuUk\nq6GHlnCigq30U2lf/mxDZduTG4rrR8R9A2qb5UH1sNFoHIy+3Mv4axngVYEy\nyh1opZttRRMtFrOXK/+779hV78a4u6nqOzZMpBJpu3Z6E3PAovxpVDmfwvpl\neF0DNZfVGS/zK7COHtd4rzaUrSULZwEMg+80AaC7sCKRj+rxgcLjMwA5cnjT\njkURmPSlyZQmCBD/vP9RPHSAgZc8vCQ8HFAqcxAcaxQ5zQ1uI5hg9hDXoiK9\nhKFLoXc7nH7CRlZziMSwdPj6d6nVAQPs9qT0szw4VVHSM/60gUHM9oa/KBqt\nythK94MN+DPYQGgv/bTmMk3ZR4wxlpcXyQ9cY95U4yxKaYM/4+qIyuq/txIr\n/oUHl8Kd3AGHjUAnC82XBq7B57lGWulEnThqxcW5ZOUtHjWF56WCtcC9ACin\nF/uJsMJ/nfL13fskj8rtYLMVlsmFeCi0SRG4Urk12YC9egUjf20DoSToVO/Q\n9MoZwyKoOxBXm4lHL34xM/Z+LXeFxz/oQ2VNrQRSnPu1gck7mG79RFSLhStw\n6r0jo9I1L3Qrbrc8wTm0mV1BNR7My6jjqz5DYFL9a6THj43E+MFH9CrbWLNC\n2a3QUGISwuvPiXoePLfC0i8zwZ9huIVm3wr9K/pTYo5874e/L1rAVxB4Jjts\nkGOK\r\n=gaCM\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\n[![Publish Documentation](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml/badge.svg)](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml)\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=14.2.0"},"gitHead":"af3250f34c88277fce7aa11190a129bd317c0ee5","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint lib test && deplint && depcheck --ignore-bin-package --ignores=@types/jest,typedoc","test":"npm run lint && npm run test:unit","build":"npm run clean && tsc -p tsconfig.build.json","clean":"rimraf build","prepack":"npm run build","lint:fix":"balena-lint --fix lib test","test:unit":"jest"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"versionist":{"publishedAt":"2021-12-11T09:01:51.251Z"},"_npmVersion":"6.14.15","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --fix"]},"_nodeVersion":"14.17.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.4.0","@balena/jellyfish-logger":"^3.0.165"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^27.4.3","sinon":"^12.0.1","deplint":"^1.1.3","ts-jest":"^27.1.0","typedoc":"^0.22.10","depcheck":"^1.4.2","typescript":"^4.5.3","@types/jest":"^27.0.3","lint-staged":"^12.1.2","@balena/lint":"^6.2.0","@types/sinon":"^10.0.6","@types/semver":"^7.3.9","simple-git-hooks":"^2.7.0","@types/json-schema":"~6.0.1","@balena/jellyfish-types":"^1.2.39","@balena/jellyfish-config":"^2.0.2"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.322-renovate-internal-patch-af3250f34c88277fce7aa11190a129bd317c0ee5_1639213526757_0.8173176318172639","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.322":{"name":"@balena/jellyfish-plugin-base","version":"2.1.322","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"Apache-2.0","_id":"@balena/jellyfish-plugin-base@2.1.322","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"cccb8728d70a5e1a9f741b11d95e741d69dd3dc5","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.322.tgz","fileCount":19,"integrity":"sha512-2lwfiugamT7X1Iq8XHU3gLLIvQer67G1Prig2dXhuwHMQWDHbbQ87Lu2wcXSI73d9XYYrESzT3vpx4Xi4NLdOw==","signatures":[{"sig":"MEQCIFZxFcrD//EBcIptd3EJyoxAoap7DskUkaTIoaABJ814AiAXjUK/hLdnMfXjsOXc0/CysJmFaVHgz+oG6Q1v+9iBSg==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":81079,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJhtGqpCRA9TVsSAnZWagAA/f8P/j7nw4OxIx8InlsvDKjr\nRbICT1BmLqAaA8UkeHTZUAcFc7efSwzw+FlV2b1FB3hGORz1tQEIJ0LXmJWb\n6gW3FJBrIdLWl33GqGltUlMdYNQdD617fzBKxY7Dafq9q5csd9OcOzKE2JGc\nizBOcAM8nC75I/0ZeP/DbMIvtm3WVoEXFnzwAsthJ7WyK0eINYN4dAy46LV6\nQgWWzlfKac6TBLpByXmUAEXlVJ4qywDLQiwsUnnIBd3bZVF8FtWPDdihpWV0\nRPXm6+Nv71Ns8BIJilbGBKKmcYRG6AL/EDieRAllV/onNdDBVqxz4RMzST6X\nuoJhfNKJUcjdFyvJTHO21fvPwqX5yRGNQog5zsOSqCirjvg0zZdvavJuZ27v\nQGfpfTgZHTbWgXdmQmTbcjopJtdPvwCTFMYuj6zD4reT0ZZyPjtYj8CFgpXZ\nwMZWiwVJGSl4JvktOCkv+aIyWhLu/YzphkCX7KDS7pTwNyhYXbR8qdxecNmG\nL6q5xjbeM921X0LdSoR8Mlh+3PSLt78OUFQiurTqttg77XOJAbChh067L2bE\nUCe9kBmpmnWrHyExGQxes4p5bXrzUYdo8pMD+5EruvxftoeuftOvzrM/lrKK\nJBPjA/JGce9ojRgdIhffTdWhHzeDS9Mw6tGm32B3iL1QxGXUmkLObvBehfaU\nMg01\r\n=pf1P\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=14.2.0"},"gitHead":"b3e6b69246170da06ce10dea8b5a621694efb6b3","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint lib test && deplint && depcheck --ignore-bin-package --ignores=@types/jest,typedoc","test":"npm run lint && npm run test:unit","build":"npm run clean && tsc -p tsconfig.build.json","clean":"rimraf build","prepack":"npm run build","lint:fix":"balena-lint --fix lib test","test:unit":"jest"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"versionist":{"publishedAt":"2021-12-11T09:07:01.398Z"},"_npmVersion":"6.14.15","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --fix"]},"_nodeVersion":"14.17.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.4.0","@balena/jellyfish-logger":"^3.0.165"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^27.4.3","sinon":"^12.0.1","deplint":"^1.1.3","ts-jest":"^27.1.0","typedoc":"^0.22.10","depcheck":"^1.4.2","typescript":"^4.5.3","@types/jest":"^27.0.3","lint-staged":"^12.1.2","@balena/lint":"^6.2.0","@types/sinon":"^10.0.6","@types/semver":"^7.3.9","simple-git-hooks":"^2.7.0","@types/json-schema":"~6.0.1","@balena/jellyfish-types":"^1.2.39","@balena/jellyfish-config":"^2.0.2"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.322_1639213737342_0.6796643577795805","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.323-renovate-external-non-major-eac3392483d8cabdb63dc099388486800a940949":{"name":"@balena/jellyfish-plugin-base","version":"2.1.323-renovate-external-non-major-eac3392483d8cabdb63dc099388486800a940949","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"Apache-2.0","_id":"@balena/jellyfish-plugin-base@2.1.323-renovate-external-non-major-eac3392483d8cabdb63dc099388486800a940949","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"76dba3066e13c0f9c5abf686453809b0b7532985","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.323-renovate-external-non-major-eac3392483d8cabdb63dc099388486800a940949.tgz","fileCount":19,"integrity":"sha512-TSoDae1p1Zs+3ygypxE9ppjTbEyhPX6Ap7sg+3E5UBq08xjlIgIN7nA7KLXgtGOCeDzVUzZJCGKdrDNnGCmIkw==","signatures":[{"sig":"MEUCIFjCpOHv3DlU282aNqE/ACQoux7CqsJw9KU8Kfr2QUCEAiEA1qIkqdhzUkb8t2E4H/xQTGLNB37HrKWUMNbBS7sTpsE=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":81224,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJhtGtnCRA9TVsSAnZWagAA+jIQAJFFelXo0GjSeBDlg3DH\n3DkPgon/FqSF8NUtvpIewnBvKkSdN5GFxpKnoYTNPHBuZg0D3xeLV4imiYKg\nt4qHBMKyU9rA5pk4zKPw1RqaClN4BYiNZcqY/4hmVXK0dKvY3jsCBRMpqJlN\nL2SKSvFrQXE9QusS4hxrilV8zaFvNactiqHIiUG/S16P7gDy+7u/evuO7AnM\nv1tPJTk7RbQFCQBnk45OrIjVMFl3dt3fO09qwTitgp0lsy5qFjgMtxZORuXt\ny70x/ktW2r4t/IM+fy47GJX6rH8Id3yNRtw4jo9uhD6TppYlSWky/LtgCB5R\nnWAn9Oq2iV2lrZRWepfHWSAQ2kCIljCBZqn9OwkvSnf0ZQDLMK1nchfOgt08\nJU/buieUgfZjS3IL0ZHLghahe+gG8Wmy0Ta2HSbG/QDmvHbYFw0C0CPoMKvh\n8Q/3Bc241kbuJJW8HT/YgLha94CM/RSTsumzHRUDSn2U+3FOfjS9eL5rbNz8\n2kCuuR7dOqNNc2OrmSwZK8mnmtMCNoBTNF8XmxGzVMr/6JxQm2jczW8+2PT1\nl9ifC6PkRp2uWrMFCb37wtve3ScQ/NeSYuTAFvEqAw4YMlL68Oi820e1e8gy\nxE4bro+nVS/BXfFid9gDjcGQIswBZ1lGHp2lAhhqo4/Ge0iA2EX1VEdQPX7c\nX8l8\r\n=LlUj\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\n[![Publish Documentation](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml/badge.svg)](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml)\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=14.2.0"},"gitHead":"eac3392483d8cabdb63dc099388486800a940949","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint lib test && deplint && depcheck --ignore-bin-package --ignores=@types/jest,typedoc","test":"npm run lint && npm run test:unit","build":"npm run clean && tsc -p tsconfig.build.json","clean":"rimraf build","prepack":"npm run build","lint:fix":"balena-lint --fix lib test","test:unit":"jest"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"versionist":{"publishedAt":"2021-12-11T09:09:11.307Z"},"_npmVersion":"6.14.15","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --fix"]},"_nodeVersion":"14.17.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.4.0","@balena/jellyfish-logger":"^3.0.165"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^27.4.4","sinon":"^12.0.1","deplint":"^1.1.3","ts-jest":"^27.1.1","typedoc":"^0.22.10","depcheck":"^1.4.2","typescript":"^4.5.3","@types/jest":"^27.0.3","lint-staged":"^12.1.2","@balena/lint":"^6.2.0","@types/sinon":"^10.0.6","@types/semver":"^7.3.9","simple-git-hooks":"^2.7.0","@types/json-schema":"~6.0.1","@balena/jellyfish-types":"^1.2.39","@balena/jellyfish-config":"^2.0.2"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.323-renovate-external-non-major-eac3392483d8cabdb63dc099388486800a940949_1639213926764_0.6445225213523529","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.323":{"name":"@balena/jellyfish-plugin-base","version":"2.1.323","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"Apache-2.0","_id":"@balena/jellyfish-plugin-base@2.1.323","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"565fc912c8388c33af1d94db82d015405df4c423","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.323.tgz","fileCount":19,"integrity":"sha512-aXXTWJhJj0d29avFtQQESf5C3be2nzGfaSbu3j7zsGZGZXF6XD38xBxFzP1S812X0oO7gzmDvurGvNG8v0eG5w==","signatures":[{"sig":"MEUCIQCVn/tkOPH4fXIaVVeOnoVRlRUXwm2V5rlXrAN42nmPGQIgDWAD4M0wl+iroZoRH8aa0RqOT/MJ650KTzXLafCkJM4=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":81155,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJhtGyVCRA9TVsSAnZWagAA/WoP/02km8NpPF4BFr99oCJR\ng6rrSIXLW9BQO/mjxpiEt64mnwF3/Qw0u71h1b/t+/8CDVGk76h3dB7R+iAQ\n4U84ecSxRaqMwY1xNpW9cKuogTfqLJu4iYMNd9d7ow9anY/bYFMP6GjUOeMQ\nC5vdCWjA9sLxXgRfAyxKD7XBQ+tIkRHTcRqZeGMdmjSvXVZJERzCMjkSJMCk\nnTQuAiOpXI2ckJ91YRwCSZ9J2vzyPpiUIY2hYc175nRBBPGfQlSAjjL8pdSk\nsDX/fm1Igh0HJMw6OXMseIAEIvQnbt2d2OhUNm4k1GBxtZTB6j2kJKPcohbJ\njnhW95JB04c4P3Qnf/R1BrfOr8KLILoYNlXaHFPeO8VhL9cEqhIMbJS4a69L\no/s+MAjFok1AaBMz1DF/n6GIa4URxmXQTaiDvnzvof1D3iqxX2NQLykyG4dE\nOrShv+mZPP8mEoSj+yEgVN0tZLUbQC5UhOK+sXeFsdX+oqw4JkJkFjuuJtN1\nr2QtS/t8zS//KB1Pv+Fe4zZdR8qfwY2F3gZYja8EtsilU4TlgfvxtvOy0deK\nRk6CY8T878J+cT1bVhPyh2izHx7HdyhyJeqvYAc+1i7cW5bPks9Nfr+CFkrF\nFJ0mEApe8WGidV+g6WaoqKIaMYexFj7jvDNFfTS2pi3vyOdqegp48iHenrYg\nLrxF\r\n=4G3s\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=14.2.0"},"gitHead":"07738a367f648461c73e4244da9fee654597bdbb","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint lib test && deplint && depcheck --ignore-bin-package --ignores=@types/jest,typedoc","test":"npm run lint && npm run test:unit","build":"npm run clean && tsc -p tsconfig.build.json","clean":"rimraf build","prepack":"npm run build","lint:fix":"balena-lint --fix lib test","test:unit":"jest"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"versionist":{"publishedAt":"2021-12-11T09:15:12.212Z"},"_npmVersion":"6.14.15","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --fix"]},"_nodeVersion":"14.17.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.4.0","@balena/jellyfish-logger":"^3.0.165"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^27.4.4","sinon":"^12.0.1","deplint":"^1.1.3","ts-jest":"^27.1.1","typedoc":"^0.22.10","depcheck":"^1.4.2","typescript":"^4.5.3","@types/jest":"^27.0.3","lint-staged":"^12.1.2","@balena/lint":"^6.2.0","@types/sinon":"^10.0.6","@types/semver":"^7.3.9","simple-git-hooks":"^2.7.0","@types/json-schema":"~6.0.1","@balena/jellyfish-types":"^1.2.39","@balena/jellyfish-config":"^2.0.2"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.323_1639214229291_0.7306603586852742","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.324-joshbwlng-drop-depcheck-64396f8fd818aacc93bd8e1570c28ce541c998dd":{"name":"@balena/jellyfish-plugin-base","version":"2.1.324-joshbwlng-drop-depcheck-64396f8fd818aacc93bd8e1570c28ce541c998dd","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"Apache-2.0","_id":"@balena/jellyfish-plugin-base@2.1.324-joshbwlng-drop-depcheck-64396f8fd818aacc93bd8e1570c28ce541c998dd","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"00b5944b7676b4822bb67bc163d501a472bcab05","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.324-joshbwlng-drop-depcheck-64396f8fd818aacc93bd8e1570c28ce541c998dd.tgz","fileCount":19,"integrity":"sha512-Vr6bcF8ZB8mUkMD/NZxvP4vFYTjQvbaNugAPvgmKRCdHmOI47/Lst/DPeivMKy7Eq3akJe2ImvkhRkR0f8MfOQ==","signatures":[{"sig":"MEUCIF2SxS4zodIo01PBkeHfzL9vzG5VpQ07tvBYbzDDWWyeAiEA/un/53Ue7J9TI0H+ZzbhO1k96DwyiZL+Xb4x9mpBk1E=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":81205,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJht/KkCRA9TVsSAnZWagAAN4gP/1n/0JXi6CTrti/G4QPJ\nF15/ASmvNxKm3xFGs0ZW9XWkvO5DdqFAZx+uu3UXSiBQ538+KRm0hOq6JEKu\ncP/oK+Y0YG4R9NSiRwA51u+66i5+UFC+woI1oUUC04Vy8SXutlNDaTTXOHbc\nNUbwCcAsEM0Vr210+wtZvu9Pgu2BklDDsY4U/vKTlXV2Wf5PilELINxyXEze\n3FR6L2NXB7/fewvF/EZ6YwM9g1yqqcZlnVMyeA797a0yxHVdMTjR/mzv63F5\nuCxmttNSAV6vE9KGtAT3sVh1T0Az6+P7l4xE6jQtfcWlxPI54H4DB2Mq2n1h\nfbVTp8MpmsURzajDbwqlrxvf4udwcTn8g2FoJieqPw2SqE5RRwHHhU5wk/8/\n/tDes9e8xBLmjqO2O5fs5GVt+G7IQUd53NL+BUZFvl80OpDzAuljHOg6HuZq\nnWeaL5Sdt7h5NqGuX78+uI9XDoSwFLV0Mtz5UVj1FV5Y3d1VOk7nMt9JgjIH\nQ/bx6aPO5QzTQAgi/YQJ4tD2OwLw7ldi0cUwlKzjbonqf81SOySL7aooW3++\niCY2eLtG99Exg1molc/rCDlpjrrpcbdXfvtfBzN5Jn0RSUbYNdvKzq1Vm0cP\nsbjeZwPnLlWh6gbVaEslkGjlPkX2IxtCWnK0aQU07+P4GIWEQyp5dJXsMNbn\nyo+F\r\n=BDMG\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\n[![Publish Documentation](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml/badge.svg)](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml)\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=14.2.0"},"gitHead":"64396f8fd818aacc93bd8e1570c28ce541c998dd","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint lib test && deplint","test":"npm run lint && npm run test:unit","build":"npm run clean && tsc -p tsconfig.build.json","clean":"rimraf build","prepack":"npm run build","lint:fix":"balena-lint --fix lib test","test:unit":"jest"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"versionist":{"publishedAt":"2021-12-14T01:23:22.250Z"},"_npmVersion":"6.14.15","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --fix"]},"_nodeVersion":"14.17.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.4.0","@balena/jellyfish-logger":"^3.0.165"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^27.4.4","sinon":"^12.0.1","deplint":"^1.1.3","ts-jest":"^27.1.1","typedoc":"^0.22.10","typescript":"^4.5.4","@types/jest":"^27.0.3","lint-staged":"^12.1.2","@balena/lint":"^6.2.0","@types/sinon":"^10.0.6","@types/semver":"^7.3.9","simple-git-hooks":"^2.7.0","@types/json-schema":"~6.0.1","@balena/jellyfish-types":"^1.2.39","@balena/jellyfish-config":"^2.0.2"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.324-joshbwlng-drop-depcheck-64396f8fd818aacc93bd8e1570c28ce541c998dd_1639445156062_0.7049147125050175","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.324":{"name":"@balena/jellyfish-plugin-base","version":"2.1.324","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"Apache-2.0","_id":"@balena/jellyfish-plugin-base@2.1.324","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"692e9197e4fcba1529a418581c9ee744dbb4c1b8","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.324.tgz","fileCount":19,"integrity":"sha512-Qohv1m7TwScQi1Cn4wfkHfwyryvh6IN6TG5zdA6btL6xQg0BeZRJFHxTso00QRn5eP/ucruYxHamLQqjoQ7lqA==","signatures":[{"sig":"MEUCIQCTrqES9OkmOXU56KlFSElUnxjk1RUFMfjEF98LUKwsOwIgMbCZWdHL4mLlc2b8JYQ+iwsDfojcPlrH489P5MnuT2I=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":81140,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJht/NeCRA9TVsSAnZWagAAu6AP/icvsZPJxkDfRbWEDzel\n6wxC8CVdnLPo4QIKpJYzE+DX4UszRh1ECxclUIXK82iBQ3yDw5t0xkmSv0kO\nwyrRXUGw1CxBy23my9HIYBHz5pV5vLxol9mi6yJVfkgqqyJPE9osbSubZUBg\nYW7+FJ+np9UvMA6KBlL8bI/P8ib3BL/WKFwyaxxDQDl47/4M4P8SesGrdGaG\nittzAmUXJTmDKTsgvDmFzjBuiKkCYRqZ4DEScdiGWjUVOgee7SEyt2lrq11q\nflZXQ2saPzVHCIVxjH98khL+5PSXqmdovLWRd3UHpmQuqWZOZmMx9DAcEiQb\nrZQ1iGFaqhqKoecN2XvN3XGFZGqW1QxES1Err+biAX8arzaS8okzvhDnSGZ1\nodKoME4tSjLnz632WxCDGc4yDtYjdxZgxDQ7+JK5cTtLbeTz0qYSBrlEGWl6\nZiye8SBbx5cCpXrSVjaMNZqpFg3++L2le6gDf28m0z27tCv7DerDcnKU8AIp\nvO4BTQYYS7xY/jI9+GD6Z++yu1hbhim0js4ilCl5etfOgUXwPaHem3FMhC4H\n+didUbpb1jPFhunORx63pfbfnvRBN0oUYbo0x5ZdHn0j4kSzCtmVj6EMA0xE\nfEUpG1KKqslXnPrQZSbAiIUviUfGOWfgB1UEs5DBpxop8kgP+LOtFhYxoP9g\naaE9\r\n=WbG1\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=14.2.0"},"gitHead":"75f0ac661af8884800ee4819205c64b287015456","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint lib test && deplint","test":"npm run lint && npm run test:unit","build":"npm run clean && tsc -p tsconfig.build.json","clean":"rimraf build","prepack":"npm run build","lint:fix":"balena-lint --fix lib test","test:unit":"jest"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"versionist":{"publishedAt":"2021-12-14T01:27:08.032Z"},"_npmVersion":"6.14.15","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --fix"]},"_nodeVersion":"14.17.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.4.0","@balena/jellyfish-logger":"^3.0.165"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^27.4.4","sinon":"^12.0.1","deplint":"^1.1.3","ts-jest":"^27.1.1","typedoc":"^0.22.10","typescript":"^4.5.4","@types/jest":"^27.0.3","lint-staged":"^12.1.2","@balena/lint":"^6.2.0","@types/sinon":"^10.0.6","@types/semver":"^7.3.9","simple-git-hooks":"^2.7.0","@types/json-schema":"~6.0.1","@balena/jellyfish-types":"^1.2.39","@balena/jellyfish-config":"^2.0.2"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.324_1639445342537_0.1664152420067575","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.2.0-lucianbuzzo-mixins-18899db34b17eae8c7912c0ceb188d93349a82b0":{"name":"@balena/jellyfish-plugin-base","version":"2.2.0-lucianbuzzo-mixins-18899db34b17eae8c7912c0ceb188d93349a82b0","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"Apache-2.0","_id":"@balena/jellyfish-plugin-base@2.2.0-lucianbuzzo-mixins-18899db34b17eae8c7912c0ceb188d93349a82b0","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"06919e691c42ea02d417416c95004dfe77587747","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.2.0-lucianbuzzo-mixins-18899db34b17eae8c7912c0ceb188d93349a82b0.tgz","fileCount":31,"integrity":"sha512-TbfZgPS3Vl07vgdMS1sBl1o+tR+35R6XVFPjzD6FebF73a7LxzECAtQP5cRXhLZZwxXWxlRudKhxUepbtDih8A==","signatures":[{"sig":"MEUCIFH3HUjtYMDyrMYP9YI5LttgNa0PE4FGw7sfWEd9PWO8AiEAqCGXUw1GN5R1UoQEFruETLJGSoNKyjSfo2P3GEdL9Xk=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":98793,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJhuLqzCRA9TVsSAnZWagAAuVUP/j+R0sMhGIAtJN1f1ZhB\nMVyy5hHsGM5RHsAPmgcwbEMP0Qf9FhT9GyqbFJNTE93ynF0pxoeJeYEBXUio\naqQowy8Ez4zbz0iQAkwGqqc1LXTcuydewvc5YM18VjqB1Z7Ex4a7Nc1Hm4Z4\nFP34fnj+WIHs9CvkP5bRIKtaK1T1u4L3NZ0RhHQG8fjNrJDuNGJy9Q9fnlQq\na0AC3udmzsYmEZt3RCTd4RoYacKh4XHV7krUm6wHyblSRVcE4SW3UoEEup1/\n70/5rX3Dgli7C4scTYLsVteyL1/yHVn4nokij5fqtwdlMzLNQ7ZlmLvHtC8/\nhQQ0QRb9L+eCtBcikily+qOZi34XxMNGfVgGZZ2KmHP62xv26/ntZvyUWOxX\n2riCgL75+QPjvr9C5dG/RHz//bXnNNOc/2RegHADFTyuHv2X8JHI7AWrxuoA\nTDZBE8/HPfed9yFdJOggaVqMAVjQkKiz+LUVW6aU/Jd/yd85vvm4m8n0qIDO\n2khaNxqL9QaeD+TCe9usjFAA7qDjcJxoVw0hnJ0zPfXWqig9m8NQAxSu/Ptb\nEItbMs+T5W0ZVQYRHJLZx3BZGUCMp5vKBV26PVzdVl6Jn0L6WtMLptsBSriP\nYR/hVAKE/yDcnlKYHHmPEefmSWzaLJlGywbs69HGa0XUNS1xJM6y/+V/EbbA\nD/ec\r\n=fgZd\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\n[![Publish Documentation](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml/badge.svg)](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml)\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=14.2.0"},"gitHead":"18899db34b17eae8c7912c0ceb188d93349a82b0","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint lib test && deplint","test":"npm run lint && npm run test:unit","build":"npm run clean && tsc -p tsconfig.build.json","clean":"rimraf build","prepack":"npm run build","lint:fix":"balena-lint --fix lib test","test:unit":"jest"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"versionist":{"publishedAt":"2021-12-14T15:37:12.517Z"},"_npmVersion":"6.14.15","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --fix"]},"_nodeVersion":"14.17.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.4.0","@balena/jellyfish-logger":"^3.0.165"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^27.4.4","sinon":"^12.0.1","deplint":"^1.1.3","ts-jest":"^27.1.1","typedoc":"^0.22.10","typescript":"^4.5.4","@types/jest":"^27.0.3","lint-staged":"^12.1.2","@balena/lint":"^6.2.0","@types/sinon":"^10.0.6","@types/semver":"^7.3.9","simple-git-hooks":"^2.7.0","@types/json-schema":"~6.0.1","@balena/jellyfish-types":"^1.2.39","@balena/jellyfish-config":"^2.0.2"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.2.0-lucianbuzzo-mixins-18899db34b17eae8c7912c0ceb188d93349a82b0_1639496371133_0.13264952016839704","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.325-renovate-internal-patch-f22db58410f1390ed953ef3628011049f7c8fcfd":{"name":"@balena/jellyfish-plugin-base","version":"2.1.325-renovate-internal-patch-f22db58410f1390ed953ef3628011049f7c8fcfd","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"Apache-2.0","_id":"@balena/jellyfish-plugin-base@2.1.325-renovate-internal-patch-f22db58410f1390ed953ef3628011049f7c8fcfd","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"186fe474e808e1a5971bcafa4bdabdbfef74a32c","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.1.325-renovate-internal-patch-f22db58410f1390ed953ef3628011049f7c8fcfd.tgz","fileCount":19,"integrity":"sha512-U1xdQJKRSnjPBzJ5Kec4ws27tT7ldkT/zcu6ZTc2vnJFoLtfJCz04g3J8YXgFWohLzySc5406NW9O79KLwWOzw==","signatures":[{"sig":"MEUCIQC9cSjjEHxNgdFpd6mwaSXUBgypBVQOQRx6QAgLvtf4MwIgQpG6AowKlusPbSB/+QN8gCtQHOIEZdYqKGaCxj6uvck=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":81277,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJhuLr0CRA9TVsSAnZWagAAmfEP/2hNgDCaIBU3oWsyvmdh\nDfD0rxMuSeH5zzw8zRSCGA4DG60hhxtqCfNMulb8gEWpx+ZzuLkGNjP/JFJF\n/XgNolB6UI3BXmb33QL/6ivvim4mZ+39UUmpzOzcjWnkIPPnhvj2q53IDGLL\nft7oHFfmMlB2ysvVcp+h2UaKqVClC9V2DElzXQEMCjDrCTmz9g8wYl5eRu52\nFmVLUgCCTseyoJj+o6cl3LiGP+JK8PXIfJUNxHEjKUwpfzyqSbnZG3/cexeQ\nD6vdoa9Fslgkn7+HlyjHbubYFhE2ulaRYCynUzXO79Rwso17tp35esDHwJRs\nk5uOLTK8BefLRjTRw5eSCuss0a0rkErHarAZmueLXFgobdSgamceYmPDF0DT\nA5q47SgXxmkotye5PmG20RPcDN4wkaRVxyZpK7umM4SjM1yaiKiJRA0SNE5A\nvN0rX4P4eSCYacsyC9X2qgsaU1kWzuklPQAorqQXez1AlfAX/rVVYkZEu5qS\neDBdWsuomyCxukX3mApEaSD+fhAVJpPAlAk/lgadrkrLtCkiiJ6E4UQvqPr+\nxne3KqARZFETbn1veVrTBJxYpJn4zGapcrcqK8E5uxbYb+3Wj55vqMVAEIyT\nRJ+IRS+HE98QtWq/1WJIPacHWBDirgctExTLlqoH8Wt/yk9aHCm55otjaF/N\nIrVV\r\n=MkS7\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\n[![Publish Documentation](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml/badge.svg)](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml)\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=14.2.0"},"gitHead":"f22db58410f1390ed953ef3628011049f7c8fcfd","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint lib test && deplint","test":"npm run lint && npm run test:unit","build":"npm run clean && tsc -p tsconfig.build.json","clean":"rimraf build","prepack":"npm run build","lint:fix":"balena-lint --fix lib test","test:unit":"jest"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"versionist":{"publishedAt":"2021-12-14T15:38:00.446Z"},"_npmVersion":"6.14.15","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --fix"]},"_nodeVersion":"14.17.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.4.0","@balena/jellyfish-logger":"^3.0.167"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^27.4.4","sinon":"^12.0.1","deplint":"^1.1.3","ts-jest":"^27.1.1","typedoc":"^0.22.10","typescript":"^4.5.4","@types/jest":"^27.0.3","lint-staged":"^12.1.2","@balena/lint":"^6.2.0","@types/sinon":"^10.0.6","@types/semver":"^7.3.9","simple-git-hooks":"^2.7.0","@types/json-schema":"~6.0.1","@balena/jellyfish-types":"^1.2.40","@balena/jellyfish-config":"^2.0.2"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.1.325-renovate-internal-patch-f22db58410f1390ed953ef3628011049f7c8fcfd_1639496436288_0.04624507416417911","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.2.0":{"name":"@balena/jellyfish-plugin-base","version":"2.2.0","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"Apache-2.0","_id":"@balena/jellyfish-plugin-base@2.2.0","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"001bf7a8ebc3b2c60db01fe03ba5ee8d991b71ea","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.2.0.tgz","fileCount":31,"integrity":"sha512-IRTHftTKds2WHFn6AjTjPg+1pyh6EFYbLh4fFgFsOYkLdrYiU1UbF1V3k5H4tyRjGTzusr3QYCwc7wzPctRkhA==","signatures":[{"sig":"MEUCIQCrLdHJbYGofeL9xXdRfXYKpbncOBPj3QqwH864zIWlNgIgMDgi+3+nnlJErMiO1wnoJSVhwG+XxKV0zaOnGC6NlL4=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":98733,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJhuLumCRA9TVsSAnZWagAA6e8P/3xYZjhq4sHRSOguSGAp\nnAlfz5bbgUmQBDq5Mz+dx+0o0ApUlr9qVis2VeGJ77pKXXLwXHzAPj3brUrq\nRzsJSXtedXv7T/q/zN5EtoTF6oSGvKK0iMtAiQF7Bq/OaUZZl609BfJJ3XXa\nlTiNOJy5306GEfnNx1X6K8JT3NGFbP2ghBmmQwFcPp6iPN0k6JXaiKO0AXTf\nAERdUEyw/+wtMdrBkKnS4uhKGhNT1mLrPCXKhPAMJ6I+mr1VaxiQRlwgpW/o\neqNPJ2ORPp+5nltRmP9xDuQXQ5/2cS6YVBD2pyIuv91xaZrXw9KUyfEbidZk\nyxmk4hVuKutRv8M48m9XrLvsRPLlWymOtVTXMN1m6I5y5cekDmiLCh8ykomF\nnb3lF2evNkqXk2YRCgnudj7AvmW25deiO5HJHBqjxKlIleO4SUvVyLTZh+cO\nNYrhp4vgh2mWGEJgNaoUbEoku/tmCnWz2MlwnIJCZ+rFWUuldJoqdk3Q6l+9\nZfXxvkor7OaYlOSHeKDe6dWBO1DNEnoTf+5pXP8EUUOikcQ9cNKTwzkcL2tX\n+F5m77pQT09Jkh6CqrwzmQIHk4zbSLIPL1pFiJZ/YHHokAbmR97NyBYB/K6O\n7YVgoQR8W07DPO1KTD+SXAW4SsUkHpjlJz6q6vRSvxZ66CZk5lf495WSrF6n\nqwSS\r\n=g215\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=14.2.0"},"gitHead":"2ad4c2da86a5cc62ab920c0009f9ac000b4c14db","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint lib test && deplint","test":"npm run lint && npm run test:unit","build":"npm run clean && tsc -p tsconfig.build.json","clean":"rimraf build","prepack":"npm run build","lint:fix":"balena-lint --fix lib test","test:unit":"jest"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"versionist":{"publishedAt":"2021-12-14T15:41:42.889Z"},"_npmVersion":"6.14.15","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --fix"]},"_nodeVersion":"14.17.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.4.0","@balena/jellyfish-logger":"^3.0.165"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^27.4.4","sinon":"^12.0.1","deplint":"^1.1.3","ts-jest":"^27.1.1","typedoc":"^0.22.10","typescript":"^4.5.4","@types/jest":"^27.0.3","lint-staged":"^12.1.2","@balena/lint":"^6.2.0","@types/sinon":"^10.0.6","@types/semver":"^7.3.9","simple-git-hooks":"^2.7.0","@types/json-schema":"~6.0.1","@balena/jellyfish-types":"^1.2.39","@balena/jellyfish-config":"^2.0.2"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.2.0_1639496613839_0.09465666150273933","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.2.1-renovate-internal-patch-d30cbbff5aa824aaaa7d9552151a41a0d5b1a843":{"name":"@balena/jellyfish-plugin-base","version":"2.2.1-renovate-internal-patch-d30cbbff5aa824aaaa7d9552151a41a0d5b1a843","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"Apache-2.0","_id":"@balena/jellyfish-plugin-base@2.2.1-renovate-internal-patch-d30cbbff5aa824aaaa7d9552151a41a0d5b1a843","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"976e5866b79f12950dfe521602923faf771359ad","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.2.1-renovate-internal-patch-d30cbbff5aa824aaaa7d9552151a41a0d5b1a843.tgz","fileCount":31,"integrity":"sha512-yGf3gAoQKYzSCAAoeLz+Peo3kPTx8xNO7Fj9iItzKD2PZm4NJEfgOnIk1CJ3v1eAFT3BtltJXuOpW1LhZCI3Kg==","signatures":[{"sig":"MEUCIFAF+lyjTKJxBdBmfQmyKnm3sS84cv1zbeUB5DxQD1p2AiEAxja4ResoB2EcEBh4BRr9EKyjqdMe/EjfVvKn4EeweEQ=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":98868,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJhuLykCRA9TVsSAnZWagAABxcP/2P1vqxmFZSUg1/wEpM+\nft3ujHcqMM7CMg42EWcdFK+tZ2CjTGF8Ra4CugxNz4LpjQXEtfdhtV48sZst\nkYHxRi8+ne8He+Ih9rnm/8w3bW/dPS5u6RC1KTAcexWxIKLr3y4ZjuabkCfI\nc5s2wUfgwmpP2i30rDwmREpIlP/QO3R7xus0nNLc+4QNBpx5XPLzIIJgTtwc\nk/Y/aL39EHlh7HFL/JBhvKcd20v6K8S3oCp+5Dk7g2+e1sHWTH8Hxi9sYPfa\nAFVMdGWy7Gxjtz6PHzHI9nyCXax9BTbgeVSTGk3sjEnxxZsjsnUevv7o4YkT\nsT/LeiW5SjjdHaG9uYt25dRBE1XcAfdK/dEPp976zruLTDXGvXKUlEvv2u/Y\nFa4m5rS1wbhIxRPbfFVfzYmpdCedt7Szwan+AecQT9Jcl7XyC8EvAut+WC0t\nTtmIoGBCagP7e/drlPqtsgMEKP3yCD82+obE/keG91apQDHS2L3fMs0xArBZ\nM/7ojrpsby7OTf5sQRW2YFktWvyDMsEYDIGFXu4fDJG20YI2WBy46RffDPGL\nbLwX5Ql9Ewu2EzdRQKWNxkOSh/2e0xt3tBkRMXo7t72Le8n7maYb8rIyPFHX\nMQXjodWRGPe2C1MovsGjiEgSCEmyqXdYk5FOBTqLwI5IXIrhAkP8Z25cuYmr\nwqrD\r\n=n+L2\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\n[![Publish Documentation](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml/badge.svg)](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml)\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=14.2.0"},"gitHead":"d30cbbff5aa824aaaa7d9552151a41a0d5b1a843","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint lib test && deplint","test":"npm run lint && npm run test:unit","build":"npm run clean && tsc -p tsconfig.build.json","clean":"rimraf build","prepack":"npm run build","lint:fix":"balena-lint --fix lib test","test:unit":"jest"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"versionist":{"publishedAt":"2021-12-14T15:45:31.719Z"},"_npmVersion":"6.14.15","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --fix"]},"_nodeVersion":"14.17.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.4.0","@balena/jellyfish-logger":"^3.0.167"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^27.4.4","sinon":"^12.0.1","deplint":"^1.1.3","ts-jest":"^27.1.1","typedoc":"^0.22.10","typescript":"^4.5.4","@types/jest":"^27.0.3","lint-staged":"^12.1.2","@balena/lint":"^6.2.0","@types/sinon":"^10.0.6","@types/semver":"^7.3.9","simple-git-hooks":"^2.7.0","@types/json-schema":"~6.0.1","@balena/jellyfish-types":"^1.2.40","@balena/jellyfish-config":"^2.0.2"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.2.1-renovate-internal-patch-d30cbbff5aa824aaaa7d9552151a41a0d5b1a843_1639496868412_0.089681583031886","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.2.1":{"name":"@balena/jellyfish-plugin-base","version":"2.2.1","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"Apache-2.0","_id":"@balena/jellyfish-plugin-base@2.2.1","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"e521ce9b8843c826ed6c8b10103323b6c639a1c6","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.2.1.tgz","fileCount":31,"integrity":"sha512-j3dSfNSKC3JOrB9LCyHF9bDszLegg+he5Gfx8xD3wPCqKsCsS7Yza6tXSLKEQd43nxpbJWjq6yrYAAMjo5HNRQ==","signatures":[{"sig":"MEYCIQCi56o9a/XK2xX8lQkc55AzCjoajGBIe7XAiNmFX/kZYQIhAIy3HutNsDZDAuCVLRIQUYsZOIs+fl4pYXnTf7/p0bR/","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":98803,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJhuL1JCRA9TVsSAnZWagAA12EP+QHH8UHHUnNjVEf7KUi+\n/jWO+HYwnfiJEIl9xbEmqNBbwmtsCoqP+qQpTY7L8NcxBQCpOrtvk38563kK\n0gdWVMLzcjUYsz0VyzGY0ApCvC8vhAfQ52e7GnnN1yBUx6fp2Bvs64IOQWet\nPq2ed4AOfPqFEk/m4o8HaF1RgTeGIpc7DYpHlN6S4pMX5EgddaNXwPWiiFLu\n4WfGY2c403ROCrXQhsI7ACJnXcjZy2Lazm8lqQWCIi5FOG5JcaZ88rwHX0+O\nCtQy83HPTxnYsZ+kUfChnndIfmC5fIGcM/8ZRBJwmUqGtVfgAJYaV4b4EttZ\nVyUs+nek8zzhscu/5s/7HMoLlUJGAtsn+a/hHz4Sp7KBPd6bmLydzyKkZzJC\nGOSaLzUq03VYuR4LrhuGzL1O+OicxcUZtKIAu/XLiS8NDZkv9qsxIpUBctWd\nz36eQVVfRphj+IZoJ5gb0L+4GFMq5QNs8hU6yDRZby84qHW9pPk7EisXVyMQ\nlrNlBncno2kFB29aKPf93ikHYTtdkN8Jdb9cEyosKmUle3mevI8HysF10hx4\nLAiatmB6MPfXrCy73C8q7QB9zIJoSr0bybDNbEC2PuYRuUZ22MPh5qwbqK2a\n1m7Gx8GDaO7bSKkJvg8Gd564Hqlf1URI0YdPDpMeZODZZ6kHYhKPy3k48Fzp\ndQ3t\r\n=KQnG\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=14.2.0"},"gitHead":"585f7aaa69bf265d2d996a60a71a90d5c0e94bdb","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint lib test && deplint","test":"npm run lint && npm run test:unit","build":"npm run clean && tsc -p tsconfig.build.json","clean":"rimraf build","prepack":"npm run build","lint:fix":"balena-lint --fix lib test","test:unit":"jest"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"versionist":{"publishedAt":"2021-12-14T15:48:45.819Z"},"_npmVersion":"6.14.15","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --fix"]},"_nodeVersion":"14.17.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.4.0","@balena/jellyfish-logger":"^3.0.167"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^27.4.4","sinon":"^12.0.1","deplint":"^1.1.3","ts-jest":"^27.1.1","typedoc":"^0.22.10","typescript":"^4.5.4","@types/jest":"^27.0.3","lint-staged":"^12.1.2","@balena/lint":"^6.2.0","@types/sinon":"^10.0.6","@types/semver":"^7.3.9","simple-git-hooks":"^2.7.0","@types/json-schema":"~6.0.1","@balena/jellyfish-types":"^1.2.40","@balena/jellyfish-config":"^2.0.2"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.2.1_1639497033528_0.5329162947331667","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.2.2-renovate-balena-jellyfish-logger-3-x-7401a85d74d4944f3c2ea4239ffd04162d57d053":{"name":"@balena/jellyfish-plugin-base","version":"2.2.2-renovate-balena-jellyfish-logger-3-x-7401a85d74d4944f3c2ea4239ffd04162d57d053","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"Apache-2.0","_id":"@balena/jellyfish-plugin-base@2.2.2-renovate-balena-jellyfish-logger-3-x-7401a85d74d4944f3c2ea4239ffd04162d57d053","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"f5fb7a75c209d2dd86b472fa598df6d784bf748c","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.2.2-renovate-balena-jellyfish-logger-3-x-7401a85d74d4944f3c2ea4239ffd04162d57d053.tgz","fileCount":31,"integrity":"sha512-xH1Qy54HBXoMJ1qkC8Flnp2y7e0OBM5UjxI9vsz/CKzF06Sp1Bar+h8lUYhPMPGmuCH5YDXKUu4ycAr+gynylg==","signatures":[{"sig":"MEUCIFDLZIB41OedULDPa5io9OCGCfQyv/IvfsRGhbyN5rffAiEAszGKHmokQrj4uHgSlx7H+krhihuBm6qM6CkrdAMVFCw=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":98980,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJhu5dvCRA9TVsSAnZWagAAFDEQAJ3cRXcJMkI20BXmtbo8\n55egzvS/M1A+QNesTc6/KyXPnyspvj87ijjta7lFKCESQxLdRDbOITOd4unV\nt9kA/dhPvCcfTErUijTGYXevLKxAYDtPAODAa20mk1/SPjB7x1iDMyAQd4NC\nhmmaxW2FsxqZn3s6b4oia8ycGuKJeeZdTFcXrRtXiadLogZo4DzGOvw6LD4p\nrmRj84A+P5TaJ4hota8WNGhjBLhtHX41jDkd2SQd7wK2uF+nFu6B9dzzXaBy\n88b4Vd8GXV9zzv5y0FSZiyR0+FH2qbt85Coc8s/RvmlXfOC43EmXU8TTDbTt\nB1+wPx3aHfbMDLnMptDx0oz8n1RaO69qQyCXJnCCx7kG7NLOOCVOUYcVBZoV\n3x0h+qsdMeH/rfNOeTnRuUTMLauvLIYHYL09lvS1KOA5BIoDusDjtCWd7oZY\nJx+TKGNscvKNodca33ce/I+R66FYENvDeZgJSZIJjuLO8ZlRh7wmtgrw2Wzu\n3Amb5rbUrZB+TJCl45FXMQfedFY1HW2hPrmd2xCFaSEUWsy2B0Y1N9KsRZE7\nZF6XwX+BEpGO8oTqfTfafjhUJUdA74vB9PxEVutEN0iL6QNfOTt9bEIaKis1\nItHRbaKeRlaRw9FhhaQ3TaSYq685qQY5V6Pb5abA53UG6PuYnAWYd50olzkZ\no8ZU\r\n=bOqF\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\n[![Publish Documentation](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml/badge.svg)](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml)\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=14.2.0"},"gitHead":"7401a85d74d4944f3c2ea4239ffd04162d57d053","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint lib test && deplint","test":"npm run lint && npm run test:unit","build":"npm run clean && tsc -p tsconfig.build.json","clean":"rimraf build","prepack":"npm run build","lint:fix":"balena-lint --fix lib test","test:unit":"jest"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"versionist":{"publishedAt":"2021-12-16T19:41:26.638Z"},"_npmVersion":"6.14.15","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --fix"]},"_nodeVersion":"14.17.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.4.0","@balena/jellyfish-logger":"^3.1.0"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^27.4.4","sinon":"^12.0.1","deplint":"^1.1.3","ts-jest":"^27.1.1","typedoc":"^0.22.10","typescript":"^4.5.4","@types/jest":"^27.0.3","lint-staged":"^12.1.2","@balena/lint":"^6.2.0","@types/sinon":"^10.0.6","@types/semver":"^7.3.9","simple-git-hooks":"^2.7.0","@types/json-schema":"~6.0.1","@balena/jellyfish-types":"^1.2.40","@balena/jellyfish-config":"^2.0.2"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.2.2-renovate-balena-jellyfish-logger-3-x-7401a85d74d4944f3c2ea4239ffd04162d57d053_1639683950866_0.7297430580927275","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.2.2":{"name":"@balena/jellyfish-plugin-base","version":"2.2.2","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"Apache-2.0","_id":"@balena/jellyfish-plugin-base@2.2.2","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"c0e6330806baa1fd75784ea1b4713c9c1dff42dd","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.2.2.tgz","fileCount":31,"integrity":"sha512-9unf7EtpG0gdIGVfrfnhSASZvQVdVrtcKN8uPL2bqEJOYyrN/DK31JNYJWDuKFeZ8lcTUUSHDPLDG2euSVRzUA==","signatures":[{"sig":"MEUCIQC69IR1djNqC+1HMWURe86iGGGn5X7XIbFd2xi4Pa5YWQIgeSX169Am6LJovYOkgXPiDD3f0cIb//1whk/7HBrC5a0=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":98902,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJhu5j7CRA9TVsSAnZWagAA0W8QAJ7c1qgZLk1LtjL1N4SL\nHE3D+3mk4WOOYlhKPt3dQTlUb4XRnzegIXttIiq0f4zrqLtScPL2isGy2UOM\nNKx6CJUZsCcNA5jPXxtMbNEcEdKma232XLFAy479qBCI9gm+FKMFynXc+6LJ\nyHRbysW+wJJwFsPD3xBXg12+EdwrMFVHKtnXX3QOp/TIIOkWMOjx0eJonLbI\nQWYKJ1xmg9FQ7D8Y0RbffvNFQfHn0/LAy/RcSjkY0mivjV5Xx1osunRxHwvq\npSNAzzac0CgyiYw+7kdSq2ybGQFaUjSf1mdlGvK0RFDfuWBAFOdprv9Hey6+\nSPO4xGkHRPyVQrYnzSDuins7cZ2mjIWxIrJUo/svdT5mDltlk+qxAI4KNSA4\n17QGETyVh0eXLOqeE6+ZPtq9MsHsdW4mhbTIWtHAHxVFWl3z8lxnqLVTqlxW\n/WMa9oQ3GOfhsbopub9zdRR44oBudgEkviwR+BtK+y+deFjG3QLhTXWNsvjm\nji1v4ST4gqQWDrFMxBXOX9NBQpYL6HjweezSobnD56o+86X2tyYlGEW+VS0k\ndPoFsfMJ14ZpFjRlb3iCqzeZbsm6HeIf/qh06GcoYV6C3vix7itAkzwwKQzr\nfDleSURwC1ltP698LWT4R+Y7Y5T1SPx2k7qS6MvaFBSZNAaxEAwEYCkTl38T\nxWkU\r\n=IBlo\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=14.2.0"},"gitHead":"238ecb77999a9f4cf23de36f403ed8568ac827b9","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint lib test && deplint","test":"npm run lint && npm run test:unit","build":"npm run clean && tsc -p tsconfig.build.json","clean":"rimraf build","prepack":"npm run build","lint:fix":"balena-lint --fix lib test","test:unit":"jest"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"versionist":{"publishedAt":"2021-12-16T19:47:31.060Z"},"_npmVersion":"6.14.15","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --fix"]},"_nodeVersion":"14.17.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.4.0","@balena/jellyfish-logger":"^3.1.0"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^27.4.4","sinon":"^12.0.1","deplint":"^1.1.3","ts-jest":"^27.1.1","typedoc":"^0.22.10","typescript":"^4.5.4","@types/jest":"^27.0.3","lint-staged":"^12.1.2","@balena/lint":"^6.2.0","@types/sinon":"^10.0.6","@types/semver":"^7.3.9","simple-git-hooks":"^2.7.0","@types/json-schema":"~6.0.1","@balena/jellyfish-types":"^1.2.40","@balena/jellyfish-config":"^2.0.2"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.2.2_1639684347686_0.45030957575703456","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.2.3-renovate-balena-jellyfish-logger-4-x-9598cdf3defacd8e12e0486127c80a1e79692dc6":{"name":"@balena/jellyfish-plugin-base","version":"2.2.3-renovate-balena-jellyfish-logger-4-x-9598cdf3defacd8e12e0486127c80a1e79692dc6","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"Apache-2.0","_id":"@balena/jellyfish-plugin-base@2.2.3-renovate-balena-jellyfish-logger-4-x-9598cdf3defacd8e12e0486127c80a1e79692dc6","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"d2636c8dc83144035daecb8918b966aff8c4683f","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.2.3-renovate-balena-jellyfish-logger-4-x-9598cdf3defacd8e12e0486127c80a1e79692dc6.tgz","fileCount":31,"integrity":"sha512-zltPm2vj7KHY+fGk01vW4K4e4Y+J/qsdRrTgmvsDnQ5DJHG0fT7giwOVi+7zzeQmBgui7ZaUrIfC14axq5jE5A==","signatures":[{"sig":"MEQCIEp6lNOOrQQLPiSYTw2aUDvkz/W1RCEpCxCa10tpHEFbAiAfT/4D8Y6ZLsKquDkUyv0hDzl9cagJWXaQ7PxS4+KHZg==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":99077,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJhvHStCRA9TVsSAnZWagAAeDcQAIJceT/LH0IcBAhN/nv2\ndFgl5eY+6Fi/AnzthaHH6+VeKS/DDVo9P57/FahPgTBuw0e0gN5DTytEK5Ad\n9Lf+3TksopzPZem2Uvq0Zpy65yaXrav4b8EaLF/3TjIPuTKV+UfFLNxf0grr\ntJGz0EVRJ5qymGTcIqoFqkcZVcE6HIkf4ZHWo4k9+JfPn+fsxIeZn4ztEdU8\nc6wli8wSxY2185X74+qY/zZ85nV+G6//+L7FKKk0yiKzHjYtxYfXHwF6bcTf\nrer5vDVuap9z4L2J5uyiS973DCSuSMD/slN6JJD2AyOqpGClgPkdYhYOjEbD\nvd9ZqYdjM+MmYxNvJ73zecbT7h8z4BFetSBxL2PGI4KvTTcfwr/veSqKWT0x\niZVjC93c9Jl0D35Bwe2QtA6+DcpCcVqYyYe7K+phCv09fpRiZ2Fv5l+RULAj\nDJzARdgoz9ntSdw4V6Z/Z3AvRail3mFumHQkZzZI2q/qNbzXsvIqRX52KuWD\ndEp4UWPtF3MgTsJcH6cM3zrmJycsCOPPZvJs3CwUctOemFzcD0bvS/5BZI3q\nL/dK7w8hYXZ7nvS3GFdD2TtNaw1l8SUHqE4ZqG4MupNeMkpljXUKzbZ+h+8a\nzkO0MP8Nzzi+AsiOZ0t9EP++dH5zYHW/e9zpjB+eeiohM/FSUaz2wlMiuPaW\ndxFq\r\n=5bvi\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\n[![Publish Documentation](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml/badge.svg)](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml)\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=14.2.0"},"gitHead":"9598cdf3defacd8e12e0486127c80a1e79692dc6","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint lib test && deplint","test":"npm run lint && npm run test:unit","build":"npm run clean && tsc -p tsconfig.build.json","clean":"rimraf build","prepack":"npm run build","lint:fix":"balena-lint --fix lib test","test:unit":"jest"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"versionist":{"publishedAt":"2021-12-17T11:27:36.232Z"},"_npmVersion":"6.14.15","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --fix"]},"_nodeVersion":"14.17.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.4.0","@balena/jellyfish-logger":"^4.0.0"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^27.4.4","sinon":"^12.0.1","deplint":"^1.1.3","ts-jest":"^27.1.1","typedoc":"^0.22.10","typescript":"^4.5.4","@types/jest":"^27.0.3","lint-staged":"^12.1.2","@balena/lint":"^6.2.0","@types/sinon":"^10.0.6","@types/semver":"^7.3.9","simple-git-hooks":"^2.7.0","@types/json-schema":"~6.0.1","@balena/jellyfish-types":"^1.2.40","@balena/jellyfish-config":"^2.0.2"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.2.3-renovate-balena-jellyfish-logger-4-x-9598cdf3defacd8e12e0486127c80a1e79692dc6_1639740589387_0.8310619506398509","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.2.3-renovate-balena-jellyfish-logger-4-x-380c6578f22b1b37de98d442da32bffdc479fb8a":{"name":"@balena/jellyfish-plugin-base","version":"2.2.3-renovate-balena-jellyfish-logger-4-x-380c6578f22b1b37de98d442da32bffdc479fb8a","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"Apache-2.0","_id":"@balena/jellyfish-plugin-base@2.2.3-renovate-balena-jellyfish-logger-4-x-380c6578f22b1b37de98d442da32bffdc479fb8a","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"614bdccc5dab0e845a02ebc1532b1f82d80a9635","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.2.3-renovate-balena-jellyfish-logger-4-x-380c6578f22b1b37de98d442da32bffdc479fb8a.tgz","fileCount":31,"integrity":"sha512-fixCXxn3x2sKcjEABu+sktamUwjuIZgxHJIFYE4Vzco4+ue61DzQdFzK3qlxJ3St2vKF0rndiKhe186MH0pEig==","signatures":[{"sig":"MEUCIQDe9xpJHj1o82TGg8mzEolfYA9ue+GQFJoM3yckJVGQJwIgE9Jy+xJSSEqnEVT05Bne/WRprWIwsh/UaW5lJme2Cr4=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":99077,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJhvLDMCRA9TVsSAnZWagAAx/EQAIm9Vm5R9cHpdgJkkhmu\n6R5Ilq6KQl3uENht7l3MEjFo1cvh12ZobE76key+fnUbpnP8TUnvKsSk8y7p\nM2QgMMSy+dXQcC959zoseMcSow8IkWFJDVcFyD6M3hfq/HYcAP5Sd0Aa4BAp\nuKRj730rAUs2hnNEHUeeMe2hNRJPLaYsR5zRw+SjVWEF/LWOrUZoXE3vIW5S\nTMlZu4rpThemb/NFF6aKlpxJmPXRifdaS9KFeCcya9TTYX+DsX8FBQ8+vs1X\nTQWyKPPKex5MmgUY54nGvKPk0zKX9NZh7wJBZuoNUDINFirR3Jjys86si3yT\nkY/fZB82o/CNuhmNLsFu299yLwL5tOXgWg3EHUbrH1ZlecRjOM72OPH6fx9v\n42DUUNBdhXJk1vCGOGnQrD7hxOepxSeY2vFRVGNHrJZGnyNPM04F/zeIT4wR\nWDDa3Kv4dEW0UnT3CVJgMiOvizaiyHuFdmLO0Xfhah81xMOgsWEofNuD9Fto\nKhUN2r6NivnUoTrSXSgHcqwAKuW6TchaosrxE9ROnfwUK0nXjMsLy2AyDuEO\nNHqwhij8qwC9r7ZateWVtPJ5tjNJwvCvderLkYuFx0h035XElBmsu3f5k2Qx\n1DOwSafAQrh0TvysGjVpv66owku+nBaYhjnbODctMv0IZUH8zR2jcjiAXuJV\nGBXv\r\n=96zh\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\n[![Publish Documentation](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml/badge.svg)](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml)\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=14.2.0"},"gitHead":"380c6578f22b1b37de98d442da32bffdc479fb8a","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint lib test && deplint","test":"npm run lint && npm run test:unit","build":"npm run clean && tsc -p tsconfig.build.json","clean":"rimraf build","prepack":"npm run build","lint:fix":"balena-lint --fix lib test","test:unit":"jest"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"versionist":{"publishedAt":"2021-12-17T15:43:43.952Z"},"_npmVersion":"6.14.15","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --fix"]},"_nodeVersion":"14.17.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.4.0","@balena/jellyfish-logger":"^4.0.1"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^27.4.4","sinon":"^12.0.1","deplint":"^1.1.3","ts-jest":"^27.1.1","typedoc":"^0.22.10","typescript":"^4.5.4","@types/jest":"^27.0.3","lint-staged":"^12.1.2","@balena/lint":"^6.2.0","@types/sinon":"^10.0.6","@types/semver":"^7.3.9","simple-git-hooks":"^2.7.0","@types/json-schema":"~6.0.1","@balena/jellyfish-types":"^1.2.40","@balena/jellyfish-config":"^2.0.2"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.2.3-renovate-balena-jellyfish-logger-4-x-380c6578f22b1b37de98d442da32bffdc479fb8a_1639755980104_0.7392384550706164","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.2.3":{"name":"@balena/jellyfish-plugin-base","version":"2.2.3","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"Apache-2.0","_id":"@balena/jellyfish-plugin-base@2.2.3","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"1a37ed1e71a31ebdad243ee7c005bdd95ad9badf","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.2.3.tgz","fileCount":31,"integrity":"sha512-bHDN//SdxTADuDn+LoFUZSu2jnqwrT41PUy9b4fMnk6phjTFOtjKxYBTA9eepHVannFH9KpkuB75Zw7kRIPPwA==","signatures":[{"sig":"MEYCIQDq70djcfzO1slR+9PYHj8vHjrrFIJz6yLibtlJzolQUAIhAIAOrxAa+/ks6J/xP6MVWq3A/E0fUk+hQKHDuKV0qeve","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":98999,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJhvRhCCRA9TVsSAnZWagAAI9cP/3u8fMwucRzTLnigVEGr\nuYTL+9XzuCOkpQK6SEEkuHPaeGhqUBKu80VJwBrO4wMPgO+iOJ1IGJXI5RM9\nFzAaizMBR9nNc7Yy1uhyhA+bOW2n00fRw+0ebl0z2wudXGnCaTT7k2Hba1H8\nqAhfUGhk4JFAOsmJ7Kxgy8yelC+Ycq2zsvXS9W71MZ3VvRqpMhFYb85ijLHV\n11g+AG+qmA1sk1+pRhlT+0VuFW2L5Ds8ffTtYDPhFPjVitKquOOptSlaV1ah\n8cZljwslr3WjpHN4HAX15LlgxXB8YoFgHiKDV/PSM74PNW/SSH0O7Kp/DH+p\njHlxjkcDA/eylaz77HSQ77gOeKkLMz1FPt+0iTSEiD4aLcRgJPxQreZdIOI5\ns+MAtbygCZ+gB5QmIpaWEWAnYqs6rxfMbMLa2rvnEYBZqb6uj5OwDSc5SDJe\nvkm9Xp9eMtY6WOKzX/M3LwYLcEd/iNs+5aZWlo9kpB31UGkLH6GTTl9OrqCK\nhoW03vfm9afDqP9c/xafWyeN9ynQ01C2IsuXhagE5CvX8bTZ7VVDdQRvnx/H\naAKUI3npgdcU40Pu313UQHrDr5VhQZa5ekU6c375EQ/D5BlQxNZuF/wBP11n\nPvfI+SwqAw8bzOrMgsuMuVf8aq3muH7o3xgTPqrUXlq4Iu+ihu8bHR7CT27l\nu71R\r\n=70/v\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=14.2.0"},"gitHead":"9484843af3c4467e4535870f4f66b864dddb8056","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint lib test && deplint","test":"npm run lint && npm run test:unit","build":"npm run clean && tsc -p tsconfig.build.json","clean":"rimraf build","prepack":"npm run build","lint:fix":"balena-lint --fix lib test","test:unit":"jest"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"versionist":{"publishedAt":"2021-12-17T23:05:33.488Z"},"_npmVersion":"6.14.15","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --fix"]},"_nodeVersion":"14.17.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.4.0","@balena/jellyfish-logger":"^4.0.1"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^27.4.4","sinon":"^12.0.1","deplint":"^1.1.3","ts-jest":"^27.1.1","typedoc":"^0.22.10","typescript":"^4.5.4","@types/jest":"^27.0.3","lint-staged":"^12.1.2","@balena/lint":"^6.2.0","@types/sinon":"^10.0.6","@types/semver":"^7.3.9","simple-git-hooks":"^2.7.0","@types/json-schema":"~6.0.1","@balena/jellyfish-types":"^1.2.40","@balena/jellyfish-config":"^2.0.2"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.2.3_1639782466470_0.8441365764760489","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.2.4-renovate-external-non-major-580bd4d47dbd266c2586158abc62eee3d85294a8":{"name":"@balena/jellyfish-plugin-base","version":"2.2.4-renovate-external-non-major-580bd4d47dbd266c2586158abc62eee3d85294a8","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"Apache-2.0","_id":"@balena/jellyfish-plugin-base@2.2.4-renovate-external-non-major-580bd4d47dbd266c2586158abc62eee3d85294a8","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"85bac9899fe4a41e2c9558f27a0b5e12ae653c04","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.2.4-renovate-external-non-major-580bd4d47dbd266c2586158abc62eee3d85294a8.tgz","fileCount":31,"integrity":"sha512-sq6OcSgutB/tpGB7gJgtJm3w6Ca/tsWIT5X9LXujk2UKkypaaoLqZBtaDawrmKyvGl4iCNCUV//RKXEEuKv4qw==","signatures":[{"sig":"MEQCIBZvsvE54BbunNtXOqJFfnsfxszGZrERUrzsmoP0VCzkAiAmfVMLLZRnfnwaFV9a+9w3o8eEl+eiOU0Q4dB3dJVdDw==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":99142,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJhvTvqCRA9TVsSAnZWagAANiUP/3Epuh6Ef93m8tDGhgV3\nEHDOSdObYtb66Po+aVtXqBkdDHN8JGtJ+PjyrakiynRuenf0ss1gyeJxhU9b\nOAjkiFvete/j+IeDHHikxmJUXdfJS3ORvk6rWdvWtBhjUJihNz9b38V2slFR\nGfUI4xuy00UcL/9TrUld183j3lp6TCe/pTRuktS0nP9jLZz8fFxOoDyAQ0T6\ncNTp94nqoMbHT6CG8NgjT3vFi6mv6n+Q+QnA1dCZeuB5puBEUXEPo6T6/E4W\nkFjtBF0LpC3BqtKhNI+0PJGgbrvSl/PqpPBHO+JKavJFxGJrtKAe2/71fxq+\nu5lhP+ECVjTTCyWwdjL4fV0yPgXyTyHZqDFjiL3cRrXjarCsEvba4Zu66gTk\nPYNbgPo5s8jhF0MT5A/UfC9yWE+cJoW0CnSCpQY3JqOIhEtLHYi+qPEKlP1Q\nCmAUeoPrPUX9RDB1jwsoOxG0hZBIHk0chL0Qw0tN7hvkzyaZsYrEFfZ3yRGV\nsjsulg2WlvVHGmAD/oCd3NbOY3ubROCbS5bdUiRjvzfvJ45N7ABT6kUEmOSf\nLTUVfgN/AHZoLHaMKs6JhxtGE/eZUDZXRoIUEyMgtqv6MH9USj13YIhmfBU4\nMBYfNTFVM6N8PirO368pvfg1f/1vCqvsFfToai8+Rwo8G2MawKBkzz8vl4MI\n0Jwt\r\n=lEIT\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\n[![Publish Documentation](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml/badge.svg)](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml)\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=14.2.0"},"gitHead":"580bd4d47dbd266c2586158abc62eee3d85294a8","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint lib test && deplint","test":"npm run lint && npm run test:unit","build":"npm run clean && tsc -p tsconfig.build.json","clean":"rimraf build","prepack":"npm run build","lint:fix":"balena-lint --fix lib test","test:unit":"jest"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"versionist":{"publishedAt":"2021-12-18T01:36:28.052Z"},"_npmVersion":"6.14.15","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --fix"]},"_nodeVersion":"14.17.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.4.0","@balena/jellyfish-logger":"^4.0.1"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^27.4.5","sinon":"^12.0.1","deplint":"^1.1.3","ts-jest":"^27.1.2","typedoc":"^0.22.10","typescript":"^4.5.4","@types/jest":"^27.0.3","lint-staged":"^12.1.2","@balena/lint":"^6.2.0","@types/sinon":"^10.0.6","@types/semver":"^7.3.9","simple-git-hooks":"^2.7.0","@types/json-schema":"~6.0.1","@balena/jellyfish-types":"^1.2.40","@balena/jellyfish-config":"^2.0.2"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.2.4-renovate-external-non-major-580bd4d47dbd266c2586158abc62eee3d85294a8_1639791594195_0.7354210360971976","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.2.4-renovate-internal-patch-028ddd8e18db1c3968abd9d4d5bffc216fae6794":{"name":"@balena/jellyfish-plugin-base","version":"2.2.4-renovate-internal-patch-028ddd8e18db1c3968abd9d4d5bffc216fae6794","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"Apache-2.0","_id":"@balena/jellyfish-plugin-base@2.2.4-renovate-internal-patch-028ddd8e18db1c3968abd9d4d5bffc216fae6794","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"da5f6dd409fcaf0d769cb0a35b75dda04738e4de","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.2.4-renovate-internal-patch-028ddd8e18db1c3968abd9d4d5bffc216fae6794.tgz","fileCount":31,"integrity":"sha512-qFcbk7/02TEAa2/ajGRpxhJnzgATmf0SSPG3kj2AmSZ1mHpCYhj9o9QimLvFCPvnTmgUiHJ9/fIRcDOGabPnsQ==","signatures":[{"sig":"MEUCIQDpVniJSieokVOxMKa05wiApivpjGGhzwC0umoSfMY8GQIgYFhBnMMxd4y8k2CmsokBsvgPCAjgWtgA9n2sfa/0QHQ=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":99134,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJhvTwKCRA9TVsSAnZWagAAfYQP/02wbtzaC1ZT04jeZvP/\nFIMqoGQEYffANQGkN8Gb9fMkDx/9d3/Yx/5WGzNDhiJIaXfOafNdM9asOPNh\nbUOvvHd9XHK4LoAuuP9zR8quiZEmkJiFJnoOXziRaCOIrT3KO5lqFczoXM9q\nbgg1ankpqCin9ylGo1H9bC3wkq6EMSmgYTVC3D25y/RcGsDi5t6UIAeTItxh\nWiYY2K1/e/bi2EMIAjH+AZLWMGylvqNhp7bMEdSqkEJZ8XhyqWN6ZzUUAPrB\nvglmQf4nhO5ZjejBVJ1P25TggsNwZKO9b84p/3Md1P0jSSoKoDQ5HYbw8WP7\n/Md2EAIBTR8h/2v3/s28vR+RcrO2GvgydosYiK47IsjHmHnCWpxLdeODOgBX\neikKzIkPUJqhmsPfs16kcmOBlo3stSWq7YnrV0xgIzVPTik0lWf53Qn4uIct\nrP7h+avNjpKlj1G6i+RwWjC7lYNag5AuVyNR1Y5/BHXGuxG9pl1OGg9MuZEu\n1s0uroLNI4NUJBG1IcfkifCOp/1ERh6FZ5E8QOvumNzmn5GcjJ4rWhGFSW++\nYfjWuyFVD5tpmSwL8CqRYsXvuLtzE3ajD2oF6pvHiqi7kHAMTVljL2STJmqB\nfz1o0pA4qJxXXiPlrVOqoVGZUAy83nBi2WIZWQVnb1XEf3SIXbCTrQ+1Osf6\nHYHs\r\n=jQCn\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\n[![Publish Documentation](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml/badge.svg)](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml)\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=14.2.0"},"gitHead":"028ddd8e18db1c3968abd9d4d5bffc216fae6794","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint lib test && deplint","test":"npm run lint && npm run test:unit","build":"npm run clean && tsc -p tsconfig.build.json","clean":"rimraf build","prepack":"npm run build","lint:fix":"balena-lint --fix lib test","test:unit":"jest"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"versionist":{"publishedAt":"2021-12-18T01:36:34.554Z"},"_npmVersion":"6.14.15","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --fix"]},"_nodeVersion":"14.17.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.4.0","@balena/jellyfish-logger":"^4.0.2"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^27.4.4","sinon":"^12.0.1","deplint":"^1.1.3","ts-jest":"^27.1.1","typedoc":"^0.22.10","typescript":"^4.5.4","@types/jest":"^27.0.3","lint-staged":"^12.1.2","@balena/lint":"^6.2.0","@types/sinon":"^10.0.6","@types/semver":"^7.3.9","simple-git-hooks":"^2.7.0","@types/json-schema":"~6.0.1","@balena/jellyfish-types":"^1.2.41","@balena/jellyfish-config":"^2.0.2"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.2.4-renovate-internal-patch-028ddd8e18db1c3968abd9d4d5bffc216fae6794_1639791626721_0.012050368889686913","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.2.4":{"name":"@balena/jellyfish-plugin-base","version":"2.2.4","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"Apache-2.0","_id":"@balena/jellyfish-plugin-base@2.2.4","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"5a91c6186edde902dd90dd65dc589f13ee93d2c8","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.2.4.tgz","fileCount":31,"integrity":"sha512-UNOre1OSNbC/+aFUFp7x89OX3JqdKi47Pg+SWljoIziC2K+8kqyigSiYKPY0HVqbJkvQ5xBn3C1D/nzn3Lvqvg==","signatures":[{"sig":"MEUCIQDN36+19NB68eU7vRNTtxqLMD1LkNLj+XmQsay7/2JaJQIgKgetZKR5Or+ozjGDaA5ZB/iGTEVeA2pVXRQYuTmNJDg=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":99073,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJhvTzpCRA9TVsSAnZWagAAG20P+QBLoUfxQyVdkLEuN4zI\nSoRJfV4Qu1r5KqZ97GDpwwcUKOUqVDz3GWybd/MDDk0hlizX7FkpPHfgATjV\neJaqxl+wuVU/2rCq8QGy8euf2Ff/u63b/sK9NiZDTGxutSDBPkwnRtfJRTUg\nh5dkhdw/nI0UNKWBb3V/xdI7D+hVAj3f0QrkwelhIQ9eEY2xnrb/+k3F0fUf\n/jExc4WyszcSsEJ45RsIlB0riEhzgWsfWure1VfRMIvW8gnuPY36++6M7V+W\n/wEe521X2bK+AUQ2D7vMTaaLqPaPgSfv/EB6c5T2dmNF+ICjJ6KqDXxHgB8Z\nmsfnrT4v+O7icGcDol+dISMHPJIGgOw2NVDMPbY6MNJeot7AZTH0Mt5IwkVm\nIESM2g4eMKcQaPWdIpodrLtgUqLqnRnIEmXQcqE+R1rkw7VG/jHij5JKKBdV\nLqfh83dMlWSSaXKNjYchkD9bCTsBSKz7mG3Y4bHfIoevP4wcTNnu6XDPuwAt\nOLY7DXUs5vx68bVbQ3O06BB6aY8YMNccTzvLN9TKo63xyqOjjn6VD5Sbih/z\n9/0u9i1lAQzXzakT1Ugi9b46Kf1PL0gzO1MCj6SN0A5prIIlF2W1ANpgosnq\nrdrIBr40GYuN9PHkgq2Su4CUEwR9PHIASTzyKhuVztKCKwWQ8dXxkfdugPhq\ncXnL\r\n=mP/B\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=14.2.0"},"gitHead":"166482316cd2b97f412765c434c6ac30916a0ca0","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint lib test && deplint","test":"npm run lint && npm run test:unit","build":"npm run clean && tsc -p tsconfig.build.json","clean":"rimraf build","prepack":"npm run build","lint:fix":"balena-lint --fix lib test","test:unit":"jest"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"versionist":{"publishedAt":"2021-12-18T01:41:44.340Z"},"_npmVersion":"6.14.15","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --fix"]},"_nodeVersion":"14.17.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.4.0","@balena/jellyfish-logger":"^4.0.1"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^27.4.5","sinon":"^12.0.1","deplint":"^1.1.3","ts-jest":"^27.1.2","typedoc":"^0.22.10","typescript":"^4.5.4","@types/jest":"^27.0.3","lint-staged":"^12.1.2","@balena/lint":"^6.2.0","@types/sinon":"^10.0.6","@types/semver":"^7.3.9","simple-git-hooks":"^2.7.0","@types/json-schema":"~6.0.1","@balena/jellyfish-types":"^1.2.40","@balena/jellyfish-config":"^2.0.2"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.2.4_1639791848862_0.7208285781803889","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.2.5-renovate-external-non-major-d95b6f797b0e3cd625dcbee24eeec2d0720f4534":{"name":"@balena/jellyfish-plugin-base","version":"2.2.5-renovate-external-non-major-d95b6f797b0e3cd625dcbee24eeec2d0720f4534","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"Apache-2.0","_id":"@balena/jellyfish-plugin-base@2.2.5-renovate-external-non-major-d95b6f797b0e3cd625dcbee24eeec2d0720f4534","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"2776dc5a5789081b3178e723a7fc9cb4795b9cc4","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.2.5-renovate-external-non-major-d95b6f797b0e3cd625dcbee24eeec2d0720f4534.tgz","fileCount":31,"integrity":"sha512-ohkFuTiQ+E5qHu199AJ58MP1+uj8gzhh/uIY+2YBpRrgg6mGVtg0+Ux3EAQzRjHhw8jt7ofVDpy9HbScv46Ixg==","signatures":[{"sig":"MEUCIQDGlaqKfPZIxC2aeaKWxgptOPWLea9czi8O8ZaKllVuYQIgS0nQ/92aufQzazB98s7QX6gM/AH/QfTSFCnucgbxuYo=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":99231,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJhvb7/CRA9TVsSAnZWagAAx0YQAJ/TJxFRjrEuI7xQkH7M\nUO/PCTbcFwuTc+B+pPfffBoHxKRkKuxnRncmGJN+rNS83sTfH8XLMAi8bNJs\nAVxtt8kx48Sa/M/HJ6+G4LMqbyjiHRlIg7N1vjZ7/fqM6sCjGC5h8TJJQMF4\nwrrkGb6IYrbEznrTBnjBwOLlmCoZrdFxDF97CCBRNI1dFRQPJCYfF3RFjrYg\nMgpru6Fa91uzHRczNtJJlZlUqytCeITJ9ASpLLbJid2/dxIZp4BFyXRQ0uJ+\nKrra9aYISACrE3bKRwkziyoviS7cEHite9v9gp8+avHGadYBds/X4nq5prhq\nb8JqdmqLpnVCHnrOg5TcRdORAOlTbvPaXqwD5uv6gfU5JHyhBS563KjJ4zm/\nIqkEsEvgiqyoFA5Q9dj5os/8pNaC2G3AjtPDDtG5gkSL+0o6aXi/TcDz/x8k\n1Qnss89lycAgRGjtUdRsQsBySaCVN3yMXyYnjEW1DSkRwnt/osjiUZNNWWWE\nJkxDC+z22dMIsuFTHYUdRw+bVEQzDD1ekM88IfS80bkOhrB4q+uGthHT3qxz\nE/3HicSBaxSXQpEb8qsmRlW7rEhj959NXWZlku92t5EJJJJUO8KnqSocDrBU\nKAh6568tCn3olK7hV0TtTsULyI3PRihzp9vuS0JNyvatThVG8EqzVrwF2nw5\ng2ti\r\n=PRSi\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\n[![Publish Documentation](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml/badge.svg)](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml)\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=14.2.0"},"gitHead":"d95b6f797b0e3cd625dcbee24eeec2d0720f4534","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint lib test && deplint","test":"npm run lint && npm run test:unit","build":"npm run clean && tsc -p tsconfig.build.json","clean":"rimraf build","prepack":"npm run build","lint:fix":"balena-lint --fix lib test","test:unit":"jest"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"versionist":{"publishedAt":"2021-12-18T10:56:01.429Z"},"_npmVersion":"6.14.15","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --fix"]},"_nodeVersion":"14.17.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.4.0","@balena/jellyfish-logger":"^4.0.1"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^27.4.5","sinon":"^12.0.1","deplint":"^1.1.3","ts-jest":"^27.1.2","typedoc":"^0.22.10","typescript":"^4.5.4","@types/jest":"^27.0.3","lint-staged":"^12.1.3","@balena/lint":"^6.2.0","@types/sinon":"^10.0.6","@types/semver":"^7.3.9","simple-git-hooks":"^2.7.0","@types/json-schema":"~6.0.1","@balena/jellyfish-types":"^1.2.40","@balena/jellyfish-config":"^2.0.2"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.2.5-renovate-external-non-major-d95b6f797b0e3cd625dcbee24eeec2d0720f4534_1639825151179_0.13263458900697112","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.2.5-renovate-internal-patch-61fb049a1f0ca736930e8dcd8fc4e59c70ba811c":{"name":"@balena/jellyfish-plugin-base","version":"2.2.5-renovate-internal-patch-61fb049a1f0ca736930e8dcd8fc4e59c70ba811c","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"Apache-2.0","_id":"@balena/jellyfish-plugin-base@2.2.5-renovate-internal-patch-61fb049a1f0ca736930e8dcd8fc4e59c70ba811c","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"687fd34f990b3f157395c833752cb52b193a619c","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.2.5-renovate-internal-patch-61fb049a1f0ca736930e8dcd8fc4e59c70ba811c.tgz","fileCount":31,"integrity":"sha512-SMcpQVeDoP6yHzhX3jfB+AUzVVABKxIlvNP9ZfeWc0TRpCIrv341CwO+W3f2drba2/3rF55W9vUV8/WBEjctaA==","signatures":[{"sig":"MEQCIAhrzIvC0P5l6vyvKGYVBfo1HTWWotucDgq0g/4ChA82AiB5kdd4ATrmp4potv4O7UGxydNmzfmbkInOW2anXN177g==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":99208,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJhvb8FCRA9TVsSAnZWagAAtNsP+gJJci1j/62NfIgyvoDt\nw+Sbt56I3Tfi0YjuYAeZ5Iz4jdDP8HkZUE6tUNVmHfkaYs256MC0AjsEudhB\nTZiVFkhjfLZgJZKpnrJVZ/GlLBCxHFsZfii0foUUpjP4OUMxGvOFaXCAkgoN\nklRUPcho5J41/Knufti31secmTUePaLAttR7iYPDEkOacd2LQapyCIsAmqTt\nQuerlaKy1Za7U7JJQMwodqrXSLQ8X7KtIboJjK9jkR1xJ1Y9gXhB/EDy7nv8\nIzoRde1pqq2aPzwdOSh3z4APWWkRE7RegC1Quyqav0G/MK1HQITJhs1s0Wq4\nctikDfcSBqEW1ClKB/2udVutFHkAzJhdZKqj8DIAxPnmJGM3VWpV3mYYHYxc\nUplrZpsnvGKuQvT6C/l1cpTxGsyBTC5KWhyJjcJTKSmr+/EgE9Ou+nX1HxrV\nn21EvdleGNMBDvhxal7iQDuhdFOT5r5j65fcKfy4I4K5VflzTn3jRwk3MAc2\n+Wl8E6OTlTXhuG9xQ3FcyekzVykFwZKEPQrGR/IDt2KNIgWZqW0Bkg1UTuAn\njNw8CDVZrjkcIvoadcFwgkC+pzA9hFWyllSV4zP4ZYy9poz5/3BAYtKJVa7F\nIUguaJWwRtefRog14tNz3QcgHE0Q09BiQXglXc7q5s7Vk9i9yEFFPFTEvT9f\nk1rt\r\n=vf1P\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\n[![Publish Documentation](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml/badge.svg)](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml)\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=14.2.0"},"gitHead":"61fb049a1f0ca736930e8dcd8fc4e59c70ba811c","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint lib test && deplint","test":"npm run lint && npm run test:unit","build":"npm run clean && tsc -p tsconfig.build.json","clean":"rimraf build","prepack":"npm run build","lint:fix":"balena-lint --fix lib test","test:unit":"jest"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"versionist":{"publishedAt":"2021-12-18T10:56:35.859Z"},"_npmVersion":"6.14.15","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --fix"]},"_nodeVersion":"14.17.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.4.0","@balena/jellyfish-logger":"^4.0.4"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^27.4.5","sinon":"^12.0.1","deplint":"^1.1.3","ts-jest":"^27.1.2","typedoc":"^0.22.10","typescript":"^4.5.4","@types/jest":"^27.0.3","lint-staged":"^12.1.2","@balena/lint":"^6.2.0","@types/sinon":"^10.0.6","@types/semver":"^7.3.9","simple-git-hooks":"^2.7.0","@types/json-schema":"~6.0.1","@balena/jellyfish-types":"^1.2.41","@balena/jellyfish-config":"^2.0.2"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.2.5-renovate-internal-patch-61fb049a1f0ca736930e8dcd8fc4e59c70ba811c_1639825157703_0.7570998619694265","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.2.5":{"name":"@balena/jellyfish-plugin-base","version":"2.2.5","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"Apache-2.0","_id":"@balena/jellyfish-plugin-base@2.2.5","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"fd9d372f89762473336fd8c6177c295790bac20d","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.2.5.tgz","fileCount":31,"integrity":"sha512-mo1D5h5DqYTppsctUM7oxa8SmTW0CKX6Tpgq9YlWcwgzptWzUzgK7VwDDzW7ulbCsTP9VHUVHk9V4XEigdlhDQ==","signatures":[{"sig":"MEUCIQCHEL7b+NSNkF6mPaNurQsBoiZ2r7btR4XOTSb5M8xZlgIgFDmuauypuqrCVQwZCOYf4jbyo1v17EvuJCYhzF2gy+s=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":99162,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJhvb+rCRA9TVsSAnZWagAA3YUP/3owWZcqU2CQpn5veMTK\nS1LOsQG356LMt1PehWgqhFJEDiLaJFEm+VRHCfh4NNZmyCN2PG6P1UTMKfZx\n1o7HwJMarlBON8oEmnbWEGnT9MDK2010318LJu0mMpiAcdhQPUR03XCCHZ92\nbhkj3FQFY4lDKl2su0rUyYdNMV1iB/FG0ZjhiX6ce0oyXtAiD9tVk1SrGjI8\ngIReyXfla36eDl15VKpTYyHEYgQofzVg2TH2bpVuDWlTbqp6M0BZcCjjTp0o\ncQdISB2SiS/l53mHSxhtTbUPE+n7SZh98xcTEUndj3QLtx34EL0W1lYlnn+M\nXUCGArKN/w2UlHAsp/S/7qeg9URCO/SLudURwOuprxem0zrF3YSlEBArTb42\nV7/WacKpBvBMMFs/rAnBSqBx2iLjyT4dmosR2IH0NWR3CVSBueqWNw6/wCu1\nt9REE0GcX4eu/QoGzVmHsUI2dzI+oyjjp2MS3jKn+GhvEKCp2b/J6LI/TtvF\nF4T8XUVNXF7Yk7df3ST/UoWQdy0zDWRVTyLvr67efLTAvCpDEusgO0hm0CV4\nwcMlru4Yh4L12eaC8nYuXXPlXSYFyc9GmOCs7yfHOuugPRW42hg46cn6/RUa\nitZuRpHzAdrRKANWkJYAe6K9sbBTvXZGaJ+Z0NsHaNgYp/l2BN7h1LNHAIk3\nW+dn\r\n=zd/g\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=14.2.0"},"gitHead":"2eb256afad9b60e1a2948f4a8d687d73af9d34b4","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint lib test && deplint","test":"npm run lint && npm run test:unit","build":"npm run clean && tsc -p tsconfig.build.json","clean":"rimraf build","prepack":"npm run build","lint:fix":"balena-lint --fix lib test","test:unit":"jest"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"versionist":{"publishedAt":"2021-12-18T11:00:01.508Z"},"_npmVersion":"6.14.15","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --fix"]},"_nodeVersion":"14.17.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.4.0","@balena/jellyfish-logger":"^4.0.1"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^27.4.5","sinon":"^12.0.1","deplint":"^1.1.3","ts-jest":"^27.1.2","typedoc":"^0.22.10","typescript":"^4.5.4","@types/jest":"^27.0.3","lint-staged":"^12.1.3","@balena/lint":"^6.2.0","@types/sinon":"^10.0.6","@types/semver":"^7.3.9","simple-git-hooks":"^2.7.0","@types/json-schema":"~6.0.1","@balena/jellyfish-types":"^1.2.40","@balena/jellyfish-config":"^2.0.2"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.2.5_1639825323581_0.23190030730096778","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.2.6-renovate-internal-patch-030f39e42c5a91884c49c400c6d2f3c419044095":{"name":"@balena/jellyfish-plugin-base","version":"2.2.6-renovate-internal-patch-030f39e42c5a91884c49c400c6d2f3c419044095","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"Apache-2.0","_id":"@balena/jellyfish-plugin-base@2.2.6-renovate-internal-patch-030f39e42c5a91884c49c400c6d2f3c419044095","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"d8def7863edebc1eef972bf84dbfd28f3c095912","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.2.6-renovate-internal-patch-030f39e42c5a91884c49c400c6d2f3c419044095.tgz","fileCount":31,"integrity":"sha512-51CW22lzPYlgbGOPJN3hZaXQajjs2gUtMtdemqutONnYRmcXpyTWwyh8YL/82X8WBw+EEFf91E+Axjtjp9EpFQ==","signatures":[{"sig":"MEYCIQCv2PjkJNa4vzBPqeHoisD5+Mm/aIUiAa+bLq6Oqj779AIhAKxhrxAkFNstOzT4nyQCSntBXTLxta7BBoXemydlQm5t","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":99297,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJhvev+CRA9TVsSAnZWagAAc/0P/jhQFXRCLtoR5WBv5QzJ\n6+Yf1Gsz16dEMUXpDmdExfjVQzfH60USpVU9ow6NH+JvSfp/sPdrivdSteOv\nGhuoDmKFvJ1hi7tI72QwtjA0uEP10C0MudkzbahkjXycvQjI+wiSpKowNO0n\nz/ti6bq2suMDxxsBxfe9nxAnTjxsbQEOD2ygpdBKiXK7ChXJdZNw/Bk950u8\n4kyaABIJCiNbd+RjRTOyv9u2RPjWyEXWkDMUZS/g3CJUxkvrF9ls5Lkt+7or\n1QU4acKgWUoKHJtb2e9n5ujxNA1St5ZQ1jR2x7XbbOTokSkjpGKT+2ctY6gi\niC4RzctZhUMrly+rDcUGY0RRB8F2TyrbweKlquYw0ZKyPNC8BT9zxULYnvUw\n6yyeVQ0LQqBbcpT2VE2FDH2LCQiXdqZie/yRe20HCeqinMal+s9/zLylNNAR\nNSknbtKkba/x2k8ACiSPiDJH5sPhvRQT+4ycDxoVwf8zB0hiDfgn1oc0inBY\nJj6rjRXuov0qnZocoSnLz3+/05/iT5ZGbn36ll2cuih1iB0D7QxtqCkq5vHD\nTcmQHz0GMEyjcwQahyEZWiWp7iOsJSbmUpOaNf/1IZkLWAzKJ0/3op5ynpPI\nt03zFcotCyOItlOnGQ4a3nkbQI4Y+dZkRcuGHOjU6nxpBK898YfwhJf7yTwa\nJwtI\r\n=0dJX\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\n[![Publish Documentation](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml/badge.svg)](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml)\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=14.2.0"},"gitHead":"030f39e42c5a91884c49c400c6d2f3c419044095","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint lib test && deplint","test":"npm run lint && npm run test:unit","build":"npm run clean && tsc -p tsconfig.build.json","clean":"rimraf build","prepack":"npm run build","lint:fix":"balena-lint --fix lib test","test:unit":"jest"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"versionist":{"publishedAt":"2021-12-18T14:07:42.033Z"},"_npmVersion":"6.14.15","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --fix"]},"_nodeVersion":"14.17.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.4.0","@balena/jellyfish-logger":"^4.0.5"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^27.4.5","sinon":"^12.0.1","deplint":"^1.1.3","ts-jest":"^27.1.2","typedoc":"^0.22.10","typescript":"^4.5.4","@types/jest":"^27.0.3","lint-staged":"^12.1.3","@balena/lint":"^6.2.0","@types/sinon":"^10.0.6","@types/semver":"^7.3.9","simple-git-hooks":"^2.7.0","@types/json-schema":"~6.0.1","@balena/jellyfish-types":"^1.2.41","@balena/jellyfish-config":"^2.0.2"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.2.6-renovate-internal-patch-030f39e42c5a91884c49c400c6d2f3c419044095_1639836670075_0.5418489179579897","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.2.6":{"name":"@balena/jellyfish-plugin-base","version":"2.2.6","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"Apache-2.0","_id":"@balena/jellyfish-plugin-base@2.2.6","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"e319e0b084213cdfc902a93686edcc87ecd320b2","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.2.6.tgz","fileCount":31,"integrity":"sha512-3EM2MZ/qVvPSzrZq6pbx5K0VBXbHoX66NTVxqqFaUJGei6mhISrjLSlLkG3oQSC1LdCpjZW9mp3k+sBKThzZKA==","signatures":[{"sig":"MEUCIQC6sMObhkvnmjt48DnQqfhc1+x4tN5Xh0Chwc6nhBGdiQIgAujl2jJswODJh6Tf3/LrCOJMDxS/k8LABQVFYwer1+c=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":99232,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJhvezpCRA9TVsSAnZWagAABA8P/Ao/ihPfXIKcS+mATANA\nBdLXbd91FpMgvv6wjfrU7AHaoPf2MPaJ7YTzKjQkfw0Cqfv6uI8JZ3Pw1TZF\nppGsqb0xeYwJNM1Fx3sOVPObA36xD+blVfnLb8EeWCnJenXeDEXcY6jYNxaM\nkWuw/MCTIn8vjVejseQukAfEBD7LKMTtuBm2yStdv8EWYsc1xtP/mgujMfEP\nURG//l9/3vOsmhUKI8+EHE5OEIhKhfAzfFs5PJIf44xU8PBRUNPvU8QHHQ2K\nhLTVp9yox1TKuuApk3kLyTw5qkTT2MX5XE3FZNNBv15AaiVoYWOXUJz6GoLd\ncwwbIIUsZrsTZCYedJgP9K7LJ+tEuhGQtWkPrYBWhTA3YSYI5Qb2FpzFEeTI\nfYUd5nSiQGx8bdCWIrTfSB8V/vVpPY8a/80Ho6RC2nUYikglRPqFLeevHRJA\n6N664Mkeu9apYt8ge2u53HrBfCOiAd0Y8cp6geaDDVWNizrXXnm7mKARRkgG\nAjvGGGD3zV6UU3emhHcLDEIeopWfbpq2cKnGzs2D4GkXzAZaq6zG+6GD6PMG\nZf740PZf8ngbLEF1YHeMOltRHb5mUbcm/rxMcnjMYbuWSrTNBIyipieeUErG\nQ/sHsAdjMepLmUEeRjUSSX5YAshrOlGXsuEA4c/vW9QeS3fJSi/KOJgeOFrS\ncW9P\r\n=yqVC\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=14.2.0"},"gitHead":"a7a2a7fa904ca20dc0eb8af82de3bd85e09ad59c","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint lib test && deplint","test":"npm run lint && npm run test:unit","build":"npm run clean && tsc -p tsconfig.build.json","clean":"rimraf build","prepack":"npm run build","lint:fix":"balena-lint --fix lib test","test:unit":"jest"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"versionist":{"publishedAt":"2021-12-18T14:12:35.199Z"},"_npmVersion":"6.14.15","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --fix"]},"_nodeVersion":"14.17.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.4.0","@balena/jellyfish-logger":"^4.0.5"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^27.4.5","sinon":"^12.0.1","deplint":"^1.1.3","ts-jest":"^27.1.2","typedoc":"^0.22.10","typescript":"^4.5.4","@types/jest":"^27.0.3","lint-staged":"^12.1.3","@balena/lint":"^6.2.0","@types/sinon":"^10.0.6","@types/semver":"^7.3.9","simple-git-hooks":"^2.7.0","@types/json-schema":"~6.0.1","@balena/jellyfish-types":"^1.2.41","@balena/jellyfish-config":"^2.0.2"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.2.6_1639836905614_0.34303892385349477","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.2.7-renovate-internal-patch-ca5f348b11dbbf73d0b84dc85288a4da4c94e003":{"name":"@balena/jellyfish-plugin-base","version":"2.2.7-renovate-internal-patch-ca5f348b11dbbf73d0b84dc85288a4da4c94e003","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"Apache-2.0","_id":"@balena/jellyfish-plugin-base@2.2.7-renovate-internal-patch-ca5f348b11dbbf73d0b84dc85288a4da4c94e003","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"d22ac745fe2a23fa8e4c2b4176aed4bb3ce59ba5","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.2.7-renovate-internal-patch-ca5f348b11dbbf73d0b84dc85288a4da4c94e003.tgz","fileCount":31,"integrity":"sha512-K/yZMnJ7YcSucP6qpCHdDGZwXY8iNTIq1vnd2Oxw6ZZG+1M+f0imHPJTy3SeaUNsG9mawjNQAIVeBs/ret0OGw==","signatures":[{"sig":"MEUCIG5poLf4vNAARsoEjeuZ0EGUg/0FGZ4BBPbBX1/3h+oqAiEAnt7KcSYwn/GBp1U9it+1yFha/FM+OfPoHK+Y3VKx6kQ=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":99398,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJhvqZECRA9TVsSAnZWagAAdgkP/RMsKhGvhCZFbQaAT5Xf\nG6YubpTSbJ333HiLDhqZ/1xYF2/HX/PDg+n0eEhLs9pJjE4RSe+Kcp4wCIsW\nidaTs+bHaYLySCEGD3auWf1mLhWk8q6rdeDzISsgHhWP+9FRnTiU5/qtT2Tq\n3gg7eXrzA3iNRpTWw+6pYpH2r4EG+zld5VA8q85QFXauntbeN1aU9ZaIVpFK\nwmnJjBRumX4JgNpwkdBJD9lNeP7g+qx6r5PsHsvr7qC7jMi1RzuGYUfXQOnx\n/+r1tEYUpud85hJsb1NKIvv1b/SXwWAZ0vNfTJGZOu85poQJ8z7c1RsWw/Jl\npwy+Pjpz+JY/GmjPgLnmK+krqw8bWeO8YP9yHziiXxKjx6C6nUpGI6elVGFW\n2MeyT2g2y2l0a/tvS/HCm8ZGDLG9yJPWh3L3/b5FcZzxxVZ+y680+knWOm/a\nuQRQsgIRlVr3PdyxdQ1k82wWeXTgWyJl9eZE8wo+0UI5QRYPDpM+qiDSQJmz\nOeXtghpoExdha1wr0dmEKwVhIN4BBXg3/j+65ooSWmiQEK6h8oRDdNZTZ/sG\nxoXGelxCNJoyFkQeXorz0kSsqfFElIcggPhK+JJwzksRAoQm0bJ3oF+e49RK\n8LJd3eRVtjhUJ5lIsq0tx74u0H/Yv/x2XYaTsLJKLcSRxOlfshpg6o4cA/TE\nNM2D\r\n=SCj+\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\n[![Publish Documentation](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml/badge.svg)](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml)\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=14.2.0"},"gitHead":"ca5f348b11dbbf73d0b84dc85288a4da4c94e003","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint lib test && deplint","test":"npm run lint && npm run test:unit","build":"npm run clean && tsc -p tsconfig.build.json","clean":"rimraf build","prepack":"npm run build","lint:fix":"balena-lint --fix lib test","test:unit":"jest"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"versionist":{"publishedAt":"2021-12-19T03:23:03.460Z"},"_npmVersion":"6.14.15","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --fix"]},"_nodeVersion":"14.17.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.4.0","@balena/jellyfish-logger":"^4.0.5"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^27.4.5","sinon":"^12.0.1","deplint":"^1.1.3","ts-jest":"^27.1.2","typedoc":"^0.22.10","typescript":"^4.5.4","@types/jest":"^27.0.3","lint-staged":"^12.1.3","@balena/lint":"^6.2.0","@types/sinon":"^10.0.6","@types/semver":"^7.3.9","simple-git-hooks":"^2.7.0","@types/json-schema":"~6.0.1","@balena/jellyfish-types":"^1.2.42","@balena/jellyfish-config":"^2.0.2"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.2.7-renovate-internal-patch-ca5f348b11dbbf73d0b84dc85288a4da4c94e003_1639884355994_0.8310146830809979","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.2.7":{"name":"@balena/jellyfish-plugin-base","version":"2.2.7","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"Apache-2.0","_id":"@balena/jellyfish-plugin-base@2.2.7","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"aba110d2ce291fe8f3cddd2b6bfa3b3e185b4866","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.2.7.tgz","fileCount":31,"integrity":"sha512-fM2u1i3+EkdA68PDJIMOQMOzUvXPGtiRE+f3XWo8zzkyqwFDAmLGOQLwGnHwKdJjgzbeUBdGsiJZWmbj95yTsg==","signatures":[{"sig":"MEYCIQDKsiuyU57IOI7sAUZQXtHPu42qC66Bo1/mpsqTwHnv9QIhANddK+3KS4Dj1PInCUmrPQNJ6FSTgfYxUxM8kvfqOgSI","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":99333,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJhvqcACRA9TVsSAnZWagAAD9cP/i2fnPSdcjIBd1DDVM8T\npW8g4WHecW+8Gx3vrEfmXI/47s/z/AWAmv3+0Dt3hh4fU0JN87FhXUEP87Jb\nnwz8E6Z9blOHzniy6J4VA1nFOG2V7/IgGvQYilC5prFlmeiDZh5E6pOJ/B5o\n13cXVMJiReVYAvSimaEM3md3rlTjr4Ytf+OVJr45kdknf2C4tvKX08cir1Lk\nTuOp9MyjMmCFiJH1VRj1RmrkTmY3m7VVj5xhhzEeGIbE9c1fBhr6Xgp7GQ2U\nXAb6nnrWE0rdX8xLaoLcqo8MguqdLACWcr+8D47rxkjY5t2ks/FHLch0cymS\nvwtjOCMUmDTXuX/y0nREkfRkb5Yojjn+7wivpWSR+L6+dvQdhKeHqoHkZsj6\naI+aNN5zxUFYX7KpUDMwpMOZ982FwSqW/eNxBX5HgEXvgVE3r8F8UIiswXYH\nV4KmOuVHZEUggr/lvnNKdIPzcQQATCw10ZSyAdxP5qjFXqbSI70ynlot7ATN\ndMj3EC3IIFJumrGI628xNlCPx94dGKHg9wseDAo2auqxdvwlT+iYXMi8pCpf\nc21Fj9JBjLEYXSwRMkAfwVlH0ohQmjT88yAfIqlil2MdddxY+EA+8s3jASK5\nTZtyE97sAgw9GG9Uf8y384BRlRNBX45+mVYyAvuEjmaVbOBubg2oVZ8rlCDX\nSDSf\r\n=pA9t\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=14.2.0"},"gitHead":"433b073ac2b4eb0827e12fc8c72e4a21ca81029e","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint lib test && deplint","test":"npm run lint && npm run test:unit","build":"npm run clean && tsc -p tsconfig.build.json","clean":"rimraf build","prepack":"npm run build","lint:fix":"balena-lint --fix lib test","test:unit":"jest"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"versionist":{"publishedAt":"2021-12-19T03:27:12.249Z"},"_npmVersion":"6.14.15","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --fix"]},"_nodeVersion":"14.17.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.4.0","@balena/jellyfish-logger":"^4.0.5"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^27.4.5","sinon":"^12.0.1","deplint":"^1.1.3","ts-jest":"^27.1.2","typedoc":"^0.22.10","typescript":"^4.5.4","@types/jest":"^27.0.3","lint-staged":"^12.1.3","@balena/lint":"^6.2.0","@types/sinon":"^10.0.6","@types/semver":"^7.3.9","simple-git-hooks":"^2.7.0","@types/json-schema":"~6.0.1","@balena/jellyfish-types":"^1.2.42","@balena/jellyfish-config":"^2.0.2"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.2.7_1639884544200_0.3909948135598671","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.2.8-renovate-balena-jellyfish-types-2-x-3d2d5e1cfaab715e9516cf4d4f269040e28172bf":{"name":"@balena/jellyfish-plugin-base","version":"2.2.8-renovate-balena-jellyfish-types-2-x-3d2d5e1cfaab715e9516cf4d4f269040e28172bf","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"Apache-2.0","_id":"@balena/jellyfish-plugin-base@2.2.8-renovate-balena-jellyfish-types-2-x-3d2d5e1cfaab715e9516cf4d4f269040e28172bf","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"3c149971fd6cefa13e1213d313bf67c30fce8809","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.2.8-renovate-balena-jellyfish-types-2-x-3d2d5e1cfaab715e9516cf4d4f269040e28172bf.tgz","fileCount":31,"integrity":"sha512-KIWsgDuvi61BbPenXI9RFI1sK8iST0327kYtz8oVoi2cQXFlGCen+MT+u3RMA+cRac+pslN47H9buOXY1WTTlg==","signatures":[{"sig":"MEQCIDACRSpBAdUBLoEU0rzXwlj8NpVuWjAtT37dT8l3PBZWAiBWHQnUjb8erOMglPORyeLIjp41Fcaz9XYMjp2WJz3iHA==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":99505,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJhwbtFCRA9TVsSAnZWagAANN4P/2NFVhO9ZTfDsZxS8+V/\neTF/upZV+B96e2+nNojG9Jxa1/xb9VG5gUVmGKmc8vARNGOWOC4jv5j/+qmh\nlzXDPG3CJRYts7iAp6GkKK9D8Ktk8QwpSScSdbN6ILLmxJURHO79UTjB3WtV\n+V3O/bK4QJmO5V9qKV2ab5r2e/4Z1V8Cx8ph+TIQKLfDifKvPlF4S0pH+T+G\nhqnx2w9ih5G2xwk8QkucW3bGO2XNPoL/XdbLkwHYcDs5wTj109MvN3vbwX84\nOIf7MQYGYerBLELn1NKFDVWBjdFLlXEcH2961jYy39h7z0kPJwU2lWGYkI27\nI32rTKMOHVqVApTDtOyv4tSLziFFv3wt+nMwb5YMKRqyA/a9FDbrGJqdrUJh\nnynNQ15bWtGTFNWcZRfSwsiGYq5PdCLKg2VzHLwHBOlv8zl9jGMtw2JRnqAA\nuZlOgVgU8EK2U9YfMk+14Drrb9DJ1kb28pcJq/YD9qBCHhYUPQT6M7SDuhPT\nu4YQqHZIcaXsYTI5d7/WyZaqNKOwmoNL/kr2OoZfd3kNQRGkP6bfMRKQGljK\n6Yu6IMAZmq7chHyBvXT7aTho7n80gB83pQ0g70iYxmKsXKB9QS4n92gcldOn\nUgLyxAY+woPVEU9QmHzxYCZ6N5rd8FqLDUt1bDdELDExormmPiOT+zvugaqi\nwdhA\r\n=Iz0c\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\n[![Publish Documentation](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml/badge.svg)](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml)\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=14.2.0"},"gitHead":"3d2d5e1cfaab715e9516cf4d4f269040e28172bf","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint lib test && deplint","test":"npm run lint && npm run test:unit","build":"npm run clean && tsc -p tsconfig.build.json","clean":"rimraf build","prepack":"npm run build","lint:fix":"balena-lint --fix lib test","test:unit":"jest"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"versionist":{"publishedAt":"2021-12-21T11:29:08.195Z"},"_npmVersion":"6.14.15","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --fix"]},"_nodeVersion":"14.17.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.4.0","@balena/jellyfish-logger":"^4.0.5"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^27.4.5","sinon":"^12.0.1","deplint":"^1.1.3","ts-jest":"^27.1.2","typedoc":"^0.22.10","typescript":"^4.5.4","@types/jest":"^27.0.3","lint-staged":"^12.1.3","@balena/lint":"^6.2.0","@types/sinon":"^10.0.6","@types/semver":"^7.3.9","simple-git-hooks":"^2.7.0","@types/json-schema":"~6.0.1","@balena/jellyfish-types":"^2.0.0","@balena/jellyfish-config":"^2.0.2"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.2.8-renovate-balena-jellyfish-types-2-x-3d2d5e1cfaab715e9516cf4d4f269040e28172bf_1640086341064_0.2826112736914388","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.2.8":{"name":"@balena/jellyfish-plugin-base","version":"2.2.8","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"Apache-2.0","_id":"@balena/jellyfish-plugin-base@2.2.8","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"415258c0cb2ef638524d03a272886b73f0f1d04b","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.2.8.tgz","fileCount":31,"integrity":"sha512-krXabq+WFBQZeBjQM2nKGM1EXe4ejFqqs2OqaoZB1g9dvLtGEvSlGYe4TuCCaudycEM508tGUs1L9s32r69s5g==","signatures":[{"sig":"MEUCIQC/LmfmfK4pYtH0AdIFd5XCfy40zJhW69XnqGwfwYDCDQIgdBTw80m9dEIH4yczr9nB4cauC7Neh35zcWssA7Cc9k8=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":99428,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJhxUtaCRA9TVsSAnZWagAA0D8P/2gGU63LnwVmnN8yfhro\nkDuNsMjFR4miX2JmrSQ7jHVk/zN45Ly2QFRDi8yy3efiZna6Vdk/BxVyOS9r\nQFAB5Wi2OltumnRzm65ulB63EF8yYCEivT5jvNt9KmNX/o2PRjtEbsCuvGX7\nA6RXFhlZTb0ZV/hGY/7ecg6k1qeqoxitqszTaWlxsqTFDtCLtHaJfI/5DnIO\nRopdQtJ2mMNelpgeCYFhisx/xyFMLk7KNQXaJCN106KdjhJ1uHngAHo18xG4\nYSrdcG0RfkjcEeguDyzVI84HAFJq52NghNWtJdCIuQBfR1YNe5Jmcw5jQqbb\nBTysZiMPrV44cJtdB3ZRuL2uWyigYpDPp+0v/Du0eCVtwr/gHenoN6NRthfI\nAu3RtcFJhO3RKZWBJetcG8yp+wuu1xsLm6y32a3s9//JENsoUfk9fYhzspCW\n5B2rdbYJLgMP8oEpYU9qJmVXxfNoQnp+n3q2XQsZ6NzwEnVYc7b6BkMPOCS+\nIGwDs0xQGd7Q+3+z9C6bdXrf5q0J/8LWc5sgl+4evYVhqKlk4qBVMSbcxV7Z\nhpYoBVZTxcbW5j0lQfFYEvmuBauK/MorM0266TDC+ai1m7VdJwhbHgK4IpP9\n8AVZxjTHXibA5gqs364D4eT0lnWC6FHFi2gV56Gp0csXNREq6Ypf+KXk+cMa\n2K5n\r\n=sLIG\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=14.2.0"},"gitHead":"ca63017c21e19af31291721b1976d09e15ddbb21","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint lib test && deplint","test":"npm run lint && npm run test:unit","build":"npm run clean && tsc -p tsconfig.build.json","clean":"rimraf build","prepack":"npm run build","lint:fix":"balena-lint --fix lib test","test:unit":"jest"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"versionist":{"publishedAt":"2021-12-24T04:22:04.683Z"},"_npmVersion":"6.14.15","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --fix"]},"_nodeVersion":"14.17.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.4.0","@balena/jellyfish-logger":"^4.0.5"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^27.4.5","sinon":"^12.0.1","deplint":"^1.1.3","ts-jest":"^27.1.2","typedoc":"^0.22.10","typescript":"^4.5.4","@types/jest":"^27.0.3","lint-staged":"^12.1.3","@balena/lint":"^6.2.0","@types/sinon":"^10.0.6","@types/semver":"^7.3.9","simple-git-hooks":"^2.7.0","@types/json-schema":"~6.0.1","@balena/jellyfish-types":"^2.0.0","@balena/jellyfish-config":"^2.0.2"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.2.8_1640319834433_0.6255644831729343","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"3.0.0-joshbwlng-clean-types-131ceff5d7812b84ff6842ed40cc38f6d4a245b7":{"name":"@balena/jellyfish-plugin-base","version":"3.0.0-joshbwlng-clean-types-131ceff5d7812b84ff6842ed40cc38f6d4a245b7","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"Apache-2.0","_id":"@balena/jellyfish-plugin-base@3.0.0-joshbwlng-clean-types-131ceff5d7812b84ff6842ed40cc38f6d4a245b7","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"af06ff6e36ee6ad1681ee8cefa36b8ef829a48c6","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-3.0.0-joshbwlng-clean-types-131ceff5d7812b84ff6842ed40cc38f6d4a245b7.tgz","fileCount":31,"integrity":"sha512-3OmmILqkUeKVODVnDkh6qrUJyPuIEblBq6vkAuuBqw3Fq7SNE0j/isjQfZm2O5i559y9zzNWzXU8j3hMH3EVEg==","signatures":[{"sig":"MEUCIQCcUuXeKKrqs+nFyRGec6sxkDr3tgiw38JPaBjdfR18rwIgfF7acou06QVJ0rMjlWRa7jMpTwdrhYr+XaZRYPxGfno=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":99778,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJhxVFYCRA9TVsSAnZWagAA06oP/2y55vhG7TwDXAnCKH34\nRJSdyPvcZaTBzku1VvMR4KCCZf04ex4+GS5ySR92B85MAUBGnu/eKglnbDag\nzjAivmgcYuLRRL2JpcFczRl/ONRUo0jRIfsXZib8D5nruKnH93rAxrPS4AEx\npW/65MwQi5PP9ruqEegIjwI2WpNKciJYNpIQJKE5qPFFuwUxwQabvxIhrn3J\nSwqevLqj8na8+1wI4pcfbuRnWR4O223nNjSnWeJhphXr3eQrnASs4/dbToTY\n3k/bmPQ46InhH4LsbUrcd5DlaBH7WicTh1KPypXGo3WPpb+utQuEa4BDlMY6\nQ19pM1Kd8/H9etIIzcWkhkLl+FpsL4lhy3UcydKihOde7lxOH2eSR2bMJLQC\n62NohJGx3UA0A1wvJsRTkYvkzd4rQyNCIbtotRMxCLk1IPO5tvVcg8b5esXQ\naKs4KvjxGVieVSCuHUZ8J8gCV4YWNAqH073rpH48aaH/YgYt81k6hyKEurTi\nOKj7jIgf6A3K/cj8Yg8NSY3/oeLcmFv5CLMdXzSQT9YQtRQDp73XvQHd+J/z\niLQ89HH+h02VaWTNRDCSWntdMbzzx1ZLetyZwIqBO1O9el6qRWvmLnqYTycu\nM5txTF0b9vBzzjZ4jejmCicfT/gjX96PTeF85xoZEwjTvnxD54mKcBwVn+pX\n/oxZ\r\n=SpIJ\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\n[![Publish Documentation](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml/badge.svg)](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml)\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=14.2.0"},"gitHead":"131ceff5d7812b84ff6842ed40cc38f6d4a245b7","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint lib test && deplint","test":"npm run lint && npm run test:unit","build":"npm run clean && tsc -p tsconfig.build.json","clean":"rimraf build","prepack":"npm run build","lint:fix":"balena-lint --fix lib test","test:unit":"jest"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"versionist":{"publishedAt":"2021-12-24T04:46:10.765Z"},"_npmVersion":"6.14.15","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --fix"]},"_nodeVersion":"14.17.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.4.0","@balena/jellyfish-logger":"^4.0.5"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^27.4.5","sinon":"^12.0.1","deplint":"^1.1.3","ts-jest":"^27.1.2","typedoc":"^0.22.10","typescript":"^4.5.4","@types/jest":"^27.0.3","lint-staged":"^12.1.3","@balena/lint":"^6.2.0","@types/sinon":"^10.0.6","@types/semver":"^7.3.9","simple-git-hooks":"^2.7.0","@types/json-schema":"~6.0.1","@balena/jellyfish-types":"^2.0.0","@balena/jellyfish-config":"^2.0.2"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_3.0.0-joshbwlng-clean-types-131ceff5d7812b84ff6842ed40cc38f6d4a245b7_1640321368366_0.8735702286850291","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"3.0.0-joshbwlng-clean-types-eef5f6406ce1a052af5ce020317613d9bbd28c6c":{"name":"@balena/jellyfish-plugin-base","version":"3.0.0-joshbwlng-clean-types-eef5f6406ce1a052af5ce020317613d9bbd28c6c","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"Apache-2.0","_id":"@balena/jellyfish-plugin-base@3.0.0-joshbwlng-clean-types-eef5f6406ce1a052af5ce020317613d9bbd28c6c","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"734d6d113b7fbc953bb7862b9377dd2efef16283","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-3.0.0-joshbwlng-clean-types-eef5f6406ce1a052af5ce020317613d9bbd28c6c.tgz","fileCount":31,"integrity":"sha512-jdQkjDT48d//8uXwWDOrePjoFXZAfWyS5dhJdJ14Po3pOv5/WWfJDuXYNjCpzfOQ0lAz4/VDts+C33R2fvdO1g==","signatures":[{"sig":"MEUCIQCS6ehv/9zygTvmhGblrO0kWlZoYNYTkC6Eb5HbvdEJAAIgJqc5oBrKiPpTE5BgQx2Wjk3dDI/cO1aIJ9nzy7BJOxA=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":99778,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJhxVSnCRA9TVsSAnZWagAAqT0P/3zzDFYl1rhydPzyjELo\nQQ6kO5fQ8Eux4MWGPl6Al0guFiFZ8zlwHpoLyIrc67s4HUSam27G4O0rcrB9\nMRtcpXlvWZQRxSzVzUakM9BYbpNWfn8UafFSGv3v/8xYurUzogQx7Erpd/Nq\nzv2mFpIQIDdz0y/VSQldFsR1fkMbeZkG2r1lflAzgKwlXRsyT8+CCATB8VEy\nmqknCUSXomiZWE6E4OanJ6gGwk4vELzLWw4WmVTe4dRKWCWM9ihz8AFEn0gg\nXXrgGzyLEWq4pRXPBKmxricQzDAWfEDshwY9lh1mThmzpqiRF8eWvF5qpLOP\nrWiiZCEB0Rufootn0UcbEbyszCcxghoN4TCgybq1TP8jBR6MqCwmkDB6WYoB\njFqkSiMU3xTJ0q7ceVx0/OM1QNWF62edBFFGX8AlpckHtkrGlc75GPe0jg4u\nU4R1K05HNdEvvguRaYG5gzXlXbT6r8qpED1rzc1/o6yjhN2F5Jwp7QyD0En8\nb094Nnk4qyQg1U9Sfqpi6KdBO6r+Kt9YicEXIGJdDC5FgAtTGUyesDoZ3/Pl\nCpMyv7bHpCs4w6QSIaQzpEHhMhaMKhHr94EIa/JnVhopoLksq/6xEMGkkEEm\nalbKI+OR/ZQsNMOjg87AY0CPpuQo3b4UKXCNEgYSj4dAfXNnB8nCJQ8CC8is\n12Zo\r\n=m7t9\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\n[![Publish Documentation](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml/badge.svg)](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml)\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=14.2.0"},"gitHead":"eef5f6406ce1a052af5ce020317613d9bbd28c6c","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint lib test && deplint","test":"npm run lint && npm run test:unit","build":"npm run clean && tsc -p tsconfig.build.json","clean":"rimraf build","prepack":"npm run build","lint:fix":"balena-lint --fix lib test","test:unit":"jest"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"versionist":{"publishedAt":"2021-12-24T05:00:37.993Z"},"_npmVersion":"6.14.15","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --fix"]},"_nodeVersion":"14.17.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.4.0","@balena/jellyfish-logger":"^4.0.5"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^27.4.5","sinon":"^12.0.1","deplint":"^1.1.3","ts-jest":"^27.1.2","typedoc":"^0.22.10","typescript":"^4.5.4","@types/jest":"^27.0.3","lint-staged":"^12.1.3","@balena/lint":"^6.2.0","@types/sinon":"^10.0.6","@types/semver":"^7.3.9","simple-git-hooks":"^2.7.0","@types/json-schema":"~6.0.1","@balena/jellyfish-types":"^2.0.0","@balena/jellyfish-config":"^2.0.2"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_3.0.0-joshbwlng-clean-types-eef5f6406ce1a052af5ce020317613d9bbd28c6c_1640322215839_0.9906491183661197","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.2.9-renovate-external-non-major-ca2b1ecb45df548509a39a2bf15152326ec55675":{"name":"@balena/jellyfish-plugin-base","version":"2.2.9-renovate-external-non-major-ca2b1ecb45df548509a39a2bf15152326ec55675","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"Apache-2.0","_id":"@balena/jellyfish-plugin-base@2.2.9-renovate-external-non-major-ca2b1ecb45df548509a39a2bf15152326ec55675","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"7e4327d125d37817dc32c9607fb952d488fa7df6","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.2.9-renovate-external-non-major-ca2b1ecb45df548509a39a2bf15152326ec55675.tgz","fileCount":31,"integrity":"sha512-WvO+8ouneUzYw6UkWQyNawqKXrnN/gcAg1QIjiiHVWlfmduYVSRYg8WXfJlsAWik9PObMzbYq5zCBMZ0xFS8XA==","signatures":[{"sig":"MEYCIQDzDx4pU+EHsdR8qWUDnzTA1fHuX7+WJh5Hmfh14n84RAIhAO4gPs4GhpJlxaPaTFysUgotYmm3tG+4fpMBaDQ6SNTE","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":99586,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJhxmBfCRA9TVsSAnZWagAAX5wP/RAG5S9WsGRGJn5bS3xW\nASGbb5Za5F20HfcpwVxU4AR1UMSdkfFjmvNYXqZq1tvEcYt+Kkq99MJfvmP+\ndOwLXXHHmmGFbTyy5mMxwihieybUaSs2hJdXwAwqQSuCSYtAng4jnUiVBCT8\nXAVACSXSFFOP71V67BmT2ELcnSjcCO727PEfOeexS8RRQUIFfY38bHRb6cgK\n9KC20qmJ6/r1FUefLudaDn2cnq00JL8hIjWMNZMU7Bw1WJakz1OsUJpcywlv\n04f4fZI0rQbFvDorWhuoeDONglywYfeXxtEm7dozS7N2izItTLMoWCih0w2V\nXMRy41JwsJuuDOVE3ZNlt3UEygOUNE8+Wu+aXT2ppfWzQG1fCXWpU+8Fgxcp\nWUQPzVrop4xZkIZUlOTH44V66mFzHZNbxj83eGnD7pjmbAkXVcccM9yoJnCj\nKDFCAtc5rxhO+iTo6IkzA9EfHDYr7k29Ye7C9D+9adgRCJg9Gh9DU1No8xkd\n+pIn3/aAKKcVRK1osBBD8z86W7DxGw08yIo3f0ls8mpyUnTpFSa0rdzZgvKE\n9Aa6F9n+sivF/I4oja/bMGFbkjj5E3hAjtZukECXVb3GCAvuAMz8qp38Xql5\n+R5mtNulYWz1ICiYsokho2yClc0sxts1a3HmC/pK2vLWS4UYZB4A4yR/QW8w\nrNuu\r\n=nk87\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\n[![Publish Documentation](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml/badge.svg)](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml)\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=14.2.0"},"gitHead":"ca2b1ecb45df548509a39a2bf15152326ec55675","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint lib test && deplint","test":"npm run lint && npm run test:unit","build":"npm run clean && tsc -p tsconfig.build.json","clean":"rimraf build","prepack":"npm run build","lint:fix":"balena-lint --fix lib test","test:unit":"jest"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"versionist":{"publishedAt":"2021-12-25T00:03:06.394Z"},"_npmVersion":"6.14.15","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --fix"]},"_nodeVersion":"14.17.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.4.0","@balena/jellyfish-logger":"^4.0.5"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^27.4.5","sinon":"^12.0.1","deplint":"^1.1.3","ts-jest":"^27.1.2","typedoc":"^0.22.10","typescript":"^4.5.4","@types/jest":"^27.0.3","lint-staged":"^12.1.4","@balena/lint":"^6.2.0","@types/sinon":"^10.0.6","@types/semver":"^7.3.9","simple-git-hooks":"^2.7.0","@types/json-schema":"~6.0.1","@balena/jellyfish-types":"^2.0.0","@balena/jellyfish-config":"^2.0.2"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.2.9-renovate-external-non-major-ca2b1ecb45df548509a39a2bf15152326ec55675_1640390751119_0.5762069945791706","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.2.9":{"name":"@balena/jellyfish-plugin-base","version":"2.2.9","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"Apache-2.0","_id":"@balena/jellyfish-plugin-base@2.2.9","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"ecd55d9b78b3188f33edc1ffcb9d63c5a3931dcf","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.2.9.tgz","fileCount":31,"integrity":"sha512-y8xNhYPKV22VMjkTGKRcbQFj/7HUnyQrxmXTaQ+ALDE3nFJ4S0XrTFj5g6vwj9lhSsBfn2b1NaOvl94c9Kc88A==","signatures":[{"sig":"MEQCIEt+ISe3qbJHtrvV7sirzF+PUv+eiMADsAj2V7mPaz50AiBq2CEzMyp3GR9jM3c526h8CBJiFfwM/0SCSaJ/SMrpyA==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":99517,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJhxmExCRA9TVsSAnZWagAA1ikP+wZZgePpRdv0dCdUidEe\nlXdMAkgyuq8CMhbt9bWgiCGsknNTbdbMXBJV5e93XHz73rzCIWiz/XUpYgEP\nlizIC6V0/CtMJYDn6hViC36WMUe4/Y+qxEyCUdGa4ACQ4LA0TQOFljL/MsSQ\nip4DDD/KeMlZA1qxTewctSa4jT+Ds7bvyRflOne46bCLGru4OdEyr3UU1G73\nP7DMXhR/Ia21INvQ3+cVYCsgNJU6F1F9GYKA/XWaPCoGVG4QsQbNUWSy4UMX\nKugpNkx2takjslSDqluZgnyM+EF5iqsdXrmGVv5BI7ijCSzDQOEEwt2M99wo\nWsFVMnqyfCXpiBYiRs7fKK77VgGlRZbS9rHfMVx8m3FWWKUSn9/X6+bxGeB8\nw5WhcFYb5sMJ51MwuQ3auLWf1/8MVUFlL0/cO6ocp8xz0h9QIaXw1A0uVgf7\nldZm+l+vdGuqpQY+l79MgwnB1yByVP5uSap1FtBV4SrwIUyc2fEj+Zlaa1fy\nNRdVaP6rLMXxoUrRbEUKdtrq520IPwkql97T+YAMeKPwcScbrtPORuvIgBl2\nI2vsOC1b2BI28UOHdWRTn491UOmuZWxKhXb4q5t8AtCib7NstoSk8Spod1pp\nc+h4tIjqf+DeqKaEDV+F0ni6mxzkdRK13XuXNlIRkCTJciZ9U0MFkLRgwPt7\nwBs7\r\n=MN8g\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=14.2.0"},"gitHead":"549fc1164e6715512b42f4de64a5ba185def3ee6","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint lib test && deplint","test":"npm run lint && npm run test:unit","build":"npm run clean && tsc -p tsconfig.build.json","clean":"rimraf build","prepack":"npm run build","lint:fix":"balena-lint --fix lib test","test:unit":"jest"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"versionist":{"publishedAt":"2021-12-25T00:07:31.330Z"},"_npmVersion":"6.14.15","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --fix"]},"_nodeVersion":"14.17.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.4.0","@balena/jellyfish-logger":"^4.0.5"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^27.4.5","sinon":"^12.0.1","deplint":"^1.1.3","ts-jest":"^27.1.2","typedoc":"^0.22.10","typescript":"^4.5.4","@types/jest":"^27.0.3","lint-staged":"^12.1.4","@balena/lint":"^6.2.0","@types/sinon":"^10.0.6","@types/semver":"^7.3.9","simple-git-hooks":"^2.7.0","@types/json-schema":"~6.0.1","@balena/jellyfish-types":"^2.0.0","@balena/jellyfish-config":"^2.0.2"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.2.9_1640390960983_0.8305515098820151","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.2.10-renovate-internal-patch-f15ebe02e0683a135e3c4df784dcd42a9db95cc3":{"name":"@balena/jellyfish-plugin-base","version":"2.2.10-renovate-internal-patch-f15ebe02e0683a135e3c4df784dcd42a9db95cc3","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"Apache-2.0","_id":"@balena/jellyfish-plugin-base@2.2.10-renovate-internal-patch-f15ebe02e0683a135e3c4df784dcd42a9db95cc3","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"f1daf7064dd22d12ea94e90bb4ce2684197e0286","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.2.10-renovate-internal-patch-f15ebe02e0683a135e3c4df784dcd42a9db95cc3.tgz","fileCount":31,"integrity":"sha512-bIayF8qOTGH/tWNOp6ZBbRafITJ9cBW2GfOy+AbtyUzMWFHStZeigJkeCbVxSgXS7UIQzj9FuJecL4hKPjqaTQ==","signatures":[{"sig":"MEUCIQCfPUxJ2/DAmv+TAPldURCOgxqCeYgTfOtOJcomEOc2wgIgI+V7oTPCHO4LAbRMHiTZKt8WDCZCV5lIeFSZYV7hscE=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":99685,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJhxn76CRA9TVsSAnZWagAAEJsP/34rLEedwwtA2pVLq7de\nID026LK/iHt0KzvHde5dVHUpuVogUOqzg1bCOWO8RJT3gvP2IEVopsh7u79Y\nJM32eMM+nd4AnIguVFO+hNZ/pMwmpiw7DFI60V9UrZkgHLrwcB2RNeYmaraB\n0yLdbKpH6WM0KeL1GWzMLa9XfCFTY6DiM5VeMA2BVEJppdQlofueWKnAsGjy\ngr0UL7bWvCG38RG05rELmizEJZNTKlI2Xb+PQWhBhyNYUdFVCxxrHZBBsHmk\nq8ThSaku2yzArRuj4LjnZlc2//xyEeSsxzaipBxO6Zn5j3HakcfftyEJSHZl\nnxjl0AWgfVxErGF+NLz7qpgb2/MMJ8tJiJk0HdqCAlZr2NQz/UoEHwbmtYGL\nTl2kfE2mMK5bjknB9XUwu3+lzSqX08SbSWOo5qdC12FpJCkLteDhe8IfTNlz\n4geNnjhpvp8CQjmjrWfqotC1asNJsF8MfXl1JFfJTzm7eA+DaMC/gEV+V2t8\nDXfegvJDS68dmHiL+mgWF+Yg5wiuUlqW3ca1xyExpUeb4jnRvoblen1vheOP\nCdOjjQoBA7pjmLdPFG3qDLQO/id3+e7fRzRA39xlvSDpxO2VfwMcQCLj19YB\n6m7STffRIJJSiJ7Oo7jvPArFMUqi86rVWwFXatJDd473ADT9W92aCRtn4g2H\na4uX\r\n=kNNZ\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\n[![Publish Documentation](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml/badge.svg)](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml)\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=14.2.0"},"gitHead":"f15ebe02e0683a135e3c4df784dcd42a9db95cc3","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint lib test && deplint","test":"npm run lint && npm run test:unit","build":"npm run clean && tsc -p tsconfig.build.json","clean":"rimraf build","prepack":"npm run build","lint:fix":"balena-lint --fix lib test","test:unit":"jest"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"versionist":{"publishedAt":"2021-12-25T02:13:15.468Z"},"_npmVersion":"6.14.15","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --fix"]},"_nodeVersion":"14.17.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.4.0","@balena/jellyfish-logger":"^4.0.6"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^27.4.5","sinon":"^12.0.1","deplint":"^1.1.3","ts-jest":"^27.1.2","typedoc":"^0.22.10","typescript":"^4.5.4","@types/jest":"^27.0.3","lint-staged":"^12.1.4","@balena/lint":"^6.2.0","@types/sinon":"^10.0.6","@types/semver":"^7.3.9","simple-git-hooks":"^2.7.0","@types/json-schema":"~6.0.1","@balena/jellyfish-types":"^2.0.0","@balena/jellyfish-config":"^2.0.2"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.2.10-renovate-internal-patch-f15ebe02e0683a135e3c4df784dcd42a9db95cc3_1640398586663_0.582080106220914","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.2.10":{"name":"@balena/jellyfish-plugin-base","version":"2.2.10","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"Apache-2.0","_id":"@balena/jellyfish-plugin-base@2.2.10","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"16090389c4fa7ce7c7770703c7e36f858b0b5a83","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.2.10.tgz","fileCount":31,"integrity":"sha512-mpmYucEstKjT1btcP4/DeS1CZjGao74/3lGYbTEZ7i5LdwLanlJeYc/GodeiC7ks529TeizgZ51/PkFe7fMW1A==","signatures":[{"sig":"MEUCIBywEHxqSondzK0sjT5MP1tj6gP+0ciX+YnE+3oyX28xAiEArTBZOUjv1ILVaOsbk2/+C0MVHVKbMPsNbP3RKGmoK68=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":99620,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJhxn/kCRA9TVsSAnZWagAAXlcP/1grDFxMjmnKOwQBflrM\nUd76BZoCH1xpq7hhoIxwn1tb0TQBX2Q9Xs1LZX3Yvbu1Ur0T3StBhwMvcAis\nsEUdm14yiCzDkjabCfOVYokDwImWa35hLns1XabbPhgP5d0aIEWe9m1C3Ov2\nrbZjIWdS+063Kx242slDp4kMC7Feq1xtKMFDIe8N2uCwKabs2oQEFrAQrfug\nxCsuTkQlmqncf2kJH2V0JVum0FyzfVqvgaeBX7eDdj6JuLo7bKUnk96oEan5\nSGkb8Tcfx8QGZn6LWKNE4mht5goquiXrbb3syB5E2goZUZIxDsvFWyol7Zc3\nu24iTlkVzP7Ykt5VSSQ3mV5Fzgt/rvtqN54qHNJ9fMG8ub1v84CiwXBTMPXu\nJfVS4tvs7yf0NWMK2NWuPd/lVaoh6x/PBOiHOn11YQEXsCAMvMICShLiJK8f\nQeoZrWq8Sctwx865714PTIMLAggNPe9u7090DQbUTyuXBFL3G9zaQBICM7mE\n2kQG6yqzyCW3tw/Fl+juXLyVJArI+MGTcqSrN8FVXXDdUhJCMUK6nDR5Mzy+\nL5zPBew8ct/c/cbBiqiEfsnUKY0kX7svq1RqXS5jXHzd2fdnqi6yPCW7c7La\n+G4iYEiibZhXmr4O6TerVTA9fYKayLczvxw4IobOA4FOetCk0pmSXBkwdbIF\n3Yqn\r\n=lLyw\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=14.2.0"},"gitHead":"6d30f6d467baf862d9d222ad22a23e1bff1cd8aa","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint lib test && deplint","test":"npm run lint && npm run test:unit","build":"npm run clean && tsc -p tsconfig.build.json","clean":"rimraf build","prepack":"npm run build","lint:fix":"balena-lint --fix lib test","test:unit":"jest"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"versionist":{"publishedAt":"2021-12-25T02:18:16.670Z"},"_npmVersion":"6.14.15","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --fix"]},"_nodeVersion":"14.17.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.4.0","@balena/jellyfish-logger":"^4.0.6"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^27.4.5","sinon":"^12.0.1","deplint":"^1.1.3","ts-jest":"^27.1.2","typedoc":"^0.22.10","typescript":"^4.5.4","@types/jest":"^27.0.3","lint-staged":"^12.1.4","@balena/lint":"^6.2.0","@types/sinon":"^10.0.6","@types/semver":"^7.3.9","simple-git-hooks":"^2.7.0","@types/json-schema":"~6.0.1","@balena/jellyfish-types":"^2.0.0","@balena/jellyfish-config":"^2.0.2"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.2.10_1640398820464_0.008619153188442086","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.2.11-renovate-internal-patch-e48027d7d4eea7a85f568c863f8bd3cd7106ddba":{"name":"@balena/jellyfish-plugin-base","version":"2.2.11-renovate-internal-patch-e48027d7d4eea7a85f568c863f8bd3cd7106ddba","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"Apache-2.0","_id":"@balena/jellyfish-plugin-base@2.2.11-renovate-internal-patch-e48027d7d4eea7a85f568c863f8bd3cd7106ddba","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"7f4cd5b40ab9ad789b44e4fbb8bb5dc63db3ce54","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.2.11-renovate-internal-patch-e48027d7d4eea7a85f568c863f8bd3cd7106ddba.tgz","fileCount":31,"integrity":"sha512-GuIGtEuXRX2Kl3LyhkPNWsUHW1agtyGezt/rpFR/nX1Tg/TRe3Wi/zoXQ+zL6ZtKadLbpSunuqYX5BJdNxlywQ==","signatures":[{"sig":"MEQCIGcIi1LXy5DPUasoQ6o7nMRtFzr2UsJUid8zZQ8VfsNAAiAjVoGA1zeDms5vQQ7vrQuej0n2OH7xVTxTw8Ho4/aXKA==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":99787,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJhxoIECRA9TVsSAnZWagAAO2gP+gNSNim+Vu4kLnbFf6ex\nETOEn6xbt4p7d2V9Xlq9sOqGAKhpBCsLOx4XF6JFSuA0t7y4yLs9SKwUJ44F\nAlB34Pwsxm1jCB6Aumr5VH0gmJd5KUxuIsfdkLLWWsuw3W7UOXXJR8DdfdbN\n0wgl1vOXnf0zGUwQtr1AjstbH3OKKNSDyDFdxkKXAk1qRr1sFrmUQqiMLQO7\ncv1Tmk0Ckt4q2fF+uYNAlG5ZQ8L9l/RoxdTM0bJe8Lc3gnRev2gkTLOTWzGJ\ntjQ36lrtfYMs5fcVfXxVTr9pd/GRTOUWN0OdFz/A2e1deUF2Ah/lhCVm373g\nQOroPCBNHXcge0ocQOyVHJiV4nbLBKcoTAuMWJcARKI55xp/iY4IJQLqboMs\nHpRt0Kl2s/92bJyEXMkLHuNEBtCTeLG5/zXhdzRanDGawqa1W4WZC+uGS5Mw\neI28QEhiivUP6+TcFaHJ0H9qeL+rqzajKrYAlPlnWA0c1WM2Wb0VORSzOxFY\nusxhERZ60qSdbbhRLyfURzz2naA2zZR28tZ7aDdDu5OloDPnq5Y5cLrYZdar\nWt5iD+q8HTkfApyugRjl6XH01O9lmyOuYAwoH/K4DGZMkDVJ5lGFeO+d3d58\ngNpzIJr2iGL34CYzTNttw4GV+/jeav3u1BHdRn7TVAwXN6rb/RDEqjgDpcCV\nrOsZ\r\n=YzIB\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\n[![Publish Documentation](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml/badge.svg)](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml)\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=14.2.0"},"gitHead":"e48027d7d4eea7a85f568c863f8bd3cd7106ddba","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint lib test && deplint","test":"npm run lint && npm run test:unit","build":"npm run clean && tsc -p tsconfig.build.json","clean":"rimraf build","prepack":"npm run build","lint:fix":"balena-lint --fix lib test","test:unit":"jest"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"versionist":{"publishedAt":"2021-12-25T02:26:00.237Z"},"_npmVersion":"6.14.15","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --fix"]},"_nodeVersion":"14.17.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.4.0","@balena/jellyfish-logger":"^4.0.7"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^27.4.5","sinon":"^12.0.1","deplint":"^1.1.3","ts-jest":"^27.1.2","typedoc":"^0.22.10","typescript":"^4.5.4","@types/jest":"^27.0.3","lint-staged":"^12.1.4","@balena/lint":"^6.2.0","@types/sinon":"^10.0.6","@types/semver":"^7.3.9","simple-git-hooks":"^2.7.0","@types/json-schema":"~6.0.1","@balena/jellyfish-types":"^2.0.0","@balena/jellyfish-config":"^2.0.2"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.2.11-renovate-internal-patch-e48027d7d4eea7a85f568c863f8bd3cd7106ddba_1640399364179_0.5825412147566045","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.2.11":{"name":"@balena/jellyfish-plugin-base","version":"2.2.11","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"Apache-2.0","_id":"@balena/jellyfish-plugin-base@2.2.11","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"75fa5546a21928d004da158976cacc91ffb20f1c","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.2.11.tgz","fileCount":31,"integrity":"sha512-rUM5DNlKR/se05UYGw7sPySTzHAu6e/4zSuBiBeiv7CB/YmJrCFdY87/JY/LaRzSB5jv+NLbHkZfc2omSVqehA==","signatures":[{"sig":"MEQCIGzcdTvAFtqKtZZWBoxdnSFh3Lbe+RAG3mX6rrxUEaWIAiBi4x2IIxtdTNdPoxjjz/pJ4ti67VOm34rV6M22C3Uh2A==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":99722,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJhxoLaCRA9TVsSAnZWagAAOo0P/j4iLMdBGBIxTG0EgtqA\nLkYVeqoTdpF+aML5m/YO6glb7ldtX1LcUvqzOUia9uE9CHAKR+63qNfKzqZl\nlKRVv3BQQLPPbfLaxJSum2mXfZMmPjoAwHcezm/i9xXgax7xxh7kdvL+rB8j\n25/2m1NFfKd7H9IEFLoBfjfZPanT4XZvF6WavWtof4RP0pCVHgt8vId/55Xn\nz7TkM/tmZKgQljbLm5NqunA3ebJbZqBlFpkvrzJ9FaZtPaegHMhcm0PMrkBh\n3iuHE96h1QM5zA4fsJhLHZa9sQm6c2Com+nsNIaw+8PEc7TaZP1AMfMNkf29\n7Sm4E8Cp104ptD/GgSQya59w/+O32qHcEVjLKrQesDS0WESB64U+yYigH4Uc\nBvoEv7fZYXne+zJ5MHwFGt1txs9KmpOUrD46sSsSZ60kVpeXcqH0l3ohOsXB\nj5UTkAp3FhLlJpTM+Fu5JIehorRC769C2/OoFfIOEa8z8cjCMmmMelO6n0t4\n9u+wgo/kbpYZ2eoEmtjdjUrnSJCE00xrxP1/3hscphvQ7iHXPXI3gnfTkiVq\nS9nEief/+ZVXWhfzRSaLsW0mp46oHDCxlRVPlAQdSQS5M5y4L8bh7n1qj6Ij\nhVfsY5f9+MiReEYxJFezBpDlFJxxINEcdjmfXWwMN1rftS59J4lJwaJM3+iE\ndwwT\r\n=vr/m\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=14.2.0"},"gitHead":"c82029171299d6de912bdd1463d21e2bd0b8cc04","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint lib test && deplint","test":"npm run lint && npm run test:unit","build":"npm run clean && tsc -p tsconfig.build.json","clean":"rimraf build","prepack":"npm run build","lint:fix":"balena-lint --fix lib test","test:unit":"jest"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"versionist":{"publishedAt":"2021-12-25T02:30:35.683Z"},"_npmVersion":"6.14.15","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --fix"]},"_nodeVersion":"14.17.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.4.0","@balena/jellyfish-logger":"^4.0.7"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^27.4.5","sinon":"^12.0.1","deplint":"^1.1.3","ts-jest":"^27.1.2","typedoc":"^0.22.10","typescript":"^4.5.4","@types/jest":"^27.0.3","lint-staged":"^12.1.4","@balena/lint":"^6.2.0","@types/sinon":"^10.0.6","@types/semver":"^7.3.9","simple-git-hooks":"^2.7.0","@types/json-schema":"~6.0.1","@balena/jellyfish-types":"^2.0.0","@balena/jellyfish-config":"^2.0.2"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.2.11_1640399578253_0.045025642905315744","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"3.0.0-joshbwlng-clean-types-2ba256ccab19686c49f8dc8619c9952a1972e7e1":{"name":"@balena/jellyfish-plugin-base","version":"3.0.0-joshbwlng-clean-types-2ba256ccab19686c49f8dc8619c9952a1972e7e1","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"Apache-2.0","_id":"@balena/jellyfish-plugin-base@3.0.0-joshbwlng-clean-types-2ba256ccab19686c49f8dc8619c9952a1972e7e1","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"a519b5dcff2bfb2ba04acd66605909a95f76bf28","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-3.0.0-joshbwlng-clean-types-2ba256ccab19686c49f8dc8619c9952a1972e7e1.tgz","fileCount":31,"integrity":"sha512-075xpgwGpvWJ5EJcFdPKRxq15Czhzoy6c4GHbyTvcR1rGJ/ZVRQYy/2WQZU+BP/LgfFeEYcSnsQ0Sj7+TIT+EQ==","signatures":[{"sig":"MEUCIQCCrx8d1P1DhP7T6WLYpMugMClva9yW5PhIND9Y/KuI5QIgegRPU50TXx/DPU4BnzYaB8zo6TjEy/MBK4T/r6QYrPI=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":100071,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJhybUxCRA9TVsSAnZWagAA/hwQAIGsppraTCKElFTsYXCn\n8lNPiCDBv9u48MVbV5L6HhGIMzIP3FLlOWtEKe2gezgjXbMYFPYJZhHuaDEX\n3z6dQ8Wq5ethzSJ/Vp/MywNHhRjn8RWxsH5+Wm+GZ2AVupKtOOPQMYgUpiwL\nRNEQod+cbHsJ3w6lBD9RVdwOin0KI7M0vbC1YE/8hmQur9GETHZ69MebeJtc\nw6T75Yy+r5KiO+4p9QUEzzM9c6OI202YjJVKw3QAC4mjhCxn4jtKDfRVXt+d\nmOgi9GbI5UndQBnVxoalbrM2489sZIPOhuOPDRmMvtfzQCJqy0QYxyUMaJCU\ndBawhF8qg/+9YGs0hTQQ6A7zYnXng+oFvgo/LOhYuM4lpDMUgTdxZFNp7qsy\nl8+1MaRBBvwUe6aHpx41PmOhYqZ1U6XIU94OjJ3X25GRXDpeNqiT9JalQVKG\nbhYngieLPpLZUHzOD65rKRwSk6Tn6HsgN0bDmiaAacB8vGhPli+mJLQccngy\nuS7c9HizDHqRWxIzKYLHBGFdMciAuOBpaOYRKnuU27rdfV0gFuRg6VOPd84O\nwIoBYXfC49PWl1G2lXGRuEd+HGdKpg6oGXOLNhffrRXtFkNOHMM/OqDSqxvd\n3NuwIq+YBuYILVnywaYkt1FhfQg7FAaX/nfgfoQWH+P96MiVphWCzVah1s8m\nAICH\r\n=Ld42\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\n[![Publish Documentation](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml/badge.svg)](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml)\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=14.2.0"},"gitHead":"2ba256ccab19686c49f8dc8619c9952a1972e7e1","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint lib test && deplint","test":"npm run lint && npm run test:unit","build":"npm run clean && tsc -p tsconfig.build.json","clean":"rimraf build","prepack":"npm run build","lint:fix":"balena-lint --fix lib test","test:unit":"jest"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"versionist":{"publishedAt":"2021-12-27T12:42:04.415Z"},"_npmVersion":"6.14.15","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --fix"]},"_nodeVersion":"14.17.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.4.0","@balena/jellyfish-logger":"^4.0.7"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^27.4.5","sinon":"^12.0.1","deplint":"^1.1.3","ts-jest":"^27.1.2","typedoc":"^0.22.10","typescript":"^4.5.4","@types/jest":"^27.0.3","lint-staged":"^12.1.4","@balena/lint":"^6.2.0","@types/sinon":"^10.0.6","@types/semver":"^7.3.9","simple-git-hooks":"^2.7.0","@types/json-schema":"~6.0.1","@balena/jellyfish-types":"^2.0.0","@balena/jellyfish-config":"^2.0.2"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_3.0.0-joshbwlng-clean-types-2ba256ccab19686c49f8dc8619c9952a1972e7e1_1640609073320_0.9461637605000577","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"3.0.0-joshbwlng-clean-types-731aaf3ed8509295d70bae30623aa92118a0820d":{"name":"@balena/jellyfish-plugin-base","version":"3.0.0-joshbwlng-clean-types-731aaf3ed8509295d70bae30623aa92118a0820d","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"Apache-2.0","_id":"@balena/jellyfish-plugin-base@3.0.0-joshbwlng-clean-types-731aaf3ed8509295d70bae30623aa92118a0820d","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"eddc68a8f40570ceda0b641a1a854883c3b2a53e","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-3.0.0-joshbwlng-clean-types-731aaf3ed8509295d70bae30623aa92118a0820d.tgz","fileCount":31,"integrity":"sha512-CNWnnmK5sXCuCsfGZKEBTBoh0vwmn4cJQzVWfSzpxAOe5a75kISwfBm/W6j/omgzU8s+72gvMUKhCUY9RK827g==","signatures":[{"sig":"MEQCIGL9XFT99gTggDzLRDhXQwOH6f0VaPoT1jF4lj6MimfvAiBsZl2CY07BsMm5XoXhfdNC6K9MtiUJD/Q7FkWe7ySinA==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":100066,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJhzB8DCRA9TVsSAnZWagAAjsUP/0Kpiv7TTRBeMhIQ1ZGO\nG1zUsE97fhZ2O5XjaFRddc9D9+N80gHu7YtwxfqKzK7nDu7KKKMWf79zgLFF\nnZPMdk/P6+E1zR4vX8+xzyxx73CIN6Dipp1HMkR3zc9M+lCkHRuPw9ruNdnr\nRiSw7MReKZNT3+koWqWjnN2xbUBeTyWE1gXhaN1IrMMViMx/VGCDNZFAuXj/\n1hw8s8qDmzUTGnGFPV6EbXg2oqNKGeQnoC3OlpPTiFMTy02+oJ02d8NNJK2j\n5kipD+2pQGLceNvQ7ypHw/gcESMy3/e9BY8pwCLmdKMoGu1wK9PXXSvtmThY\nXli9hAzWRvcPaVCDwY6gVPvCrrjCw2dxwn/v/fFtXcEt7mCp4Yp2VkY4h4P1\n1+tQIknqgGWbe3C5RVwFywXTuP2RRN2jguUQkFYIzp2jpTn4WXlXSia2RJvQ\nyRPWOJ/y1vHjH1ixFVz8RB39Oqqkk24pRNaaLgLG+zHxSbBmrA/QDQXUvl5p\nwEBj5BvUNFy12xa2J8W45DTO7XHhQ3Rx3nZHHj30Su49OU49X+P7uNrg/txJ\n/tBXTdV+Sm0b4dUbVSNSmuk+vjTZ5AsjuQy4yZBF38V6MnPBZ8aUiBoKrFVD\nc5wC8+kFdk12OgTLCBNIMB1iq1jeCRAldgFNNd7BDqBZPUa5Mc0fzUBBE6xF\nvovy\r\n=2eGe\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\n[![Publish Documentation](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml/badge.svg)](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml)\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=14.2.0"},"gitHead":"731aaf3ed8509295d70bae30623aa92118a0820d","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint lib test && deplint","test":"npm run lint && npm run test:unit","build":"npm run clean && tsc -p tsconfig.build.json","clean":"rimraf build","prepack":"npm run build","lint:fix":"balena-lint --fix lib test","test:unit":"jest"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"versionist":{"publishedAt":"2021-12-29T08:38:07.159Z"},"_npmVersion":"6.14.15","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --fix"]},"_nodeVersion":"14.17.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.4.0","@balena/jellyfish-logger":"^4.0.7"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^27.4.5","sinon":"^12.0.1","deplint":"^1.1.3","ts-jest":"^27.1.2","typedoc":"^0.22.10","typescript":"^4.5.4","@types/jest":"^27.0.3","lint-staged":"^12.1.4","@balena/lint":"^6.2.0","@types/sinon":"^10.0.6","@types/semver":"^7.3.9","simple-git-hooks":"^2.7.0","@types/json-schema":"~6.0.1","@balena/jellyfish-types":"^2.0.0","@balena/jellyfish-config":"^2.0.2"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_3.0.0-joshbwlng-clean-types-731aaf3ed8509295d70bae30623aa92118a0820d_1640767235088_0.46846274074538985","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.2.12-renovate-internal-patch-fb62357aa6e7bc1a45fff7e5885a13d654b94761":{"name":"@balena/jellyfish-plugin-base","version":"2.2.12-renovate-internal-patch-fb62357aa6e7bc1a45fff7e5885a13d654b94761","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"Apache-2.0","_id":"@balena/jellyfish-plugin-base@2.2.12-renovate-internal-patch-fb62357aa6e7bc1a45fff7e5885a13d654b94761","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"9d207f0be6a6cd0a7e947e1163d4b9335804756d","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.2.12-renovate-internal-patch-fb62357aa6e7bc1a45fff7e5885a13d654b94761.tgz","fileCount":31,"integrity":"sha512-sRYNx/VMl3QLQZbuGVNLBo5xksRdulPujBMHynvCX/kLyqk+D8s5NkGoGQKwVxgyCpEE72UOYTfXCFyzO2NK0w==","signatures":[{"sig":"MEUCICYH3K//uZykyasUSlDvc4a0la+9Lr45sEohRWiR/MhIAiEApq/0NayIh5vRyogbvyZACOzeK1CpjGlufFstdqfcedM=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":99888,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJhziY7CRA9TVsSAnZWagAAlA0P/iYadqcLFugkCO10AKTb\nOaef9cVflGv2pTE0JLGa8WjMkyFBl1pEJTTWdf49rxGFgq60A2PHiIC/deKE\nZpKm2NlB8VzkPg/kEfgVUbHOIupreKWxKpYf4+hNk4/YzvCzIrALaBpQUN3D\nVy9F6rtCv5rbEYeE+U+SvOJ+aJoZ132IziutPRkOsMMuhywjGecFuLRsj0Bi\nkBEKWRV60b6SKPv9CCPZB3brLKg+8AO6+R2a+B1Q/9qoOhbqnvqtO/x5Zt7K\nAFjqjNUCsflRdGI7ckp/Y9mhM6iuko8QUAoHYJqgiInyC5Y+KqJfrPPhQBuK\nWMXw06a5hCrtcTY2AgTkqSsdSIzIhImy1RENZx3U0Plb02MARhgK1XSmIriK\n8A0IxONyTgC1StScNf2zekzUXpEfDSwQpISM831m1pT/wFfLkLOHpErRvgtd\nAwzsLbm0s/jSyuxGiEOJx22dnEIzhddp9O6/CuncZs56Oq8gM9waJCGPzb1q\nBNpY/mPo3fwSfaZmaSENnfGvs9r0GHtlVcOA0fkaJ/sdKM0SN9Et6AoO4jJL\nqca27SSqOue6CYoi5nwzAWw2W00S9ZUeJufZrYvwYogcKz2mNzE2qNdGaSuc\nDoeX4gRgKk2VJS9Y5R01kqfWkaVEdnNJeypWHB8e/1pnyDIjwbisqQoUVMvX\nefp+\r\n=TZD9\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\n[![Publish Documentation](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml/badge.svg)](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml)\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=14.2.0"},"gitHead":"fb62357aa6e7bc1a45fff7e5885a13d654b94761","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint lib test && deplint","test":"npm run lint && npm run test:unit","build":"npm run clean && tsc -p tsconfig.build.json","clean":"rimraf build","prepack":"npm run build","lint:fix":"balena-lint --fix lib test","test:unit":"jest"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"versionist":{"publishedAt":"2021-12-30T21:33:37.926Z"},"_npmVersion":"6.14.15","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --fix"]},"_nodeVersion":"14.17.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.4.0","@balena/jellyfish-logger":"^4.0.7"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^27.4.5","sinon":"^12.0.1","deplint":"^1.1.3","ts-jest":"^27.1.2","typedoc":"^0.22.10","typescript":"^4.5.4","@types/jest":"^27.0.3","lint-staged":"^12.1.4","@balena/lint":"^6.2.0","@types/sinon":"^10.0.6","@types/semver":"^7.3.9","simple-git-hooks":"^2.7.0","@types/json-schema":"~6.0.1","@balena/jellyfish-types":"^2.0.1","@balena/jellyfish-config":"^2.0.2"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.2.12-renovate-internal-patch-fb62357aa6e7bc1a45fff7e5885a13d654b94761_1640900154974_0.6167810949796397","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.2.12":{"name":"@balena/jellyfish-plugin-base","version":"2.2.12","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"Apache-2.0","_id":"@balena/jellyfish-plugin-base@2.2.12","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"0462d3c6d510ae124b758c0ff546209ce95adffe","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.2.12.tgz","fileCount":31,"integrity":"sha512-eXQ9PjzqwruD959yBrLWIm2abf93DcXEy0IFew34Wsfjk2BowK+7fgg/x+mPZluWttbHob/mYLQIsahQnN9xwA==","signatures":[{"sig":"MEUCIQDU0gEiHD/GPA+4wPoiAxxhUX0NECHOsGZDdhav84zGLQIgfnBoO6GORcqJr4ZDzEaxB4mY8YAI8Sk34lfy5iln27E=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":99823,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJhzibqCRA9TVsSAnZWagAAnDEP/1EtJqwNgxL5gOjCD2S/\nQPnz3rnH+gLcrRfmH4K2EkTXIyAnFrXyXFWAYIt+djNo6+bSGd3beIL5OT/b\n6roTBhHwlnlgrUtFi6FTDxBgQ/nNmsTaDsITvjotEsX/dbmRni9enKFk6mNT\nWhWQRPotLORePlBgtPF9GIazeVO19mYz7yJCgjUZla0EuDjUAJcUCkzHNYjC\n6QwPL2VlvOA5muexd82n/PuQVu8f2HGhy7MhKIxux+eS4hiMLkDdBHvmWd94\njXSbL4d6ueGmHqReZxRqUM24QZw8hp4X+prvETuQIw2rY+icVeaY77rg79w6\nbJ1czU5F/TSRRgg8+pXV6bYRyVXfyhar9mfKhY0/EILzkv21R/milotDZ1cn\n8aw16cM40kxvRnSv52tR24ifuTZksOVgzYgm+DYPUfUfU1b2B4JNTXdh+/Wj\nWxthAFEGCYLTLhsv8hJU6ih1afGYbgib6pFSYkse3xC+FrLMb1pGapVeLn1B\nDshYSvbbSGZYfzBHprq6j7AwgHLyiiGe4Q/NaCT2czNhsRVI/2n+VUVre21/\nrbEmegVr95YUMKgQf+Wuk3nqqQsBcB0uBEfqmjOEFazpdp1eOAnw86EU7Dh+\nEoMFp32LwEDWNfWO6dJarhvj7ORVfiIdbP+BHqGoeK45WJaByIAdPp3rZJpC\nOS0V\r\n=r5Kw\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=14.2.0"},"gitHead":"1adda95a98f7dd3faaecaa5cc6a49b84894aa3b7","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint lib test && deplint","test":"npm run lint && npm run test:unit","build":"npm run clean && tsc -p tsconfig.build.json","clean":"rimraf build","prepack":"npm run build","lint:fix":"balena-lint --fix lib test","test:unit":"jest"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"versionist":{"publishedAt":"2021-12-30T21:36:53.340Z"},"_npmVersion":"6.14.15","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --fix"]},"_nodeVersion":"14.17.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.4.0","@balena/jellyfish-logger":"^4.0.7"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^27.4.5","sinon":"^12.0.1","deplint":"^1.1.3","ts-jest":"^27.1.2","typedoc":"^0.22.10","typescript":"^4.5.4","@types/jest":"^27.0.3","lint-staged":"^12.1.4","@balena/lint":"^6.2.0","@types/sinon":"^10.0.6","@types/semver":"^7.3.9","simple-git-hooks":"^2.7.0","@types/json-schema":"~6.0.1","@balena/jellyfish-types":"^2.0.1","@balena/jellyfish-config":"^2.0.2"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.2.12_1640900330042_0.7634057046270126","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.2.13-renovate-internal-patch-fc6dcc658420db5fc3ccc42eb5143ef80a48bef3":{"name":"@balena/jellyfish-plugin-base","version":"2.2.13-renovate-internal-patch-fc6dcc658420db5fc3ccc42eb5143ef80a48bef3","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"Apache-2.0","_id":"@balena/jellyfish-plugin-base@2.2.13-renovate-internal-patch-fc6dcc658420db5fc3ccc42eb5143ef80a48bef3","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"6a0ad7684dd51bca9de604a655feeadd922fa7ce","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.2.13-renovate-internal-patch-fc6dcc658420db5fc3ccc42eb5143ef80a48bef3.tgz","fileCount":31,"integrity":"sha512-YN0gwHjGojj7sfqqKOz33PJBKU1mso2RIFz+errVBmv2RisQ2kSPMjI8Q8/642YusBk3DRebnu8TnnZYSuZgrA==","signatures":[{"sig":"MEYCIQDgCj6WNVIg+H9WOyw61u1endA17jGe9iVoW2sndpMvkQIhAPxYTpCdmhDt1R5ZHGAvMi+Ncg96FrOpYKoN6U7U6r8b","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":99990,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJhz7LwCRA9TVsSAnZWagAAEkQP/0oMZpiSL/s9JyYUNHP3\nIhWhDYuJSXhHYXeajPXhNJHqHTBJOefBcG0KuVrCcJuUTMHgqHZ2GY3C0xM/\nPGQjaL1BWDgcj1vm9+aFhhUSlKW+Chv1iYIsewVDYn9F5nZVF6ceBgdqtfvD\nv1zj7NJ/KIaraX5WZ0k3EBo2T4aXr2xDMj4frAlJOSSefVbhw69H0wnijTy/\nxU79FlrsbwczsiE6HDGvBtMTcXEDxnxqtV7vvzXtOpbJhlKgxWWlmBn1Rkht\npmGdUWtjQY4nP2VE3UO6ATlL0QjLKpGFuNkyEsoTkKKSOvycV7srd9CT8fgf\n91KdJrx+cLTKRx4gqPMlp14EvLrlsTNABFCuqpssmmZ2C5MnHtXswkDBC6FA\nqzgTi30/wMQpUb3+wt7oh8zZZ15rHOCiEi3YS5k88LeK9AqHzOsafyump6Ip\nmVfEjXkqmmOhwrBSHG6yIYKQUfEOW0wPImMC8P2+Yb48qMR6Xv11dUKedm9s\n3bB8YtQE2O8Ej7+lyhUrUtH9aw5MpfoJkgiUpk9KvVvP9WjBfStpsiJXcd3W\nH9JzeuWEsUd5xVXg3BRGFb6gGXMZFsdJheNDpNf5q+WUUpPvjvkX6AAX0+/W\nYNKq9N1aSz1doUj7C3mgB8JMOBff9RqHwEf4U+J5/XNBpzh97GwRpq7QEojm\nWz8a\r\n=RkSK\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\n[![Publish Documentation](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml/badge.svg)](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml)\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=14.2.0"},"gitHead":"fc6dcc658420db5fc3ccc42eb5143ef80a48bef3","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint lib test && deplint","test":"npm run lint && npm run test:unit","build":"npm run clean && tsc -p tsconfig.build.json","clean":"rimraf build","prepack":"npm run build","lint:fix":"balena-lint --fix lib test","test:unit":"jest"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"versionist":{"publishedAt":"2022-01-01T01:45:29.813Z"},"_npmVersion":"6.14.15","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --fix"]},"_nodeVersion":"14.17.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.4.0","@balena/jellyfish-logger":"^4.0.8"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^27.4.5","sinon":"^12.0.1","deplint":"^1.1.3","ts-jest":"^27.1.2","typedoc":"^0.22.10","typescript":"^4.5.4","@types/jest":"^27.0.3","lint-staged":"^12.1.4","@balena/lint":"^6.2.0","@types/sinon":"^10.0.6","@types/semver":"^7.3.9","simple-git-hooks":"^2.7.0","@types/json-schema":"~6.0.1","@balena/jellyfish-types":"^2.0.1","@balena/jellyfish-config":"^2.0.2"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.2.13-renovate-internal-patch-fc6dcc658420db5fc3ccc42eb5143ef80a48bef3_1641001712510_0.4966251448724204","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.2.13-renovate-external-non-major-c435ec6ff097b8fa33c59f8ce6b65103538466d6":{"name":"@balena/jellyfish-plugin-base","version":"2.2.13-renovate-external-non-major-c435ec6ff097b8fa33c59f8ce6b65103538466d6","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"Apache-2.0","_id":"@balena/jellyfish-plugin-base@2.2.13-renovate-external-non-major-c435ec6ff097b8fa33c59f8ce6b65103538466d6","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"e04151ab4c7867c0f5dfead9af5266ee2f01ed5a","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.2.13-renovate-external-non-major-c435ec6ff097b8fa33c59f8ce6b65103538466d6.tgz","fileCount":31,"integrity":"sha512-/xrhi7cCXo3pSX5JbfzABaaUHtZvD/9gOkDrJqqG4p35cMKKA44yLa7wTvKw2HgHsDKm5lgfZ7My+WAOT5nVDw==","signatures":[{"sig":"MEUCIAP6XgCPzEmf9ol+ID7gaEGwm3zA1u/MKr+P/Qrn/Cb/AiEAl4+5J9TEMGREEyMTckTZSacbUrKXOibKU6ptSxviNC8=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":99982,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJhz7MNCRA9TVsSAnZWagAAQxcQAKNOnzDaVE1qhpkoOAuJ\n+P8kJng2CYTH+qLeq2Qcm4PAnwyCcivFqF1WByKszWhEp0ibJ7MvW2T4+zOq\nVDJ2Z3ZiDt66fbPIXRu/mBlJ4ralmWNZ4BfAWVOqL4XiwuefCle7x6TlhEma\nmsOxDCXq9uMcrKmpHNPvpppkXNvjAFOFgR05vJ0ZSLGH2Qpx80sFGecjt4eq\njQ81sk8lG3flDmGLChkEUlNUw8xAiackfAy42ycla+M+nLzgCZNDzMU9LvDK\njhgOyqOYgD8i44yB2rLfANC8FTGKH0t7wskdCZhqA5ZpdxOi6E0i4x+Rl2jr\ny5ebRfq0aJjfTTQwOsdYRsAc4vaVtUZIvOTxhXJ/1KNG2ivm4mVsZq5IWhSs\nigcS4lZo2B5RIGYVFx30T+xAf3ru96tGJeXp9EjHzSnC9RrvLgfyVhsSgNeD\nci50bFaDeSLYupOP6Mi0xiULOHr85x8eBnkWkkmJNbbU4Ba5JmoTpfT7tmot\nMyPaNi/LnDm4rV/YJyqfjxciE4aam5i8dcyMGSSJNDBAt5/o6hbJFledzZhG\nAbx2BVb5Ay42l/r1zu8n7A3Z003HhsZncn37UurZw7NKAJdVV0/suwEgZupj\nPxT7fQI+VGclrsyRrTKYxPYe6DfgLugsgs8Cs7mpXs7Pf+0gQhJRCbFnR2uo\naFde\r\n=0GSj\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\n[![Publish Documentation](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml/badge.svg)](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml)\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=14.2.0"},"gitHead":"c435ec6ff097b8fa33c59f8ce6b65103538466d6","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint lib test && deplint","test":"npm run lint && npm run test:unit","build":"npm run clean && tsc -p tsconfig.build.json","clean":"rimraf build","prepack":"npm run build","lint:fix":"balena-lint --fix lib test","test:unit":"jest"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"versionist":{"publishedAt":"2022-01-01T01:46:20.072Z"},"_npmVersion":"6.14.15","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --fix"]},"_nodeVersion":"14.17.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.4.0","@balena/jellyfish-logger":"^4.0.7"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^27.4.5","sinon":"^12.0.1","deplint":"^1.1.3","ts-jest":"^27.1.2","typedoc":"^0.22.10","typescript":"^4.5.4","@types/jest":"^27.4.0","lint-staged":"^12.1.4","@balena/lint":"^6.2.0","@types/sinon":"^10.0.6","@types/semver":"^7.3.9","simple-git-hooks":"^2.7.0","@types/json-schema":"~6.0.1","@balena/jellyfish-types":"^2.0.1","@balena/jellyfish-config":"^2.0.2"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.2.13-renovate-external-non-major-c435ec6ff097b8fa33c59f8ce6b65103538466d6_1641001741185_0.831675243201967","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.2.13":{"name":"@balena/jellyfish-plugin-base","version":"2.2.13","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"Apache-2.0","_id":"@balena/jellyfish-plugin-base@2.2.13","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"d255a09f50d17c9311789993b51daee7661618bf","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.2.13.tgz","fileCount":31,"integrity":"sha512-javMDUC+63lKmXdVBCvXDI5oJDY0LEPNN7LTxaJmTk+LBc6zBTvM0Nuik3Qx448JKvCk4cCtsAlQpFWW/LPiEA==","signatures":[{"sig":"MEUCIC5MfGHyDIAAKxX438IRNQBtRlzve9eIOppJ3twF0nYcAiEAyxaHxe14ICZns/Qz+3J6MoFdXLrPzR1b2bU04QnWrtk=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":99925,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJhz7PBCRA9TVsSAnZWagAAM5sP/10dzgkY7OTHG3DBqDzZ\nu2Zb6OMyxukkgtz7A0AdbSXl93yUOLGejlLJINry9tW8l574fxUCozK4sIFJ\n9IMpu82aWRttLZtibVJ31LLfF2gWUS36lE2ME0pNoKKercfJduc8v0GzW2K0\noKHlOrmb8OXODklJ7KZM6jFRDkVnsmxYuyy9JkWfLpACakuXIDdPxC2WxBXu\nlXmdLjH/v9iRq1CZ9wecEMZV2/3ZdYbMn/pr1noaK43pSclnFQ6VHme/Myt+\nc74oKZ5l4vtWgdgH4o2r3fR28n0HpsrQn5KpKyUPj7XM5qB2UagY1erCc2X6\nWN63Del2WH+SPZH4t3JrAcx4J1matqEWz34sPjNSAU8mWR2rpD8aMNP/fZr1\nwWmJduRav6vn4kKOp3B1OJ4zqwQJPGSMFIK5jMSVo+YFjbD+Up6BZtJcNxeV\nnTe4eocJWGWjDsHkYMkBfiVUvIvRXAHhyTOYof9Bxzpg2AjVAWZ8pbDayTHy\nWHIc8D6iDs5DOW9bVKblvFvNFmuL52GdQtemUeFptRLE2veJGBaQjG+irty9\nrTndPeem2TnS91uBUryRQcxvBPoO29OWmsInKtNIgc5mYjgdzPMpvHOE37sP\n4c2BWNeConm+aUlxxEupE6iLv+zaja726vGEk2gpoIAMk6owKkvis6Qlvx7I\nND7D\r\n=lYb8\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=14.2.0"},"gitHead":"b0b6ae524004f2e03fe7727b299643ff4a4a1d05","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint lib test && deplint","test":"npm run lint && npm run test:unit","build":"npm run clean && tsc -p tsconfig.build.json","clean":"rimraf build","prepack":"npm run build","lint:fix":"balena-lint --fix lib test","test:unit":"jest"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"versionist":{"publishedAt":"2022-01-01T01:49:59.029Z"},"_npmVersion":"6.14.15","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --fix"]},"_nodeVersion":"14.17.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.4.0","@balena/jellyfish-logger":"^4.0.8"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^27.4.5","sinon":"^12.0.1","deplint":"^1.1.3","ts-jest":"^27.1.2","typedoc":"^0.22.10","typescript":"^4.5.4","@types/jest":"^27.0.3","lint-staged":"^12.1.4","@balena/lint":"^6.2.0","@types/sinon":"^10.0.6","@types/semver":"^7.3.9","simple-git-hooks":"^2.7.0","@types/json-schema":"~6.0.1","@balena/jellyfish-types":"^2.0.1","@balena/jellyfish-config":"^2.0.2"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.2.13_1641001921038_0.06410681515850247","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.2.14-renovate-external-non-major-e211e2080f9d0f9d96d16d3d64a7919e89c713d4":{"name":"@balena/jellyfish-plugin-base","version":"2.2.14-renovate-external-non-major-e211e2080f9d0f9d96d16d3d64a7919e89c713d4","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"Apache-2.0","_id":"@balena/jellyfish-plugin-base@2.2.14-renovate-external-non-major-e211e2080f9d0f9d96d16d3d64a7919e89c713d4","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"8e95d94314f16738675a16a182d5d48960a5d7a8","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.2.14-renovate-external-non-major-e211e2080f9d0f9d96d16d3d64a7919e89c713d4.tgz","fileCount":31,"integrity":"sha512-eRFigp4tpfwqFrtwUmkDV3rPHANCpr3avSsRz/CxXrEOnW4uOM/oWutKAhjZy56eJ3wXa9SwLzjSmasgp5WJ/w==","signatures":[{"sig":"MEUCIDeYr3cbkmRYPVLtQ5GMQcomQAB2O+nip9+akZMYI1rLAiEA+o/ztmo9+6CjaVcOaijP4Da65pu35pobCQfiU2MtNOY=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":100084,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJhz7ROCRA9TVsSAnZWagAApwoQAIkyBweYC4Ow/ZoVxLd+\n8NlwFDOOITjos9oPLKYmZYoR+9TXyVSSzOWc/dCxQUlirBEi0KzI0gpxf4ob\nVVvZXNYWmd8vICpPf3Z47sYA0Gj8Dk+w2GXX/3ipZFQGHAHoFvIEkqokWyb1\nqZOeBOwIs3PO/Xc11JlZWdWpMob3q33bzWMy/EDCldXSdLDFIm0J/w344rRm\nUB0OMbScDEr/ogxGCePZCzrBLF1QWSB5ciNG9hpdvvKCrXtiwNg/v00GuiHb\n84wcLswSdAfu13eUmDAo94nn1vWfMCIYHscYlY1nVbYJlJ3Xq3FE8rrfkNCs\ng6QkyIabkfmas2B6Dp2yB/cFkjmCbyOiOUZMriMgMCspQTTe5xB80T586GB2\n1TdH3sK7hz+LRCqQZaZ/7XZ7KkYhA5AvrllwrcFuFELnBXxx1w9mKvEcvCi4\nUi6JpAVcBXhEy8mYVmXoTUOqS5VGrJoR9b7+sDnhIWWiGRBkYb0Z9N7kmDZi\nuegi+1VbMh8+UAO00duWUK0JnVBnt64kFzJf8KXUOk13Gf3qNXI2V/kn8Trk\nnEsdD2A+HGQbE96FfM3k90d7D93bQcUOUtcNp/wsJXf8moHNEj/ZVc0gJnGO\nwz7crUx6w8UoIIfhXfjBtR7qV8V7DHZKX8R+hD1dV2fe2XSoZ9oQzUGLaXvg\nc/ZU\r\n=8Nbv\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\n[![Publish Documentation](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml/badge.svg)](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml)\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=14.2.0"},"gitHead":"e211e2080f9d0f9d96d16d3d64a7919e89c713d4","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint lib test && deplint","test":"npm run lint && npm run test:unit","build":"npm run clean && tsc -p tsconfig.build.json","clean":"rimraf build","prepack":"npm run build","lint:fix":"balena-lint --fix lib test","test:unit":"jest"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"versionist":{"publishedAt":"2022-01-01T01:51:41.051Z"},"_npmVersion":"6.14.15","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --fix"]},"_nodeVersion":"14.17.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.4.0","@balena/jellyfish-logger":"^4.0.8"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^27.4.5","sinon":"^12.0.1","deplint":"^1.1.3","ts-jest":"^27.1.2","typedoc":"^0.22.10","typescript":"^4.5.4","@types/jest":"^27.4.0","lint-staged":"^12.1.4","@balena/lint":"^6.2.0","@types/sinon":"^10.0.6","@types/semver":"^7.3.9","simple-git-hooks":"^2.7.0","@types/json-schema":"~6.0.1","@balena/jellyfish-types":"^2.0.1","@balena/jellyfish-config":"^2.0.2"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.2.14-renovate-external-non-major-e211e2080f9d0f9d96d16d3d64a7919e89c713d4_1641002062379_0.1100556457149231","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.2.14-renovate-internal-patch-9f6d55b4f651a35eeb2636547afa49e80640d818":{"name":"@balena/jellyfish-plugin-base","version":"2.2.14-renovate-internal-patch-9f6d55b4f651a35eeb2636547afa49e80640d818","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"Apache-2.0","_id":"@balena/jellyfish-plugin-base@2.2.14-renovate-internal-patch-9f6d55b4f651a35eeb2636547afa49e80640d818","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"a032ec649cda491227ad55bfa9ed8657c7bd0076","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.2.14-renovate-internal-patch-9f6d55b4f651a35eeb2636547afa49e80640d818.tgz","fileCount":31,"integrity":"sha512-nKBhStnQ11FF889N19Ly4YjXBEt7r3zu1tfEiuquLDe4YRpKAKs1Q4q+M4l4R1bh7GTDJ2NUNkG7Nf4GT5Iimg==","signatures":[{"sig":"MEYCIQDaETmIpAXy6GtCyZ7LV5H2IwUPmcHkjeUx4D7uCGsP+QIhAKtvOeT1+FDb9uHd0D/n9NUSGbQii9rldcBMSo6jcSap","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":100092,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJhz81gCRA9TVsSAnZWagAAxTQP/1Nnsd7z218uy65BOtZK\ngOES6JN+Wxmv3HzQP/uAKI+ZTX5xT48VjQ2+5pPEe8lZphp+Tg5XstoFReIt\nFFVsqFpqsrme54frDY2ka3cvvk/TBlsJ6jNwD8zRkxy91SLVpiZy2hHB1orx\na+HXHWPk4NZpxzTwE1RIFxGCor1v3cChQO3+Z4cijoaQn/NXBrOc788QHA1w\nb4ryPJ1eO1TscEtiomUykrRvz8w+jX///8SKBKPSqQMn0GAs6nq9ik3g/m2j\nYuLsiy+O0dFzesAbukBxg7bVrFebhc45IP8qASlA0Ug+8oCAET73pFJZ8Xxd\nx1Agmvw11ohGW0P4IQbCXzTE8PkelYfvwUe4uz/Z0UdOU4sNFGEx1bHSF+V9\nL1cm5CW/pmnWEsemqRZhlNdcb9oBdXRU9nKBJEAggjd1iZzRmjtKlulg4XQo\nm9Wqhw3x6Qf0GcCM5Yrz6MROIa3M++CzzE5GAa5q5DHohGWaetb9WxBVtl4m\nM/WTIBJsSZf2MI1Na2YTUFtxhmQhox1yd1Z1X3w4lPz8HPZTsHXTCw9QM1YC\n2Qi5maLNKvNbx7NUoL8K/LG9Z6lMFBsuOGQ/VBelQGkY47Z6AKdr0r0sGnFc\nxVKkSKKumUf8U9RTVbw68+/P0TQIbl09iKP8bbvsjqEqnl2mNiiRtsPQT2Kf\n3DrJ\r\n=ABdq\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\n[![Publish Documentation](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml/badge.svg)](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml)\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=14.2.0"},"gitHead":"9f6d55b4f651a35eeb2636547afa49e80640d818","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint lib test && deplint","test":"npm run lint && npm run test:unit","build":"npm run clean && tsc -p tsconfig.build.json","clean":"rimraf build","prepack":"npm run build","lint:fix":"balena-lint --fix lib test","test:unit":"jest"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"versionist":{"publishedAt":"2022-01-01T03:37:57.030Z"},"_npmVersion":"6.14.15","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --fix"]},"_nodeVersion":"14.17.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.4.0","@balena/jellyfish-logger":"^4.0.9"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^27.4.5","sinon":"^12.0.1","deplint":"^1.1.3","ts-jest":"^27.1.2","typedoc":"^0.22.10","typescript":"^4.5.4","@types/jest":"^27.0.3","lint-staged":"^12.1.4","@balena/lint":"^6.2.0","@types/sinon":"^10.0.6","@types/semver":"^7.3.9","simple-git-hooks":"^2.7.0","@types/json-schema":"~6.0.1","@balena/jellyfish-types":"^2.0.1","@balena/jellyfish-config":"^2.0.2"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.2.14-renovate-internal-patch-9f6d55b4f651a35eeb2636547afa49e80640d818_1641008479897_0.022741219427903525","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.2.14":{"name":"@balena/jellyfish-plugin-base","version":"2.2.14","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"Apache-2.0","_id":"@balena/jellyfish-plugin-base@2.2.14","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"9aa2307f62f1917d1d87473b486a5f7fd8e20631","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.2.14.tgz","fileCount":31,"integrity":"sha512-muE04aSHR0i87E/BSKQOZFhV8fRtgfJ9NVOoMAwcesoW9I3ATnOeKI8KhQUYZ6S8rMkiF2VTVrRGfwgw254eeQ==","signatures":[{"sig":"MEYCIQD0JLiBm0HHriuc52YvRJOaEJEymyWNx7zme3TxrjqcPQIhAI+ZHHNVGGbvjoBI4T0MU3PKdQZW64NywI5u526hmLeg","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":100027,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJhz844CRA9TVsSAnZWagAA3icP/2F5psyZHcl9eX3PBlEt\nYYkXvsQ+wvyJ6X5X4Qw0jOdOqBHAwai52bTY2k24cfcGjrRqmi23fyBQWjYO\nVo7Rk3yrAf6eeQr9Cytfj5Z8qS7LLR/cQxorawmquUvVVNdrgmVuXf7ehb0V\nS3vEatPbCAcH1vircGBqV6+J73UN81S8Z7H7X1rcfkTjpJr/leHBNeJ1VMT5\nN0BPZyaR3G0e8d/1mpFtYXkrxYCaVVJFC663KPujVSj4pyv/p0Rs2+D+Vx34\nuMROctcHdbvm0gLIwg0LQi2dNuL2QRpVuY7MyUgoNozZaiEYzuXwYY/TVDSx\n4D9b92d2HWj1ben9IQajwbHe21a/Idn8xq3o13z8XCyndTn2vGUc0Nb96Ifm\no8FW+H2YX53xQjtQw5eQO09Q71U/T7NfQt//d6LLRYTznmvB4mMgN265pDw2\nWEXhmJUIa0CPmBvaGjbPJ641tbPE5Og0ewXL5KEFxlIdV0awh4VuBf17c6he\n3J6MWT789VGMcpCou8ut9NUJJDHPDviF/yrM2VvVw9xrQ5wkVyv+wG2S3A5I\nKdKw3MzMBEZ5Lz0IVDcqt1ImA7JnJVyl0mbmixJfFjvnh2bS6sbBQodpDNOl\nKixkWFGCODzgkj3lq8lzvXhlRjD/6F2fOKqDdUX2wNLtrPD/Jk4EZx/GjkVb\nJD9u\r\n=viQQ\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=14.2.0"},"gitHead":"b1b49f788bfeaac0f4369cf31a1be0d62faa07c4","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint lib test && deplint","test":"npm run lint && npm run test:unit","build":"npm run clean && tsc -p tsconfig.build.json","clean":"rimraf build","prepack":"npm run build","lint:fix":"balena-lint --fix lib test","test:unit":"jest"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"versionist":{"publishedAt":"2022-01-01T03:43:09.588Z"},"_npmVersion":"6.14.15","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --fix"]},"_nodeVersion":"14.17.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.4.0","@balena/jellyfish-logger":"^4.0.9"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^27.4.5","sinon":"^12.0.1","deplint":"^1.1.3","ts-jest":"^27.1.2","typedoc":"^0.22.10","typescript":"^4.5.4","@types/jest":"^27.0.3","lint-staged":"^12.1.4","@balena/lint":"^6.2.0","@types/sinon":"^10.0.6","@types/semver":"^7.3.9","simple-git-hooks":"^2.7.0","@types/json-schema":"~6.0.1","@balena/jellyfish-types":"^2.0.1","@balena/jellyfish-config":"^2.0.2"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.2.14_1641008696453_0.4869155417492439","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.2.15-renovate-external-non-major-3c59d2f9a4447609e0d4787cdb01ad551df4cf16":{"name":"@balena/jellyfish-plugin-base","version":"2.2.15-renovate-external-non-major-3c59d2f9a4447609e0d4787cdb01ad551df4cf16","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"Apache-2.0","_id":"@balena/jellyfish-plugin-base@2.2.15-renovate-external-non-major-3c59d2f9a4447609e0d4787cdb01ad551df4cf16","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"172580be3ba76e56caff1c32e9d1a255d100ce20","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.2.15-renovate-external-non-major-3c59d2f9a4447609e0d4787cdb01ad551df4cf16.tgz","fileCount":31,"integrity":"sha512-1u0MFU0oP7YibehVDNmi/S6cv794MPDRSqPzFA80wazZ2ZAxbSeFLzxR6+7Bm1f79dxxTt/5W+lhXZ58kYinlA==","signatures":[{"sig":"MEUCIAfNPRQhBIgViTIvUmi+lBHPa02B3OCT87fvdSD+6mT5AiEA6z/q91xQXlPVpEUMmOJKnHBHN/hC2nMloDMRq3aMjpU=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":100186,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJhz89GCRA9TVsSAnZWagAARgIP/Rq8abG/5IKY+fFnSl9f\nWJ/HEtkFmh+5gQtJgCc4sgHbgKXHW79ziFnN2L++k0xVry5DhOn88WBG7Z5g\nVJxn/dKM1JUsthV3txLvMC6f+dXoWhUj7m0ImfS38neY5DOiAdjYiTvxsBra\nRy6tAgw9HycbjTaT9VH0qimNzwmFZ5rHkXKflnABymcf33p8vivMv9YM5bGP\n6f7QHXXLcIIidsPS7BB8vgUR1QOyS0/Lt20YWvtomwBzJegDaTxxRGCSDL41\nK7gMxhryqU2OHp1lmTzUQxjn7zFnV+Y/KM9h9SdcaztoCb1PZfYd+Y4ixUas\necNyOTn+p5ldkqrXvgngwkAgKaCbfc/+VpXL8xBL+S+tDBPweqH7x+Yalm0F\nekBaR87YHJjUsRh7T2vA6YU4s/yDI06nF2KgEUcRZvOf9IugGbrkw0//uiYz\nsVPHlkMxzC8Myb4884Uq0wIHhWCjH1nPr41kU2onAm8wNHrA3rNofaSrjAYH\nd2RtY85jEMhHfXH4c6ow3sBih5RoDbtIfuj7Y/LzlqDFhk5DK2Bx2lRHFM+x\n7PLj1D/M1x6GlhVfvjXbg4ZxMMvBWhs8FIUt/zqlh5XxCAgyNv03E4pRQBwC\nduueGSJmGpGZlgoLWy+QC63nlrvozCuensz/Jwkyk+6ICAA1/Dkh6qgy6v9O\nimsf\r\n=mNCR\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\n[![Publish Documentation](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml/badge.svg)](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml)\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=14.2.0"},"gitHead":"3c59d2f9a4447609e0d4787cdb01ad551df4cf16","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint lib test && deplint","test":"npm run lint && npm run test:unit","build":"npm run clean && tsc -p tsconfig.build.json","clean":"rimraf build","prepack":"npm run build","lint:fix":"balena-lint --fix lib test","test:unit":"jest"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"versionist":{"publishedAt":"2022-01-01T03:47:00.606Z"},"_npmVersion":"6.14.15","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --fix"]},"_nodeVersion":"14.17.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.4.0","@balena/jellyfish-logger":"^4.0.9"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^27.4.5","sinon":"^12.0.1","deplint":"^1.1.3","ts-jest":"^27.1.2","typedoc":"^0.22.10","typescript":"^4.5.4","@types/jest":"^27.4.0","lint-staged":"^12.1.4","@balena/lint":"^6.2.0","@types/sinon":"^10.0.6","@types/semver":"^7.3.9","simple-git-hooks":"^2.7.0","@types/json-schema":"~6.0.1","@balena/jellyfish-types":"^2.0.1","@balena/jellyfish-config":"^2.0.2"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.2.15-renovate-external-non-major-3c59d2f9a4447609e0d4787cdb01ad551df4cf16_1641008966610_0.7903981596471972","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.2.15":{"name":"@balena/jellyfish-plugin-base","version":"2.2.15","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"Apache-2.0","_id":"@balena/jellyfish-plugin-base@2.2.15","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"ce898b6b8aaf32190a1258297e216adbd75b50b4","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.2.15.tgz","fileCount":31,"integrity":"sha512-JcfyNIYE+ubMN5ep3EBWu0DO3nx10AqkcFCFELGSBA9jMxUWK765fF6kYYMCFBHUvaGCTT2efqUcABq9bPie7A==","signatures":[{"sig":"MEQCIHlBNbYT7bvw8dO8YZI4swQow+SnCXv32fNctpTqg9d1AiAfl/4ajbH0H9+NK6qRNGu5qm2QNmUL5q/YQHFTkt14ng==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":100117,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJhz8/1CRA9TVsSAnZWagAA/9oP/2okVyuu7ZCyQ7u2vKRP\nJOuuWRiLYbj24k0Ux+MNyhkfV69raf76MqJI/KEYarh+HGenAK6XC8tWtlFq\nbuPoaa9PqBUJVmn/O40pMgDr8PJ/u9Y93b+Q2HGw2ohEpTBg4BGyvIREvAHJ\nAtouTZOgnKnDYSkbprTC1zCfqQYRk5D1VfjdMw3Zg1U6/QvCSDZUiYsgJQIE\nj45yQs/MonmgKuSGTDhwPWbbaLextWss7CEjL/ltf40xT8ihcMu5fs0mIfBB\nDhWsQDgzw9SBW6a40jrHVC1nZEgUBa1pP948y4KnvTgijwYHwcFZ5TblcAvN\nvwNFwHnw9vOvpptl6QOxyyUSOZ5N2G1d7JhKQvX/Gds1BU2HoU0zrH8R223f\nK39Bdzp5rcyxggVXreAFwiLoyjFOybPtJWESxc3srSss9qaiuK4+HNRKrDf6\nn9uIE6pFfnyp07Q09yafSgUzyuOQXjWZkSB47143fdHezMrm0QbaFS2PSe1M\nQStnGaEkDAY7i9QecHr+QWQ8cwF/g/NvrVLEDfxJxX9RO/c4xksHTIqnPmLt\n4CgYbssMYWFpZa/XWIm5TvtMPhHHg3NOMmX4XWemljCshnAfMkynsfTzusWz\nssAoeuNnnFEcKK3TppmCuA03JrHtEOrprvHubjk3+dx4zeksCJ6tJlYWyn7Z\newZC\r\n=URyC\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=14.2.0"},"gitHead":"f452cc9bdd72a2bf32ac5f61dcd04ac9d5fac672","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint lib test && deplint","test":"npm run lint && npm run test:unit","build":"npm run clean && tsc -p tsconfig.build.json","clean":"rimraf build","prepack":"npm run build","lint:fix":"balena-lint --fix lib test","test:unit":"jest"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"versionist":{"publishedAt":"2022-01-01T03:50:15.785Z"},"_npmVersion":"6.14.15","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --fix"]},"_nodeVersion":"14.17.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.4.0","@balena/jellyfish-logger":"^4.0.9"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^27.4.5","sinon":"^12.0.1","deplint":"^1.1.3","ts-jest":"^27.1.2","typedoc":"^0.22.10","typescript":"^4.5.4","@types/jest":"^27.4.0","lint-staged":"^12.1.4","@balena/lint":"^6.2.0","@types/sinon":"^10.0.6","@types/semver":"^7.3.9","simple-git-hooks":"^2.7.0","@types/json-schema":"~6.0.1","@balena/jellyfish-types":"^2.0.1","@balena/jellyfish-config":"^2.0.2"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.2.15_1641009141482_0.19076737235240637","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.2.16-renovate-internal-patch-0aec1186d61533bd19032e4a6c6477a290ecadbc":{"name":"@balena/jellyfish-plugin-base","version":"2.2.16-renovate-internal-patch-0aec1186d61533bd19032e4a6c6477a290ecadbc","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"Apache-2.0","_id":"@balena/jellyfish-plugin-base@2.2.16-renovate-internal-patch-0aec1186d61533bd19032e4a6c6477a290ecadbc","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"9ff474843648a057d2e100c4a391d8e74b8864e8","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.2.16-renovate-internal-patch-0aec1186d61533bd19032e4a6c6477a290ecadbc.tgz","fileCount":31,"integrity":"sha512-X2n9kXR9CAgWPl8bHcWERBOVZluGCmgP9wSAHLNWzYXS5Ep9Wc/cL25gkki5K5JyNl2p41w/p3PyCYH7LdM6vQ==","signatures":[{"sig":"MEUCIDXxs/BHpIZUTTp6JcrCyOnVDj+MuBNVswZWXNNMuT6YAiEA99aMeeKCV9TgtJoX6AYejaJOiYtf+CxBzZBGYyqAQVM=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":100254,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJh0i9SCRA9TVsSAnZWagAAvKgP/jbhvTbgb3BhgIsUuKh7\neHNw6zbfms1HvMPtoTxMZzMkTUzhMpenan7Lyo7Jn4Pbrhw8pjmQOtfV4cwN\nIfbzM920KFyKwhoL4M8zlXKtnPhkTSoJ29dpya5TLQ22bbETJOarBdoGzvZk\nIyQubs5ZyevAIhCFtRzlc9hkdbww1xcjUj1XVuSJHy2idvWvls4CJ826Te4g\n5TI/BygmlDiD6XaVA202YpXP6PUV8Jeg4MB5k+fYBkXaFLc9Ib5T1uRJ+b0V\nx3Wf0NOxu+XTd1pk84JCC1VFuNwwpJMUiqWViyj6m1nZ8TdqL5BXz+0ysV48\nYklMZ9kyIcoI/rdwZM9McFRFuoRSSpPVMPGAWvm2Xur3WvDRRKOD5schARLY\nkS/dxL1wsq81BYBK2hKRrHpA+pE5Ulo/6v43IlYF/5zFoS6agpGFwtsL4UoQ\njuG2bgAL6P/zD+Yll3ozevEyL9ghAVtOkRZapHplr2KiLtTlRuQvjOGFP2Ps\nUUYnqzsGRxtyZaPOOKf9mE4YNtkU8P2+TjEaLKprwjAeGpO8YqY0TldKMBXm\n1ITmQQh5p+8VuwIJHEXGQq6P52goHgHgXJ80LL568gzPlW10t79tDimRhz3l\nZH28dDKnD69OoB6B9cf+eqn/zdgxDK7Q6EOfICHDdLERu9rWesNUp8fNvb13\nTcqz\r\n=8YmU\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\n[![Publish Documentation](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml/badge.svg)](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml)\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=14.2.0"},"gitHead":"0aec1186d61533bd19032e4a6c6477a290ecadbc","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint lib test && deplint","test":"npm run lint && npm run test:unit","build":"npm run clean && tsc -p tsconfig.build.json","clean":"rimraf build","prepack":"npm run build","lint:fix":"balena-lint --fix lib test","test:unit":"jest"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"versionist":{"publishedAt":"2022-01-02T22:59:50.576Z"},"_npmVersion":"6.14.15","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --fix"]},"_nodeVersion":"14.17.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.4.0","@balena/jellyfish-logger":"^4.0.10"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^27.4.5","sinon":"^12.0.1","deplint":"^1.1.3","ts-jest":"^27.1.2","typedoc":"^0.22.10","typescript":"^4.5.4","@types/jest":"^27.4.0","lint-staged":"^12.1.4","@balena/lint":"^6.2.0","@types/sinon":"^10.0.6","@types/semver":"^7.3.9","simple-git-hooks":"^2.7.0","@types/json-schema":"~6.0.1","@balena/jellyfish-types":"^2.0.2","@balena/jellyfish-config":"^2.0.2"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.2.16-renovate-internal-patch-0aec1186d61533bd19032e4a6c6477a290ecadbc_1641164626403_0.9493397634972225","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.2.16":{"name":"@balena/jellyfish-plugin-base","version":"2.2.16","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"Apache-2.0","_id":"@balena/jellyfish-plugin-base@2.2.16","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"c8b07e3735e3c4b575c1930985073e6563fb0e76","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.2.16.tgz","fileCount":31,"integrity":"sha512-+tHy9sv7G1Y0voVCgGKY8bVBv7wc2o3AJqCUI45zgCR0ME1G4bGUwe/JGqaovcNAvi+Qv4CqKkClVFbCqevzZg==","signatures":[{"sig":"MEUCIQCJAd26c557PlBStsd95/5aGNB4lk8Ti1oe6kcnsYEmEgIgQtwDGoSGl6M1pQiaWk8O/sliJE9LslstIxDXEjjfy9k=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":100189,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJh0jA7CRA9TVsSAnZWagAAhyoQAJszYjUccWthlcgPwHiD\nJov0tAdL3R0QIMhvbC2svt69omLOqBLuhAAeHWGxrwJ9rpmxpnlyhrIxd9fB\nsWz3tl56xOVR48z57IbSsTZtLTdiQyd86BeINN5VhTSEN7AZBTDMtFwwapgJ\nZ6jnr3J3n6Wuqob6zqSFkN69OaP1pw5hMCRJQZ8pHBJVLfW3rDdrEhEW87UV\nxLbqeSOJcHPm5jGwdn8eWIuUwyWPHlWa7n5kGwM19vQ7Ah8rNIgrFs0HlxmP\nIp51Sz6SEHfRb3YE+15EiKEyfUKBbs7ZuJ/9TXWIsO8k0GQaHwdDsMTIY8XA\nQoROzR4VLIxTiScWMcFqhgX15ppZVxJVFjuLRHn5dNY/mvt27cVcVHXlvKEb\nWG74bpJpjHch4LGEfT4yTo8uxfQswJdA3xANP5FsRn1FfDWM+J4PHpcFUJ6n\nZbZn00Hqf8JeVWreJRCzeRYb6QfTp84fQGCgiysuyGCF/jUnsmvZCjfaDczs\nFyguOm4Da8LtZBVjA756BwvqxlInBdhCHjXmwUIj2ny31VUtYSAGf8kB+ml9\nlMpESArcHXLsCMiJr+1crI3p0bPe6T3fdBBTJ1+9sSh2fnk6Wjs3f7W8NeAP\nYYo4xnsjQhxeltFBkjU2QUPI5X394zSJdlH+qfKifDpPv9uDhHqyuNGdZ/Iv\nWEaE\r\n=fJqH\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=14.2.0"},"gitHead":"163633fec2853a42ccd9bdc1184c9d45169c525f","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint lib test && deplint","test":"npm run lint && npm run test:unit","build":"npm run clean && tsc -p tsconfig.build.json","clean":"rimraf build","prepack":"npm run build","lint:fix":"balena-lint --fix lib test","test:unit":"jest"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"versionist":{"publishedAt":"2022-01-02T23:05:23.077Z"},"_npmVersion":"6.14.15","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --fix"]},"_nodeVersion":"14.17.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.4.0","@balena/jellyfish-logger":"^4.0.10"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^27.4.5","sinon":"^12.0.1","deplint":"^1.1.3","ts-jest":"^27.1.2","typedoc":"^0.22.10","typescript":"^4.5.4","@types/jest":"^27.4.0","lint-staged":"^12.1.4","@balena/lint":"^6.2.0","@types/sinon":"^10.0.6","@types/semver":"^7.3.9","simple-git-hooks":"^2.7.0","@types/json-schema":"~6.0.1","@balena/jellyfish-types":"^2.0.2","@balena/jellyfish-config":"^2.0.2"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.2.16_1641164859841_0.7917910523035223","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.2.17-renovate-external-non-major-483ff79e63903686b59cc9d3fe5c15f219092bf7":{"name":"@balena/jellyfish-plugin-base","version":"2.2.17-renovate-external-non-major-483ff79e63903686b59cc9d3fe5c15f219092bf7","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"Apache-2.0","_id":"@balena/jellyfish-plugin-base@2.2.17-renovate-external-non-major-483ff79e63903686b59cc9d3fe5c15f219092bf7","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"88ec6bbd8f9d11572c1aa2c9adaea7259dc4c251","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.2.17-renovate-external-non-major-483ff79e63903686b59cc9d3fe5c15f219092bf7.tgz","fileCount":31,"integrity":"sha512-BKGsgnHJ2vgQHiqBXMKonEUHpYqVQdAVWz5YPZCetnbllgqkba2Ft/DrwLjvXPH3POSVHn9Jt3AY6TB46wO1YA==","signatures":[{"sig":"MEUCIQDGqqqIlzWIO8LyZqUTBRVKUOrsdIhAMGCuF7AA4Jb4OQIgadAQtxCgKGU+XAQMQsoWNfQAqd1KHCfSob2rqlIedOE=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":100348,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJh0jF/CRA9TVsSAnZWagAAfVQP/A64Vk0lJC9wvud8cQaV\nIUrIId4kdrO3Oy8/JtUmgdofbmbiSIvIPXeDOCH3zeAuh5ZvesMUULDAHv5h\n1CHfpmb2VxaxEB5k7HzQsfy4DddOy/s8UGb861pum+D3ImTzn6hnQoB0l0Ff\n+eRV5teg15a3+6f5xffxJV3bMH43qtUV2Hb+CArVXR85r9Bvzx6wyeIM/sqE\nzkF0zIZ0YXjBd4sN/7F1Rnp9R42H8SWvGuxhd93Orp/kYhjSR3+ws4Rzqbcy\nLmetMiOwQ2H2hY4/7jAChG9veLi8QItuFmFR2WkSBL7d8iY2NdphdivD1Ra6\nQg4Ltuq4zb0eUCbJFQVflnWy1BEU+MiCkrv+obAOX1iJtJbK6kzshOTRk1kE\ntGoYc+bZgfFWEjrayvuDdMiLvMrNbvZLs8jZgFSbizj+J6zihhqRqCgW/Q3f\nGCTzV7yEpjNczv6IRRTR55UsXb1ob/IfJcQQzH6dth0OX4feryeCLBaGJwdL\nWwaAQ7ere2KEerJGi1mflXXL1MqPZSxig1G8S4jp25NSKvWDCmUe6OZpPTbU\nXE2+sCANjo3Rwqh+GSt+4bhjacZYUxM4mwrSYz/ok2GG4A1y7G1wuPN3dY+w\nUfAZAs9wE4DR+IltHXdZMIxyPnxZSUjNui1hDvX1h5TMaz3i3+o27DBu4/mG\nzsXc\r\n=jd3C\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\n[![Publish Documentation](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml/badge.svg)](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml)\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=14.2.0"},"gitHead":"483ff79e63903686b59cc9d3fe5c15f219092bf7","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint lib test && deplint","test":"npm run lint && npm run test:unit","build":"npm run clean && tsc -p tsconfig.build.json","clean":"rimraf build","prepack":"npm run build","lint:fix":"balena-lint --fix lib test","test:unit":"jest"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"versionist":{"publishedAt":"2022-01-02T23:09:28.130Z"},"_npmVersion":"6.14.15","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --fix"]},"_nodeVersion":"14.17.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.4.0","@balena/jellyfish-logger":"^4.0.10"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^27.4.5","sinon":"^12.0.1","deplint":"^1.1.3","ts-jest":"^27.1.2","typedoc":"^0.22.10","typescript":"^4.5.4","@types/jest":"^27.4.0","lint-staged":"^12.1.5","@balena/lint":"^6.2.0","@types/sinon":"^10.0.6","@types/semver":"^7.3.9","simple-git-hooks":"^2.7.0","@types/json-schema":"~6.0.1","@balena/jellyfish-types":"^2.0.2","@balena/jellyfish-config":"^2.0.2"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.2.17-renovate-external-non-major-483ff79e63903686b59cc9d3fe5c15f219092bf7_1641165183631_0.22477488399861345","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.2.17":{"name":"@balena/jellyfish-plugin-base","version":"2.2.17","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"Apache-2.0","_id":"@balena/jellyfish-plugin-base@2.2.17","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"e47d81d958cbc084e32743d80f2d78cdda319c9a","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.2.17.tgz","fileCount":31,"integrity":"sha512-COV3YY7q/rW63PAyDePo2h1SZOIelRqvAgmyOeuGmk3SamcfPC1kZdYiSnL+Posrt1jkteVaQep7sxszoMiMpw==","signatures":[{"sig":"MEQCIG1w3TmZwDfC2kxnMfLLREM8qrPcszFe24BROBnl3a//AiBCiIbt8yKf5IFMtSDcO+Ky+vl7DFV4cEcqfUaldGx3NA==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":100279,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJh0jKjCRA9TVsSAnZWagAAvIcP/06jxA5jHC83xjvsCAzk\nErCTeq3DcvIoBmsyHbXE/nAnrpxeu2xjFqGmtK9VwgAzQLSvfj//CvmtjzHv\nqi56kaZsdR+BYnSP1ofrCveIBdOWnbh+rMSJ9Ed0TaFWGuDAg8HekmETcLHA\nAG9vlwvHxb4iLQgIkmQe7D596stWis4OxJyaZlm61FFBjbL+vkruOlJekUzx\nW6uCbEYpCBITK/QJiQkUhtSIFx9NnyBJFkRz8ze2s9c6rZdXj6j8oemVxoIY\nybxzjy3/ZKHayTSZGzaf8Gv5e8WycK8bXlFgIqObW87VqK+JShaOjzrC8UTk\nr6oiuHPQRtlu0OFmWcaIigObkFkXnmRbTvo0CVcXJGaPOaRkZ0JUrvEWFbf6\nuZZFaz0/kozffFAjVcxLSOjFj7pYoJQIEY44ZLPnOeWGXIltxyI4r5wo0IxT\nkdVASBJ6106U8zcuSHBhA7Q8b8C/2YAp9n+tCsMwEAyL0adzKW6AsUEGOqdb\n0KPmU7r1E+YEmDMqjD1xvJZYBSQr5N84nUwgGi/zcWw2dVToFyyvEuw9i/CQ\nKBeSsKWqyF8c/MZd0AMH4anR8oM1BjxQtOjenyFOfjaIFabG9ymmp0+vOBW6\nPk2F58goFxTZRCy76ZO1c1ZlTCloTZawPwob4xkEMRmvzNbsadrRm8Ecn/av\n+BOH\r\n=6Gf2\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=14.2.0"},"gitHead":"2af4670fa9988b473cb5c5323407a823e5a96c15","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint lib test && deplint","test":"npm run lint && npm run test:unit","build":"npm run clean && tsc -p tsconfig.build.json","clean":"rimraf build","prepack":"npm run build","lint:fix":"balena-lint --fix lib test","test:unit":"jest"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"versionist":{"publishedAt":"2022-01-02T23:15:20.253Z"},"_npmVersion":"6.14.15","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --fix"]},"_nodeVersion":"14.17.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.4.0","@balena/jellyfish-logger":"^4.0.10"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^27.4.5","sinon":"^12.0.1","deplint":"^1.1.3","ts-jest":"^27.1.2","typedoc":"^0.22.10","typescript":"^4.5.4","@types/jest":"^27.4.0","lint-staged":"^12.1.5","@balena/lint":"^6.2.0","@types/sinon":"^10.0.6","@types/semver":"^7.3.9","simple-git-hooks":"^2.7.0","@types/json-schema":"~6.0.1","@balena/jellyfish-types":"^2.0.2","@balena/jellyfish-config":"^2.0.2"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.2.17_1641165475554_0.25593949542740657","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.2.18-renovate-internal-patch-d996bc7009bc213a9cee2bc9ee7ec1cf122f6679":{"name":"@balena/jellyfish-plugin-base","version":"2.2.18-renovate-internal-patch-d996bc7009bc213a9cee2bc9ee7ec1cf122f6679","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"Apache-2.0","_id":"@balena/jellyfish-plugin-base@2.2.18-renovate-internal-patch-d996bc7009bc213a9cee2bc9ee7ec1cf122f6679","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"3f6a1ca3a906f1d34b4a83ee3826e2915f7191d4","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.2.18-renovate-internal-patch-d996bc7009bc213a9cee2bc9ee7ec1cf122f6679.tgz","fileCount":31,"integrity":"sha512-HBCAQ5PdFY0AZg3B2joHqd/8CZA08wVCXu7L1B3ecJJbV73fpQ2EiMZXaQpjncIVgyTvhjECwUisdoqnhbLCIA==","signatures":[{"sig":"MEYCIQCHD1nUKvJ4jS0mw61Svr2stLHt5O9GXfRckqEcw0Eu7wIhAPEEG7+IN4kmbP4z3kZbeLIF+DmTe9UnUAhkN8tbYlXR","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":100447,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJh0uP7CRA9TVsSAnZWagAApKwQAKIXiD0CotroR585+csS\nc6++YYIvzqgJ4pYaoDpH7pOde9whxW2lHBR6bL9iuNob+z5WG0/dWk/EMgGf\nT8ZeZw/FfxBXQeGl1/0S3yJhGA8u9PG3w7h1PQ11WSNEFPUXz/xYF+o5G0VW\nqzhFtjLkbVZiO2Cx8kaarWX417KFMoq1QdgduycB+r8jj7DAbcMzFXYRWY1Q\nNc/LQnyBBizZrcTAdXp/7000GSJpLuGliLn7Xsr0ezQ5Y9BEGS6Dlkel6/zS\nwexDxY5D/aVsZdQrvfTlr+rn1guT2WOuAIc6+qNkqBcKp9ttImQu/0jV/AfW\nYWe4AKX1ajwItuggOPiZtvUZUVbC5SocCcnajYtr0CVIYcxtqTvjjJdcyPMJ\n1dmqgwWZU+s8i0rB7YjTU2U1AmN/hqxalII5N+nFwV1gu5oDLGd5mAGCQpBU\nateYDc0CscsGgms2esM9QPbUeUE2UiYSLNtaSyHSewgoU+Mk7W1B1hYmncUb\n+yzylOsJU4q/3lgmH9QlDh2kk0FPnlrF7lxAPaDlxu7F8zK0c7MyC1jjY0LL\n7MHLifrIPY04mT0vhSLv0N1Z1YfEklLen52y/v6nxY0aIGsmslYe8HkbCHkp\n92xEpjsNbRlp8oj0a1Onh3AARBYFItMG+JRRv1OoJ44gFoWv+pfh/3ASa5qp\nDMy2\r\n=C5q/\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\n[![Publish Documentation](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml/badge.svg)](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml)\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=14.2.0"},"gitHead":"d996bc7009bc213a9cee2bc9ee7ec1cf122f6679","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint lib test && deplint","test":"npm run lint && npm run test:unit","build":"npm run clean && tsc -p tsconfig.build.json","clean":"rimraf build","prepack":"npm run build","lint:fix":"balena-lint --fix lib test","test:unit":"jest"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"versionist":{"publishedAt":"2022-01-03T11:49:57.645Z"},"_npmVersion":"6.14.15","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --fix"]},"_nodeVersion":"14.17.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.4.0","@balena/jellyfish-logger":"^4.0.11"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^27.4.5","sinon":"^12.0.1","deplint":"^1.1.3","ts-jest":"^27.1.2","typedoc":"^0.22.10","typescript":"^4.5.4","@types/jest":"^27.4.0","lint-staged":"^12.1.5","@balena/lint":"^6.2.0","@types/sinon":"^10.0.6","@types/semver":"^7.3.9","simple-git-hooks":"^2.7.0","@types/json-schema":"~6.0.1","@balena/jellyfish-types":"^2.0.2","@balena/jellyfish-config":"^2.0.2"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.2.18-renovate-internal-patch-d996bc7009bc213a9cee2bc9ee7ec1cf122f6679_1641210875096_0.7970375207184301","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.2.18":{"name":"@balena/jellyfish-plugin-base","version":"2.2.18","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"Apache-2.0","_id":"@balena/jellyfish-plugin-base@2.2.18","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"e5ba16627a8c3ac05dfbfdece47f773c173e2dc9","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.2.18.tgz","fileCount":31,"integrity":"sha512-iHxHmccX6XcBgEfMf4xFp6F7zc4JRD4C5xTPBIeJ4N1RdsNMWp2fx+Q6SXyUPbrBddJ2vrA533V3hBLxVVuI9A==","signatures":[{"sig":"MEYCIQChKLBX7LRSAOC9pTTICGO899IATTEbEwc/CXWn1hLIpwIhANR2Q3oNLg01AmfPVqaspnCRfEXvTDWl5BqKfd+g6aj9","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":100382,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJh0uUiCRA9TVsSAnZWagAAecsP/3yggZ7FPNAh/j+NDKCq\nuXcFinH18cvobMI3X1z/3rH0eg69FFL2BHQF9aWj3skvgrhz/SlCsEebd5Sg\n/Nd/hDTZ8TTnI7wrGytIs8rsv2C6aQt23PC8hx+Hh7OW3bTWAVmxt4l2wjXk\nJjVEnn5H/UP3mfAN/iQ0+TV/TePbgBg+VzARCEIKkMDT3pbEhBugOxXC81V5\nKJrfE7BuetmNnVJEf0N5QsPACmCfh7VWkwRnbmKiiCyGMtJn3jIV6T+qiLBS\nN+D9+4ouTDheLdC6FXMbS0a492UujdqGDngo8VLsxeOkGUejWM8ksY+bpHlu\nA4NH6Ra2S+GXYQpKFVaSPjB+oiBOsvClITSV27CCF3AYW0MWaNnAv0X29P/z\n/0rwgrwA/Ia3NohMZ4e/LK50Lpdv1HpOqT4eNpoo064xCShIoJvUffgzL+Cg\nJae5dBne4LAwTfPBWy9MVIyoR2LS6efnThz2t76Gd5THiKnPnC6RdyWNUYl6\nYkOVV+wM+iF6tAUjdXc64HzMiqFzgqIf6XtSCHyl/2o+ryp3bfuDI8apuoi3\n9RJNzG2RmfaLldWmVe3iox3EcTqZKlA37wkZSjHzFcItcaYeLjrUsn1/cf4y\nu5Cj0IK5ZqAAGa/qeMD8M1i6NtrBiE+aPbcpIjjDlSPPRrueY5fFzjQF/RsP\nJfJX\r\n=5MjG\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=14.2.0"},"gitHead":"79a6d017b1dc83aa7bc8634f40742d294256c022","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint lib test && deplint","test":"npm run lint && npm run test:unit","build":"npm run clean && tsc -p tsconfig.build.json","clean":"rimraf build","prepack":"npm run build","lint:fix":"balena-lint --fix lib test","test:unit":"jest"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"versionist":{"publishedAt":"2022-01-03T11:57:00.019Z"},"_npmVersion":"6.14.15","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --fix"]},"_nodeVersion":"14.17.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.4.0","@balena/jellyfish-logger":"^4.0.11"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^27.4.5","sinon":"^12.0.1","deplint":"^1.1.3","ts-jest":"^27.1.2","typedoc":"^0.22.10","typescript":"^4.5.4","@types/jest":"^27.4.0","lint-staged":"^12.1.5","@balena/lint":"^6.2.0","@types/sinon":"^10.0.6","@types/semver":"^7.3.9","simple-git-hooks":"^2.7.0","@types/json-schema":"~6.0.1","@balena/jellyfish-types":"^2.0.2","@balena/jellyfish-config":"^2.0.2"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.2.18_1641211170150_0.6475634371406962","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.2.19-renovate-internal-patch-50930b620a741a05b4a72a1d0cb9d2a8b2400b3d":{"name":"@balena/jellyfish-plugin-base","version":"2.2.19-renovate-internal-patch-50930b620a741a05b4a72a1d0cb9d2a8b2400b3d","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"Apache-2.0","_id":"@balena/jellyfish-plugin-base@2.2.19-renovate-internal-patch-50930b620a741a05b4a72a1d0cb9d2a8b2400b3d","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"1d928da76ed100ae78b6bfab6840dbe480a2ab23","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.2.19-renovate-internal-patch-50930b620a741a05b4a72a1d0cb9d2a8b2400b3d.tgz","fileCount":31,"integrity":"sha512-DDev4Be4io+lVX9IbzHjSIkeJL2l5wUSIqCfaOTuWBcO5c4zdYeLtZrPWNxM3gb1h2/JX1jOyGQ8kuEvQ+SzHg==","signatures":[{"sig":"MEQCIFQI0+WMDOqv5lp45//5K8UjdzPyKPu4v8HokVEtAWsYAiByvxQiJQAict0Uc+3s9bkOywieV3CnkCUBLagOe+E7kQ==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":100550,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJh0wEnCRA9TVsSAnZWagAAIXgP/j4KL6YjlghkvVZLpQmM\nG3gO1jL30/qtm/IchYMbfzeGDSN4IFQfYSG8VyXSNWNX+1qWf9kQtOagmiFU\nf29x4aDOeMSkJzmNQLspS+qFu3QJuvyjz9uOnwOGXlq5I5pVGCqjWLkcpmWL\n0ZWix5YXTUXotyuD6qsk5iYWw9QmvSK+87tI8JzG9V7ZJJ/nwCUJAocF3BIG\nP9kfZQbPVV3j1JOUtK3N1TPgaQC48JFqREKh7XdOh+3BqcX2siTV+bLcOQik\nX2BPntqtWRlpqSZEPZbHu5hkx6euym2nQC6JqqlqHd7Te21n7FJ5sWfHbCOR\nKgNIPFltBmf1rWEA0uUOolOEToGz0saVzwBVEX9daHXUXHHgWCNDsOe5oCJt\n8hzSGdcU0XCnc8TtdzHk4SZ0knuSAnEQru3BXSPwtivbwLRK6jji3/P+8trT\nNoUDq+YvL0Op6T+4IhKPzgIuzRqb14Q6QaPwU0BL0SXUsYJJe2tzV6Mz9Ckn\nlJY9ntWUFq+AIGkdcFa8g5xdL4tz/sTZifPKNsNW/7FV8k8ha+0CA9QqRxYF\n6+trTyNMT66F0j8W8BrUi66QEO/iZC/RmHoIvuXehyPN14TffAvuxkqTfeK4\n5RHDMqbuAGAnfV5nS+sY30IlJaUKcJwqS3ctR+JdOZBUEpiP33l558TmUmNU\nJ16K\r\n=tJ4M\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\n[![Publish Documentation](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml/badge.svg)](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml)\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=14.2.0"},"gitHead":"50930b620a741a05b4a72a1d0cb9d2a8b2400b3d","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint lib test && deplint","test":"npm run lint && npm run test:unit","build":"npm run clean && tsc -p tsconfig.build.json","clean":"rimraf build","prepack":"npm run build","lint:fix":"balena-lint --fix lib test","test:unit":"jest"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"versionist":{"publishedAt":"2022-01-03T13:55:33.377Z"},"_npmVersion":"6.14.15","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --fix"]},"_nodeVersion":"14.17.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.4.0","@balena/jellyfish-logger":"^4.0.12"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^27.4.5","sinon":"^12.0.1","deplint":"^1.1.3","ts-jest":"^27.1.2","typedoc":"^0.22.10","typescript":"^4.5.4","@types/jest":"^27.4.0","lint-staged":"^12.1.5","@balena/lint":"^6.2.0","@types/sinon":"^10.0.6","@types/semver":"^7.3.9","simple-git-hooks":"^2.7.0","@types/json-schema":"~6.0.1","@balena/jellyfish-types":"^2.0.2","@balena/jellyfish-config":"^2.0.2"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.2.19-renovate-internal-patch-50930b620a741a05b4a72a1d0cb9d2a8b2400b3d_1641218343363_0.2408002344150071","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.2.19":{"name":"@balena/jellyfish-plugin-base","version":"2.2.19","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"Apache-2.0","_id":"@balena/jellyfish-plugin-base@2.2.19","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"f38c2bce7c508f29147c1200585dc8baae49ba5e","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.2.19.tgz","fileCount":31,"integrity":"sha512-YxhOK/W9tDvgghI3kkKyLSul8WlE1Qys7faknJn61je7+mCHcjsPc+3BHgjCxFROvEbHic6dB6kFkYhC4KcGsg==","signatures":[{"sig":"MEUCIQDsxTAysVtutXcOr6U5dJsof5FT7NmMIh6RM8k4bRfCIgIgBwR3rxaFX8kEmEFQj48kj8yxfF4Hcmo5T+pC+fkNgKA=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":100485,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJh0wH3CRA9TVsSAnZWagAAKMsP/RXrJOnfHMX0C5UAbBtr\nmTRYpzM+qOUhBqDkdGr/xPEowPpETUlHdfU5S2zIBrUKL9GK7PETx3HW0Xq3\n9/DwA04RU879J8dun63LevZCYP9d+n3cMj5ydzIiFd1CO9u+ZcAMnpW7/V8M\ntWhidc3Y0zxCTNwlE1FKNsGKg2fQULkkdTMeeiQu+Tv3QI8R9kTWNsdRRIo6\nldDW2MHLsCYb7pB8LipT9JBbqfngz2n7N0FYpGK/L8w9smmanwlI/y6r4C9G\n4ynpgGkaDrDeP/J8XW/CKZLL+y51nWmhg94S+6mu8Vxx/uEAGl5N3CfepAoA\n7ujUaPP3+UjZ2rn5jRD1rQ62poxOxczg39KirZFf7hckG+I/WDsP1v8xGQ4i\nEIy0jhEMXI9CMxclLsLRag0r/BvoB/WDLF6fp8ru/6KiFUCElNXts4KRgwHa\nga5Zdc6MSRRMvJg8ZOfW6AcW2fa4w8p0ppD68egb4Rj+uXJhT41enn0dCLlD\nDoui1oaFR/ABkW/4UEIEY9Wvh+F9KLeR6cgzBzzAmU2MHcBfNAqDEaF6Luq0\nsI+E1Kh9J4qo6vieeRTxChkJgcpHhq4eMSKDhObcnngCrKuFwY7mmFEpaYbw\n+rl4K+c4zlb4VW3R5KUhcz+XMIDCmbq3V2FkKnyb0DcedkbeqtvijXQx4BRJ\nT3z5\r\n=c1qq\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=14.2.0"},"gitHead":"1f5802e3353985539bdb7229d8e31c878b26a2e5","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint lib test && deplint","test":"npm run lint && npm run test:unit","build":"npm run clean && tsc -p tsconfig.build.json","clean":"rimraf build","prepack":"npm run build","lint:fix":"balena-lint --fix lib test","test:unit":"jest"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"versionist":{"publishedAt":"2022-01-03T14:00:34.793Z"},"_npmVersion":"6.14.15","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --fix"]},"_nodeVersion":"14.17.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.4.0","@balena/jellyfish-logger":"^4.0.12"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^27.4.5","sinon":"^12.0.1","deplint":"^1.1.3","ts-jest":"^27.1.2","typedoc":"^0.22.10","typescript":"^4.5.4","@types/jest":"^27.4.0","lint-staged":"^12.1.5","@balena/lint":"^6.2.0","@types/sinon":"^10.0.6","@types/semver":"^7.3.9","simple-git-hooks":"^2.7.0","@types/json-schema":"~6.0.1","@balena/jellyfish-types":"^2.0.2","@balena/jellyfish-config":"^2.0.2"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.2.19_1641218550833_0.20252198176450675","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.2.20-renovate-internal-patch-bad7441c293443271ac334556d720431c1f62be5":{"name":"@balena/jellyfish-plugin-base","version":"2.2.20-renovate-internal-patch-bad7441c293443271ac334556d720431c1f62be5","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"Apache-2.0","_id":"@balena/jellyfish-plugin-base@2.2.20-renovate-internal-patch-bad7441c293443271ac334556d720431c1f62be5","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"6d6bcbf74a07a7c1812affab5af67f07db1ac54e","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.2.20-renovate-internal-patch-bad7441c293443271ac334556d720431c1f62be5.tgz","fileCount":31,"integrity":"sha512-mIqiwULdqpCqUo/tOkjisnZLetR0twsCH9oDVpBYt9dFTK9lx0vkgRY2Aszyxq33FqQzNf6oMWxJqio0yB2TAw==","signatures":[{"sig":"MEUCIQDkTgmdi/TdI6a2AcYGDQVVUjyaj4i5IRI5kASizuGV+QIgR36BIziJbBnXSfz/xdxKTXjgu18rO02tcEROFnfUhNg=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":100621,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJh2QDQCRA9TVsSAnZWagAAn3IP/Rp7dr6sS0Xetk1XbjpQ\nFxH3pcF5pJLbT10yLWABvRsFNAsjLzlG9lPX4Hu/CUrJlhtnQQB8V0ZgoGSz\nncyL1WEBCtJ9f8tGKm2zh1vSFVu7Fjb8vmTZjuADI+yv3VXGvOoqFj3rmU61\nP2IwcNVUqFetTkqUcwQINPK6HDnKgYiRtmTuRYsRvGT/UKgs0q0Wub67GpIy\ntTwCpmzpS7Ozx+1mDSjkLrNn1euBsOAN5Km96l+C9e6DNG6FQs8enCGORUpj\nHuIKWgzlAcNAVMzkmAMEj8DvEP+Blg/GpGYNZWsUy6idXvlaM68Kd+pJWjL5\n7mWt1BMK6NCdIq3PYZLvDNnf4RKvx/ScZzEOUd0rtRweFTYgUVc0HhdglS/b\n4m6g9w4vJ0PlVGT1EGxIcZKGcSCU30O9lrPYuyOjAI0Pg9vAWO4Pwyh0pKiN\nm+UFFVis9HzIYWSiXzMc3KekVdR5R4s3YgZoAaIh6CC+nG/+bGxR4GPunNtO\nfCFh0GZ3REmaCzYJXXn2uWU2gc6TVSJPgYDs3Z5ijB0WF7g4WZbxkRvN4xrT\n+2Jfgjc0JzgCK8DIuNFBCCPQPHfs6icCdk2PwwwP5uhnLLj3FGCyOnFbgXRs\nTbLmrm7vkho+R8vmo7BzuHHJAlcAtHiyu2e4M92uU6xAtpmNmLuU9S7LcDFD\nHGnL\r\n=cOcR\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\n[![Publish Documentation](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml/badge.svg)](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml)\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=14.2.0"},"gitHead":"bad7441c293443271ac334556d720431c1f62be5","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint lib test && deplint","test":"npm run lint && npm run test:unit","build":"npm run clean && tsc -p tsconfig.build.json","clean":"rimraf build","prepack":"npm run build","lint:fix":"balena-lint --fix lib test","test:unit":"jest"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"versionist":{"publishedAt":"2022-01-08T03:08:24.374Z"},"_npmVersion":"6.14.15","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --fix"]},"_nodeVersion":"14.17.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.4.0","@balena/jellyfish-logger":"^4.0.14"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^27.4.5","sinon":"^12.0.1","deplint":"^1.1.3","ts-jest":"^27.1.2","typedoc":"^0.22.10","typescript":"^4.5.4","@types/jest":"^27.4.0","lint-staged":"^12.1.5","@balena/lint":"^6.2.0","@types/sinon":"^10.0.6","@types/semver":"^7.3.9","simple-git-hooks":"^2.7.0","@types/json-schema":"~6.0.1","@balena/jellyfish-types":"^2.0.3","@balena/jellyfish-config":"^2.0.2"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.2.20-renovate-internal-patch-bad7441c293443271ac334556d720431c1f62be5_1641611471904_0.0478009393190546","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.2.20":{"name":"@balena/jellyfish-plugin-base","version":"2.2.20","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"Apache-2.0","_id":"@balena/jellyfish-plugin-base@2.2.20","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"460deb0b236063bb8e5705d17f879f414df2b1cf","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.2.20.tgz","fileCount":31,"integrity":"sha512-bBCpNWv2xQZhxgzaUwqYqUCBE1hWwlLCHLbMnTveKpTk0aUnC7W6RQNtl2uxlN/AXiB3BLn6lx0GlwjjpIez5w==","signatures":[{"sig":"MEQCIAve1Z5nkgCtnxrPPhlhkjpifV9+O05VWnI/VqgchXxbAiBQVMgrEBqVay037e2Jb7gUtm15+HK9W6xWl5Ju3ciIlw==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":100556,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJh2QHjCRA9TVsSAnZWagAALeUP/i/kUqDeAsQIvgzlX/B1\nfMp8MZpfuXARv9xwzeGQuW6V8Xzl8dRpFxipMsnB9NlJHHgTLukJwpqY+xml\nxqkQz/t2aTwtKY2wAAwZJzbyolRmZBjLaGq+fSqDOmtGEB8vrKdIjf8CikOB\n31IwmeWM1K3kMdZPuvIX1Gwx41hWPrrLeN5SsUx7r9eYyO8YsnVrpgvZnUeV\nBM99IZL3D8bhZzPQPa/25quxjrAZxzWWmPK3ptiRZOScoYMn0R2FpVMnnpRb\noMHR5BPJIutf22iApunmSPkak4bMEFoTXiBwN0Y1Vc6bRrYZA5x34NZJl1FZ\n0uPgCZNMeYpUWOx5XgBwcaXfF6ByIIvrlAI6dRVKTKRqGI1DmD+13ssNcutA\ncYds3UlimI0J+CzORxqFtzvMrSqnYPyjE8/bqbXcPejEktwCkOPNdqwy6Dz6\nCfdGvpt3DJ1fNd0WoE03Ka3GAj0z7W4e3cKWAUo9OZaxwSetZWu4AGqvLKrW\nyfIqGbIB9VAhJ5wWuUvF1Ufdxt2rtmvyXsXbOG7SfJDO++/dp3cs7DXK7AYH\nvelqIwAEOW1uQSpSI5j1OiEDc5gSPOiDWi/0/W4eOtZi2W61oTzPBe6MOxq4\nUaJw6RwiLFb6XmT5Qq7Tr7D1zWXHXEsGpXsX48AsNYxZZih6Vv4d5gU4NQZR\nRqhB\r\n=Knwa\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=14.2.0"},"gitHead":"7acaf20de7e64d0c1864da09fa5327a091d1ab92","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint lib test && deplint","test":"npm run lint && npm run test:unit","build":"npm run clean && tsc -p tsconfig.build.json","clean":"rimraf build","prepack":"npm run build","lint:fix":"balena-lint --fix lib test","test:unit":"jest"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"versionist":{"publishedAt":"2022-01-08T03:13:50.221Z"},"_npmVersion":"6.14.15","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --fix"]},"_nodeVersion":"14.17.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.4.0","@balena/jellyfish-logger":"^4.0.14"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^27.4.5","sinon":"^12.0.1","deplint":"^1.1.3","ts-jest":"^27.1.2","typedoc":"^0.22.10","typescript":"^4.5.4","@types/jest":"^27.4.0","lint-staged":"^12.1.5","@balena/lint":"^6.2.0","@types/sinon":"^10.0.6","@types/semver":"^7.3.9","simple-git-hooks":"^2.7.0","@types/json-schema":"~6.0.1","@balena/jellyfish-types":"^2.0.3","@balena/jellyfish-config":"^2.0.2"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.2.20_1641611746851_0.4253824904540735","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.2.21-renovate-internal-patch-6398b1762345c50f4552fcd00864029c162061d9":{"name":"@balena/jellyfish-plugin-base","version":"2.2.21-renovate-internal-patch-6398b1762345c50f4552fcd00864029c162061d9","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"Apache-2.0","_id":"@balena/jellyfish-plugin-base@2.2.21-renovate-internal-patch-6398b1762345c50f4552fcd00864029c162061d9","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"1428516a1b3ad86d64f1f5ac6266ed382fd0c183","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.2.21-renovate-internal-patch-6398b1762345c50f4552fcd00864029c162061d9.tgz","fileCount":31,"integrity":"sha512-cJ6Wv8+jSksuubOsJrEHrz7FKgedrp6xouB2yVMG2SeSf/k0UNKq1XlEcGjPQSNfFfNT27xZ2K+EiwWWJVhrew==","signatures":[{"sig":"MEQCIAChkr50Mqpd8vnpK+I5T0rW4+ru0DT3k/u74arKyfxmAiB5HZzzFyuc2lSE6/X98ldqmsZWp0WM1075DPOrR+5OXg==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":100724,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJh2YI+CRA9TVsSAnZWagAANnUP/0yFZIJ7y9aMn6EGBf7O\n3NVGKvtbuZaFAPAlUotK+4a7+/6o9+etiTfuYXIyAfWXT3AWk2Gc5NTNOlzt\n4z5oHyqNPz6mrXEz0V6tR58FDPqsWlAMbVkbjZ/Qlz2iLB8dVRVqTi0499aK\ni5SmTcvJSxQe6gBAhvJ7lGr0HstWAq6NG1qsVlsk3PTgL90RQJCiDpW7Kky/\nRWBRrSzofW9WiRSrSwFiBYAEk+stFmZLM7pjLX2oCYWGVdKlVwa6PpvLaCvT\nvan+SMIG2CxvgRXa7rFHvw/tNs+qXi4BQcLvfPoxWQddzVxfEEORp/wY8VNV\nATp9tvh7rFPTK9nTH9WskIWmz4Ba8jYPDmYWfWoCSC/7tG7O8sObmfgCewua\nE0N10TAOm9ThCVWz6lBgM6ZDQCQteWTccZGQmu4Ww7ow1yZ8imQPmiUXjNyz\nLRKi6mNe/ZRxyb6yRqrSF7PnU/FaYcieOE+xrM3skaFGXxwr3r1+Bf0F71ed\nR9bsHeuLtMgdOqF2VhgXAiOHdLWFqP4Fr83C0K5D9RFIDXMOcdDORhh+7l81\nQyLW63IgUwIycwZFoL/XfuFEEd/Mzc63dbYXVRDvv5geQ2B8W5IXeIzYK8Xt\n+ugwcGp/qGycMy41JqSykco0qiRc0z/YpDM7Wcx1mLS5KKxpPJ0m/8fci8Cu\nWWIZ\r\n=2WgI\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\n[![Publish Documentation](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml/badge.svg)](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml)\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=14.2.0"},"gitHead":"6398b1762345c50f4552fcd00864029c162061d9","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint lib test && deplint","test":"npm run lint && npm run test:unit","build":"npm run clean && tsc -p tsconfig.build.json","clean":"rimraf build","prepack":"npm run build","lint:fix":"balena-lint --fix lib test","test:unit":"jest"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"versionist":{"publishedAt":"2022-01-08T12:19:08.979Z"},"_npmVersion":"6.14.15","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --fix"]},"_nodeVersion":"14.17.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.4.0","@balena/jellyfish-logger":"^4.0.15"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^27.4.5","sinon":"^12.0.1","deplint":"^1.1.3","ts-jest":"^27.1.2","typedoc":"^0.22.10","typescript":"^4.5.4","@types/jest":"^27.4.0","lint-staged":"^12.1.5","@balena/lint":"^6.2.0","@types/sinon":"^10.0.6","@types/semver":"^7.3.9","simple-git-hooks":"^2.7.0","@types/json-schema":"~6.0.1","@balena/jellyfish-types":"^2.0.3","@balena/jellyfish-config":"^2.0.2"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.2.21-renovate-internal-patch-6398b1762345c50f4552fcd00864029c162061d9_1641644606568_0.5686825175634569","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.2.21":{"name":"@balena/jellyfish-plugin-base","version":"2.2.21","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"Apache-2.0","_id":"@balena/jellyfish-plugin-base@2.2.21","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"2f6a869a0af9664b20aafaa033dd587bd73d588f","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.2.21.tgz","fileCount":31,"integrity":"sha512-kk7gMckfcwSjndIfOdvQFUXrxRwYGdmogu/xG7Rv35gNsiHFVuOafQBYNMG8J6WoelPrR565soppJfIenGSmzQ==","signatures":[{"sig":"MEYCIQD33vyz0/7CiswCGwFjLLSni7ZxhhoV8N8/fSBPZ0RjpwIhAJR4NlFueX73lmksCYmuoJDH5D6B86uZ/M3z58K0mVJF","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":100659,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJh2YMjCRA9TVsSAnZWagAAoRQP/R7QHCCzuka6hLFV0m/V\nBVJ8FDqnX4bTbCLoPuwEMk5LfjjwXsFI3FIa2VUf+seGJe/uBc1lnr/uWFuY\nS9jAbrjEDTDPfKXNc3ysEdbWoPTJshQuNHSoVOk1Be2ByCTRwKu7EnLOLfOS\nYG/mJzdLG/mDpy9yohPG4hhMYdHmGDKUIWGJFrJ6KiwsaKWm81yAmwy5YLIp\nEAeA9V2aw29p6IwLDNz+WtI2MfazPi+cBS9+52nJsKnYZmKwawF1Yj59ZuV0\nBKdV3BT9MQylxtU59kRBfxCr9CtYBlMBxVRvRCOMjzplRW+9qfLLmVyK9Ajp\ndOkPuf31n/QdCUdHpLC4M4x3RXpx/4zDsiWesyb7zLdL0wa8ol0d2ixkvfRU\n/o+fh4n8IiBkpe56y/05RTZBrdvKho2XHSYRC9W1M6XWIPxPhOBy7pebAIa6\nnLvBQYRQAV3Xm5zZy+2S4OXIM7ke9p+06h/cuvy48gJwrVV0K0PIRkJrT/i4\njj9kZZHbJ0uvBgAUNykzZC4+KPRLfjE7SKzH0hfIAlfA69wIKG8u4AA31u7T\n22BCUR6IKA08Kbg+YrFxddLOwa7AuoXDajunp+YkqpAgn6rxZMs1qO78ZwUr\nkKTLI6sfyRRl1y1yBDqAa0wSmGL911qOaffUQcZIH1i/wY0UDOfkozY/m63k\n8w4O\r\n=dndW\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=14.2.0"},"gitHead":"7a4c9313c27315b653e30383d2edf5821fb46d00","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint lib test && deplint","test":"npm run lint && npm run test:unit","build":"npm run clean && tsc -p tsconfig.build.json","clean":"rimraf build","prepack":"npm run build","lint:fix":"balena-lint --fix lib test","test:unit":"jest"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"versionist":{"publishedAt":"2022-01-08T12:24:31.380Z"},"_npmVersion":"6.14.15","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --fix"]},"_nodeVersion":"14.17.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.4.0","@balena/jellyfish-logger":"^4.0.15"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^27.4.5","sinon":"^12.0.1","deplint":"^1.1.3","ts-jest":"^27.1.2","typedoc":"^0.22.10","typescript":"^4.5.4","@types/jest":"^27.4.0","lint-staged":"^12.1.5","@balena/lint":"^6.2.0","@types/sinon":"^10.0.6","@types/semver":"^7.3.9","simple-git-hooks":"^2.7.0","@types/json-schema":"~6.0.1","@balena/jellyfish-types":"^2.0.3","@balena/jellyfish-config":"^2.0.2"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.2.21_1641644834873_0.8424851975323091","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.2.22-renovate-external-non-major-6574b35442f731c32010e5ed95a93972cf62f754":{"name":"@balena/jellyfish-plugin-base","version":"2.2.22-renovate-external-non-major-6574b35442f731c32010e5ed95a93972cf62f754","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"Apache-2.0","_id":"@balena/jellyfish-plugin-base@2.2.22-renovate-external-non-major-6574b35442f731c32010e5ed95a93972cf62f754","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"54be7767f237c06c8dc96243386930e6aad61463","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.2.22-renovate-external-non-major-6574b35442f731c32010e5ed95a93972cf62f754.tgz","fileCount":31,"integrity":"sha512-rgSMpYTTpInm32r9xvdNtX/zkutLtmJd3EV42ieVISA4+EcCkhp4neeWSzlU9yAUK/iORCp9EP2l/agAdzlCTQ==","signatures":[{"sig":"MEQCIBv5OMS+ZnPKHdLuJLo/CAgxCc+KIAK9dglgInjzcGCjAiBBp+L8/a9SfIfnK0tqKh62xpbz98tZeOf1bGBYIbXwjw==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":100803,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJh2YRzCRA9TVsSAnZWagAAMNUP/1BA2DS8cnHtGctkKyrD\ndbp/DfWAiAHSCwZ43a+Vc/JIRge3lWdWxM8oZ3Q9XXWyQFkUUsW1yH0RUpNM\nmr8mkSswvCT+MEkqqWIQ+9b9oPRVkv9KbpAz/ocfjaJx/xcXIXV4iWYAJjxg\nnVZA0X/eRac56/kacoImmo819ogwYex9aLecx5Wf4Lv7SjIOVUm3ABVSJQ3p\nsuOtP8KiWzEVKCiPHoctC8hs+4P3n32RaBQrIXRtP+I+g4rYPuCeT8bsUjEN\nZwY4d8/wpPp9I/fHQC/PAShuBNNiUF/bhnD9dEBx6MsHZewIglNPpO6TJ+0W\ndgJ1IhA6PtWbFMupcTV6doXB0mSRqRMao+v55aHPpCilFRHlj3Gh/E9IAHtn\nrZJFCRavP9/IgHbOeinEUeevInBitq9gNMImLImVp/rlF0eQGviPJ6uhA96C\nd/P8yVQ/emvhsJMuzojJ+GOcQzO7sEW1dH5al6lG4IQNxFaD5jU56XQJcpsP\nk6qTbCByfrQiceNjvgpyPgrct+uAxJOI6xFbYn1ax82/TcK7wT00Drp2iZg2\n6GM+2H4YOAJ+U+WMzdkar7V9N16ylKVFUS3APny8cIX4d4w7L0a/G9mWCvcG\nPNOkDj8HXapKhB9XdtQjdS2pvoydO87OkXl3nvbbjFO7Yg8OuveU0kvTwL2w\n4RYE\r\n=Mtfk\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\n[![Publish Documentation](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml/badge.svg)](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml)\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=14.2.0"},"gitHead":"6574b35442f731c32010e5ed95a93972cf62f754","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint lib test && deplint","test":"npm run lint && npm run test:unit","build":"npm run clean && tsc -p tsconfig.build.json","clean":"rimraf build","prepack":"npm run build","lint:fix":"balena-lint --fix lib test","test:unit":"jest"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"versionist":{"publishedAt":"2022-01-08T12:29:40.191Z"},"_npmVersion":"6.14.15","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --fix"]},"_nodeVersion":"14.17.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.4.0","@balena/jellyfish-logger":"^4.0.15"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^27.4.7","sinon":"^12.0.1","deplint":"^1.1.3","ts-jest":"^27.1.2","typedoc":"^0.22.10","typescript":"^4.5.4","@types/jest":"^27.4.0","lint-staged":"^12.1.7","@balena/lint":"^6.2.0","@types/sinon":"^10.0.6","@types/semver":"^7.3.9","simple-git-hooks":"^2.7.0","@types/json-schema":"~6.0.1","@balena/jellyfish-types":"^2.0.3","@balena/jellyfish-config":"^2.0.2"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.2.22-renovate-external-non-major-6574b35442f731c32010e5ed95a93972cf62f754_1641645171208_0.30765944636244313","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.2.22":{"name":"@balena/jellyfish-plugin-base","version":"2.2.22","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"Apache-2.0","_id":"@balena/jellyfish-plugin-base@2.2.22","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"962e65b44746c1359f3a61b062e4cb6a0b534aad","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.2.22.tgz","fileCount":31,"integrity":"sha512-XqRHNJjFUkBoZh2ZN9jruH9WcvjXmc4ZeqTaahcxWzgFMy4Tx01Mz2UEPG3tY97+eHwOrRvYiW7U+H8zJJ5noQ==","signatures":[{"sig":"MEYCIQDrjPSO+pGsgRj0s0b0YnjoAx+Cpm1ObQedWGuXAY73jwIhANzDDae4Pk9lDY8ICecvqpHEfRip7EhJ0OgMZKoKfg37","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":100734,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJh2YV1CRA9TVsSAnZWagAAHMYP/06nF/dw4mPXt/9d1DHj\n7QroUXHbF9wPjd7+zdp8UZ3dCNJ7fPSujw/4ZnrklHbo07LQKHUSHrLlh7Il\nP3mHfRfVzBVyoi0AL1xVTbVrda7aiCgJYMNtpx/YeIoJ0V8VDLGYsc46f88q\nVthCSEzGamyvkZ+aUJaOMwDJlOgfa+iZyjWpZrjnhgqLQ6vl7L5EP2ve905P\napTMFIJKWGqRcN1p7Bz5VqvUVscjRYAptBgDPgNmQe7i/l+p6ROK4xOAvcgs\nvQHtBUDDd/9jh2gq1TcUn8ANEQVBuSnIYAHmlhlwNMCr5Fb+HH8NJ4tl+f9B\nSphl96a6kppXGQ5cNOyKpxdvBWBwt4xabvIB7Q18KI0mdB96GFfiLJ+aYlDS\n6Zf9efZOFeBgvcyo+9lZKDhwbKdWt/YT10QRk3VFT2aIC2QcY1pfumtyGRLy\n7d+PjitmWsR1KaDZcW3Hd3NI6a2dxui0uJcudnBTwTFdWYLLffsyq/77LLPI\nuuZyQqpvA2wvvNT9j0BqF0BCeTcqm1DWHdIM8JjpYA6o4c5i1fWxvpohTPig\nxFJgW69vGPHsjpw0U7Ythr6oN7H+dqv9r5+NdfGZUy2S8nGRjJ7btXxVdxVQ\nqu869GGTLdUSs6mpjgVpzzgmUSa4Rn0eClS/I/djf0OA0lJr/a2QeAV7ymdL\neo3h\r\n=b0+W\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=14.2.0"},"gitHead":"bba52a5494d6a444ecec818a02942c7420833086","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint lib test && deplint","test":"npm run lint && npm run test:unit","build":"npm run clean && tsc -p tsconfig.build.json","clean":"rimraf build","prepack":"npm run build","lint:fix":"balena-lint --fix lib test","test:unit":"jest"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"versionist":{"publishedAt":"2022-01-08T12:34:21.437Z"},"_npmVersion":"6.14.15","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --fix"]},"_nodeVersion":"14.17.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.4.0","@balena/jellyfish-logger":"^4.0.15"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^27.4.7","sinon":"^12.0.1","deplint":"^1.1.3","ts-jest":"^27.1.2","typedoc":"^0.22.10","typescript":"^4.5.4","@types/jest":"^27.4.0","lint-staged":"^12.1.7","@balena/lint":"^6.2.0","@types/sinon":"^10.0.6","@types/semver":"^7.3.9","simple-git-hooks":"^2.7.0","@types/json-schema":"~6.0.1","@balena/jellyfish-types":"^2.0.3","@balena/jellyfish-config":"^2.0.2"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.2.22_1641645429612_0.03355075072849356","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.2.23-renovate-external-non-major-aae8495291c29c041a67588330279fbcfab132d1":{"name":"@balena/jellyfish-plugin-base","version":"2.2.23-renovate-external-non-major-aae8495291c29c041a67588330279fbcfab132d1","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"Apache-2.0","_id":"@balena/jellyfish-plugin-base@2.2.23-renovate-external-non-major-aae8495291c29c041a67588330279fbcfab132d1","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"ef1714914bf5f31af7e7c30a07fe43aa0c6388b0","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.2.23-renovate-external-non-major-aae8495291c29c041a67588330279fbcfab132d1.tgz","fileCount":31,"integrity":"sha512-zY8iY1jYGS1r4sVFOKJTl7hV9HX+6ondPMrI6j6MctN85wktIAnFtgKsnRTlP4xWH+Lw1Ig14ORINmR0BWPQfA==","signatures":[{"sig":"MEYCIQDS0xo68IA8mzCsp4ULBxZ7QbEIX/a5+aZxydQfNdBdiAIhANK7KkkAamHgZ7wT5KWuMYwSGOaLWT8rJ3jInsnmndnE","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":100889,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJh4h2VCRA9TVsSAnZWagAAGm4QAJLcmfj39MrL43MSkrXK\n+hn/K57JZc0WyQAegjBcZj4CyzGUySATR5CRqbg1oB2n+Sls8krEXBnOpj0u\ny8AvO4yO4g9GweZdIyv/WwgbjpQF8vH/UQWUpTOU/T7HhEtyfB2ri3zpK1oS\nP4SwUYKHxGkC70kVvpXkWv4ARn8/zfXRtE9CnvbedNS2vXX3jZxs3C/MyRi5\nWv9iIXeJjms3j1mIknIv6DdkN5OWE1cddQTmYEqTuSrIJa/M5VLMEcYNSKI0\nSxYt2e4JgIa94spKd0HPg/pw+ysXhRT9FbPXjfhNUp5tGmokx3fiXtI/CqMQ\n41SL90zO9aaPUVpLm5MyRo5W4BuYICSP9eJeFCIUpGhFlEGn4pf0rd4pSaxS\na+n03zTMwVy7Q2Xk1e4VAIWBxAH4mbbcXZbhiUNKAKnKNcAyed7jl14hD2Cf\ny8nO0DkgAfBKrLlernK5+e2yxkR4OItbUjjrMTxDv0ije4zLPyJDV0BV/RzA\nbCNeIdX4ijxwgFVLlrnK53+71osbkQnSbMHGX2asEoZMYxi9N4DTCk6v1Ado\n8+EvE4ZPRdEVIvAh0XtyuD3xouy8M8xYWL/r/e+lx9D24DDwL1dOdTsbtvSa\nwUnQviFnQcsO5bUVfgYYCKhrCrDluhwIPbGtg6W7AElGQ75WnTNBJfQl6RvE\ntP8K\r\n=NgXn\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\n[![Publish Documentation](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml/badge.svg)](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml)\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=14.2.0"},"gitHead":"aae8495291c29c041a67588330279fbcfab132d1","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint lib test && deplint","test":"npm run lint && npm run test:unit","build":"npm run clean && tsc -p tsconfig.build.json","clean":"rimraf build","prepack":"npm run build","lint:fix":"balena-lint --fix lib test","test:unit":"jest"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"versionist":{"publishedAt":"2022-01-15T01:01:19.291Z"},"_npmVersion":"6.14.15","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --fix"]},"_nodeVersion":"14.17.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.4.0","@balena/jellyfish-logger":"^4.0.15"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^27.4.7","sinon":"^12.0.1","deplint":"^1.1.3","ts-jest":"^27.1.3","typedoc":"^0.22.10","typescript":"^4.5.4","@types/jest":"^27.4.0","lint-staged":"^12.1.7","@balena/lint":"^6.2.0","@types/sinon":"^10.0.6","@types/semver":"^7.3.9","simple-git-hooks":"^2.7.0","@types/json-schema":"~6.0.1","@balena/jellyfish-types":"^2.0.3","@balena/jellyfish-config":"^2.0.2"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.2.23-renovate-external-non-major-aae8495291c29c041a67588330279fbcfab132d1_1642208661760_0.5355510570604833","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.2.23":{"name":"@balena/jellyfish-plugin-base","version":"2.2.23","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"Apache-2.0","_id":"@balena/jellyfish-plugin-base@2.2.23","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"3958871088ab411e8c7d689b4fb8db189f43d6fe","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.2.23.tgz","fileCount":31,"integrity":"sha512-JvRHoxcjS2uKES+Ws6c9wTBIgR0T3IYAjwzz2l/jKUV3LG8/47Bb1mWxkaGPrbF1gk9plIev0DEXbJGrZaxGaw==","signatures":[{"sig":"MEQCIG+tBRRi4InSrkW579UuJTDMOIVqcwhsOmPsingjTdTAAiBGevQc+qHJp2aeXaUZ/Y3/PH9huhZjTHJaz6ZPweCq8w==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":100820,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJh4h6FCRA9TVsSAnZWagAAhb0P/RW6xtotXyPgnDwOXOk1\nGTY/Fh4XujCaFJGUvXVPFua2RX/2CJyV88dynrH0GEafeHNsBZ5SLJhf+2su\nS/6aeBOdimhELTeGevnCfxUNeveNhiyNolB6K9yzOwKm7Kr/C/w0OZxBEgqC\niMQTacVmaczJgPYvqJnUScoiRTTql8GYGg/ZXfBLlT3Ohtw6619gIEWfoI63\niFF2pplIxWHkUf6gEgoNSsF8hcXcWJ3QxD47IWdtdyvjM4THRXHW6YCdbDzw\nkHo4PySUGKT8oUJOEQ+Aw0J7Xu/Ul+9TNi/eE9Mb2SbeSKIWzhzENINr96hW\ng3O7HxlNpX/8gtCqo3h6jXp9xDJQTLXVmDpSJ6oxsVNsJ6GCIRPazNLOtclX\naXL/BfaE32frWe5wiR1KTwX0AEEfv122k1AOvzwEQq6FfDjqUARmHldFnXrJ\nIdBAUBoebh/SlUhojR10lpmkjUc/trmv5Kvbq26hJvCFB4jQJQqJhspH1nVp\nQYQdUVFloBy//1fJqpnduZ/wCYZz7TjHGdThPhsJmlXpLvSruqOEx9SUz1Bv\ncBeqsX/MKpHmhPsXFxVyXXTWRvmFouMmeFLgZisufV08s1zsqSwxsxL6Cpud\ncJcfe/+6/tKMVwO19Sttsx3kyXwIh8vQ5QY1TCYdxMBiiaF3OhBJdjZVnTzj\nwFdG\r\n=j6gj\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=14.2.0"},"gitHead":"f5eabedd43dd2988e65a42cd8e5be2201a2e4a74","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint lib test && deplint","test":"npm run lint && npm run test:unit","build":"npm run clean && tsc -p tsconfig.build.json","clean":"rimraf build","prepack":"npm run build","lint:fix":"balena-lint --fix lib test","test:unit":"jest"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"versionist":{"publishedAt":"2022-01-15T01:06:21.263Z"},"_npmVersion":"6.14.15","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --fix"]},"_nodeVersion":"14.17.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.4.0","@balena/jellyfish-logger":"^4.0.15"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^27.4.7","sinon":"^12.0.1","deplint":"^1.1.3","ts-jest":"^27.1.3","typedoc":"^0.22.10","typescript":"^4.5.4","@types/jest":"^27.4.0","lint-staged":"^12.1.7","@balena/lint":"^6.2.0","@types/sinon":"^10.0.6","@types/semver":"^7.3.9","simple-git-hooks":"^2.7.0","@types/json-schema":"~6.0.1","@balena/jellyfish-types":"^2.0.3","@balena/jellyfish-config":"^2.0.2"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.2.23_1642208901450_0.30165104653041386","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.2.24-renovate-internal-patch-25521039c463d2f68b61d8b67c518eea1e2bb510":{"name":"@balena/jellyfish-plugin-base","version":"2.2.24-renovate-internal-patch-25521039c463d2f68b61d8b67c518eea1e2bb510","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"Apache-2.0","_id":"@balena/jellyfish-plugin-base@2.2.24-renovate-internal-patch-25521039c463d2f68b61d8b67c518eea1e2bb510","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"1fd24bf62ab786de1094fe73e1344dac3674c94a","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.2.24-renovate-internal-patch-25521039c463d2f68b61d8b67c518eea1e2bb510.tgz","fileCount":31,"integrity":"sha512-njHj3gMBKpoRFSL7oWsgf7NOnAgznDg7xNKYsDmmE79lPhAWtqjmQcKv5HwPHN5P9LKU7kTcuH2xD0uuHvafHQ==","signatures":[{"sig":"MEUCIQD3Siub7HNIjtcEY4emonx37YkfGZ0kaJPxaSB2HNQwAwIgAcW2VveTEz3ESXrUzqNSjXvHldsAnJFyaupXBlaxiMY=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":100956,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJh4jO9CRA9TVsSAnZWagAAZd8P/iSST/E588x1mNgWlf7+\nrCfdIQE5WjMupTl/bicfCjW+yjRCmhmAmcdAgA9ayK+WsGOh3ZNWBK9Pn0mS\neP3o7ixZZ+VgAeU7s37XAdfZnXLq5/tHWZgiOkSXFY++cu3DJZUhatcTqqlw\nhcjmoebgmJ7vDDWAXiPIbUL3ImE0aPUJlZs4Tc4DcWwr5FVEem+027KNeauO\nqUgyvywYL6PNS1+gVXtwujbObNdE/9TkIy05TBYqY1r5ChAEGmW8xNYLvyNO\nXlllGkAdggXlJudqXt9dUONh4B/6TfpR6iMDaw5xaLfHZTs+rldhjObSJVcV\n4RPuCWfF7AmgnSyBeDN1FzNYx8I0HV2KR0jOxDsIDI7S9Apo2/D9EJtDxIaS\nFfT78l451sDeekJz9MwKTerBF7KCdnKzksnOreD9iz+Nfp+WhhLLx2oIIbkl\nCpazjgwCe0juoSbITImZLDKc8DMRVgSdLJmoQGbdkIo29MgeTkHZvce6Id41\nYqwquCidQS4iI8lobq2y70LdW+WyXrDsi5qZ2Ao5J2j3w/qQq38zpPM0pYHY\n9U2YmHXBZiuK0sDRpOI/ogqeV5iOrV3fv93QCjLZ2tQY7O3G1l//C5tpR4Hy\nNZeJoBC81nPRoj/IKmcDIoOJ6Ps7rjpuVmecThDLGKA+IxMkgJkTN1tGK+9h\ncAQY\r\n=pnpv\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\n[![Publish Documentation](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml/badge.svg)](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml)\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=14.2.0"},"gitHead":"25521039c463d2f68b61d8b67c518eea1e2bb510","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint lib test && deplint","test":"npm run lint && npm run test:unit","build":"npm run clean && tsc -p tsconfig.build.json","clean":"rimraf build","prepack":"npm run build","lint:fix":"balena-lint --fix lib test","test:unit":"jest"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"versionist":{"publishedAt":"2022-01-15T02:36:05.852Z"},"_npmVersion":"6.14.15","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --fix"]},"_nodeVersion":"14.17.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.4.0","@balena/jellyfish-logger":"^4.0.16"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^27.4.7","sinon":"^12.0.1","deplint":"^1.1.3","ts-jest":"^27.1.3","typedoc":"^0.22.10","typescript":"^4.5.4","@types/jest":"^27.4.0","lint-staged":"^12.1.7","@balena/lint":"^6.2.0","@types/sinon":"^10.0.6","@types/semver":"^7.3.9","simple-git-hooks":"^2.7.0","@types/json-schema":"~6.0.1","@balena/jellyfish-types":"^2.0.4","@balena/jellyfish-config":"^2.0.2"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.2.24-renovate-internal-patch-25521039c463d2f68b61d8b67c518eea1e2bb510_1642214333702_0.9705939090582116","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.2.24":{"name":"@balena/jellyfish-plugin-base","version":"2.2.24","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"Apache-2.0","_id":"@balena/jellyfish-plugin-base@2.2.24","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"eb28a356c6f11a0aa54289253ad8fb59a8131ef0","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.2.24.tgz","fileCount":31,"integrity":"sha512-H9ooY4ORN1wF+mc+K9PgjH7mdTLmFiaDzqAaYa4qbN5Vf7tVO6MnhDFUK/8DteOr96OhtI8ydvQMyP79cQ+ADw==","signatures":[{"sig":"MEUCIG8e4z+mmg+kk1VTbLIzL87mjuO2S6XgNxv0k7mUOrTbAiEAjgV7P0jPTDBkx+39fnxHBs3TiehAA9JDg+NHLEhYN0k=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":100891,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJh4jR2CRA9TVsSAnZWagAAP48P/3xscG4fSF9FnwwnP7yt\n1zFX4LO18PNWBtZNg5MCCWOCq8lw35kY7s4JIOXN2c5Oc0yFFyTEUJ47m/Vh\nGCL5s8Lk9W5dyGb6q4J3yk0tW7u7Uy+e3p4uoSpwBrrlMXmS2t5n4KpyaH0o\nqIhWBJBYsqTrMpCtxoNs6Ft9XFRyT3aFOjj5qYQRGxXAB9rsrVBa0j5zB1me\n6tJFtYR9sJZr8Xe2xXNjcIAXz+R101xzQe7+YB8brc8HRa8SBClCKqIJJbdz\noVI79NM7nVdQ4oPoqBvNU5D2TMxVk1FTRHthoaBg1ri5FVF9ABRs0c4dkvnZ\nmCewtVSBlidBBOXCRTfHhiES7lhoe7SK9QwtAO9fqHbEi5Z8zcOzM5j6ymnO\n6wOBxE++BSNl9av7dTp/5gCZtUv1TFP1b0lAf7jRXiS0AXUMEgP9Oc+4/sqR\niRwlQ7S3QfDbMjHbKTRoeP4fcyZGP2N3TKT4uewu/r6piNdwuv9iup58rFCP\ne9Ok9tB++b88/thYIUtY1RF/EaYcwcujW+EGl9U4swal2Vpc+yH99vBJ2/OF\nMMDYZ0rjIdsJ08YcnrEaRgQlzcMc8HrtPacHPCeUanu9Kh/qATdjBR/raAxj\nsFDECiHS7mPPWBi3TZ0mhY9ws7NHQB8clYao1jBAManEaAVzTrOSTB2gGmci\ndcDp\r\n=T1kQ\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=14.2.0"},"gitHead":"83685863df358a30de3930f7607e721fc2925162","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint lib test && deplint","test":"npm run lint && npm run test:unit","build":"npm run clean && tsc -p tsconfig.build.json","clean":"rimraf build","prepack":"npm run build","lint:fix":"balena-lint --fix lib test","test:unit":"jest"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"versionist":{"publishedAt":"2022-01-15T02:39:54.425Z"},"_npmVersion":"6.14.15","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --fix"]},"_nodeVersion":"14.17.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.4.0","@balena/jellyfish-logger":"^4.0.16"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^27.4.7","sinon":"^12.0.1","deplint":"^1.1.3","ts-jest":"^27.1.3","typedoc":"^0.22.10","typescript":"^4.5.4","@types/jest":"^27.4.0","lint-staged":"^12.1.7","@balena/lint":"^6.2.0","@types/sinon":"^10.0.6","@types/semver":"^7.3.9","simple-git-hooks":"^2.7.0","@types/json-schema":"~6.0.1","@balena/jellyfish-types":"^2.0.4","@balena/jellyfish-config":"^2.0.2"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.2.24_1642214518629_0.1136130809569027","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.2.25-lucianbuzzo-mixins-fd9ed103b7e8c28b43abf7173ecda86369b0a700":{"name":"@balena/jellyfish-plugin-base","version":"2.2.25-lucianbuzzo-mixins-fd9ed103b7e8c28b43abf7173ecda86369b0a700","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"Apache-2.0","_id":"@balena/jellyfish-plugin-base@2.2.25-lucianbuzzo-mixins-fd9ed103b7e8c28b43abf7173ecda86369b0a700","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"efe66d9ba87f861ffd69bc800adcfb7b7bc5cca6","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.2.25-lucianbuzzo-mixins-fd9ed103b7e8c28b43abf7173ecda86369b0a700.tgz","fileCount":31,"integrity":"sha512-iYBH/f2JKOzUrvscf6S4VCQofa4iANOgYtqxohVKq/xFeFsXtw28+m2gwKVke9UmiDnpAxuXeW+bvnYfs001MQ==","signatures":[{"sig":"MEUCIQCE/1q+P8TN+OiPSa6TUpsKKwCDjld/XF8xOQUqeGs0xgIga2fdwxh72ydgfr/1FrsQUx0t+y9dmi4w4G0t16O8dRc=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":101066,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJh5W/cCRA9TVsSAnZWagAAxjkP/2ARqxK+6usofqcV+r1E\nFMbf6X4NAglSGDhhLGqiRSkyJkjQXXleTF1c7zkGjVD4fMVsvXxs7lV/xaZJ\niADlmmqZPKlnu8JDh0Xpz6VEIm9OB1BWSk9x6WKcQLsV9UDG15l2lOLN/ZAq\nfnZWEycYPklqsQcvMJjeIqHL4xBSKBICQclUnACk4sHIxVBuE4AME+1bTJbO\nuhG3y+rgPz2P8g0l+UVYrW5oqsj1mIv2tx0gLGz28q53ydyAf5xpLd3nMDrt\nVhS4NDUh9DnIVNzdpzuxDmoJptPYKCuMmzC0gJEsi7q0b0qOZDipIMPoGKhh\nTtbC6aghYb++7iaNQV6X/UxgE/18AY4HMtWWgQyHc7DzVaUBlANGdaPDYY9F\nWPm+hldWcql0VWXS8TBQbTYWID5aUgJ7D6Z6Hoz9aCfVSkSknQNP4Gf32JPY\n130j8B0BWRCOg+iF+Wg2Yeg9USs0nnaDTf8GzXzVkcf8VyfTcL2BIhyin7yY\nm7ZxALTxHoj6oJYbkDDFmSXRNED34wPOF4aPIQC9GMnHRvjaxNOrVGzOT9lK\nMMMGnnqxxWbW0XrFYagMi3PRic4LsFd/xjUZZJdrhSGVw4dXWChnQtMct7AQ\nvZJJ9GMZjW/0/kao0uPwM581mcGteRHt9Rbfk+l4Cg7EoAmYfSEDyqzgnEe2\nHo1X\r\n=rOtw\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","readme":"# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\n[![Publish Documentation](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml/badge.svg)](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml)\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=14.2.0"},"gitHead":"fd9ed103b7e8c28b43abf7173ecda86369b0a700","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint lib test && deplint","test":"npm run lint && npm run test:unit","build":"npm run clean && tsc -p tsconfig.build.json","clean":"rimraf build","prepack":"npm run build","lint:fix":"balena-lint --fix lib test","test:unit":"jest"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"versionist":{"publishedAt":"2022-01-17T13:29:20.196Z"},"_npmVersion":"6.14.15","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --fix"]},"_nodeVersion":"14.17.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.4.0","@balena/jellyfish-logger":"^4.0.16"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^27.4.7","sinon":"^12.0.1","deplint":"^1.1.3","ts-jest":"^27.1.3","typedoc":"^0.22.10","typescript":"^4.5.4","@types/jest":"^27.4.0","lint-staged":"^12.1.7","@balena/lint":"^6.2.0","@types/sinon":"^10.0.6","@types/semver":"^7.3.9","simple-git-hooks":"^2.7.0","@types/json-schema":"~6.0.1","@balena/jellyfish-types":"^2.0.4","@balena/jellyfish-config":"^2.0.2"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.2.25-lucianbuzzo-mixins-fd9ed103b7e8c28b43abf7173ecda86369b0a700_1642426332268_0.411869452922327","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.2.25":{"name":"@balena/jellyfish-plugin-base","version":"2.2.25","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"Apache-2.0","_id":"@balena/jellyfish-plugin-base@2.2.25","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"04afed54ab3f3304823cf1a0c9295eaa600cf5ba","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.2.25.tgz","fileCount":31,"integrity":"sha512-YP/JUD+XvkNFCb9yjKbTmPCvUdrWui886qiH2zsvrvhWJaqLDuRvXZLwMjFwtHtNUWdYOUwZLyrPM+dojy9j+w==","signatures":[{"sig":"MEUCIQDIkF0Pt9eQU5SxXSDmgCJLZjge5wmZ4LExNdtQvTG+jgIgIEOEl5g4BTFThdL+hLgXRLVRq4HgTTAB3qUDq2ZywT4=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":101006,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJh5XE1CRA9TVsSAnZWagAA/bIP/3i4jBTpf/UGLBYuz6qo\nn+5uvJoJbcHR20rogO4GtGQlQZBF5lxpk/JwdkhIo/A6MZ5Epce58fi69RG9\nc3fjuOJvgX0vCN7zSEqQX5uy10KN2VZSb+4pgl8iqbngUT+4W8qjzbtYEVkp\npC872YxnMIH70+X6gyeoAq9z2YPGBHyFrDfSK+QQNAkTnhcgRNuEmI/wrNDT\nfEvEAjNoyUyDXvpylZGDq4YNH0rHU1CXORpa6NKKblX7ey5KTJ0j/1yzRM23\n9AgQ8zsqfy770QSNN62t/4XDygPPJr1qrD0LDort2LTKvfQdQ9aCDbO+8j6J\njs30F2GHZZitqnO9nwA5NQi/SV1GxnQThOqoypfmeACu9uwaK9MFmE/vbL7T\nGr3Qbwv+Oplii0FcbeU7BKa8snCW7/VALpeddJE0Nuh4P+I/E7tjK1WcsiW4\nXyd1S9gyxOzZFDMIHlHVzBrSIGVoLyqmPQuNiL3uktM74cyWuy/YiOEcWTHn\nhviXclKNdIl/+MTsrLxHcWM3Y4Tssbsv4FPtH1zeOXK0quUwUPcZT7h+2lA8\nwtWqryiqhkfhoedGv4lwG+kcODDhi51M4QL7CSLUcVu1/GmQfeOMM+czy1Qk\nTdm3TKrJ+xwJczvkW2i0NeR0XSH8KPN79j0cTQsbtG3y3/OidJpSMKVic9iO\nvVUb\r\n=wOOx\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=14.2.0"},"gitHead":"db899b6a979c3645e361ce983fe134acf878b2b2","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint lib test && deplint","test":"npm run lint && npm run test:unit","build":"npm run clean && tsc -p tsconfig.build.json","clean":"rimraf build","prepack":"npm run build","lint:fix":"balena-lint --fix lib test","test:unit":"jest"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"versionist":{"publishedAt":"2022-01-17T13:35:39.938Z"},"_npmVersion":"6.14.15","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --fix"]},"_nodeVersion":"14.17.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.4.0","@balena/jellyfish-logger":"^4.0.16"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^27.4.7","sinon":"^12.0.1","deplint":"^1.1.3","ts-jest":"^27.1.3","typedoc":"^0.22.10","typescript":"^4.5.4","@types/jest":"^27.4.0","lint-staged":"^12.1.7","@balena/lint":"^6.2.0","@types/sinon":"^10.0.6","@types/semver":"^7.3.9","simple-git-hooks":"^2.7.0","@types/json-schema":"~6.0.1","@balena/jellyfish-types":"^2.0.4","@balena/jellyfish-config":"^2.0.2"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.2.25_1642426677841_0.6293168712290818","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.2.26-joshbwlng-update-readme-cfa635744f7b9f7bbcf6f83f7bfc5c0e8fd351f2":{"name":"@balena/jellyfish-plugin-base","version":"2.2.26-joshbwlng-update-readme-cfa635744f7b9f7bbcf6f83f7bfc5c0e8fd351f2","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"Apache-2.0","_id":"@balena/jellyfish-plugin-base@2.2.26-joshbwlng-update-readme-cfa635744f7b9f7bbcf6f83f7bfc5c0e8fd351f2","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"4dc8c8cef068c7f74c84deba8a8a1c370b50b90e","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.2.26-joshbwlng-update-readme-cfa635744f7b9f7bbcf6f83f7bfc5c0e8fd351f2.tgz","fileCount":31,"integrity":"sha512-8IQOUmLPUcF4rKMdey+31LFoDJQaYuVCl43uO2MKXSlugAVXRCYrH6CgS7E/jXfub2gOftugxKZeRkVY6x94Qg==","signatures":[{"sig":"MEUCIQDzU7lg6OeNAMmckyhrgam8TRxbo0rMKexv0ZV9cdQRawIgCkhNSLnROH3nbWx7bCZD62z3CGFuJ8qCubEEVxsosas=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":101328,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJh9O9NCRA9TVsSAnZWagAAJ7oP/i5f7U+M4r00JSaUfTfx\nwbvYgjPbwWTFRJ/ZkWZ9dSZ6Myqyu0gCyDOB5Qjg6pCj1wBKO8Y5iG1IbbfL\n0Hk9av71OiTZYNreD4YqnlbG+kWEwNoxZiydR3Z2TGoj3QDEwBWI2E2LKYTu\nH6KekdUS6pVlLmr/EmxqhExpoB//oPbaJaZz4qF5yWoui1C/Y83rfhLq6JKK\nbuWZSGkO0wjtc7fpf8razqeHHoXUiucwp288w5LM8J5bCh1XVUnn6LuZoDvi\np0NuEcsBFVRh7DlYLRRwmv3swLmbXBBmXpCid1+4fHoJgJYzy0RCyhDfWhWT\nnCWD8IMJnrZwZYzErVZe7RDfdIRHcoHHmtXtuLKdA+Pdmr172joN3qf8QDmY\nSlO6ORTrT8MLMur8ftq195jPZ7PQaeuEkOoFAhI0Ryyj9VkSdmI3Ik0kadXp\nZujumC4xCgrU/K392QylmLaKtISR6zxo9a3s2Ur0DT+SJhydkle8qVZFkjTm\nAbN3T78786/1c57cIEmM9xInqw4eUUec+tgyis1MjYIXISsq3gf6PWK6ihN1\nyldMgoUlOytsEYwR/VEBRcu6OXjdfFKc/BGaiHOfFzNHz8AFeKKk8Oa+EvE4\nH8/VlhNQontlDDMUK8GYgVzp/Sr5KW3GwFRIiq7eqrNjZJ7MaaC7wT06gV4s\nlxzI\r\n=FPsG\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","readme":"**Notice: This utility has been discontinued. The functionality provided by this module has been merged into [`jellyfish-worker`](https://github.com/product-os/jellyfish-worker).**\n\n# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\n[![Publish Documentation](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml/badge.svg)](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml)\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=14.2.0"},"gitHead":"cfa635744f7b9f7bbcf6f83f7bfc5c0e8fd351f2","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint lib test && deplint","test":"npm run lint && npm run test:unit","build":"npm run clean && tsc -p tsconfig.build.json","clean":"rimraf build","prepack":"npm run build","lint:fix":"balena-lint --fix lib test","test:unit":"jest"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"versionist":{"publishedAt":"2022-01-29T07:36:44.381Z"},"_npmVersion":"6.14.15","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --fix"]},"_nodeVersion":"14.17.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.4.0","@balena/jellyfish-logger":"^4.0.16"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^27.4.7","sinon":"^12.0.1","deplint":"^1.1.3","ts-jest":"^27.1.3","typedoc":"^0.22.10","typescript":"^4.5.4","@types/jest":"^27.4.0","lint-staged":"^12.1.7","@balena/lint":"^6.2.0","@types/sinon":"^10.0.6","@types/semver":"^7.3.9","simple-git-hooks":"^2.7.0","@types/json-schema":"~6.0.1","@balena/jellyfish-types":"^2.0.4","@balena/jellyfish-config":"^2.0.2"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.2.26-joshbwlng-update-readme-cfa635744f7b9f7bbcf6f83f7bfc5c0e8fd351f2_1643441997417_0.41110550156518055","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.2.26":{"name":"@balena/jellyfish-plugin-base","version":"2.2.26","author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"Apache-2.0","_id":"@balena/jellyfish-plugin-base@2.2.26","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"}],"homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"dist":{"shasum":"b6de4b864fde48348861efdc0bf3f6b066f59c1e","tarball":"https://registry.npmjs.org/@balena/jellyfish-plugin-base/-/jellyfish-plugin-base-2.2.26.tgz","fileCount":31,"integrity":"sha512-oR1gxkB3S12LgpTVFkTK4CfG2co+oX3MZ1qQIObpTv9h3cFk5wd5Ymo1jhf9W1LHe4WBgAh4r5sARhTyH2rZ6A==","signatures":[{"sig":"MEUCIA25u/0cgkXTlQFZIToYoYTHCGWK5qQ68Sbnkg9Bg+SnAiEA485iUjmrSdHPcxpfd5HNXPaqn7xkzuH27Kv0dHdAXvg=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":101263,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJh9PAoCRA9TVsSAnZWagAAxP0QAITMUc0Z1KkDZKOShTCL\n+hHX+lyJoun5kYZGMKclT7tK1hEDcyRu2pWzJmRJxak5CQORachS2zCKfSRC\nywcCSv6Z/ld8up8KtGYXCH0BlgYbP13XUvMkmOwaMYCM2a3N4UYtPmv5O/tZ\ngBes4/E/XWp62OG/x7c0Egark/qRxzsw1xwJMArkg7dwsX7gOp7m4rmHzFa3\nAMOVnfADwBpfFDgWGKBzpqmaZz6AnMhn+kDiFpwu8RqfeqshWTcnMLTiGRk2\nDdyiNcDpt4+Rkq90m7fvZWUll02V2ScYW5KnmdgW299i6M4xtxZ+Rjmsp7vk\nTNA+nhjB40pUuGUw2SRXahX1eQbAQL3a6YXKVLj1hQJfBlyy0zst4mPqyz+h\nwMnAlUBum36EbidRo3vT9zZUIp+lkp4/3ln5FizJ9RGTzQAXzVAT/MKd/Hcr\n+9K5V+dW2Fw3ZJL1D6b5g6/aY63F2s+njcB4ll1f9u7jllD9Ti/jYFWDsYDz\npgVP7jX1m5ZS3dMcfUtjHv4wacP9JmsJsOKnUZ2F1KSaz3X2ngSZ9sV4Z7Tq\nVn02MPeAzavAi0mKXhNPFxaC9BXOyRMTp0gapg74iba3wZMlMyr60K1Nn6OI\nHCr1IYWnD1UUcYUJs1Dow7eajD0uKznKktcC5/RqMrEgVg+wcvkMDslvU9UD\n8qUm\r\n=C1+l\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","types":"build/index.d.ts","deplint":{"files":["lib/**/*.{ts}"],"modules":["lib"]},"engines":{"node":">=14.2.0"},"gitHead":"775c36ecc9291677ccc4c93a7e9a94bb8ec72fb1","scripts":{"doc":"typedoc lib/ && touch docs/.nojekyll","lint":"balena-lint lib test && deplint","test":"npm run lint && npm run test:unit","build":"npm run clean && tsc -p tsconfig.build.json","clean":"rimraf build","prepack":"npm run build","lint:fix":"balena-lint --fix lib test","test:unit":"jest"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"versionist":{"publishedAt":"2022-01-29T07:41:41.405Z"},"_npmVersion":"6.14.15","description":"Base for all Jellyfish plugins","directories":{"lib":"lib"},"lint-staged":{"*.{ts,tsx}":["balena-lint --fix"]},"_nodeVersion":"14.17.1","dependencies":{"lodash":"^4.17.21","semver":"^7.3.5","skhema":"^5.3.4","json-schema":"^0.4.0","@balena/jellyfish-logger":"^4.0.16"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^27.4.7","sinon":"^12.0.1","deplint":"^1.1.3","ts-jest":"^27.1.3","typedoc":"^0.22.10","typescript":"^4.5.4","@types/jest":"^27.4.0","lint-staged":"^12.1.7","@balena/lint":"^6.2.0","@types/sinon":"^10.0.6","@types/semver":"^7.3.9","simple-git-hooks":"^2.7.0","@types/json-schema":"~6.0.1","@balena/jellyfish-types":"^2.0.4","@balena/jellyfish-config":"^2.0.2"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/jellyfish-plugin-base_2.2.26_1643442216567_0.7375228702759027","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."}},"time":{"created":"2021-01-12T05:23:12.963Z","modified":"2026-01-29T10:39:28.022Z","0.0.2-initial-setup-5e8f2757dedda83475b5e50a2e710610d6479876":"2021-01-12T05:23:13.356Z","0.0.2":"2021-01-12T05:35:43.087Z","0.0.3-update-readme-4f70407c2638cd42aeaf2a354e6fb63e5fbba82c":"2021-01-13T08:06:45.229Z","0.0.3-update-readme-8439f7448285ef8e023b0ccb2f6b857f14d5348c":"2021-01-13T08:41:13.969Z","0.0.3":"2021-01-13T08:44:04.453Z","0.1.0-add-jellyfish-plugin-3ae0337dc7f30a0756afa66d7f978b73215a2027":"2021-01-15T01:33:41.171Z","0.1.0-add-jellyfish-plugin-2b4f368a1af03dbe4d1db958087bf0d85ac3440a":"2021-01-15T01:42:03.643Z","0.1.0-add-jellyfish-plugin-74e3a8b4c74ec5869400d550f3d4a002f0d70336":"2021-01-18T02:01:36.931Z","0.1.0":"2021-01-25T03:19:43.300Z","1.0.0-add-plugin-manager-68ed1c7ca04e201cac7b127888748dde4429c759":"2021-01-26T11:38:58.569Z","1.0.0-add-plugin-manager-411a8ac59bab206b03bb0c458d806b4c83cdb9d5":"2021-01-27T11:49:27.720Z","1.0.0-add-plugin-manager-411a8ac59bab206b03bb0c458d806b4c83cdb9d5asd":"2021-01-27T11:51:49.057Z","1.0.0-add-plugin-manager-4c90716f8ec452158887852a50de0e2edb4553bf":"2021-01-27T12:25:06.456Z","1.0.0-add-plugin-manager-6dcf90b996884be485d47a37685e2154c2f4f62d":"2021-01-28T03:16:29.069Z","1.0.0-add-plugin-manager-499b0723694b9b5c351fdb64ce20298870f9f8fc":"2021-01-28T03:47:03.699Z","1.0.0-add-plugin-manager-8e135731a43c38110a431025a903444c7abf2c40":"2021-01-28T07:55:29.184Z","1.0.0":"2021-01-29T00:08:04.871Z","1.1.0-add-actions-5442adb632a2efe4fb64fe073969c3a51605dda2":"2021-01-31T09:32:51.917Z","1.0.1-whitesource-configure-0591ec5999bff9095383e5f7f837e1b1414be79c":"2021-02-02T01:47:39.655Z","1.0.1":"2021-02-02T01:50:51.395Z","1.0.2-bump-deplint-bcfc700b79e73398f5ce3fffe678dec7df4a0179":"2021-02-03T04:24:33.602Z","1.0.2":"2021-02-03T04:28:38.271Z","1.1.0-add-actions-5f87a05b56c3c72f3b2cf7363c526e8dedb988ab":"2021-02-03T07:09:18.986Z","1.1.0-add-actions-3d36c38c10e04286d8c4a67231792f130a9bd624":"2021-02-03T07:55:00.694Z","1.1.0-add-actions-0c527a4a2290c464b5990ad0efc4c0ed68cb1248":"2021-02-03T08:12:09.237Z","1.0.3-renovate-npm-version-6313f55519ce7dce2a96412eeddde9f2e7856266":"2021-02-05T07:31:54.766Z","1.0.3":"2021-02-05T07:36:41.738Z","1.1.0-add-actions-12850ddff66c74e242cdc7249aec1019e51e3766":"2021-02-05T08:38:06.495Z","1.1.0":"2021-02-05T08:41:27.617Z","1.1.1-use-shared-renovate-config-8ef49a553279b2030f19374e12610022cc990210":"2021-02-07T01:00:36.746Z","1.1.1":"2021-02-07T01:03:47.027Z","1.1.2-renovate-non-major-f525f4fdba7b11c198157f395483c30f9958495c":"2021-02-07T08:56:27.995Z","1.1.2-bump-logger-be125befae167e98901ea1efd7aa7c2f7fb2a739":"2021-02-07T08:56:49.759Z","1.1.2-renovate-balena-jellyfish-logger-1-x-9e232cc086169b220903beeb52d9b2efe5c7c2c9":"2021-02-07T08:57:42.399Z","1.1.2-renovate-balena-jellyfish-logger-1-x-a21ae9a2cf3fbccd32f61616c42d0fd83a9926f1":"2021-02-07T09:00:49.611Z","1.1.2":"2021-02-07T09:04:18.292Z","1.1.3-renovate-non-major-85e54e02799b13e8fc7565933c6e4cd0f839df4a":"2021-02-07T09:07:49.101Z","1.1.3-renovate-non-major-a6ebe2306dd92affd4027a2daff639b7075b8369":"2021-02-07T12:53:00.166Z","1.1.3-renovate-non-major-d982a3707056fb3a029ff991a37b4cf15d6e877d":"2021-02-08T13:48:34.933Z","1.1.3-renovate-non-major-9eb55a5f1486b8c3ee4aeb4817e7bbff90133d0b":"2021-02-08T18:04:27.791Z","1.1.3-renovate-non-major-ab7585a85bef6f5a4f8caaffce0b6b2c80bf822f":"2021-02-08T20:07:56.686Z","1.1.3-renovate-non-major-af5c03839a62df401b015460200c1907bd77170d":"2021-02-08T21:38:34.537Z","1.1.3-bump-balena-lint-29da01180300d020a7e2f8f4ca22a4e538eedfad":"2021-02-09T00:42:58.029Z","1.1.3-renovate-non-major-c76fc6c289fbf782d38928179372f4fb78f5eb37":"2021-02-09T00:45:58.024Z","1.1.3":"2021-02-09T00:47:03.344Z","1.1.4-renovate-non-major-ecc82f8ebba5597a093657b61c2746d9b7882e92":"2021-02-09T00:51:40.246Z","1.1.4":"2021-02-09T00:54:53.713Z","1.1.5-renovate-non-major-bb891781f81f77a75545dd3ef6f66277ede30d92":"2021-02-09T01:55:46.633Z","1.1.5":"2021-02-09T01:59:57.576Z","1.1.6-fix-card-types-2096d125c7329ec5a57eafe2a852fe5948441e13":"2021-02-09T05:58:10.568Z","1.1.6-fix-card-types-9ba6e8404e67b9f0d6469876bc868b1f35dd0782":"2021-02-09T06:04:15.365Z","1.1.6-fix-card-types-6623d1d18c8a283216a5d7966051ca149c9aaae8":"2021-02-09T06:32:26.054Z","1.1.6-fix-card-types-8c521e7c02b14c356f1dd6d52eb9e5263d2df519":"2021-02-09T06:44:12.879Z","1.1.6":"2021-02-09T06:47:22.943Z","1.1.7-renovate-non-major-2fb12b7e51bda359283a3e28a12e816c9c71470e":"2021-02-09T13:36:46.165Z","1.1.7":"2021-02-09T13:40:05.877Z","1.1.8-renovate-non-major-259b8786b7da6fb71f7c5bc3220834cf94881a03":"2021-02-09T20:06:54.464Z","1.1.8":"2021-02-09T20:10:13.141Z","1.1.9-renovate-non-major-c2c2bebf6d18fa28c85cdf4d98e0d64187afc57e":"2021-02-10T21:46:14.080Z","1.1.9":"2021-02-10T21:50:17.372Z","1.1.10-renovate-non-major-0a24c8b638b2b5eec9866c7665b56ca0830a6bdf":"2021-02-11T04:18:36.649Z","1.1.10":"2021-02-11T04:21:50.135Z","1.1.11-renovate-non-major-bc7691e1ca8e61b82091e21e1b5f21d3d85ffc97":"2021-02-11T09:05:17.881Z","1.1.11":"2021-02-11T09:08:13.649Z","1.1.12-renovate-non-major-49af97d14cce8a418cfd79dc276454c0d7588792":"2021-02-13T01:04:34.696Z","1.1.12":"2021-02-13T01:07:59.368Z","1.1.13-renovate-non-major-f34abf799315f3ea62b21c730c004a64045e9704":"2021-02-13T04:56:10.870Z","1.1.13":"2021-02-13T04:59:11.891Z","1.1.14-renovate-non-major-4fc6ef5dec81361f9bf072a5ab622ce19b6f6a02":"2021-02-15T04:13:20.610Z","1.1.14":"2021-02-15T04:16:28.905Z","1.1.15-renovate-non-major-c3f37d9154c47b99d0f26fce5ce2ef4f627c2e52":"2021-02-15T06:06:56.779Z","1.1.15":"2021-02-15T06:10:08.552Z","1.1.16-renovate-non-major-ca5756520eb8a3ae03dfd05392194af486b37638":"2021-02-15T07:44:51.007Z","1.1.16-renovate-non-major-22d8acb85b6c5814c419844cc57fe3e14d4a4e66":"2021-02-15T09:47:08.545Z","1.1.16":"2021-02-15T09:50:22.973Z","1.2.0-update-types-d249869ae26573f812fabadbd20e2da76490df06":"2021-02-16T02:57:42.261Z","1.2.0":"2021-02-16T03:55:32.852Z","1.2.1-renovate-non-major-fa70a544456a6617311bba3a3ea50ab05cf02b40":"2021-02-16T06:27:54.373Z","1.2.1":"2021-02-16T06:32:05.218Z","1.2.2-renovate-non-major-f5ff1a35cc3461b6f35a2815528aa250d1fd23f0":"2021-02-16T12:10:18.263Z","1.2.2":"2021-02-16T12:13:06.266Z","1.2.3-renovate-non-major-e011be0bd7158b8712daca53c77b7ef24143defa":"2021-02-16T16:43:48.756Z","1.2.3":"2021-02-16T16:47:23.554Z","1.2.4-renovate-non-major-f3cabff8dba2a605b8d0bec993a9b651f9f17250":"2021-02-16T20:26:59.320Z","1.2.4":"2021-02-16T20:30:15.370Z","1.2.5-renovate-non-major-c1ad2166c8385e91130ff90a6798085781c07a7d":"2021-02-17T00:20:06.839Z","1.2.5":"2021-02-17T00:23:20.219Z","1.2.6-renovate-non-major-00e65cfafce0cd4426409786998fdc0904d17696":"2021-02-18T12:21:58.746Z","1.2.6":"2021-02-18T12:25:13.265Z","1.2.7-renovate-non-major-c55c8876980385c5e883aa66b896f7132cf02f03":"2021-02-20T04:44:54.939Z","1.2.7":"2021-02-20T04:48:16.966Z","1.2.8-add-changelog-yml-8720ee2d3f8e0a6a323c9d643f430b22ea1de4ad":"2021-02-20T09:42:18.686Z","1.2.8":"2021-02-20T09:45:29.943Z","1.2.9-renovate-non-major-b8e75555e8e17e563d248d0b2c932ab7e82f83f6":"2021-02-20T09:50:43.396Z","1.2.9":"2021-02-20T09:53:47.391Z","1.2.10-renovate-non-major-2486b4fac166b1f70fb0b18ad07339b4c1586953":"2021-02-20T16:22:52.362Z","1.2.10":"2021-02-20T16:26:16.142Z","1.2.11-renovate-non-major-37729c9cfae89619d03ad352aa762cb51e9cdc21":"2021-02-20T18:32:06.568Z","1.2.11":"2021-02-20T18:35:22.943Z","1.2.12-renovate-non-major-cd304415e15d8eb0a2f456b43fb3c750ede4d6c8":"2021-02-21T01:21:37.550Z","1.2.12":"2021-02-21T01:24:39.334Z","1.2.13-renovate-non-major-374a079abe169e1a30fcb0818c6c85202cf4cd7a":"2021-02-21T04:59:04.831Z","1.2.13":"2021-02-21T05:02:19.760Z","1.2.14-renovate-non-major-d4d67e4116ef5d7730a1abd652b7483fb456e5ed":"2021-02-21T23:16:49.731Z","1.2.14":"2021-02-21T23:19:58.583Z","1.2.15-renovate-non-major-63faee167363189d50a364ccd38352bc90648ad8":"2021-02-22T05:40:11.052Z","1.2.15":"2021-02-22T05:43:05.319Z","1.2.16-renovate-non-major-d04649778c00a91ef49b34905815f7e4a0b8a561":"2021-02-22T18:39:59.388Z","1.2.16":"2021-02-22T18:43:14.892Z","1.2.17-renovate-non-major-f6d790530e140ecd0ae7272453028920b7606e57":"2021-02-22T21:01:12.472Z","1.2.17":"2021-02-22T21:03:55.047Z","1.2.18-renovate-non-major-cf2eef7cecd164fd76273a403951e200e89d992a":"2021-02-23T04:09:55.735Z","1.2.18":"2021-02-23T04:13:07.797Z","1.2.19-renovate-non-major-08f91ade875868d6db2e572e626acc91aa36e521":"2021-02-23T11:28:53.511Z","1.2.19":"2021-02-23T11:32:11.375Z","1.2.20-renovate-non-major-6031836d5271b86e5da7962483d75ea4a3dadba8":"2021-02-23T14:54:51.244Z","1.2.20":"2021-02-23T14:57:58.344Z","1.2.21-renovate-non-major-10364fb7a9b4074734380c8e4bb421f6b8c5e9f5":"2021-02-23T22:40:21.885Z","1.2.21":"2021-02-23T22:43:26.864Z","1.2.22-renovate-shellcheck-1-x-ee6098e3dd57319f7c27b164057dc92bbfaebf02":"2021-02-25T18:55:08.346Z","1.2.22":"2021-02-26T10:25:08.974Z","1.2.23-renovate-non-major-f052b78c4c342060e9ab64141c9184eff256f78e":"2021-02-26T12:22:12.524Z","1.2.23":"2021-02-26T12:25:43.550Z","1.2.24-renovate-non-major-49c59ebc6c27ad453551bd4dbc15795e65319998":"2021-02-28T00:38:10.884Z","1.2.24":"2021-02-28T00:41:26.116Z","1.2.25-renovate-non-major-8ac4d3653dc228836d14ffc1e1b39641f4c612ba":"2021-02-28T03:46:00.321Z","1.2.25":"2021-02-28T03:49:20.462Z","1.2.26-renovate-non-major-c5a82dc2aaa4bf796fd274586c1273203b0f6955":"2021-02-28T14:06:57.915Z","1.2.26":"2021-02-28T14:11:01.921Z","1.2.27-renovate-non-major-1f6a4a67af54055a81b1b0f2ad84bc2d6fccba09":"2021-03-01T02:39:56.647Z","1.2.27":"2021-03-01T02:43:13.894Z","1.2.28-renovate-non-major-522f21a50cbc3d73f8ba2d1730103e7f622c7709":"2021-03-01T04:14:51.578Z","1.2.28":"2021-03-01T04:18:13.455Z","1.2.29-renovate-non-major-f50edd020bde12e106c3927b9ad7cb877fb6da66":"2021-03-01T18:42:05.268Z","1.2.29":"2021-03-01T18:45:40.127Z","1.2.30-renovate-non-major-bf14c0eb5b203ffad227ce339b9f9fc86584cb86":"2021-03-02T04:45:43.504Z","1.2.30":"2021-03-02T04:49:04.056Z","1.2.31-renovate-non-major-11cb141c90138db546ab7cd717d02990a5aed21c":"2021-03-04T07:59:13.486Z","1.2.31-renovate-non-major-abe0d99a84a21350fd0e966b45b1f6371bce4c74":"2021-03-04T23:33:39.989Z","1.2.31-renovate-non-major-79912a32a3d0eb2a6a4a139af81c22a316f55c7d":"2021-03-06T17:55:41.195Z","1.2.31-renovate-non-major-51c05fd7a5465d85ea0b0aed41bd7837bf5938cd":"2021-03-07T12:46:45.346Z","1.2.31-renovate-non-major-c83d8d74c3b350f1750d1ed530cdb5822c4b0a48":"2021-03-10T10:48:04.870Z","1.2.31-renovate-non-major-ed4ec838aa8894e0640b59358be6f065231f8cf4":"2021-03-11T01:11:19.085Z","1.2.31-renovate-non-major-2efd98171616caa08e97fdd6fca12805c6ac09cf":"2021-03-11T11:47:27.794Z","1.2.31-renovate-non-major-529a5a2bf70b4e8604bc6369ec87d6c8840ef2c0":"2021-03-12T00:20:03.235Z","1.2.31-renovate-non-major-7cdeaaad33d74dfb5bb32d42768d279833edcbda":"2021-03-13T01:31:52.305Z","1.2.31-renovate-non-major-2994bdce6ed883ea7956a02a161794635ed41ad8":"2021-03-13T04:21:02.622Z","1.2.31-renovate-non-major-40eaae78d073e66a008b30fd27d5700c5ebf764b":"2021-03-13T14:45:46.113Z","1.2.31":"2021-03-13T14:49:34.118Z","1.2.32-renovate-non-major-855f000fbeb2d8cd0dbefdede1306fb3e7d02df6":"2021-03-14T04:09:44.351Z","1.2.32-renovate-non-major-9609ee255348a2693b8cf3b40ab78ff65dae98a1":"2021-03-14T21:39:12.650Z","1.2.32-use-jellycheck-27b6d0e770a7cef90f3dd8235e236c86b118cbaf":"2021-03-15T10:06:50.538Z","1.2.32-renovate-non-major-a5bb1024478677fa6695c96a1fe2782cad197ff4":"2021-03-15T14:05:01.952Z","1.2.32-renovate-non-major-d30a2021bc9478962d45520fd38fd2c1c31e98c7":"2021-03-15T16:44:29.820Z","1.2.32":"2021-03-17T01:36:44.059Z","1.2.33-renovate-non-major-c007dbadc6d4fde2593a233111d1ac362a61b9fc":"2021-03-17T01:41:02.942Z","1.2.33-renovate-non-major-7e38a3d77ec54f8a0cadcd1246fad0f1d97f8fb5":"2021-03-17T16:09:30.746Z","1.2.33-renovate-non-major-7c0a0da367ed092df37c0f3e52f6b07d9159f863":"2021-03-18T01:00:52.036Z","1.2.33":"2021-03-18T01:04:23.454Z","1.2.34-renovate-non-major-e8d8e8e1b3c59032d731b4a3ef4d4babe2d8a069":"2021-03-18T01:08:09.078Z","1.2.34-renovate-non-major-773d77641351e3942544de9ef3043002087b09d9":"2021-03-18T02:41:36.750Z","1.2.34":"2021-03-18T02:46:09.455Z","2.0.0-use-jellyfish-types-b195af1c629de8ccd5d8279349c6eed5217c280c":"2021-03-19T08:32:49.239Z","2.0.0-use-jellyfish-types-015d930ee8a4d6db2dbdc9407d1e242210db46c2":"2021-03-19T08:46:14.423Z","1.2.35-renovate-non-major-726b47f24f859efe256981b0dd0f01b5bc1e7016":"2021-03-19T21:09:19.035Z","1.2.35":"2021-03-19T21:12:48.437Z","2.0.0-use-jellyfish-types-dab11491927b1c9ca7667fd42b56a4046e23b6bf":"2021-03-20T09:03:18.494Z","2.0.0-use-jellyfish-types-260b3fe703c214cadebf177ed4a3a1a4b0ee46db":"2021-03-20T09:12:46.833Z","2.0.0-use-jellyfish-types-fb0434cf023baab2a350fd868be81c5a9f7480fd":"2021-03-20T10:30:13.650Z","2.0.0-use-jellyfish-types-2ff0c89a0ddb3b4058091a4f29dc71c7004110c8":"2021-03-20T10:36:00.706Z","2.0.0-use-jellyfish-types-5e2718aa5bc2c70840954cc3bb4ae6a8103ea2f0":"2021-03-20T11:38:56.237Z","1.2.36-renovate-non-major-4d6429a1029b8f4397c153d88dc841b81c521b4c":"2021-03-21T19:52:50.723Z","1.2.36":"2021-03-21T19:56:05.911Z","1.2.37-renovate-non-major-80d55966c4207a7a56a02cddc84886eaf021508a":"2021-03-21T22:15:11.398Z","1.2.37":"2021-03-21T22:18:46.745Z","1.2.38-renovate-non-major-1c83d5d636cdd34f6d19d0f76c0aa523b3c5f6f2":"2021-03-22T01:07:13.827Z","1.2.38-renovate-non-major-f69ed8fbf6c602aa62ce4c7a4588fa437f0f8f6b":"2021-03-22T03:16:44.385Z","1.2.38":"2021-03-22T03:19:33.415Z","2.0.0-use-jellyfish-types-480eb222dd18b15fc78c4eab0713c9e1be60cbb8":"2021-03-22T04:11:29.796Z","1.2.39-renovate-non-major-d1d25372f7e483ac38ebd0b63f18b32fcf7ee7de":"2021-03-22T06:13:54.868Z","1.2.39":"2021-03-22T06:17:22.045Z","1.2.40-renovate-non-major-0a7b4d759e2e618d839648fafc8e78492b133e54":"2021-03-22T12:24:32.934Z","1.2.40":"2021-03-22T12:29:00.355Z","1.2.41-renovate-balena-jellyfish-logger-2-x-84c66da85985fc0a3daaa932c802a7766d055180":"2021-03-22T19:31:26.866Z","1.2.41-renovate-sinon-10-x-2f527a3b13c71c677246906b568e269a5ca970dd":"2021-03-22T19:32:37.692Z","2.0.0-use-jellyfish-types-bad5f79976a9cd48c5f245efe9b2637846be12ae":"2021-03-23T02:03:22.425Z","1.2.41-renovate-non-major-409992412e007d5f1a1e1533f1234a85cb2c9a1b":"2021-03-23T02:20:26.735Z","1.2.41":"2021-03-23T02:23:49.030Z","2.0.0-use-jellyfish-types-db6de98ea213300c4f78e2caef85d450a0b36c14":"2021-03-23T02:26:58.727Z","1.2.42-renovate-balena-jellyfish-logger-2-x-4e2295981797e75efdda801c2269dfde922e9ef1":"2021-03-23T02:27:06.908Z","1.2.42-renovate-sinon-10-x-8ddac46980f120f6787c60998d592943106b89c7":"2021-03-23T02:28:15.716Z","2.0.0":"2021-03-23T02:46:28.596Z","2.0.0-renovate-sinon-10-x-ce4cd3c3f02502b633313a73e5391844894dd835":"2021-03-23T02:50:05.397Z","2.0.1-renovate-non-major-60728534b8a818e18c064e60d8d36de8d724b021":"2021-03-23T02:52:47.499Z","2.0.1-renovate-sinon-10-x-b604be429dd51ac5da21613222a4b73d04594a88":"2021-03-23T02:53:23.622Z","2.0.1":"2021-03-23T02:56:27.221Z","2.0.2-renovate-sinon-10-x-ae519d0e7aa6b3bdcbb911b97367481bfe82c297":"2021-03-23T02:59:36.575Z","2.0.2-renovate-non-major-cc0932d3a2d444d4abbc129fd979978c39edc4bc":"2021-03-24T04:25:54.666Z","2.0.2":"2021-03-24T04:29:23.232Z","2.0.2-renovate-sinon-10-x-797ef467a9ddcd368ee83d1f820ff6f6223d02f5":"2021-03-24T04:32:44.965Z","2.0.3-renovate-sinon-10-x-c0dbd9833d877da4e664c43b44bccae6a527a9ac":"2021-03-24T04:34:48.114Z","2.0.3-renovate-non-major-e9277ed52576a2cbaa4ecc339ce6fc646d563b45":"2021-03-24T04:39:18.021Z","2.0.3":"2021-03-24T04:42:35.426Z","2.0.4-renovate-sinon-10-x-769bc4d19b5bb247637be4e364829808d737e37c":"2021-03-24T04:46:14.300Z","2.0.4-renovate-non-major-43a0a3bbab07d0ab274ffa8b91f5287feac44e9b":"2021-03-24T10:17:09.401Z","2.0.4":"2021-03-24T10:20:16.472Z","2.0.5-renovate-sinon-10-x-b05097c784bdddc4933d458828a34ece20d61810":"2021-03-24T10:24:02.673Z","2.0.5-renovate-non-major-f636a4353efb7190d42e13a46ad469b1f0a844cf":"2021-03-25T05:12:42.621Z","2.0.5-publish-docs-action-e81b4b9ac22a28ded6943b70ca7d1d16c04fed33":"2021-03-25T05:33:41.103Z","2.0.5":"2021-03-25T05:37:08.915Z","2.0.6-renovate-non-major-05d2b48aec468e048e1da925a5a7ce42f3488d16":"2021-03-25T05:40:06.414Z","2.0.6-renovate-sinon-10-x-47da430ef56d4323ef96b23321f6450b0d6af603":"2021-03-25T05:41:15.240Z","2.0.6-renovate-non-major-f41f1da146e162e4ad75c38785044de2ad137169":"2021-03-25T05:45:09.727Z","2.0.6":"2021-03-25T05:48:45.298Z","2.0.7-renovate-sinon-10-x-18a83bea09030ff272c0832e1f1c36014c925d4d":"2021-03-25T05:52:16.457Z","2.0.7-renovate-non-major-261e5f6110d1367cfbe4c07daf3dd1581fb70736":"2021-03-25T13:51:18.777Z","2.0.7":"2021-03-25T13:54:43.366Z","2.0.8-renovate-sinon-10-x-2b4a169943fbde3465b7f2631816baad03c5b985":"2021-03-25T13:57:58.301Z","2.0.8-renovate-non-major-db926b63cd37082e2978c31968978e281d83e364":"2021-03-25T19:59:42.494Z","2.0.8":"2021-03-25T20:03:29.632Z","2.0.8-renovate-sinon-10-x-784e33d578d1293fcdd0c9b0914580e069d7ba9f":"2021-03-25T20:06:12.396Z","2.0.9-renovate-sinon-10-x-f7bde8ead5297dcf197b851123bda9cba5ca9658":"2021-03-25T20:08:47.614Z","2.0.9-renovate-non-major-c2741c0b1e66d6406ec7fa5ac8e49b5f05ef5f85":"2021-03-25T22:43:09.888Z","2.0.9":"2021-03-25T22:46:37.504Z","2.0.10-renovate-sinon-10-x-e237e70769220df21e5f96eff59a8f50373ff5bd":"2021-03-25T22:49:53.800Z","2.0.10-renovate-non-major-570caa9be54bf318d3df6d666fcb01eb03f4349f":"2021-03-26T04:57:26.532Z","2.0.10":"2021-03-26T05:00:43.819Z","2.0.11-renovate-sinon-10-x-e304c7ab3a1d29e2d7db657819f3416ef036e32a":"2021-03-26T05:04:31.032Z","2.0.11-replace-husky-121b00b2843a7f0bd8117ea9ae88b85ca87c9327":"2021-03-26T06:00:21.908Z","2.0.11":"2021-03-26T06:04:13.142Z","2.0.11-renovate-sinon-10-x-661791bca8ca71736a87a9f3e7077ab687487ead":"2021-03-26T06:07:10.524Z","2.0.12-renovate-sinon-10-x-a4e8342c5f60de13aba2eddc715fc1586c2156af":"2021-03-26T06:10:42.173Z","2.0.12-renovate-non-major-25eb0503054c1c860aa566210573836a8c2a425c":"2021-03-26T13:53:21.503Z","2.0.12":"2021-03-26T14:01:41.936Z","2.0.13-update-interfaces-f0cd3afe3b687fcacb140e7cc6532c6da266a2f9":"2021-03-29T01:44:20.821Z","2.0.13-renovate-non-major-fa60d59e2b25c5b04fdd5252822071da236fd2c4":"2021-03-29T06:49:47.537Z","2.0.13":"2021-03-29T06:52:53.182Z","2.0.14-renovate-sinon-10-x-0f4080abf2284cbe028371a2447281a827481b3b":"2021-03-29T06:56:19.578Z","2.0.14-renovate-non-major-1b43c84936b4a4cc294e7738603c3d4a61d681fd":"2021-03-29T17:17:22.687Z","2.0.14":"2021-03-29T17:21:24.555Z","2.0.14-renovate-sinon-10-x-9c703f0136c43875e051677f96bb44352ff87929":"2021-03-29T17:24:56.056Z","2.0.15-renovate-sinon-10-x-480f9986f2befb4ea5f57d62ded780e8963e49e5":"2021-03-29T17:29:04.551Z","2.0.15-update-handler-return-cdffa0087095b13447c9456c584012f922eac234":"2021-03-30T02:28:40.136Z","2.0.15-update-handler-return-70e8d326861ac786b556d38f44ca6569902cd883":"2021-03-30T02:47:42.075Z","2.0.15":"2021-03-30T07:14:15.985Z","2.0.16-renovate-sinon-10-x-a62d35b24c1fc3ef55ff0ea6e1f18663044d3ee7":"2021-03-30T07:19:26.925Z","2.0.16-renovate-non-major-c8d71a085127d0a9f68535d63444a99c71e9fb6e":"2021-03-30T11:16:33.420Z","2.0.16":"2021-03-30T11:19:36.724Z","2.0.17-renovate-sinon-10-x-f6ecc92afe0b9e0d0812e3f648d6f33f2c1d5a5c":"2021-03-30T11:25:44.490Z","2.0.17-renovate-non-major-57971a16972edbb72c201b400ac21c0002ccb185":"2021-03-30T14:48:40.421Z","2.0.17":"2021-03-30T14:52:02.764Z","2.0.18-renovate-sinon-10-x-eacdc63951ceff649c8a740f42e9705b66b71017":"2021-03-30T14:55:46.350Z","2.0.18-renovate-non-major-5b749f94a78a8de9f1167f1e04418bd1c5bd3499":"2021-03-31T00:36:18.668Z","2.0.18":"2021-03-31T00:39:55.090Z","2.0.19-renovate-sinon-10-x-6c6b3b4a14d619717d9564106b861d22e135b622":"2021-03-31T00:43:26.339Z","2.0.19-renovate-non-major-5c62dece4cba7f77f45a8caf76ae0902a1a5f8bf":"2021-03-31T09:07:29.515Z","2.0.19":"2021-03-31T09:10:33.807Z","2.0.20-renovate-sinon-10-x-d1c66b45b40bfa5b96cc08d725d1a34c14d66bab":"2021-03-31T09:15:15.793Z","2.0.20":"2021-04-01T00:45:03.359Z","2.0.21-renovate-non-major-b09ee5cc1669daf6651f7278579c823078d39055":"2021-04-01T01:01:56.663Z","2.0.21":"2021-04-01T01:05:24.902Z","2.0.22-renovate-non-major-52428420776f7cdfeb673e9a5118cf55333df297":"2021-04-01T03:45:20.151Z","2.0.22":"2021-04-01T03:48:35.842Z","2.0.23-renovate-non-major-50628725ffbb76b5a25143a7c560fe155e676e7f":"2021-04-01T13:50:11.603Z","2.0.23":"2021-04-01T13:53:39.171Z","2.0.24-renovate-non-major-1457e9c0d3ce34363235843b60ac7818e3950830":"2021-04-01T22:52:47.705Z","2.0.24":"2021-04-01T22:57:02.848Z","2.0.25-renovate-non-major-74dbb7c6e5d007eff7956ce69c832ca1e00c1900":"2021-04-02T17:02:27.598Z","2.0.25":"2021-04-02T17:05:58.955Z","2.0.26-renovate-non-major-04cb0ca99506b35d60cfa785ebbcf2317b01c77e":"2021-04-02T19:02:42.468Z","2.0.26":"2021-04-02T19:06:31.117Z","2.0.27-renovate-non-major-7a6e2957d5a83de4a708ac06f6e50dcb61c3196a":"2021-04-02T21:13:17.618Z","2.0.27":"2021-04-02T21:16:36.004Z","2.0.28-renovate-non-major-30c5e59bb9838140b6665b77152721e6202e71c1":"2021-04-02T23:13:04.080Z","2.0.28":"2021-04-02T23:16:39.217Z","2.0.29-renovate-non-major-2a5a46d9d63aed2aa4c335857e0f71f1ff0806cb":"2021-04-03T01:13:05.491Z","2.0.29":"2021-04-03T01:16:19.628Z","2.0.30-renovate-non-major-c0b35c5094a94fb45f2a5b85d9c4ee7aa8871641":"2021-04-03T12:30:41.181Z","2.0.30-renovate-non-major-edb24c740896de5008841c69211fb01062011c76":"2021-04-03T12:35:24.363Z","2.0.30":"2021-04-03T12:38:58.829Z","2.0.31-renovate-non-major-e8e77dd42106788b36d17799128c25b904a8b17a":"2021-04-03T20:52:54.723Z","2.0.31":"2021-04-03T20:56:13.736Z","2.0.32-renovate-non-major-3cd775ffd32ecd6f60bb84fb43bbe4fe400260b9":"2021-04-04T02:19:48.883Z","2.0.32-renovate-non-major-0ebb9a035b58dcaa1f5b3dd5c75d0991cdcd9dd3":"2021-04-04T02:25:41.875Z","2.0.32":"2021-04-04T02:29:16.469Z","2.0.33-renovate-non-major-5f57d799cafbf95664db2ceca930b1e388a4746f":"2021-04-04T05:10:35.845Z","2.0.33":"2021-04-04T05:13:34.139Z","2.0.34-renovate-non-major-8a3be60d17f3f15119f8f91374559ef4bcc2def8":"2021-04-04T08:25:00.235Z","2.0.34":"2021-04-04T08:29:08.810Z","2.0.35-renovate-non-major-7fc48730f49bf5eff307c5ce6a4130353faf2054":"2021-04-04T09:25:52.710Z","2.0.35":"2021-04-04T09:28:55.442Z","2.0.36-renovate-non-major-08de2af5151c837599cfd3245e0635f910735e29":"2021-04-04T11:47:09.317Z","2.0.36":"2021-04-04T11:50:17.492Z","2.0.37-renovate-non-major-60394e447a31c3de829c8fe6ed9c28856b688ccf":"2021-04-06T13:26:12.192Z","2.0.37":"2021-04-06T13:29:19.876Z","2.0.38-renovate-non-major-7131827dd80240a15c74381b27ba66529937d418":"2021-04-06T15:18:45.776Z","2.0.38":"2021-04-06T15:22:38.144Z","2.0.39-renovate-non-major-f8732585616a9b34c967f6bfe224043d664e4679":"2021-04-06T18:50:08.452Z","2.0.39":"2021-04-06T18:53:10.808Z","2.0.40-renovate-non-major-0b60aeda7a8b85f9ce315efff0765e454e492719":"2021-04-06T19:46:42.875Z","2.0.40":"2021-04-06T19:50:20.432Z","2.0.41-renovate-non-major-a0bb0e120c54254a927b1fa5ee617723cdaff638":"2021-04-06T21:50:23.394Z","2.0.41":"2021-04-06T21:54:16.197Z","2.0.42-renovate-non-major-7f50b3b4eb9057a0c74fe544b98924874e742393":"2021-04-07T00:21:20.771Z","2.0.42":"2021-04-07T00:24:28.050Z","2.0.43-renovate-non-major-d08d9dee316ec23733e85dc40a633a06335c9563":"2021-04-07T19:56:38.121Z","2.0.43":"2021-04-07T20:00:05.170Z","2.0.44-renovate-non-major-323da6103eef0196eb06e368c5c4715174a72ec0":"2021-04-07T22:12:47.490Z","2.0.44":"2021-04-07T22:15:59.499Z","2.0.45-change-pre-return-type-3a45ac68d580810f3fa21368a716307eafa6cc9a":"2021-04-08T05:25:25.276Z","2.0.45":"2021-04-08T05:37:52.593Z","2.0.46-renovate-non-major-f1ba33d984bb196fb17c096e5348586f90801c91":"2021-04-10T10:00:51.983Z","2.0.46":"2021-04-10T10:04:27.936Z","2.0.47-renovate-non-major-4e3d976e5600d9350ece39bd92072381c1aa8351":"2021-04-10T12:05:22.894Z","2.0.47":"2021-04-10T12:08:55.478Z","2.0.48-renovate-non-major-dd7003b49269f4d1ea2ae34f969a3daff1c06a67":"2021-04-10T15:14:05.297Z","2.0.48-renovate-non-major-acee374e935ca7c0a4e3673e245ecdcb7792eef4":"2021-04-10T16:41:21.245Z","2.0.48-renovate-non-major-c9ebaa50e5f6c1015bedeaa49c2ae39da7e5d9e5":"2021-04-10T18:19:32.709Z","2.0.48-renovate-non-major-25b70c9cc861ff64cb533d14ce7e460043d0b211":"2021-04-10T21:09:39.552Z","2.0.48-renovate-non-major-91b607a3e2d4acb03b101231a3b9a4b1351ae5a3":"2021-04-10T22:54:41.477Z","2.0.48-renovate-non-major-d86e873d1557f5a1dc30b2ed640e10eaf3706bfe":"2021-04-11T00:41:15.024Z","2.0.48-renovate-non-major-779f02e05e83bb03bbe705038945b25526fffd44":"2021-04-11T01:54:40.535Z","2.0.48":"2021-04-11T02:33:40.668Z","2.0.49-renovate-non-major-fb89df143786bd6bf5f3f95f6fae0f25335a6fe8":"2021-04-11T04:04:44.180Z","2.0.49":"2021-04-11T04:09:18.517Z","2.0.50-renovate-non-major-1415dfe9a675bd0922646caa2cb7499d2ff9f5e7":"2021-04-11T05:36:26.434Z","2.0.50":"2021-04-11T05:39:41.398Z","2.0.51-renovate-non-major-f44f3a88e02b2de4cf98c81263798e2496a1b0ff":"2021-04-11T09:38:55.634Z","2.0.51":"2021-04-11T09:42:18.138Z","2.0.52-renovate-non-major-40adba63f6a03ae5be5145834821de30f077bd8b":"2021-04-11T13:48:00.988Z","2.0.52":"2021-04-11T13:52:56.148Z","2.0.53-renovate-non-major-af3d1c93c71e44a4edd993333d02d21917b0eff2":"2021-04-11T15:03:52.851Z","2.0.53":"2021-04-11T15:07:43.755Z","2.0.54-renovate-non-major-0576bcccf034009fd472e1d9a13a0c8f6e3cc582":"2021-04-11T17:42:01.380Z","2.0.54":"2021-04-11T17:45:32.509Z","2.0.55-renovate-non-major-e2cf3f18ba17a79dd0384c1eca8329aa1126afcd":"2021-04-11T19:29:27.791Z","2.0.55":"2021-04-11T19:32:35.428Z","2.0.56-renovate-non-major-bee28242baceda16015e75f89f1f1762e80ab1ad":"2021-04-11T23:28:11.773Z","2.0.56":"2021-04-11T23:31:35.908Z","2.0.57-renovate-non-major-2b3cd1d0920a51424d016d313fcdacd59e33e244":"2021-04-12T03:30:41.260Z","2.0.57":"2021-04-12T03:33:44.629Z","2.0.58-renovate-non-major-92098a37390c84990d3b0e9c4ede5a567daf8255":"2021-04-12T05:10:28.951Z","2.0.58":"2021-04-12T05:14:35.058Z","2.0.59-renovate-non-major-37f42181f3f42555a8048e198e34b7664a579f98":"2021-04-12T10:02:47.961Z","2.0.59":"2021-04-12T10:08:31.367Z","2.0.60-renovate-non-major-70bd9c9a14690bce7037dfe65e18dedf1462fe8d":"2021-04-12T10:13:01.079Z","2.0.60":"2021-04-12T10:18:43.487Z","2.0.61-renovate-non-major-6b40fd4c8031afd3116710a10cbcff73a0b9d11f":"2021-04-12T13:18:23.117Z","2.0.61":"2021-04-12T13:21:45.701Z","2.0.62-renovate-non-major-21d09fbaf9e763e9489153a28cbbb2c8783beec0":"2021-04-12T15:48:02.980Z","2.0.62":"2021-04-12T15:51:53.852Z","2.0.63-renovate-non-major-f4fb3acca4543af79a6839445ed4772670a8e2df":"2021-04-12T18:11:49.513Z","2.0.63":"2021-04-12T18:16:25.690Z","2.0.64-renovate-non-major-3f8da9b86bfb9ff03d27495742760be466a8bb14":"2021-04-12T22:43:52.066Z","2.0.64":"2021-04-12T22:47:30.091Z","2.0.65-renovate-non-major-4a63b3d56b7358b10a56517d4a2b842af7c2b74f":"2021-04-13T02:33:04.970Z","2.0.65":"2021-04-13T02:36:59.150Z","2.0.66-renovate-non-major-8601bd5edd6fe289e0c75c8213a4117e7dfeb7a2":"2021-04-13T05:38:55.604Z","2.0.66":"2021-04-13T05:42:32.302Z","2.0.67-renovate-non-major-9d3083bd3e6bffa048b7ed62aee5fc82ef3598e7":"2021-04-13T09:02:39.907Z","2.0.67":"2021-04-13T09:06:21.820Z","2.0.68-renovate-non-major-297880d599ce273579ae669ac2e50facd8fc4a9a":"2021-04-14T04:26:21.273Z","2.0.68":"2021-04-14T04:30:17.541Z","2.0.69-renovate-non-major-de55619dd03cd67e54b056892213cf3ecc254be8":"2021-04-14T09:32:10.143Z","2.0.69":"2021-04-14T09:35:52.054Z","2.0.70-renovate-sinon-10-x-a8d3bcbac9987c51a8d495ce7cd3d86a8a13de36":"2021-04-14T09:41:00.266Z","2.0.70-renovate-non-major-922568b751ec306d3cae960c2a8fd7a814208def":"2021-04-14T11:19:25.865Z","2.0.70":"2021-04-14T11:22:49.942Z","2.0.71-renovate-sinon-10-x-c1f2a4716fadf6a488dade010e57c26a3e4a8380":"2021-04-14T11:26:57.293Z","2.0.71-renovate-non-major-1dcb74b83221f61ee0bf9dcb6561d65126b41d44":"2021-04-14T12:58:32.259Z","2.0.71":"2021-04-14T13:02:26.150Z","2.0.72-renovate-sinon-10-x-b633dfebabd700cefc885359eaadfab175d7db91":"2021-04-14T13:04:48.168Z","2.0.72-renovate-non-major-254cd087ec298ab374b4ab95c94a74c2f9e6fce5":"2021-04-14T16:36:08.113Z","2.0.72":"2021-04-14T16:41:23.927Z","2.0.73-renovate-sinon-10-x-8da5b344ed63775b6445afccb84e4053f30839f7":"2021-04-14T16:48:21.155Z","2.0.73-renovate-non-major-28b300004a518dc4926196f07854dd976c1da995":"2021-04-14T16:55:44.894Z","2.0.73":"2021-04-14T16:59:59.439Z","2.0.74-renovate-sinon-10-x-22bc8e020411ca3f6637696bdcf22ddd2b55d62c":"2021-04-14T17:05:49.859Z","2.0.74-renovate-non-major-112740f81d5cb9d0205fb02214bf05f258251edc":"2021-04-14T21:16:05.946Z","2.0.74":"2021-04-14T21:19:46.274Z","2.0.75-renovate-sinon-10-x-201914cbfc979930613c8e0c615def37c3eeaf3a":"2021-04-14T21:23:11.845Z","2.0.75-renovate-non-major-7e4e529e665a8333f36ec1cefc7984a6cb04bed6":"2021-04-15T00:04:32.305Z","2.0.75":"2021-04-15T00:08:11.409Z","2.0.76-renovate-sinon-10-x-7d22f03df8313a5927372994a16fc10f0ebc36ec":"2021-04-15T00:12:38.479Z","2.0.76-renovate-non-major-b7a44de4b88bb9aa6a06fb396d6c7fc34272b079":"2021-04-15T02:45:15.225Z","2.0.76":"2021-04-15T02:49:44.463Z","2.0.76-renovate-sinon-10-x-1c465945b6df3eb1dcfeae1f9dafe481032bfc2b":"2021-04-15T02:53:53.030Z","2.0.77-renovate-sinon-10-x-ee723f2b0cea94e4acecc6f8495280dcc543ca4b":"2021-04-15T02:55:53.953Z","2.0.77-renovate-non-major-1768249c11d5a4720463086476e31a6bedc4d0f2":"2021-04-15T04:57:06.518Z","2.0.77":"2021-04-15T05:00:09.775Z","2.0.78-renovate-sinon-10-x-dda386471851923ac27a6031a28f94db90190da8":"2021-04-15T05:04:43.644Z","2.0.78-renovate-non-major-909a409ba14abe2baff7109052bcf534b5102a50":"2021-04-15T05:10:44.887Z","2.0.78":"2021-04-15T05:14:11.403Z","2.0.79-renovate-sinon-10-x-9cd67ffebd7d75fcfae3153d8c84c9ebf63bb60d":"2021-04-15T05:17:17.159Z","2.0.79-renovate-non-major-587b710d3445048ad87b60782da6c2f78a82ce13":"2021-04-15T11:03:25.842Z","2.0.79-renovate-non-major-ba8f90ce13f7f44e8c125298e59462f5d85138dd":"2021-04-15T13:10:50.449Z","2.0.79-renovate-non-major-1df5f1deb4e7d368fb0c0fc667f687a6ade19033":"2021-04-15T16:31:48.239Z","2.0.79-renovate-non-major-f9b8ece098d51a46c091a1622f86e87c0d1878ed":"2021-04-15T18:53:38.083Z","2.0.79-renovate-non-major-23ccd602f5408b939cf0eb172a58bbe31f7450ae":"2021-04-16T02:03:11.615Z","2.0.79-renovate-non-major-fc1f89eaf092b151c40ff19898a9c67d4c0b6330":"2021-04-16T03:17:02.456Z","2.0.79-renovate-non-major-aeab3f7821094e1240686be53f7efabbbe33656d":"2021-04-16T09:48:30.469Z","2.0.79-renovate-non-major-24f71b8a035a1f5d4a4a980c0008a353e109fabe":"2021-04-16T12:27:00.241Z","2.0.79-renovate-non-major-23ae7c41caf0ff78d055e9172445967d44c52e28":"2021-04-16T16:50:07.111Z","2.0.79-renovate-non-major-859edf140e081478e20589d8d89460e87bb3bca6":"2021-04-16T19:17:37.109Z","2.0.79-renovate-non-major-e0452f5b3f045fa25fee3d7a5516936593ab46c8":"2021-04-16T22:52:00.148Z","2.0.79-renovate-non-major-913d63a1eddd4accf9ae50f21cea2eb16d2a4c18":"2021-04-17T01:24:02.191Z","2.0.79-renovate-non-major-38fb10b51b68e73736068d1be60de9900ff1f3f3":"2021-04-17T04:55:15.533Z","2.0.79-renovate-non-major-b3fe11fddfda44175999c41a746af5d056dd9e89":"2021-04-17T09:26:40.646Z","2.0.79-renovate-non-major-14f119f7a5574c7c8d68b884c9e24d6fd30dab5b":"2021-04-17T11:34:29.565Z","2.0.79-renovate-non-major-c4a56bc9ac0cfb49fdd37577265aaf64407727d1":"2021-04-17T13:04:28.108Z","2.0.79-renovate-non-major-b1e67eafa566654baf809c609710c914ec7173d6":"2021-04-17T15:06:09.630Z","2.0.79-renovate-non-major-d2047f8ee21ba9e3c34207b60329725f1c550ce9":"2021-04-17T17:26:53.264Z","2.0.79-renovate-non-major-4085d059b4c8e5d070e6050d5d6b71c2e4558826":"2021-04-17T19:08:02.275Z","2.0.79-renovate-non-major-f6f5d632073f6c5fed01f5d2a36edf21f282efcd":"2021-04-17T22:04:33.295Z","2.0.79-renovate-non-major-a3918c71cf7b99b14a86f9c8dfd7bc34afad9c0e":"2021-04-18T00:02:50.133Z","2.0.79-renovate-non-major-fd2d51c15b775790b46478d578ad124386f6c03d":"2021-04-18T01:37:30.438Z","2.0.79":"2021-04-18T10:35:32.528Z","2.0.80-renovate-non-major-ccb48728d8e74d79aa30c8f139c8d4527a716d25":"2021-04-18T10:39:07.525Z","2.0.80-renovate-non-major-901852406b805462d6c55f3c784220aedfc8eb4c":"2021-04-18T12:57:18.654Z","2.0.80-renovate-non-major-5f2c8441179d2231c630945c774c76b674c533bf":"2021-04-18T18:12:58.338Z","2.0.80-renovate-non-major-ccc6e4f4acf3f23abc83d973d999147a721b7610":"2021-04-18T22:07:10.550Z","2.0.80-renovate-non-major-10d96854062760e2479c0568971b1daeb07ab358":"2021-04-19T00:59:07.286Z","2.0.80":"2021-04-19T01:02:41.103Z","2.0.81-renovate-non-major-bf98810445db85ba52587310602a15e1ec405009":"2021-04-19T01:07:07.485Z","2.0.81":"2021-04-19T01:14:32.430Z","2.0.82-renovate-non-major-ae1111876af5a0318dda95a134067303640ae9a6":"2021-04-19T13:17:57.676Z","2.0.82-renovate-non-major-6148c9f38cad6245b39270bf5da7a2d757699f71":"2021-04-20T00:41:53.566Z","2.0.82":"2021-04-20T00:46:32.912Z","2.1.0-allow-other-mixins-7d1fa6d39338582d67ae7c1ab8ada5d2e52d379f":"2021-04-20T02:36:49.842Z","2.1.0":"2021-04-20T02:47:07.804Z","2.1.1-renovate-non-major-2952743dc848ff18e6595285f1b0fff60bf9824f":"2021-04-20T02:53:56.093Z","2.1.1":"2021-04-20T02:59:24.875Z","2.1.2-renovate-non-major-3287367bc2e8280ced52163e9b0f7d83d8fbe0c5":"2021-04-20T11:37:03.593Z","2.1.2":"2021-04-20T11:48:57.274Z","2.1.3-renovate-non-major-a9dca53a655b167df6f4814bd2bc0b093d5c1f87":"2021-04-20T20:13:25.163Z","2.1.3":"2021-04-20T20:17:40.091Z","2.1.4-renovate-non-major-25f9d76d4385f217f6081f577102f29ec8e6c48f":"2021-04-21T09:38:17.144Z","2.1.4":"2021-04-21T09:41:31.109Z","2.1.5-renovate-non-major-5caec9c491b27e3cef2339731584f54fd1de19a8":"2021-04-21T11:30:16.742Z","2.1.5":"2021-04-21T11:33:59.029Z","2.1.6-renovate-non-major-19c9517fcbe693b29137a790e70c4e2ba3288d4e":"2021-04-21T13:03:15.705Z","2.1.6":"2021-04-21T13:08:29.582Z","2.1.7-renovate-non-major-8b229c5cbc61dd5abb0342a4b1654f99d983d26f":"2021-04-21T14:54:36.359Z","2.1.7":"2021-04-21T14:58:31.981Z","2.1.8-renovate-non-major-81d676b1d12d1d9878a3eb5034c3b791afc0cda4":"2021-04-21T17:13:20.474Z","2.1.8":"2021-04-21T17:17:13.409Z","2.1.9-renovate-non-major-07656af28682916db8ae3fc11a5dc328fd12bcbd":"2021-04-21T21:32:22.777Z","2.1.9":"2021-04-21T21:39:30.252Z","2.1.10-renovate-non-major-a8169b9339b1ea15568091f7a35fb9c24c39464b":"2021-04-23T01:56:03.161Z","2.1.10":"2021-04-23T01:59:52.351Z","2.1.11-renovate-non-major-56a12e51aa07e2917448fa1849dcadcb8cf02832":"2021-04-23T03:52:01.308Z","2.1.11":"2021-04-23T03:56:15.724Z","2.1.12-renovate-non-major-51da57c5f8c1a89a5560e91ef24b2713e7b84858":"2021-04-23T11:18:40.008Z","2.1.12-renovate-non-major-15f0311c8d86c926d35c3475a1f8e98b60f77833":"2021-04-23T11:23:25.908Z","2.1.12":"2021-04-23T11:27:12.835Z","2.1.13-renovate-non-major-350b348e83e340f6f434d9997b0dca62b1422624":"2021-04-23T14:02:58.873Z","2.1.13":"2021-04-23T14:06:58.109Z","2.1.14-renovate-non-major-3ed8519909e23ba1f0f48546490806731eef44d5":"2021-04-23T19:42:47.446Z","2.1.14":"2021-04-23T19:46:07.793Z","2.1.15-renovate-non-major-6143f7c583d08d2fac3df9ca9424c6ea35806903":"2021-04-24T02:11:21.433Z","2.1.15":"2021-04-24T02:19:48.863Z","2.1.16-renovate-non-major-1c801c2a2531d7dd7a92483d7622d85a6a803f6d":"2021-04-24T06:22:37.979Z","2.1.16":"2021-04-24T06:26:44.897Z","2.1.17-renovate-non-major-517e26135b031f3bb845b4d9fadf28c437bb4012":"2021-04-24T14:20:46.396Z","2.1.17":"2021-04-24T14:24:29.603Z","2.1.18-renovate-non-major-909a5c0634a7e3aebe97c3a6b50cf4686c35176d":"2021-04-24T18:31:07.785Z","2.1.18":"2021-04-24T18:43:01.199Z","2.1.19-renovate-non-major-322690bfd04fb29995baa1c243c995190323db94":"2021-04-24T22:27:09.701Z","2.1.19":"2021-04-24T22:31:16.947Z","2.1.20-renovate-non-major-5af39218a44718b000d26979ba49436cb602ab1c":"2021-04-25T23:47:57.527Z","2.1.20":"2021-04-25T23:52:05.182Z","2.1.21-renovate-non-major-9cca0bdb6cff03c16b1de95bf68555abd23a5dd2":"2021-04-26T00:47:58.828Z","2.1.21":"2021-04-26T00:51:21.081Z","2.1.22-renovate-non-major-59f66aa336d2077ef5155359972e62c7704d02f1":"2021-04-26T03:34:54.322Z","2.1.22":"2021-04-26T03:37:51.265Z","2.1.23-renovate-non-major-2c2e07fdc166c9a82ffeb393e217bce7ca75d29f":"2021-04-26T11:53:16.086Z","2.1.23-renovate-non-major-9d65e40c0b0b06418c06cc3a6d41ae578a4eb034":"2021-04-26T11:57:59.165Z","2.1.23":"2021-04-26T12:01:32.555Z","2.1.24-renovate-non-major-f8f22dc9335808c78234e110921529b22034451f":"2021-04-26T12:08:30.851Z","2.1.24":"2021-04-26T12:11:56.953Z","2.1.25-renovate-non-major-6245ccfbf62c4ce8236dc3313db30e0059fdcbff":"2021-04-26T19:20:32.561Z","2.1.25":"2021-04-26T19:24:18.636Z","2.1.26-renovate-non-major-121d38cd90cf5d3c575abd8a451e54dcf3918489":"2021-04-26T21:23:15.364Z","2.1.26":"2021-04-26T21:29:16.799Z","2.1.27-renovate-non-major-c418f2e5539902af66c250d4ca9d47a7408ba9b1":"2021-04-27T01:16:11.675Z","2.1.27-renovate-non-major-380491d80bc1871dedf58b89f7db965ef24b1884":"2021-04-27T02:39:19.326Z","2.1.27":"2021-04-27T02:43:18.214Z","2.1.28-renovate-non-major-675a942c10012905837cafc8672c6aaf10ecfbc1":"2021-04-27T15:13:52.848Z","2.1.28":"2021-04-27T15:17:31.803Z","2.1.29-renovate-non-major-a94914a6d3b78ba16f66798c51ea903c1685ed24":"2021-04-28T13:10:04.831Z","2.1.29":"2021-04-28T13:13:45.405Z","2.1.30-renovate-non-major-97535f69353a973e97f176ba8ef90c41c32bd173":"2021-04-29T02:18:11.391Z","2.1.30":"2021-04-29T02:21:57.383Z","2.1.31-renovate-non-major-3101c0f719e93d21fd2675264c32f9613e79f6f3":"2021-04-29T03:47:23.381Z","2.1.31":"2021-04-29T03:50:50.471Z","2.1.32-renovate-non-major-25cfa0d414d58c31578e9ba7a45971ffc9d80fec":"2021-04-29T08:02:47.449Z","2.1.32":"2021-04-29T08:10:07.803Z","2.1.33-renovate-non-major-1bba704e8dc982e0224c76c729a25365b178e1c2":"2021-04-29T10:49:58.286Z","2.1.33":"2021-04-29T10:53:04.159Z","2.1.34-renovate-non-major-64e2d8c595ff6dff0fcf982c66582d319c938b04":"2021-04-29T14:43:42.930Z","2.1.34":"2021-04-29T14:47:49.306Z","2.1.35-renovate-non-major-3c81de5c29b78cdf311afa1318c3b118eb94034a":"2021-04-29T17:40:08.490Z","2.1.35":"2021-04-29T17:43:44.487Z","2.1.36-renovate-non-major-3ef46e4c8a7789204d323134b6a153dfb1cd56e9":"2021-04-29T20:27:35.613Z","2.1.36":"2021-04-29T20:31:16.964Z","2.1.37-renovate-non-major-4acfb7121f7573ef9f338f1c46213c24a5adbdd7":"2021-04-30T02:26:55.218Z","2.1.37":"2021-04-30T02:30:42.037Z","2.1.38-renovate-non-major-933e1e0850e703c7cc20055f7891e0f167135e27":"2021-04-30T04:46:27.824Z","2.1.38":"2021-04-30T04:49:49.323Z","2.1.39-renovate-non-major-465fe66e2d58d47e4d60376fbf2b8bf21d2fbf3b":"2021-04-30T09:09:06.121Z","2.1.39":"2021-04-30T09:13:34.099Z","2.1.40-renovate-non-major-2feb342d06f606e4c51a29eb600feded13387edc":"2021-04-30T15:36:28.575Z","2.1.40":"2021-04-30T15:39:57.224Z","2.1.41-update-interfaces-5b7d6806d13071cb7f3de589861d8ceaa55ef042":"2021-04-30T15:54:51.683Z","2.1.41":"2021-04-30T15:58:43.615Z","2.1.42-renovate-non-major-68d2908caf9ba560144f129f61df7ba2be3c719d":"2021-05-01T02:26:48.503Z","2.1.42":"2021-05-01T02:30:12.137Z","2.1.43-renovate-non-major-962c910369fd5e394730c3a388d03b3a26cde8dd":"2021-05-01T08:39:34.664Z","2.1.43":"2021-05-01T08:42:34.201Z","2.1.44-renovate-non-major-65f9960c3a4e5105e99660683474ce24533c9dda":"2021-05-01T11:01:01.070Z","2.1.44":"2021-05-01T11:04:40.246Z","2.1.45-renovate-non-major-1b6c626af3b1edefcd18ee9562fa17a1dc2892f8":"2021-05-01T13:15:11.720Z","2.1.45":"2021-05-01T13:18:50.454Z","2.1.46-renovate-non-major-e4a0aa06e8b7cba90e870ed41c5c17f9adffb3d9":"2021-05-01T15:13:34.988Z","2.1.46":"2021-05-01T15:17:06.226Z","2.1.47-renovate-non-major-d142d35501ea442026b95ea7043e61da4d605aa7":"2021-05-01T16:36:18.714Z","2.1.47":"2021-05-01T16:39:59.099Z","2.1.48-renovate-non-major-62117f493ba945c4c4436148f230d3fdde2d7d52":"2021-05-02T01:43:35.035Z","2.1.48":"2021-05-02T01:47:08.251Z","2.1.49-renovate-non-major-73f47c03d82e9b3f14d698bca4157012495e8b45":"2021-05-02T03:11:57.482Z","2.1.49":"2021-05-02T03:15:39.374Z","2.1.50-renovate-non-major-3238fe143c518f250b5b64683b78ff088264b4c9":"2021-05-02T05:16:35.075Z","2.1.50":"2021-05-02T05:20:05.741Z","2.1.51-renovate-non-major-3c84341592149198492bba71fe79fe17ff016d07":"2021-05-02T08:01:51.955Z","2.1.51":"2021-05-02T08:05:58.620Z","2.1.52-renovate-non-major-296f8f3ee2390415912dbf9ca40b2d295b57bcb2":"2021-05-03T01:43:09.447Z","2.1.52":"2021-05-03T01:46:59.360Z","2.1.53-renovate-non-major-5c9aab9fa778ea9172f3039419e05af9c95239d6":"2021-05-03T05:44:08.555Z","2.1.53":"2021-05-03T05:48:51.225Z","2.1.54-renovate-non-major-8b322774f6f950398eac9256c07a9a36a244e906":"2021-05-03T08:26:58.841Z","2.1.54":"2021-05-03T08:31:09.824Z","2.1.55-renovate-non-major-62a742911e15ae24d41688350fbb9a7eca06d589":"2021-05-03T09:52:22.477Z","2.1.55":"2021-05-03T09:57:56.662Z","2.1.56-renovate-non-major-5d19abc86cf2845f16531014f4a31ccbb84e00d2":"2021-05-03T12:20:37.638Z","2.1.56":"2021-05-03T12:24:45.628Z","2.1.57-renovate-non-major-5e96b6d1dbb217198767afc55f76f6dc0c3b9230":"2021-05-03T15:18:40.543Z","2.1.57":"2021-05-03T15:22:06.888Z","2.1.58-renovate-non-major-13e3ce20a1fd03bcb9b148b6b80b305e239997ce":"2021-05-03T18:19:00.244Z","2.1.58":"2021-05-03T18:23:42.625Z","2.1.59-renovate-non-major-199fe35dfe96d96df8539d63215622ef7be36cbc":"2021-05-03T19:45:59.354Z","2.1.59":"2021-05-03T19:51:41.909Z","2.1.60-renovate-non-major-2e2972ba5d6bce1247605296fc8a17afe1c43f54":"2021-05-04T00:09:00.699Z","2.1.60":"2021-05-04T00:14:05.630Z","2.1.61-renovate-non-major-b66cfcb3e6d75b922abca4487750de87a1f00399":"2021-05-04T02:03:29.210Z","2.1.61":"2021-05-04T02:07:23.199Z","2.1.62-renovate-non-major-5a06a565bf7efb1cf66a93d00af6fd9b40c99d0e":"2021-05-04T04:34:27.621Z","2.1.62":"2021-05-04T04:38:19.532Z","2.1.63-renovate-non-major-56127659a76d2326263e741ff5860a9923f9c4b1":"2021-05-04T08:44:59.844Z","2.1.63":"2021-05-04T08:48:21.121Z","2.1.64-renovate-non-major-99e50900decd98b251ff8e6a7dd363bc0b2b5e8c":"2021-05-04T09:49:40.942Z","2.1.64":"2021-05-04T09:52:53.746Z","2.1.65-renovate-non-major-30e57a9eeeedc60789f4b427e5cffef61e3d3505":"2021-05-04T11:11:35.377Z","2.1.65":"2021-05-04T11:15:08.974Z","2.1.66-renovate-non-major-7386deb7a8afc5f1646699cb13d7a12c94d4b886":"2021-05-04T14:04:53.298Z","2.1.66":"2021-05-04T14:08:26.730Z","2.1.67-renovate-non-major-d70e5b383722cfd077238efc6f0663ece6459be9":"2021-05-04T14:47:32.232Z","2.1.67":"2021-05-04T14:51:01.548Z","2.1.68-renovate-non-major-ebc4ff68bb6f319cd8e328746a6383cd0426140f":"2021-05-04T16:25:39.588Z","2.1.68":"2021-05-04T16:28:59.074Z","2.1.69-renovate-non-major-3338dedb9030a8916c80f2e51b73cb1ea57b6c84":"2021-05-04T19:56:40.505Z","2.1.69":"2021-05-04T20:00:34.620Z","2.1.70-renovate-non-major-709b8982ab63af8dee69658379a6b1c4b4419b53":"2021-05-04T21:17:53.539Z","2.1.70":"2021-05-04T21:21:20.365Z","2.1.71-renovate-non-major-84e3be0943e759c59c472a32787771a2d7041908":"2021-05-04T23:03:29.993Z","2.1.71":"2021-05-04T23:07:06.000Z","2.1.72-looser-request-type-2e1a94548804516c3d0e18dbb2f6be92c6d959da":"2021-05-05T07:37:36.616Z","2.1.72":"2021-05-05T08:28:57.661Z","2.1.73-renovate-non-major-5c8bd95906ed4999014bf12756d819134c32d950":"2021-05-05T08:34:49.042Z","2.1.73":"2021-05-05T08:38:51.260Z","2.1.74-renovate-non-major-c67c7fdaad6b8a931cd460f6ec960d46bdfa45f7":"2021-05-05T14:34:09.396Z","2.1.74":"2021-05-05T14:37:53.290Z","2.1.75-renovate-non-major-95704de993e77760db8d20d4070f5458673f0392":"2021-05-05T15:49:11.239Z","2.1.75":"2021-05-05T15:52:53.106Z","2.1.76-renovate-non-major-09b318344daef0d49c05d91791ad1f39873ab544":"2021-05-05T17:24:58.506Z","2.1.76":"2021-05-05T17:28:35.901Z","2.1.77-renovate-catch-uncommitted-2-x-a16d934d2a32a0c74f8ef55a539cb4e023ba3884":"2021-05-05T21:09:20.171Z","2.1.77":"2021-05-05T23:13:51.854Z","2.1.78-renovate-non-major-27d30cadf7c0d7ca82ac9164bf3a49865cb17399":"2021-05-05T23:28:38.808Z","2.1.78-renovate-non-major-5855e25c80822f1926ac59fb1242ff597e28383a":"2021-05-06T01:36:18.345Z","2.1.78":"2021-05-06T01:40:13.440Z","2.1.79-renovate-lint-staged-11-x-92b3460662657e350714646afd5977843a12bd78":"2021-05-07T17:08:52.331Z","2.1.79":"2021-05-08T00:13:56.610Z","2.1.80-renovate-non-major-9b562ef2ca7db5d3ed348a4030e139862c2451ec":"2021-05-08T00:24:27.158Z","2.1.80-renovate-non-major-8f1f08c3dae9879e8a7c9a56f1a520918ae80a4f":"2021-05-08T00:39:52.653Z","2.1.80-renovate-non-major-482b48624f713e7fd22ddebf4ba364ef4024865b":"2021-05-08T00:55:37.855Z","2.1.80":"2021-05-08T01:03:35.327Z","2.1.81-renovate-non-major-8800f117f38a4a1b56552642127ad8539a64cf12":"2021-05-08T04:43:19.572Z","2.1.81":"2021-05-08T04:46:31.827Z","2.1.82-renovate-non-major-ae9f7f7e1c08b0a3d4652276f08576dc89ccaf1e":"2021-05-08T08:05:24.687Z","2.1.82":"2021-05-08T08:08:23.869Z","2.1.83-renovate-non-major-8571a4686cfa89de5082695e5de84ceca24cfc25":"2021-05-10T07:40:02.744Z","2.1.83":"2021-05-10T07:43:56.079Z","2.1.84-renovate-non-major-080f30051f329485ad5f6df48952a68a08cc879e":"2021-05-10T10:29:10.334Z","2.1.84":"2021-05-10T10:32:36.682Z","2.1.85-renovate-non-major-3d93de9413b955aa294108a1732b1312f88f21ed":"2021-05-11T08:54:42.290Z","2.1.85":"2021-05-11T08:57:51.951Z","2.1.86-renovate-non-major-127c87e4d1ea62fc152fe2db930888933a390bf0":"2021-05-11T09:02:58.210Z","2.1.86":"2021-05-11T09:11:24.405Z","2.1.87-renovate-non-major-feffe6eff58340b047bf424377ebdee67646c623":"2021-05-12T10:08:18.435Z","2.1.87":"2021-05-12T10:12:30.401Z","2.1.88-renovate-non-major-0cc678e5cbaa9388b076ba98e0203da5d60590b6":"2021-05-13T18:20:21.981Z","2.1.88":"2021-05-13T18:24:12.510Z","2.1.89-renovate-non-major-b52a51ae3d59643c845cd071c3782096a6e7f219":"2021-05-17T09:40:24.495Z","2.1.89":"2021-05-17T09:43:31.941Z","2.1.90-renovate-internal-non-major-c1df32bb18c89e23fadf3b237332600f028829bd":"2021-05-21T07:50:40.237Z","2.1.90":"2021-05-21T07:53:45.921Z","2.1.91-renovate-internal-non-major-8f49bbd81cd51298bbcb5fc26a0bf6d1b174f9c7":"2021-05-21T09:57:20.426Z","2.1.91":"2021-05-21T10:00:45.973Z","2.1.92-renovate-internal-non-major-f03debf8c9ddb84917b7c32162bb19b3e6372edd":"2021-05-21T11:47:48.138Z","2.1.92":"2021-05-21T11:51:00.736Z","2.1.93-renovate-balena-lint-6-x-ea381b41f72bb400cffbd5f85bb8d8c20195b982":"2021-05-21T17:56:51.492Z","2.1.93-renovate-internal-non-major-d15bb1d6a7c7697cf304ad139302ae157b3bd6b4":"2021-05-22T01:54:56.488Z","2.1.93":"2021-05-22T01:58:33.776Z","2.1.94-renovate-balena-lint-6-x-00cadae80b037f5f8d316cc267cdfdeedbf062f5":"2021-05-22T02:03:19.253Z","2.1.94-renovate-internal-non-major-1c54ea53ff94135d3a94206bbeb7fd5057b1fb35":"2021-05-23T02:09:47.349Z","2.1.94":"2021-05-23T02:14:04.695Z","2.1.95-renovate-balena-lint-6-x-7d03dd494350e5165b89ef4fc8da9e67dffb714a":"2021-05-23T02:18:09.267Z","2.1.95":"2021-05-23T02:59:33.463Z","2.1.96-renovate-internal-patch-3477336cf3ef48efd27e8672bba0ecbdf7c77917":"2021-05-23T09:37:30.353Z","2.1.96":"2021-05-23T09:40:53.392Z","2.1.97-renovate-internal-patch-f7447605e0bf7ec4265df51b8383c1d4e36f4e80":"2021-05-24T01:52:18.309Z","2.1.97":"2021-05-24T01:57:09.488Z","2.1.98-renovate-internal-patch-29c8730d93f652b29d5baf30df3491b024b83660":"2021-05-24T03:52:51.502Z","2.1.98":"2021-05-24T03:56:31.879Z","2.1.99-use-jellyfish-config-2b86b8dfb6b54a81f445447b968677059023e96e":"2021-05-24T06:26:29.579Z","2.1.99":"2021-05-24T06:31:14.811Z","2.1.100-renovate-internal-patch-7f689f2cfa0d0122f8100a6b8633bf7d96fb2a2b":"2021-05-24T06:38:18.384Z","2.1.100":"2021-05-24T06:42:31.529Z","2.1.101-renovate-internal-patch-f64fb848c6a355c6cd4bf8e718e4eed775b74c5d":"2021-05-24T08:44:54.918Z","2.1.101":"2021-05-24T08:48:32.036Z","2.1.102-renovate-balena-lint-6-x-8e428bc26e00d70b348d8fb59fe44e71e3a0719b":"2021-05-24T08:57:02.260Z","2.1.102-renovate-balena-lint-6-x-2b0d1745d554e99e2d699dc6c88a305403a9d5e3":"2021-05-24T13:13:40.559Z","2.1.102-mixin-types-bd3bd5952d3bb75198ca5e438cb94c4b195e7ddc":"2021-05-24T16:45:23.272Z","2.1.102":"2021-05-24T16:56:37.151Z","2.1.103-renovate-balena-lint-6-x-34987971cc259e9e8f172de0435c743195123219":"2021-05-24T17:02:25.354Z","2.1.103":"2021-05-25T00:06:50.828Z","2.1.104-renovate-internal-patch-e832a9aa5377d6838300cafac4ee9463a836f9f8":"2021-05-25T00:18:33.460Z","2.1.104-renovate-internal-patch-e09eee2140b233025f9efe9e1f2de9080477a35b":"2021-05-25T00:30:58.812Z","2.1.104-renovate-internal-patch-d7a00fc4825732c7a17235bc6fbf27f9d2dc31b9":"2021-05-25T01:54:06.517Z","2.1.104":"2021-05-25T01:57:22.594Z","2.1.105-renovate-internal-patch-fec08b2bbab9f24c3b508f4fd295540e2b5eab8b":"2021-05-25T03:51:10.100Z","2.1.105":"2021-05-25T03:55:27.732Z","2.1.106-renovate-internal-patch-4d93f8abf85ade2b38c97da8a6bef6db1d8907a5":"2021-05-25T04:00:03.848Z","2.1.106":"2021-05-25T04:05:51.927Z","2.1.107-mixin-arity-d7682e18c0ea86a7ccc7b53d5fcc47a30c7788c7":"2021-05-25T16:27:19.217Z","2.1.107":"2021-05-25T16:31:00.797Z","2.1.108-renovate-internal-patch-13f1106f7e59abb658ac35add804495a0ceec300":"2021-05-26T02:19:48.782Z","2.1.108":"2021-05-26T02:23:01.131Z","2.1.109-repo-sync-jellyfish-config-default-3030fe98afe374e3bb9b6ca14f5524fa43ff9545":"2021-05-26T09:16:42.349Z","2.1.109-renovate-balena-jellyfish-config-1-x-e82105054d76e6ca27ef11da65b6024c50f1bca6":"2021-05-26T09:49:04.517Z","2.1.109-repo-sync-jellyfish-config-default-07d320b120402b1172996c77655830b3235d2320":"2021-05-27T01:25:20.311Z","2.1.109":"2021-05-27T02:07:53.768Z","2.1.110-renovate-internal-patch-ef740d54f7431ef44ab39a92f7fef7bde3e9e333":"2021-05-27T02:11:34.067Z","2.1.110":"2021-05-27T02:16:54.486Z","2.1.111-repo-sync-jellyfish-config-default-8daa2e681a7c8beb99d30188e9fc699357bd8454":"2021-05-27T03:28:04.970Z","2.1.111-renovate-internal-patch-c1cc1a330566c1aa5a2d21074c5f7f96893097d9":"2021-05-27T04:21:41.636Z","2.1.111":"2021-05-27T04:25:15.615Z","2.1.112-repo-sync-jellyfish-config-default-becdc3b4aa2ee40d1182e7e0220ad03d64bcd806":"2021-05-27T06:55:18.797Z","2.1.112-renovate-internal-patch-92f0e1c68a87defc484b7b5ae34daf734971d84e":"2021-05-27T08:22:20.347Z","2.1.112":"2021-05-27T08:26:29.977Z","2.1.113-renovate-internal-patch-6213a593c62e7ad9409757b9bc114806df76cd5b":"2021-05-27T10:29:26.340Z","2.1.113":"2021-05-27T10:32:57.024Z","2.1.114-renovate-internal-patch-09d346a5b3c5947f1dc0944f44a16d81f8687bdd":"2021-05-27T12:34:55.096Z","2.1.114":"2021-05-27T12:39:09.184Z","2.1.115-renovate-external-non-major-ddf4997d6e8f6f31cc4a8367737da803ea4a8ed8":"2021-05-29T00:20:13.349Z","2.1.115-renovate-major-external-major-c174505933aaece48cf6def90ee02cac482e4d69":"2021-05-29T00:21:48.039Z","2.1.115":"2021-05-29T00:23:34.939Z","2.1.116-renovate-major-external-major-155aa62e14eca4438312620f2d9c8e481bfd74d6":"2021-05-29T00:28:04.251Z","2.1.116-renovate-internal-patch-c5268831fa51189952d85bc049fc14b6e155025a":"2021-05-29T05:19:17.000Z","2.1.116":"2021-05-29T05:22:25.956Z","2.1.117-renovate-major-external-major-81dde9e4496f0dd439bc83b3d24263c1b473cb38":"2021-05-29T05:26:03.853Z","2.1.117":"2021-05-29T06:20:51.750Z","2.1.118-renovate-internal-patch-0260cfc2c362cdb567eeee69af76f689a6c38937":"2021-05-29T07:58:28.244Z","2.1.118":"2021-05-29T08:01:43.324Z","2.1.119-renovate-internal-patch-2d09a6b4b80e40c32ff5d7d0427483d8d75a1913":"2021-05-29T09:03:21.699Z","2.1.119":"2021-05-29T09:07:51.077Z","2.1.120-renovate-internal-patch-738d2cc880d34e9fb26fc16be515bf017bf37808":"2021-05-29T10:18:41.606Z","2.1.120":"2021-05-29T10:22:11.154Z","2.1.121-renovate-external-non-major-104e4ed7a2077e7456b71c937bc359344f0dd5ba":"2021-05-29T13:16:54.558Z","2.1.121":"2021-05-29T13:20:39.226Z","2.1.122-renovate-internal-patch-b6a37b7d9351f70732bbb442190ea5483e1994a7":"2021-05-29T14:49:36.011Z","2.1.122":"2021-05-29T14:53:08.699Z","2.1.123-renovate-external-non-major-7cb0aff8944345344a0b03b94b778b67fffb67c3":"2021-05-29T18:53:12.707Z","2.1.123-renovate-internal-patch-22b5c120cd41e146734216c7eb205fcaf5d616a4":"2021-05-29T20:17:56.650Z","2.1.123":"2021-05-29T20:21:23.841Z","2.1.124-renovate-internal-patch-7b4b708caf1d8f6a02af0a18b1c1ac90245971c7":"2021-05-29T20:26:09.230Z","2.1.124-renovate-external-non-major-1030fa43762d6cb8313ea1a5958bd172f8f51fd3":"2021-05-29T20:27:50.692Z","2.1.124":"2021-05-29T20:32:45.701Z","2.1.125-renovate-external-non-major-89bc1fa7c6d640eb716ebe282c7bab23f363fa7f":"2021-05-29T20:38:43.584Z","2.1.125":"2021-05-29T23:18:06.002Z","2.1.126-repo-sync-jellyfish-config-default-c1c0b53bd80e010e80e90ba0030d8d4b9e6a6a2b":"2021-05-31T03:19:42.742Z","2.1.126":"2021-05-31T03:26:39.823Z","2.1.127-renovate-internal-patch-61dc1a9254bdefa53d6517c31c1491713961eb3f":"2021-05-31T03:33:39.228Z","2.1.127-renovate-internal-patch-ac859110a88e2d8de818dad316e70af41d763153":"2021-05-31T03:40:38.839Z","2.1.127":"2021-05-31T03:44:13.128Z","2.1.128-renovate-internal-patch-01552a8134f2aa5d67b23c17e65c089b7e3fa0b0":"2021-05-31T03:48:07.795Z","2.1.128":"2021-05-31T03:54:41.040Z","2.1.129-renovate-internal-patch-c07bce5b1e878c504834d046d62dff4c5fe55ef4":"2021-05-31T09:02:43.277Z","2.1.129":"2021-05-31T09:06:33.779Z","2.1.130-renovate-internal-patch-ed10b24f7ae2a7926c7842a2f9c899b693756032":"2021-05-31T10:28:24.767Z","2.1.130":"2021-05-31T10:31:43.036Z","2.1.131-renovate-balena-jellyfish-logger-3-x-04eb73516223b4bf0f936022546a995d059208bb":"2021-05-31T10:35:08.239Z","2.1.131":"2021-05-31T21:19:19.112Z","2.1.132-remove-catch-uncommitted-21aca14f0cc3e8cf3c86fcbc552a48a7486a348b":"2021-06-03T00:02:09.198Z","2.1.132":"2021-06-03T00:05:01.041Z","2.1.133-add-translate-options-b608bc70e171274e460d206b7800a3648259e21c":"2021-06-03T07:39:17.905Z","2.1.133-improve-lint-staged-979b8ebaf95fbc7f8b3906a7bed7f85654269271":"2021-06-03T23:35:37.736Z","2.1.133":"2021-06-03T23:38:50.134Z","2.1.134-add-translate-options-a801e7f9dedd6c68e511358f0335222e0c4dc606":"2021-06-05T04:09:53.475Z","2.1.134":"2021-06-05T04:12:57.883Z","2.1.135-renovate-internal-patch-eb936b3d463282fd6450d943d651de702ef2f6cc":"2021-06-05T07:47:51.665Z","2.1.135-renovate-external-non-major-ac3b03c7f89cc06d8c13f99eb41c063227fc3317":"2021-06-05T07:50:33.828Z","2.1.135":"2021-06-05T07:52:01.423Z","2.1.135-renovate-balena-jellyfish-types-0-x-1bf87ecb18a1b2f2b6ec0f06dcc8b5425dda4743":"2021-06-05T07:54:53.816Z","2.1.136-renovate-external-non-major-d46c1e752283845b84547d99924044dae76d39b6":"2021-06-05T08:00:15.182Z","2.1.136-renovate-balena-jellyfish-types-0-x-cdc577bc23746766704c44a89e53ffadd14bd4ef":"2021-06-05T08:01:05.804Z","2.1.136":"2021-06-05T08:04:14.986Z","2.1.137-renovate-balena-jellyfish-types-0-x-c9398c030d03f0a554d34bd457f2755646ede1f6":"2021-06-05T08:09:05.466Z","2.1.137":"2021-06-05T08:14:46.043Z","2.1.138-renovate-internal-patch-8607e6b6330b4ace0589abc4dc0c06914b253469":"2021-06-05T09:56:42.269Z","2.1.138":"2021-06-05T09:59:48.687Z","2.1.139-renovate-internal-patch-76215a672093e70523cf0b8082bcb1795974b63b":"2021-06-06T17:28:25.735Z","2.1.139-renovate-external-non-major-36ef2e37fb2c69edc21348f1468063759d26770b":"2021-06-06T17:29:16.255Z","2.1.139":"2021-06-06T17:31:37.259Z","2.1.140-renovate-external-non-major-4a7acac41f9450f8a94604deb5769a8a5e4fddf8":"2021-06-06T17:35:24.784Z","2.1.140":"2021-06-06T17:41:48.020Z","2.1.141-renovate-internal-patch-a1adbf9dfc948afde19d50dec37f7ffdf9369cf9":"2021-06-06T18:59:57.084Z","2.1.141":"2021-06-06T19:03:29.390Z","2.1.142-renovate-internal-patch-9934fc3d8f475694a033b321ab553dcba74df16c":"2021-06-07T04:04:20.194Z","2.1.142":"2021-06-07T04:08:04.254Z","2.1.143-renovate-internal-patch-8914d5db71f92d291c21c212921158df68c2ba8e":"2021-06-08T02:35:04.711Z","2.1.143":"2021-06-08T02:38:02.313Z","2.1.144-renovate-internal-patch-55c63eb2cb3225f705fb77c59d059a1b37de4088":"2021-06-08T03:59:26.725Z","2.1.144":"2021-06-08T04:03:59.964Z","2.1.145-renovate-balena-jellyfish-config-1-x-32f304827cecabb04f4065f14f82b6d65bf3ba34":"2021-06-08T04:18:52.711Z","2.1.145":"2021-06-08T04:24:35.421Z","2.1.146-renovate-internal-patch-b98c4ec216540ad5bcfcd35f21b9253ceb611673":"2021-06-08T08:14:31.457Z","2.1.146":"2021-06-08T08:17:49.373Z","2.1.147-renovate-internal-patch-1cf0b5590446920a3ef4318b9e67718c5f59afd6":"2021-06-11T06:44:35.979Z","2.1.147":"2021-06-11T06:47:53.172Z","2.1.148-renovate-internal-patch-d1df50a497976e766af74e6e7baf90023150ca1e":"2021-06-11T07:32:07.985Z","2.1.148":"2021-06-11T07:35:32.373Z","2.1.149-renovate-internal-patch-c5a36ca18de3de2ed9f50962cd3fb919ff8a7431":"2021-06-11T07:41:35.363Z","2.1.149":"2021-06-11T07:44:53.573Z","2.1.150-renovate-internal-patch-8e95f52c701b2687ea4a45a66805197a7b338798":"2021-06-12T00:55:29.585Z","2.1.150":"2021-06-12T00:58:57.575Z","2.1.151-renovate-internal-patch-4af6955fa20cbc350a0f7cdedabf1a7891fa1b7b":"2021-06-12T04:05:38.174Z","2.1.151":"2021-06-12T04:09:06.862Z","2.1.152-renovate-internal-patch-b55af156edbac310175bf3a98974986d25d7b6fc":"2021-06-15T01:36:05.055Z","2.1.152":"2021-06-15T01:39:57.707Z","2.1.153-renovate-internal-patch-522aae76be320cb220e3cf2a517882f85dc158ff":"2021-06-15T03:10:45.936Z","2.1.153":"2021-06-15T03:14:41.088Z","2.1.154-renovate-internal-patch-bc2b8ef5611f86533155b63653c8d3fbbeaa9a79":"2021-06-15T06:10:12.089Z","2.1.154":"2021-06-15T06:13:52.685Z","3.0.0-integration-types-badeb7294b8ef0853790c4cc9cb9c88d8764df86":"2021-06-16T07:08:44.090Z","2.1.155-renovate-external-non-major-be347579b81f756ceeffbb2ec5bcd7106f5b9bf3":"2021-06-19T00:24:05.695Z","2.1.155":"2021-06-19T00:27:39.734Z","2.1.156-renovate-internal-patch-f13145c4de7610e4692a428ddfad922ca393649f":"2021-06-19T02:10:28.052Z","2.1.156":"2021-06-19T02:13:46.736Z","2.1.157-renovate-internal-patch-4a652e79d82a4e44667deba6453044c0b524680f":"2021-06-19T10:42:32.829Z","2.1.157":"2021-06-19T10:45:45.967Z","2.1.158-renovate-internal-patch-2e155395b363ecba5927fb9d30080eee16236374":"2021-06-20T14:49:32.433Z","2.1.158":"2021-06-20T14:53:00.472Z","2.1.159-renovate-internal-patch-9443843ed0aceaafc6f59950167ba4e4415355ad":"2021-06-22T07:05:23.746Z","2.1.159":"2021-06-22T07:08:40.725Z","2.1.160-renovate-internal-patch-586cc31f49be966809515814457ed8f028734388":"2021-06-22T07:59:08.058Z","2.1.160":"2021-06-22T08:02:36.796Z","2.1.161-renovate-balena-jellyfish-types-0-x-71e2dd2f00a92901b29386b2d27efa877563be96":"2021-06-22T12:19:17.292Z","2.1.161":"2021-06-22T12:22:51.939Z","2.1.162-renovate-internal-patch-8279853222ead57d73d6e54526b0ef6726d7974c":"2021-06-23T09:15:42.414Z","2.1.162":"2021-06-23T09:19:56.431Z","2.1.163-renovate-internal-patch-bd8d66f6ebbe5817edeec938070ed5d1beaffa75":"2021-06-24T01:02:44.844Z","2.1.163":"2021-06-24T01:05:43.512Z","2.1.164-renovate-internal-patch-0b0ab9b7d405f56b1b4fe83dbd57ec9b7148577f":"2021-06-24T14:28:19.657Z","2.1.164":"2021-06-24T14:31:41.187Z","2.1.165-renovate-internal-patch-4884cfc5e20767b1547b992ba0e0fcf95587610e":"2021-06-25T02:27:22.717Z","2.1.165":"2021-06-25T02:32:18.747Z","2.1.166-renovate-internal-patch-58a5a5e46a2b19cafdba09f1c0986618c01a0e11":"2021-06-25T23:30:52.187Z","2.1.166":"2021-06-25T23:34:26.141Z","2.1.167-renovate-external-non-major-bb80b847e9602593c405189b8ade62819d4ebd85":"2021-06-26T00:27:03.910Z","2.1.167":"2021-06-26T00:32:15.662Z","2.1.168-renovate-internal-patch-614c0be26c193a4d2c12307633cd187d38ea826c":"2021-06-26T00:41:37.932Z","2.1.168":"2021-06-26T00:45:16.017Z","2.1.169-renovate-external-non-major-742c3fea36a0172997f806692b9d51b3bdb81e19":"2021-06-27T04:10:50.975Z","2.1.170-renovate-external-non-major-c1895b232fc5ea2f81bb6c76406508bcb9d74a04":"2021-06-27T20:30:19.787Z","2.1.171-renovate-internal-patch-e4f9cf32f950f19cd507263be1ace3dab3995030":"2021-06-29T11:04:24.092Z","2.1.171-renovate-internal-patch-83aa6b4cad532936bbf01ab0abb641541f7f2d5f":"2021-06-29T13:03:15.903Z","2.1.171":"2021-06-29T13:07:34.270Z","2.1.171-remove-package-lock-604ac88b7c9035149b46995d03e5669a71d8273a":"2021-06-30T00:18:40.496Z","2.1.171-remove-package-lock-af928af414b47622118d5fabec959e487c239a76":"2021-06-30T00:44:07.313Z","2.1.171-remove-package-lock-d67f39497e4a4ac45ddb27b03369a3c4e053c30d":"2021-06-30T00:54:05.873Z","2.1.171-remove-package-lock-137c9e20eeb22420b0b6d54103f23d34190cca02":"2021-06-30T01:16:49.632Z","2.1.172-renovate-internal-patch-3ec5a76c35322d8c74ffb078e5dff00247725972":"2021-06-30T01:22:16.599Z","2.1.172":"2021-06-30T01:25:54.566Z","2.1.172-remove-package-lock-5732f6ec0168ad1b741908ece983ef0ef30abf77":"2021-06-30T01:27:48.081Z","2.1.173-remove-package-lock-1673d7e31f4b229160307bfb2fafd48b3a1a2471":"2021-06-30T01:41:41.871Z","2.1.173":"2021-06-30T01:47:56.136Z","2.1.174-renovate-internal-patch-2ae48a0e02f75191e7e119a1356cc1cc3b0a11b6":"2021-06-30T01:50:19.400Z","2.1.174-renovate-internal-patch-d0610f39997fef7c6fa7c00dcb97963fec6b2dca":"2021-06-30T03:53:12.528Z","2.1.174":"2021-06-30T03:56:44.047Z","2.1.175-repo-sync-jellyfish-config-default-888cdf4568ed389c209a2371ba70cbdb2a712379":"2021-06-30T04:53:16.437Z","2.1.175":"2021-06-30T04:56:22.965Z","2.1.176-renovate-balena-jellyfish-config-1-x-31bbbec1e7a80f176427e5d47e5051af1b2a4919":"2021-07-02T07:00:12.030Z","2.1.176-renovate-balena-jellyfish-types-0-x-0c21e4d356331b1b2f19838d321a0ddff7654389":"2021-07-02T07:01:27.771Z","2.1.176":"2021-07-02T07:03:37.259Z","2.1.177-renovate-balena-jellyfish-types-0-x-eab9179a25f93e93d34d4445896a7df8f9f5e84f":"2021-07-02T07:08:01.794Z","2.1.177":"2021-07-02T07:14:08.199Z","2.1.178-renovate-internal-patch-17391164314f2603331c402efe4ab656a08f4d48":"2021-07-02T07:18:25.759Z","2.1.178":"2021-07-02T07:25:11.762Z","2.1.179-renovate-internal-patch-2fff28b41a01ae02878fcbb17ab8e0551fc9e502":"2021-07-02T07:30:59.066Z","2.1.179":"2021-07-02T07:36:22.637Z","2.1.180-renovate-internal-patch-45524ec0bdc539a6d07ea1606aa705cd5f737e0a":"2021-07-02T09:09:48.037Z","2.1.180":"2021-07-02T09:13:10.101Z","2.1.181-renovate-external-non-major-6b8fb249afb7b97c06ede22b3b561012bdeea40e":"2021-07-03T00:23:50.769Z","2.1.181":"2021-07-03T00:29:02.485Z","2.1.182-renovate-internal-patch-4a0079744da701a0978a354a81aa5148b4adafba":"2021-07-03T00:33:40.890Z","2.1.182":"2021-07-03T00:40:46.934Z","2.1.183-renovate-internal-patch-2ac2ae82444edad873d43c582543a8797d754cff":"2021-07-03T02:44:09.131Z","2.1.183-renovate-internal-patch-877972ac18ca6970aafecdfae3f2432b1439292c":"2021-07-03T02:50:05.383Z","2.1.183":"2021-07-03T02:54:18.600Z","2.1.184-renovate-internal-patch-249a6455dece2b37665a0d7f3f9f264b738787d7":"2021-07-05T02:23:02.570Z","2.1.184":"2021-07-05T02:26:55.579Z","2.1.185-renovate-internal-patch-bb00057665d1c45d11b2c71a38f5b60092b785aa":"2021-07-05T04:02:18.314Z","2.1.185":"2021-07-05T04:05:44.495Z","2.1.186-renovate-internal-patch-350272e42e354846875b44659864268dff830201":"2021-07-07T02:02:51.700Z","2.1.186":"2021-07-07T02:13:20.859Z","2.1.187-renovate-internal-patch-67765aae89ec8656cc252a404892210578034103":"2021-07-09T02:10:48.039Z","2.1.187":"2021-07-09T02:14:28.201Z","2.1.188-renovate-internal-patch-2141f869d4fa196af8c419bb54a8299c958c17c9":"2021-07-10T01:57:19.050Z","2.1.188":"2021-07-10T02:00:56.728Z","2.1.189-renovate-external-non-major-9728d1d51a1af890ce43837e7c6e1e6915dadf2c":"2021-07-10T02:05:12.586Z","2.1.189-renovate-internal-patch-11409a26fee137f7205bf7b3214eb94b56b76342":"2021-07-10T08:50:36.741Z","2.1.189":"2021-07-10T08:53:42.948Z","2.1.190-renovate-external-non-major-04f7922fd81b69e0fd599936c7a2a11ebe87f2ef":"2021-07-10T08:57:11.930Z","2.1.190":"2021-07-10T09:02:13.125Z","2.1.191-renovate-external-non-major-117e8fecf4a24618f4df97dc9d8a704c8f582696":"2021-07-10T20:18:35.549Z","2.1.191":"2021-07-10T20:22:20.055Z","2.1.192-renovate-internal-patch-f36bdd6dc54cb35dbe382585c8c7b31e98fd5f33":"2021-07-10T22:05:38.530Z","2.1.192":"2021-07-10T22:09:03.170Z","2.1.193-renovate-internal-patch-53700d9e958d424aa2a393cd5d4cfc7d47446e91":"2021-07-11T02:07:08.709Z","2.1.193":"2021-07-11T02:10:58.620Z","2.1.194-renovate-internal-patch-6f24af1c738129af5d5d3bb59a9487e0d47a1b6e":"2021-07-11T07:27:09.994Z","2.1.194":"2021-07-11T07:30:19.576Z","2.1.195-renovate-internal-patch-b09408ccb6a543311f7ec99a8e90882e944bbc76":"2021-07-14T04:30:48.173Z","2.1.195":"2021-07-14T04:34:45.818Z","2.1.196-renovate-internal-patch-48d6db5352b76bbde268c85a98fb8908fc23cbd9":"2021-07-14T08:19:12.082Z","2.1.196":"2021-07-14T08:22:22.680Z","2.1.197-renovate-internal-patch-6f4238f5a6913992c3a67f92879de9f3c7106050":"2021-07-17T00:03:48.976Z","2.1.197-renovate-external-non-major-ff6231ad0637818c6b95ddefd36a57a5df5db5b0":"2021-07-17T00:08:15.697Z","2.1.197":"2021-07-17T00:08:55.618Z","2.1.198-renovate-external-non-major-d7b0803ffec73a1d0aa81774600bba4a3f0efbb5":"2021-07-17T00:12:14.763Z","2.1.198-remove-whitesource-48cef9de58ed70e4cd231ee2ae91747769c4cdde":"2021-07-17T00:18:10.844Z","2.1.198":"2021-07-17T00:19:29.897Z","2.1.199-remove-whitesource-f45714c77799cbd79eeb90090ddf6c9a2d546ab1":"2021-07-17T00:29:18.132Z","2.1.199":"2021-07-17T00:32:48.762Z","2.1.200-renovate-internal-patch-b729c2b38ab939995ff92d2268701eab4a8ddfcc":"2021-07-17T00:39:57.281Z","2.1.200":"2021-07-17T00:45:59.042Z","2.1.201-renovate-internal-patch-0f429d45981bf91b967dc4519efaae6330f55157":"2021-07-17T00:53:17.654Z","2.1.201":"2021-07-17T00:57:12.986Z","2.1.202-renovate-internal-patch-f3c78b8705cba4f4d89f542b09b1a64ce75d3954":"2021-07-17T01:01:03.885Z","2.1.202":"2021-07-17T02:29:49.899Z","2.1.203-renovate-internal-patch-7dcd4c7435cffa111ccee954664c838543286657":"2021-07-17T06:41:53.083Z","2.1.203":"2021-07-17T06:45:47.783Z","2.1.204-renovate-internal-patch-de650629d15c3e60b456e06400c4b52b1f31556a":"2021-07-21T08:42:11.029Z","2.1.204":"2021-07-21T08:45:41.926Z","2.1.205-renovate-external-non-major-1f25238480081c2f8b2987d51df68ada561fd173":"2021-07-24T01:30:12.514Z","2.1.205":"2021-07-24T01:33:35.223Z","2.1.206-renovate-external-non-major-f600dd519371d461969a4ae48b478a981d14b9c3":"2021-07-24T12:05:30.528Z","2.1.206":"2021-07-24T12:09:15.566Z","2.1.207-renovate-internal-patch-5ea8c62b0d49fde0547e11a4cd054c788a7fd298":"2021-07-29T02:26:25.129Z","2.1.207":"2021-07-29T02:29:24.518Z","2.1.208-renovate-internal-patch-c3688f3bd57f0201c491ee33f2d9b7d21d5c6ad0":"2021-07-30T03:48:54.005Z","2.1.208":"2021-07-30T03:52:32.409Z","2.1.209-renovate-external-non-major-bf026652176b60ae4ce399890425520b00f56718":"2021-07-31T01:08:18.848Z","2.1.209":"2021-07-31T01:11:28.355Z","2.1.210-renovate-internal-patch-0fb0a4d9cda954cbf89c6867973dfe9eb1432ef4":"2021-07-31T03:20:05.275Z","2.1.210":"2021-07-31T03:23:07.583Z","2.1.211-renovate-external-non-major-a89267cddef7c41e7acd924f691ebfd8f33872b0":"2021-07-31T18:12:00.415Z","2.1.211":"2021-07-31T18:15:44.314Z","2.1.212-h32-unify-script-names-f4dd876ac86e5003cb8314ba3213df6c36a25145":"2021-08-04T23:36:25.478Z","2.1.212":"2021-08-04T23:39:32.785Z","2.1.213-renovate-internal-patch-c45dd1f240c7edb6cc689b177cd49c36ab7b3922":"2021-08-05T00:43:52.225Z","2.1.213":"2021-08-05T00:47:46.462Z","2.1.214-renovate-internal-patch-8c722bd204386afd9b7d90d4826c74022a6350e1":"2021-08-06T14:00:44.151Z","2.1.214":"2021-08-06T14:08:40.432Z","2.1.215-renovate-external-non-major-41f2a11a2741c0aee5ce32a70490d99c84a26556":"2021-08-07T01:18:30.454Z","2.1.215":"2021-08-07T01:21:32.705Z","2.1.216-renovate-internal-patch-363afb40a0868637cf5149c8b411db56dde46412":"2021-08-07T01:24:56.359Z","2.1.216":"2021-08-07T01:29:47.453Z","2.1.217-renovate-internal-patch-bc39f7e2eb928e96b268b08a68bca674ea10f4dc":"2021-08-07T02:56:23.260Z","2.1.217":"2021-08-07T02:59:43.517Z","2.1.218-renovate-internal-patch-6fef2758f6001374c26aa0521183a4db762fccdd":"2021-08-09T11:35:44.332Z","2.1.218-renovate-balena-jellyfish-types-0-x-98ab10261020eb96eba16988f8d43accb45e5d9b":"2021-08-09T11:36:19.152Z","2.1.218":"2021-08-09T11:38:53.833Z","2.1.219-renovate-balena-jellyfish-types-0-x-4534fc4a489dfa12612a02c9acd067383d0e84af":"2021-08-09T11:42:07.902Z","2.1.219":"2021-08-09T11:48:05.434Z","2.1.220-renovate-internal-patch-89a95d5ffdab3f8805f78d66b1244aadc56ad66c":"2021-08-10T11:05:53.796Z","2.1.220":"2021-08-10T11:09:17.822Z","2.1.221-renovate-internal-patch-5135e4d3aa40735ffbd15ac4f0d43e1e62d9b310":"2021-08-10T11:57:59.019Z","2.1.221":"2021-08-10T12:02:16.040Z","2.1.222-lucianbuzzo-correct-action-type-1ae3a0aa506771e6fbf37bde9fc7525be91dab44":"2021-08-10T13:08:49.987Z","2.1.222":"2021-08-10T13:13:31.129Z","2.1.223-renovate-internal-patch-c1907a6c7eb76796fd33b7ed4d8f4d30d753d2bb":"2021-08-16T01:37:34.691Z","2.1.223":"2021-08-16T01:40:59.629Z","2.1.224-renovate-internal-patch-9c40fde924134badd31a60ea166a3fc44524cc32":"2021-08-17T13:41:50.714Z","2.1.224":"2021-08-17T13:45:04.223Z","2.1.225-renovate-internal-patch-c9412801a2bc2e8407aa96d85dd44e277383dce0":"2021-08-18T11:42:17.239Z","2.1.225":"2021-08-18T11:45:43.385Z","2.1.226-renovate-internal-patch-9b8ae1402ad8bba522b5edf2e407376654e2210a":"2021-08-19T23:05:56.444Z","2.1.226":"2021-08-19T23:09:27.919Z","2.1.227-bump-types-jest-1a74f8bdabd7fb785d591bbbb7e8f5543593df16":"2021-08-22T01:10:03.737Z","2.1.227":"2021-08-22T01:13:21.996Z","2.1.228-renovate-external-non-major-ecf1491c32845b75c3bec9f4e4a3d652a6daa6d9":"2021-08-22T01:16:53.146Z","2.1.228-renovate-internal-patch-b42603d208da2cb1ee33d68b391b59f236c7626b":"2021-08-22T01:18:44.652Z","2.1.228":"2021-08-22T01:21:38.335Z","2.1.229-renovate-external-non-major-16e56a9258140e3a4f5d6331f03149cd2fbe0c1f":"2021-08-22T01:27:20.434Z","2.1.229":"2021-08-22T01:30:32.621Z","2.1.230-move-jellyfish-types-883eb4e6cbfc2c1b50670a2b7884c7ede9b81789":"2021-08-25T12:43:58.459Z","2.1.230":"2021-08-25T12:49:01.285Z","2.1.231-renovate-external-non-major-6e2c2e6adf821b12ae5a186d7347c94ff1c4b649":"2021-08-29T01:46:20.847Z","2.1.231":"2021-08-29T01:49:30.962Z","2.1.232-renovate-internal-patch-0d32ad37d660406cf2c1d41af3fd82acfe2c33cb":"2021-08-29T02:03:34.312Z","2.1.232":"2021-08-29T02:06:48.790Z","2.1.233-renovate-external-non-major-ba05ae846e3352b430dfc6ee8f039dfd4f32f6a7":"2021-08-29T23:42:08.203Z","2.1.233":"2021-08-29T23:45:43.158Z","2.1.234-renovate-internal-patch-e9cea04136f2e0db37f2b09856bc6cd881dcf923":"2021-08-30T02:03:40.208Z","2.1.234":"2021-08-30T02:07:00.639Z","2.1.235-renovate-balena-jellyfish-types-1-x-c6226bb4da20e551864a912e0ebc4aca896402ba":"2021-09-02T01:26:58.451Z","2.1.235-renovate-external-non-major-d08209a8afb95e22511dd881e82d940b0d2853c9":"2021-09-04T00:21:49.026Z","2.1.235":"2021-09-04T00:25:58.340Z","2.1.235-renovate-balena-jellyfish-types-1-x-b6ae6e727fe9647d6e96ec01e7de02f093b238ea":"2021-09-04T00:27:14.337Z","2.1.236-renovate-balena-jellyfish-types-1-x-8c65f90c51e5741d58f6398ed0d6ef6aedba6b8e":"2021-09-05T09:21:09.382Z","2.1.236-renovate-balena-jellyfish-types-1-x-40de0a4577ef4d9816ee3db90fc30abd4aeefd7f":"2021-09-06T05:32:28.280Z","2.1.236-renovate-balena-jellyfish-types-1-x-c2679790b9a6d20cc0c83a83d5523aa4306d1ed5":"2021-09-07T09:21:35.583Z","2.1.236":"2021-09-09T22:55:40.205Z","2.1.237-renovate-internal-patch-fad54e2786841690ddbac91bac064f17324a6e5c":"2021-09-10T00:31:10.865Z","2.1.237":"2021-09-10T00:34:38.495Z","2.1.238-renovate-external-non-major-5f315a3bb88aa6358a18e364770c2d3721e34b79":"2021-09-11T00:34:37.277Z","2.1.238-renovate-external-non-major-bf97b9bc5cddb45de03304a401d0804a5c39583c":"2021-09-11T02:55:01.681Z","2.1.238-renovate-internal-patch-39bd332a6b03e098c4968194f3412c4d6fda3db3":"2021-09-11T05:35:58.715Z","2.1.238":"2021-09-11T05:39:09.514Z","2.1.239-renovate-external-non-major-0a1f6abb708a38c95c1f2771585c1a6a1c92bd09":"2021-09-11T05:42:44.061Z","2.1.239-renovate-internal-patch-a29f69100bb95dc0a7ed980b39b987e532a43f6a":"2021-09-12T05:18:48.022Z","2.1.239-renovate-external-non-major-4b9bd361f665bb6973c4e0ab4fbc94cb1a75abb2":"2021-09-12T05:20:02.757Z","2.1.239":"2021-09-12T05:21:48.778Z","2.1.240-renovate-external-non-major-6210125bb7304ccdf5f9441af760d089167c0330":"2021-09-13T09:43:21.565Z","2.1.240-renovate-internal-patch-fffbb0f03ed5727002eba421fcc4c01a993ae5fe":"2021-09-18T03:44:36.683Z","2.1.240":"2021-09-18T03:48:04.728Z","2.1.241-renovate-external-non-major-d0da85c32bbfec0d995be011361c5e613278c1a9":"2021-09-18T03:51:57.758Z","2.1.241-renovate-external-non-major-c469f4f879e608b639f1731f62816eb1453cc5bb":"2021-09-18T20:31:50.842Z","2.1.241-renovate-balena-jellyfish-types-1-x-d3abf514b6a783f3ec7347dd318cb08e36e06ade":"2021-09-20T11:27:13.904Z","2.1.241":"2021-09-20T11:30:47.035Z","2.1.242-renovate-internal-patch-0013585a989e1eb5dd0848bd27dd854c33758bb4":"2021-09-20T11:35:05.295Z","2.1.242-renovate-external-non-major-f6044c6d6625543859997ab184b4047ad0d6241e":"2021-09-20T11:37:00.582Z","2.1.242":"2021-09-20T11:41:00.741Z","2.1.243-renovate-external-non-major-eacfcae8d7ca98f7f1e656b0e07c31e96cd2935f":"2021-09-20T11:49:36.010Z","2.1.243-renovate-external-non-major-f10db684fe0f5271d54f32c78b6304556322127d":"2021-09-20T13:58:44.301Z","2.1.243-renovate-external-non-major-3ca2b55a8c03f9c019eb5aa76ac8538c90fca0cc":"2021-09-22T00:33:20.181Z","2.1.243-renovate-external-non-major-12b02853e075f09876f14752c6b3059c0a8c9ab3":"2021-09-22T00:57:30.546Z","2.1.243":"2021-09-22T01:01:03.371Z","2.1.244-repo-sync-jellyfish-config-default-85f1df34cfbe7c22cd41e601c29bcb4ae45a82d3":"2021-10-04T03:38:04.315Z","2.1.244-repo-sync-jellyfish-config-default-dc2e8d39212dba1c8301211c198da554ab84e089":"2021-10-04T05:19:50.374Z","2.1.244":"2021-10-05T00:02:44.648Z","2.1.245-renovate-internal-patch-99368ee26ab34ea1f904fcd23d3546f960618fed":"2021-10-18T20:06:42.284Z","2.1.245":"2021-10-18T20:10:30.963Z","2.1.246-renovate-balena-jellyfish-config-1-x-7ff323185c0897ead50bcb03739b7583566988c3":"2021-10-18T20:14:00.856Z","2.1.246":"2021-10-18T20:20:09.014Z","2.1.247-renovate-internal-patch-53f30a7bc0b9c331031bccfb57f9429605cb39f9":"2021-10-20T08:29:42.839Z","2.1.247":"2021-10-20T08:33:00.159Z","2.1.248-renovate-external-non-major-42189dfe9cf99e1b824f8312e0178f1618fa333e":"2021-10-23T00:29:17.620Z","2.1.248":"2021-10-23T00:32:56.559Z","2.1.249-renovate-internal-patch-0968ce1d328bfd1ad1290cbe390e8829240b1aed":"2021-10-23T02:55:47.536Z","2.1.249":"2021-10-23T02:59:25.825Z","2.1.250-renovate-internal-patch-3df91dfb09002e272a2f26c6485fd3ed94d3a00e":"2021-10-23T04:34:23.115Z","2.1.250":"2021-10-23T04:38:14.595Z","2.1.251-renovate-internal-patch-b2e995d3cac00306cb0c63834c1a0875cdc080a6":"2021-10-23T09:41:31.108Z","2.1.251":"2021-10-23T09:45:49.172Z","2.1.252-renovate-external-non-major-15c09de975cc665824e10b2f1002c5754f03c0d1":"2021-10-23T21:48:38.193Z","2.1.252-renovate-internal-patch-76f7b312bcf392dfb72a78e18af4eae06c381de3":"2021-10-23T21:48:53.621Z","2.1.252":"2021-10-23T21:52:03.635Z","2.1.253-renovate-internal-patch-ec5c7aae38bbf42f901a65c311dbae2d4615b5e8":"2021-10-23T21:58:54.985Z","2.1.253":"2021-10-23T22:02:45.590Z","2.1.254-renovate-internal-patch-a2300c5df37029fb997f35485577f44df67eb66b":"2021-10-28T05:20:57.253Z","2.1.254":"2021-10-28T05:24:39.832Z","2.1.255-renovate-internal-patch-352b46a730afffe8551b2590223d16864923fb05":"2021-10-28T10:39:55.180Z","2.1.255":"2021-10-28T10:43:01.674Z","2.1.256-renovate-internal-patch-8d41fa4be273569cac452f3d6934749e35ce176e":"2021-10-28T12:26:25.020Z","2.1.256":"2021-10-28T12:30:13.533Z","2.1.257-renovate-internal-patch-45c758e910e5e9af0aef6a9f8b47d1a04b079f74":"2021-10-28T14:48:27.013Z","2.1.257":"2021-10-28T14:51:52.601Z","2.1.258-renovate-external-non-major-9580743d02c0269084a1431cfc12fd5ba16d9acc":"2021-10-30T00:35:08.918Z","2.1.258":"2021-10-30T00:38:27.154Z","2.1.259-renovate-internal-patch-21db6c4fc45716ebb9d4990f0e58ce6557b7dbe7":"2021-10-30T04:34:42.840Z","2.1.259":"2021-10-30T04:38:22.386Z","2.1.260-renovate-internal-patch-f45f8a9d73eb95dfe46f96d68ca36c2a536c0850":"2021-11-05T10:29:53.111Z","2.1.260":"2021-11-05T10:33:16.892Z","2.1.261-renovate-internal-patch-54a2e9cc88b1c52e6c2421c31b99cccb46b0dc39":"2021-11-06T00:03:26.981Z","2.1.261":"2021-11-06T00:06:12.181Z","2.1.262-renovate-internal-patch-d0fa11d68b7bbb400887279ab598368637fe0349":"2021-11-06T02:27:53.261Z","2.1.262":"2021-11-06T02:30:25.533Z","2.1.263-renovate-internal-patch-67a1fd25998d7e1d0d5146992a5cfe7d44695772":"2021-11-07T01:27:54.160Z","2.1.263-renovate-external-non-major-06f0ef9e633659019dc8ef8eb16c8ca8c55b36c8":"2021-11-07T01:28:21.348Z","2.1.263":"2021-11-07T01:30:51.534Z","2.1.264-renovate-external-non-major-6061f222eaaef617f080711d9676fc9875044a2b":"2021-11-07T01:35:21.492Z","2.1.264":"2021-11-07T01:39:06.555Z","2.1.265-renovate-internal-patch-4df4fd9ea4ef38abdba1e52c50cbc6e446c81d42":"2021-11-09T14:22:46.645Z","2.1.265":"2021-11-09T14:26:45.285Z","2.1.266-joshbwlng-bump-sinon-e0bcc43664031c5f79f5c03520d56e795e701997":"2021-11-09T14:40:18.572Z","2.1.266":"2021-11-09T14:43:48.792Z","2.1.267-renovate-internal-patch-4f1ac89fd5822b3de32b6dd154f6a63f6b70a59a":"2021-11-11T06:35:18.300Z","2.1.267":"2021-11-11T06:37:58.254Z","2.1.268-renovate-internal-patch-d6b2391d34c83ebe6a5de9c6c8dde4dbe9b9016b":"2021-11-12T06:02:31.646Z","2.1.268":"2021-11-12T06:05:55.034Z","2.1.269-renovate-internal-patch-b1c2fdd7710fb94efc42b689199350557c934250":"2021-11-13T01:29:18.089Z","2.1.269-renovate-external-non-major-b5cda64a0f4da0b3b7256c1045e84f92d6262bbb":"2021-11-13T01:31:24.417Z","2.1.269":"2021-11-13T01:32:26.603Z","2.1.270-renovate-internal-patch-6c91a1fe91e7cc2c285824f67659e3602703a0cb":"2021-11-13T04:05:23.254Z","2.1.270":"2021-11-13T04:08:46.754Z","2.1.271-renovate-external-non-major-d2779e10a804d53f4327828f21db9740a86101d3":"2021-11-13T04:10:20.308Z","2.1.271":"2021-11-13T04:17:41.452Z","2.1.272-renovate-internal-patch-47543ed762a2448ebab61a2b8456e0471d1246e8":"2021-11-13T09:27:41.359Z","2.1.272":"2021-11-13T09:30:01.957Z","2.1.273-renovate-internal-patch-f814be591357890c6ddb4ce38b0dca1b703fb7f8":"2021-11-14T15:03:00.605Z","2.1.273":"2021-11-14T15:06:08.143Z","2.1.274-renovate-internal-patch-2842174deb7a0617d8c5b24206134c575a3c6789":"2021-11-14T22:48:00.253Z","2.1.274-renovate-external-non-major-4498f2f03c68ea0508284d1d4c89e48c2c4e5997":"2021-11-14T22:48:30.478Z","2.1.274":"2021-11-14T22:51:12.625Z","2.1.275-renovate-external-non-major-c596d66eeed211b52315775a5df1ffa6acca923d":"2021-11-14T22:54:01.286Z","2.1.275":"2021-11-14T22:59:52.922Z","2.1.276-renovate-internal-patch-376e5a10ac12271b1ee1769921b13f3af54f59fc":"2021-11-14T23:09:02.222Z","2.1.276":"2021-11-14T23:13:05.782Z","2.1.277-renovate-internal-patch-869bb84be818a8da4d34785aa872e0d49a9f0a2e":"2021-11-14T23:17:51.663Z","2.1.277-renovate-internal-patch-78fc3e0fd0aa08a56f9b91e16e2c9efd86c633fe":"2021-11-15T04:43:19.060Z","2.1.277":"2021-11-15T04:46:24.820Z","2.1.278-renovate-internal-patch-6b8f9add260b62ff32347a74f0a921ce4e848f5e":"2021-11-15T09:35:49.885Z","2.1.278":"2021-11-15T09:38:51.305Z","2.1.279-renovate-internal-patch-485f04388e7be00936c6ddf82b1daf4f8f4afc41":"2021-11-15T11:57:33.222Z","2.1.279":"2021-11-15T12:02:03.631Z","2.1.280-renovate-internal-patch-930a700bbe467a0f554cfa3b2a11a0b41cf01e74":"2021-11-16T00:51:32.007Z","2.1.280":"2021-11-16T00:56:12.272Z","2.1.281-joshbwlng-set-license-cf1c462729c9a729206fdec51ab4a856eeab56ae":"2021-11-16T01:12:31.776Z","2.1.281":"2021-11-16T01:16:05.708Z","2.1.282-renovate-internal-patch-9c6d91ec49b309ad3200792bdcb83621817b9e27":"2021-11-16T01:18:21.362Z","2.1.282":"2021-11-16T01:24:02.913Z","2.1.283-renovate-internal-patch-c42ad0ac4d40406eaac6f8bcfb32770ed1f7d484":"2021-11-16T03:42:14.572Z","2.1.283":"2021-11-16T03:45:13.285Z","2.1.284-repo-sync-jellyfish-config-default-be55f1095535b9991aecc77daabc7796d2b40681":"2021-11-16T04:03:13.251Z","2.1.284":"2021-11-16T04:06:42.604Z","2.1.285-renovate-internal-patch-9c44678fa54b2c994166dad0804bf9cfc264e629":"2021-11-16T04:16:00.432Z","2.1.285-renovate-internal-patch-fc1651ceb9dbd1b5d48ab6f475b15ef8c5707e5c":"2021-11-16T07:14:47.730Z","2.1.285-renovate-internal-patch-c6656aa564ad6e684c11113a2bb88c853f445747":"2021-11-16T07:47:34.173Z","2.1.285":"2021-11-16T07:50:59.202Z","2.1.286-renovate-balena-jellycheck-1-x-04f7cae524dd92e958932185ab9276d0a03f56d5":"2021-11-20T01:55:08.666Z","2.1.286-renovate-internal-patch-478d10f00ef5b318fd9c94e8b1daf18d0e1a67de":"2021-11-20T12:11:24.998Z","2.1.286":"2021-11-21T00:29:08.754Z","2.1.287-joshbwlng-remove-license-headers-02d1d41fdd0fffe3afd39c9e97c7fcb23a549183":"2021-11-21T00:49:04.368Z","2.1.287":"2021-11-21T00:51:59.803Z","2.1.288-renovate-internal-patch-3894dd15efa2e5c24d82572fbd0f54ed6426ef2c":"2021-11-22T01:18:49.856Z","2.1.288-renovate-internal-patch-e54fa3b40d4505a33162c304cd6c322890e53b54":"2021-11-22T01:22:56.718Z","2.1.288":"2021-11-22T01:27:08.268Z","2.1.289-renovate-internal-patch-2c41ce8faa428340bf10e63f2769021462a9228b":"2021-11-22T01:32:48.440Z","2.1.289":"2021-11-22T01:36:47.078Z","2.1.289-renovate-external-non-major-91af585933213d72fd8f048cfb24425695304608":"2021-11-22T01:38:20.453Z","2.1.290-renovate-internal-patch-4f44b638aee8b4ca5b061a185af89d0bd6df8ced":"2021-11-22T05:56:15.273Z","2.1.290":"2021-11-22T13:12:10.613Z","2.1.291-renovate-external-non-major-bff17c4060c1daf2601af38258cfad8013d153c4":"2021-11-22T13:18:05.758Z","2.1.291-joshbwlng-bump-types-jest-c5306fa6af6c823c4ddc983221b60e607aefbe1d":"2021-11-22T13:57:29.282Z","2.1.291":"2021-11-22T14:01:12.604Z","2.1.292-joshbwlng-bump-lint-staged-5a4c273f463bd55b0a484c2fa5ef8ad1aa987c23":"2021-11-22T15:00:52.270Z","2.1.292":"2021-11-22T15:04:35.238Z","2.1.293-renovate-external-non-major-49b9ee74d10a9379ac38f8c4e99e30698291de42":"2021-11-22T15:06:16.766Z","2.1.293-renovate-internal-patch-b7441e0701e494f05c9a21326f0a3def35a66098":"2021-11-23T02:36:19.361Z","2.1.293":"2021-11-23T02:39:13.243Z","2.1.294-renovate-typescript-4-x-ef587dce8d31cee9421db4dd9d57a7783c20fd41":"2021-11-23T02:43:31.074Z","2.1.294-renovate-internal-patch-90c4bc97639fc30396cdaf163335c81329eeecf1":"2021-11-23T04:48:51.297Z","2.1.294":"2021-11-23T04:51:54.577Z","2.1.295-renovate-internal-patch-580fcee14c348c746a44673d5820af580f63e0d9":"2021-11-24T01:36:59.142Z","2.1.295":"2021-11-24T01:40:11.302Z","2.1.296-renovate-typescript-4-x-0a56c6d79488b7e8b32b50383b900e7b4fa3ad8c":"2021-11-24T01:42:48.031Z","2.1.296-renovate-internal-patch-bbba7e12e98d15a5426118fc1f04da64fe3bb720":"2021-11-24T03:49:04.684Z","2.1.296":"2021-11-24T03:52:22.415Z","2.1.297-renovate-typescript-4-x-1f4989a4217a45b8060293a43ae075a5f29a42ad":"2021-11-24T03:54:55.725Z","2.1.297-repo-sync-jellyfish-config-default-33469805bc0882844eac67315944b88a5f57947c":"2021-11-24T06:49:36.832Z","2.1.297":"2021-11-24T06:53:29.669Z","2.1.298-renovate-typescript-4-x-6f0e550e6f01da557edfc11b2d4eb7321c6f280f":"2021-11-24T06:57:36.272Z","2.1.298-renovate-internal-patch-38d87b84a0bdb9fadf402ba66b305bdcd672f661":"2021-11-24T13:29:04.446Z","2.1.298":"2021-11-24T13:32:44.779Z","2.1.299-renovate-typescript-4-x-33246a8f41c22fd7b98e5f48a0e29ba8bcba8b02":"2021-11-24T13:36:01.081Z","2.1.299-joshbwlng-remove-jellycheck-640ade4aaebcd97b8d1322de72b18c580bfbccd7":"2021-11-25T02:30:21.704Z","2.1.299":"2021-11-25T02:33:29.967Z","2.1.300-renovate-internal-patch-7ab36468826a98007409a77b66187f8186d68e7a":"2021-11-25T08:26:19.693Z","2.1.300":"2021-11-25T08:30:30.375Z","2.1.301-renovate-typescript-4-x-ff8f925f3611dd9dbdf804157dd58150d93e2308":"2021-11-25T08:33:02.471Z","2.1.301":"2021-11-26T01:11:09.903Z","2.1.302-joshbwlng-use-renovate-config-c590c3b8c3a21f11e56ef290736bc38180d3876a":"2021-11-26T04:58:38.766Z","2.1.302":"2021-11-26T05:02:27.223Z","2.1.303-renovate-balena-lint-6-x-b7e91be1bfb793a787f9f12306ccdb63ea15fb85":"2021-11-26T17:53:30.414Z","2.1.303":"2021-11-26T17:57:32.818Z","2.1.304-renovate-balena-jellyfish-config-2-x-5b4604bda669951a66a78340ed1d0df6e528abd5":"2021-11-26T17:59:45.205Z","2.1.303-renovate-internal-patch-7469788dcfdcf6ccd68f403d8ab34270f0cd82af":"2021-11-26T18:00:08.116Z","2.1.304-renovate-internal-patch-4d62ce1927a5e0787f43e66dfea6e89446c9db67":"2021-11-26T18:04:25.872Z","2.1.304":"2021-11-26T18:09:26.036Z","2.1.304-renovate-balena-jellyfish-config-2-x-fdcb0ca31609a52a3bfc915e9784e10d225655f9":"2021-11-26T18:12:15.025Z","2.1.305-renovate-balena-jellyfish-config-2-x-494bf9b7582449137cd97098ccb424bcfef5b744":"2021-11-26T18:14:47.322Z","2.1.305-renovate-internal-patch-d9fa35c9aaae8c773dc3250462babfc191aca421":"2021-11-27T02:17:34.168Z","2.1.305-renovate-balena-jellyfish-config-2-x-9375c824378ff1ece67d24a48f048173c5825462":"2021-11-27T02:18:12.321Z","2.1.305":"2021-11-27T02:22:17.932Z","2.1.305-renovate-external-non-major-a07032d48003a89a9b39b00699a56f7b15f69ff6":"2021-11-27T02:25:05.865Z","2.1.306-renovate-balena-jellyfish-config-2-x-82f735eb5fd820ee871622f33a827bd9f818a2a8":"2021-11-27T02:27:37.670Z","2.1.306-renovate-internal-patch-cce829d034fddd01e6558f8f14365d3752ba8bcf":"2021-11-27T05:21:53.924Z","2.1.306":"2021-11-27T05:24:47.225Z","2.1.307-renovate-balena-jellyfish-config-2-x-a84c1681f12b23641d8faaf00fb39f9e9cc866bb":"2021-11-27T05:29:19.985Z","2.1.307-renovate-external-non-major-77a996821fcc7a46773b073ba3e7c673abe63b3e":"2021-11-27T14:47:58.575Z","2.1.307-renovate-internal-patch-64d72d8b9599aa22d1b211bf424a06dfa5a241dc":"2021-11-27T14:52:22.434Z","2.1.307":"2021-11-27T14:52:42.405Z","2.1.308-renovate-internal-patch-a5ea76660b8cb1f89d210fad5e14b40eb3911b4d":"2021-11-27T14:58:18.442Z","2.1.308":"2021-11-27T15:03:36.886Z","2.1.309-renovate-internal-patch-2d8854bdfa4d53056fc78f23e89b635e3b7a0dcc":"2021-11-27T18:56:59.781Z","2.1.309":"2021-11-27T19:01:05.961Z","2.1.310-renovate-internal-patch-153f90f052dfba58acace27da3d8876fb98ac5a5":"2021-11-29T14:07:06.835Z","2.1.310":"2021-11-29T14:10:26.384Z","2.1.311-renovate-internal-patch-03415071796e77e39fb34090f6f5edabfcc9c672":"2021-12-01T12:10:19.637Z","2.1.311":"2021-12-01T12:13:32.237Z","2.1.312-renovate-external-non-major-1a85cde751fa03ffd6bbb70c5ea915f687ef1365":"2021-12-04T01:25:53.487Z","2.1.312":"2021-12-04T01:29:03.578Z","2.1.313-renovate-internal-patch-09e104896b324e2656cd3f558cacbeeb877460bc":"2021-12-04T18:44:48.076Z","2.1.313":"2021-12-04T18:48:38.422Z","2.1.314-renovate-internal-patch-18828bbad73b4eb9de9dc4bd26188ee57a680d93":"2021-12-04T21:13:18.772Z","2.1.314":"2021-12-04T21:16:23.780Z","2.1.315-renovate-external-non-major-0a67ec791167c7a2f80daced563b436aedfe4a9a":"2021-12-05T09:39:37.833Z","2.1.315":"2021-12-05T09:43:03.971Z","2.1.316-renovate-internal-patch-4d693212afb7a82b0c8832430b2cb411bce1bb91":"2021-12-05T09:48:38.755Z","2.1.316":"2021-12-05T09:52:21.595Z","2.1.317-renovate-internal-patch-0772a3791d2658e555b70435dda7f502a2a59be1":"2021-12-05T11:53:43.130Z","2.1.317":"2021-12-05T11:58:09.413Z","2.1.318-renovate-internal-patch-adbf57d49e6ef14c07dcb1cd62db604b13a117bb":"2021-12-05T23:19:31.857Z","2.1.318":"2021-12-05T23:22:54.368Z","2.1.319-joshbwlng-update-upstreams-f5d36b20c12426988b394dcdbaf2647bcead45a7":"2021-12-07T05:18:56.610Z","2.1.319":"2021-12-07T05:22:41.904Z","2.1.320-joshbwlng-bump-jellyfish-logger-a6457daa552dd622867b59d90b0b7eb9b002e46c":"2021-12-07T05:39:24.298Z","2.1.320":"2021-12-07T05:49:26.551Z","2.1.321-renovate-typescript-4-x-ad164ef06916fb58992d494025b2dcf8650ff89c":"2021-12-09T22:52:53.410Z","2.1.321":"2021-12-10T02:15:47.043Z","2.1.322-renovate-internal-patch-af3250f34c88277fce7aa11190a129bd317c0ee5":"2021-12-11T09:05:26.918Z","2.1.322":"2021-12-11T09:08:57.508Z","2.1.323-renovate-external-non-major-eac3392483d8cabdb63dc099388486800a940949":"2021-12-11T09:12:07.037Z","2.1.323":"2021-12-11T09:17:09.464Z","2.1.324-joshbwlng-drop-depcheck-64396f8fd818aacc93bd8e1570c28ce541c998dd":"2021-12-14T01:25:56.289Z","2.1.324":"2021-12-14T01:29:02.728Z","2.2.0-lucianbuzzo-mixins-18899db34b17eae8c7912c0ceb188d93349a82b0":"2021-12-14T15:39:31.312Z","2.1.325-renovate-internal-patch-f22db58410f1390ed953ef3628011049f7c8fcfd":"2021-12-14T15:40:36.475Z","2.2.0":"2021-12-14T15:43:34.091Z","2.2.1-renovate-internal-patch-d30cbbff5aa824aaaa7d9552151a41a0d5b1a843":"2021-12-14T15:47:48.593Z","2.2.1":"2021-12-14T15:50:33.767Z","2.2.2-renovate-balena-jellyfish-logger-3-x-7401a85d74d4944f3c2ea4239ffd04162d57d053":"2021-12-16T19:45:51.134Z","2.2.2":"2021-12-16T19:52:27.829Z","2.2.3-renovate-balena-jellyfish-logger-4-x-9598cdf3defacd8e12e0486127c80a1e79692dc6":"2021-12-17T11:29:49.743Z","2.2.3-renovate-balena-jellyfish-logger-4-x-380c6578f22b1b37de98d442da32bffdc479fb8a":"2021-12-17T15:46:20.300Z","2.2.3":"2021-12-17T23:07:46.668Z","2.2.4-renovate-external-non-major-580bd4d47dbd266c2586158abc62eee3d85294a8":"2021-12-18T01:39:54.356Z","2.2.4-renovate-internal-patch-028ddd8e18db1c3968abd9d4d5bffc216fae6794":"2021-12-18T01:40:26.877Z","2.2.4":"2021-12-18T01:44:09.024Z","2.2.5-renovate-external-non-major-d95b6f797b0e3cd625dcbee24eeec2d0720f4534":"2021-12-18T10:59:11.341Z","2.2.5-renovate-internal-patch-61fb049a1f0ca736930e8dcd8fc4e59c70ba811c":"2021-12-18T10:59:17.868Z","2.2.5":"2021-12-18T11:02:03.712Z","2.2.6-renovate-internal-patch-030f39e42c5a91884c49c400c6d2f3c419044095":"2021-12-18T14:11:10.232Z","2.2.6":"2021-12-18T14:15:05.813Z","2.2.7-renovate-internal-patch-ca5f348b11dbbf73d0b84dc85288a4da4c94e003":"2021-12-19T03:25:56.148Z","2.2.7":"2021-12-19T03:29:04.356Z","2.2.8-renovate-balena-jellyfish-types-2-x-3d2d5e1cfaab715e9516cf4d4f269040e28172bf":"2021-12-21T11:32:21.243Z","2.2.8":"2021-12-24T04:23:54.623Z","3.0.0-joshbwlng-clean-types-131ceff5d7812b84ff6842ed40cc38f6d4a245b7":"2021-12-24T04:49:28.542Z","3.0.0-joshbwlng-clean-types-eef5f6406ce1a052af5ce020317613d9bbd28c6c":"2021-12-24T05:03:35.988Z","2.2.9-renovate-external-non-major-ca2b1ecb45df548509a39a2bf15152326ec55675":"2021-12-25T00:05:51.279Z","2.2.9":"2021-12-25T00:09:21.125Z","2.2.10-renovate-internal-patch-f15ebe02e0683a135e3c4df784dcd42a9db95cc3":"2021-12-25T02:16:26.794Z","2.2.10":"2021-12-25T02:20:20.583Z","2.2.11-renovate-internal-patch-e48027d7d4eea7a85f568c863f8bd3cd7106ddba":"2021-12-25T02:29:24.394Z","2.2.11":"2021-12-25T02:32:58.430Z","3.0.0-joshbwlng-clean-types-2ba256ccab19686c49f8dc8619c9952a1972e7e1":"2021-12-27T12:44:33.457Z","3.0.0-joshbwlng-clean-types-731aaf3ed8509295d70bae30623aa92118a0820d":"2021-12-29T08:40:35.275Z","2.2.12-renovate-internal-patch-fb62357aa6e7bc1a45fff7e5885a13d654b94761":"2021-12-30T21:35:55.112Z","2.2.12":"2021-12-30T21:38:50.230Z","2.2.13-renovate-internal-patch-fc6dcc658420db5fc3ccc42eb5143ef80a48bef3":"2022-01-01T01:48:32.663Z","2.2.13-renovate-external-non-major-c435ec6ff097b8fa33c59f8ce6b65103538466d6":"2022-01-01T01:49:01.322Z","2.2.13":"2022-01-01T01:52:01.222Z","2.2.14-renovate-external-non-major-e211e2080f9d0f9d96d16d3d64a7919e89c713d4":"2022-01-01T01:54:22.552Z","2.2.14-renovate-internal-patch-9f6d55b4f651a35eeb2636547afa49e80640d818":"2022-01-01T03:41:20.077Z","2.2.14":"2022-01-01T03:44:56.646Z","2.2.15-renovate-external-non-major-3c59d2f9a4447609e0d4787cdb01ad551df4cf16":"2022-01-01T03:49:26.819Z","2.2.15":"2022-01-01T03:52:21.683Z","2.2.16-renovate-internal-patch-0aec1186d61533bd19032e4a6c6477a290ecadbc":"2022-01-02T23:03:46.592Z","2.2.16":"2022-01-02T23:07:39.972Z","2.2.17-renovate-external-non-major-483ff79e63903686b59cc9d3fe5c15f219092bf7":"2022-01-02T23:13:03.789Z","2.2.17":"2022-01-02T23:17:55.719Z","2.2.18-renovate-internal-patch-d996bc7009bc213a9cee2bc9ee7ec1cf122f6679":"2022-01-03T11:54:35.298Z","2.2.18":"2022-01-03T11:59:30.336Z","2.2.19-renovate-internal-patch-50930b620a741a05b4a72a1d0cb9d2a8b2400b3d":"2022-01-03T13:59:03.493Z","2.2.19":"2022-01-03T14:02:31.024Z","2.2.20-renovate-internal-patch-bad7441c293443271ac334556d720431c1f62be5":"2022-01-08T03:11:12.039Z","2.2.20":"2022-01-08T03:15:47.037Z","2.2.21-renovate-internal-patch-6398b1762345c50f4552fcd00864029c162061d9":"2022-01-08T12:23:26.790Z","2.2.21":"2022-01-08T12:27:15.100Z","2.2.22-renovate-external-non-major-6574b35442f731c32010e5ed95a93972cf62f754":"2022-01-08T12:32:51.404Z","2.2.22":"2022-01-08T12:37:09.842Z","2.2.23-renovate-external-non-major-aae8495291c29c041a67588330279fbcfab132d1":"2022-01-15T01:04:21.890Z","2.2.23":"2022-01-15T01:08:21.672Z","2.2.24-renovate-internal-patch-25521039c463d2f68b61d8b67c518eea1e2bb510":"2022-01-15T02:38:53.954Z","2.2.24":"2022-01-15T02:41:58.791Z","2.2.25-lucianbuzzo-mixins-fd9ed103b7e8c28b43abf7173ecda86369b0a700":"2022-01-17T13:32:12.493Z","2.2.25":"2022-01-17T13:37:57.966Z","2.2.26-joshbwlng-update-readme-cfa635744f7b9f7bbcf6f83f7bfc5c0e8fd351f2":"2022-01-29T07:39:57.542Z","2.2.26":"2022-01-29T07:43:36.723Z"},"bugs":{"url":"https://github.com/product-os/jellyfish-plugin-base/issues"},"author":{"name":"Balena.io.","email":"hello@balena.io"},"license":"Apache-2.0","homepage":"https://github.com/product-os/jellyfish-plugin-base#readme","repository":{"url":"git+https://github.com/product-os/jellyfish-plugin-base.git","type":"git"},"description":"Base for all Jellyfish plugins","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"page","email":"page@balena.io"}],"readme":"**Notice: This utility has been discontinued. The functionality provided by this module has been merged into [`jellyfish-worker`](https://github.com/product-os/jellyfish-worker).**\n\n# Jellyfish Plugin Base\n\nThis library contains the building blocks of the Jellyfish Plugin system:\n* `PluginManager`. The plugin manager is provided with a list of plugins and is responsible for _instantiating_, _validating_ (e.g. checking for duplicate slugs across plugins) and _loading_ these plugins in the correct order (for example respecting where one plugin `requires` another).\n* `JellyfishPluginBase` - an 'abstract' class which all Jellyfish plugins should extend. This class encapsulates the logic/helper methods for validating and loading cards, integrations, actions, lenses etc and exposing them in the format expected (e.g. an object of cards keyed by slugs).\n* Generic unit tests for plugins. These include basic generic sanity tests for plugins that each plugin repo can import and run rather than writing explicitly each time.\n\n# Usage\n\n## `JellyfishPluginBase`\n\nBelow is an example how to use the `JellyfishPluginBase` base class exported by this library:\n\n```js\nconst {\n\tJellyfishPluginBase\n} = require('@balena/jellyfish-plugin-base')\n\nclass MyPlugin extends JellyfishPluginBase {\n\tconstructor() {\n\t\tsuper({\n\t\t\tslug: 'my-plugin',\n\t\t\tname: 'My Plugin',\n\t\t\tversion: '1.0.0',\n\t\t\tcards: [],\n\t\t\tmixins: {},\n\t\t\tintegrations: [],\n\t\t\tactions: [],\n\t\t})\n\t}\n}\n```\n\nThe `JellyfishPluginBase` constructor takes a single argument with the following properties:\n\n* **slug** - the unique identifying slug for the plugin. Can only contain lowercase letters, numbers and '-'.\n* **name** - a user-friendly name for the plugin.\n* **version** - the version of the plugin. Used for compatibility checks when one plugin requires another plugin.\n* **requires** - an optional array of objects identifying other plugins that are required for this plugin to work.\n* **cards** - an optional array of cards defined by the plugin. Each item in the array can be a plain JavaScript object representing the card or a function that takes mixins as an argument and returns a card object (for cards that use mixins).\n* **mixins** - an optional map of mixins defined by the plugin that are used by the plugin's cards.\n* **integrations** - an optional array of integrations defined by the plugin.\n* **actions** - an optional array of actions defined by the plugin.\n\n_Note: the order of cards in the cards array is important. Specifically, any type cards must be placed above/before any cards of that type._\n\n## `PluginManager`\n\nBelow is an example how to use the plugin manager exported by this library:\n\n```js\nconst {\n\tPluginManager\n} = require('@balena/jellyfish-plugin-base')\nconst DefaultPlugin = require('@balena/jellyfish-plugin-default')\n\nconst pluginManager = new PluginManager(\n\tcontext, {\n\t\tplugins: [\n\t\t\tDefaultPlugin\n\t\t]\n\t}\n)\n\nconst cards = pluginManager.getCards(context, mixins)\n```\n\n# Documentation\n\n[![Publish Documentation](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml/badge.svg)](https://github.com/product-os/jellyfish-plugin-base/actions/workflows/publish-docs.yml)\n\nVisit the website for complete documentation: https://product-os.github.io/jellyfish-plugin-base\n","readmeFilename":"README.md"}