
Security News
Attackers Are Hunting High-Impact Node.js Maintainers in a Coordinated Social Engineering Campaign
Multiple high-impact npm maintainers confirm they have been targeted in the same social engineering campaign that compromised Axios.
@savantly/sprout-toolkit
Advanced tools
Toolkit for building Sprout plugins. [Stolen, err borrowed from Grafana Toolkit]
sprout-toolkit is a CLI that enables efficient development of Sprout plugins. We want to help our community focus on the core value of their plugins rather than all the setup required to develop them.
Set up a new plugin with sprout-toolkit plugin:create command:
npx @savantly/sprout-toolkit plugin:create my-sprout-plugin
cd my-sprout-plugin
yarn install
yarn dev
With sprout-toolkit, we give you a CLI that addresses common tasks performed when working on Sprout plugin:
sprout-toolkit plugin:createsprout-toolkit plugin:devsprout-toolkit plugin:testsprout-toolkit plugin:buildsprout-toolkit plugin:create plugin-name
This command creates a new Sprout plugin from template.
If plugin-name is provided, then the template is downloaded to ./plugin-name directory. Otherwise, it will be downloaded to the current directory.
sprout-toolkit plugin:dev
This command creates a development build that's easy to play with and debug using common browser tooling.
Available options:
-w, --watch - run development task in a watch modesprout-toolkit plugin:test
This command runs Jest against your codebase.
Available options:
--watch - Runs tests in interactive watch mode.--coverage - Reports code coverage.-u, --updateSnapshot - Performs snapshots update.--testNamePattern=<regex> - Runs test with names that match provided regex (https://jestjs.io/docs/en/cli#testnamepattern-regex).--testPathPattern=<regex> - Runs test with paths that match provided regex (https://jestjs.io/docs/en/cli#testpathpattern-regex).sprout-toolkit plugin:build
This command creates a production-ready build of your plugin.
See Sprout packages versioning guide.
sprout-toolkit comes with TypeScript, ESLint, Prettier, Jest, CSS and SASS support.
Yes! sprout-toolkit supports TypeScript by default.
sprout-toolkit comes with Jest as a test runner.
Internally at Savantly we use Enzyme. If you are developing React plugin and you want to configure Enzyme as a testing utility, then you need to configure enzyme-adapter-react. To do so, create <YOUR_PLUGIN_DIR>/config/jest-setup.ts file that will provide necessary setup. Copy the following code into that file to get Enzyme working with React:
import { configure } from 'enzyme';
import Adapter from 'enzyme-adapter-react-16';
configure({ adapter: new Adapter() });
You can also set up Jest with shims of your needs by creating jest-shim.ts file in the same directory: <YOUR_PLUGIN_DIR_>/config/jest-shim.ts
You can provide custom Jest configuration with a package.json file. For more details, see Jest docs.
Currently we support following Jest configuration properties:
You can provide your own webpack.config.js file that exports a getWebpackConfig function. We recommend that you extend the standard configuration, but you are free to create your own:
const CustomPlugin = require('custom-plugin');
module.exports.getWebpackConfig = (config, options) => ({
...config,
plugins: [...config.plugins, new CustomPlugin()],
});
We support pure CSS, SASS, and CSS-in-JS approach (via Emotion).
Create your CSS or SASS file and import it in your plugin entry point (typically module.ts):
import 'path/to/your/css_or_sass';
The styles will be injected via style tag during runtime.
Note that imported static assets will be inlined as base64 URIs. This can be subject of change in the future!
our suggested way for styling plugins is by using Emotion. It's a CSS-in-JS library that we use internally at Savantly. The biggest advantage of using Emotion is that you can access Sprout Theme variables.
To start using Emotion, you first must add it to your plugin dependencies:
yarn add "emotion"@10.0.27
Then, import css function from Emotion:
import { css } from 'emotion';
Now you are ready to implement your styles:
const MyComponent = () => {
return (
<div
className={css`
background: red;
`}
/>
);
};
To learn more about using Sprout theme please refer to Theme usage guide
We do not support Emotion's
cssprop. Use className instead!
Yes! However, it's important that your tsconfig.json file contains the following lines:
{
"extends": "./node_modules/@savantly/sprout-toolkit/src/config/tsconfig.plugin.json",
"include": ["src"],
"compilerOptions": {
"rootDir": "./src",
"typeRoots": ["./node_modules/@types"]
}
}
sprout-toolkit comes with default config for ESLint. For now, there is now way to customise ESLint config.
When building plugin with sprout-toolkit plugin:build task, sprout-toolkit performs Prettier check. If the check detects any Prettier issues, the build will not pass. To avoid such situation we suggest developing plugin with sprout-toolkit plugin:dev --watch task running. This task tries to fix Prettier issues automatically.
In order for your editor to pick up our Prettier config you need to create .prettierrc.js file in the root directory of your plugin with following content:
module.exports = {
...require('./node_modules/@savantly/sprout-toolkit/src/config/prettier.plugin.config.json'),
};
Put them in the static directory in the root of your project. The static directory is copied when the plugin is built.
Request failed \"404 Not Found\"If you are using version canary, this error occurs because a canary release unpublishes previous versions leaving yarn.lock outdated. Remove yarn.lock and run yarn install again.
Unable to dynamically transpile ES module A loader plugin needs to be configured via SystemJS.config({ transpiler: 'transpiler-module' }).This error occurs when you bundle your plugin using the sprout-toolkit plugin:dev task and your code comments include ES2016 code.
There are two issues at play:
sprout-toolkit plugin:dev task does not remove comments from your bundled package.If your comments include ES2016 code, then SystemJS v0.20.19, which Sprout uses internally to load plugins, interprets your code as an ESM and fails.
To fix this error, remove the ES2016 code from your comments.
You can contribute to sprout-toolkit by helping develop it or by debugging it.
Typically plugins should be developed using the @savantly/sprout-toolkit installed from npm. However, when working on the toolkit, you might want to use the local version. Follow the steps below to develop with a local version:
libs/sprout-react/packages/sprout-toolkit where you have cloned Sprout repo to and then run yarn install --pure-lockfile, then run yarn link.npx sprout-toolkit plugin:dev --yarnlink. This adds all dependencies required by sprout-toolkit to your project, as well as link your local sprout-toolkit version to be used by the plugin.To debug sprout-toolkit you can use standard NodeJS debugging methods (node --inspect, node --inspect-brk).
To run sprout-toolkit in a debugging session use the following command in the toolkit's directory:
node --inspect-brk ./bin/sprout-toolkit.js [task]
To run linked sprout-toolkit in a debugging session use the following command in the plugin's directory:
node --inspect-brk ./node_modules/@savantly/sprout-toolkit/bin/sprout-toolkit.js [task]
FAQs
Toolkit for building Sprout plugins. [Stolen, err borrowed from Grafana Toolkit]
We found that @savantly/sprout-toolkit demonstrated a not healthy version release cadence and project activity because the last version was released a year ago. It has 1 open source maintainer collaborating on the project.
Did you know?

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Security News
Multiple high-impact npm maintainers confirm they have been targeted in the same social engineering campaign that compromised Axios.

Security News
Axios compromise traced to social engineering, showing how attacks on maintainers can bypass controls and expose the broader software supply chain.

Security News
Node.js has paused its bug bounty program after funding ended, removing payouts for vulnerability reports but keeping its security process unchanged.