Installations
npm install zero-awesome-query-builder-test
Developer Guide
Typescript
Yes
Module System
CommonJS
Min. Node Version
>=12.13
Node Version
12.22.12
NPM Version
6.14.16
Releases
Contributors
Languages
JavaScript (76.25%)
TypeScript (21.28%)
SCSS (2%)
Shell (0.43%)
HTML (0.05%)
Love this project? Help keep it running — sponsor us today! 🚀
Developer
Download Statistics
Total Downloads
7,590
Last Day
3
Last Week
242
Last Month
531
Last Year
5,641
GitHub Statistics
2,049 Stars
875 Commits
503 Forks
32 Watching
26 Branches
83 Contributors
Bundle Size
666.45 kB
Minified
164.95 kB
Minified + Gzipped
Sponsor this package
Package Meta Information
Latest Version
0.1.4
Package Id
zero-awesome-query-builder-test@0.1.4
Unpacked Size
1.61 MB
Size
291.59 kB
File Count
345
NPM Version
6.14.16
Node Version
12.22.12
Total Downloads
Cumulative downloads
Total Downloads
7,590
Last day
-94.1%
3
Compared to previous day
Last week
-15.7%
242
Compared to previous week
Last month
1,731%
531
Compared to previous month
Last year
528.9%
5,641
Compared to previous year
Daily Downloads
Weekly Downloads
Monthly Downloads
Yearly Downloads
Dependencies
10
Peer Dependencies
8
Dev Dependencies
76
react-awesome-query-builder
User-friendly React component to build queries.
Inspired by jQuery QueryBuilder
Using awesome Ant Design v4 for widgets
Now Material-UI is also supported!
Features
- Highly configurable
- Fields can be of type:
- simple (string, number, bool, date/time/datetime, list)
- structs (will be displayed in selectbox as tree)
- custom type (dev should add its own widget component in config for this)
- Comparison operators can be:
- binary (== != < > ..)
- unary (is empty, is null)
- 'between' (for numbers, dates, times)
- complex operators like 'proximity'
- Values of fields can be compared with:
- values
- another fields (of same type)
- function (arguments also can be values/fields/funcs)
- Reordering (drag-n-drop) support for rules and groups of rules
- Using awesome Ant Design as UI framework with rich features.
Now Material-UI is also supported!
(Using another UI framework and custom widgets is possible, see below) - Export to MongoDb, SQL, JsonLogic, ElasticSearch or your custom format
- Import from JsonLogic
- TypeScript support (see types and demo in TS)
Getting started
Install:
npm i react-awesome-query-builder --save
For AntDesign widgets only:
npm i antd --save
For Material-UI widgets only:
npm i @material-ui/core @material-ui/lab @material-ui/icons @material-ui/pickers material-ui-confirm --save
See basic usage for minimum code example.
See API and config for documentation.
Demo apps:
npm start
- demo app with hot reload of demo code and local library code, uses TS, uses complex config to demonstrate anvanced usage.npm run sandbox-ts
- demo app with hot reload of only demo code (uses latest version of library from npm), uses TS, uses AntDesign widgets.npm run sandbox-js
- demo app with hot reload of only demo code (uses latest version of library from npm), not uses TS, uses vanilla widgets.
Usage
Minimal Javascript example with class component
1import React, {Component} from 'react'; 2import {Query, Builder, BasicConfig, Utils as QbUtils} from 'react-awesome-query-builder'; 3 4// For AntDesign widgets only: 5import AntdConfig from 'react-awesome-query-builder/lib/config/antd'; 6import 'antd/dist/antd.css'; // or import "react-awesome-query-builder/css/antd.less"; 7// For Material-UI widgets only: 8import MaterialConfig from 'react-awesome-query-builder/lib/config/material'; 9 10import 'react-awesome-query-builder/lib/css/styles.css'; 11import 'react-awesome-query-builder/lib/css/compact_styles.css'; //optional, for more compact styles 12 13// Choose your skin (ant/material/vanilla): 14const InitialConfig = AntdConfig; // or MaterialConfig or BasicConfig 15 16// You need to provide your own config. See below 'Config format' 17const config = { 18 ...InitialConfig, 19 fields: { 20 qty: { 21 label: 'Qty', 22 type: 'number', 23 fieldSettings: { 24 min: 0, 25 }, 26 valueSources: ['value'], 27 preferWidgets: ['number'], 28 }, 29 price: { 30 label: 'Price', 31 type: 'number', 32 valueSources: ['value'], 33 fieldSettings: { 34 min: 10, 35 max: 100, 36 }, 37 preferWidgets: ['slider', 'rangeslider'], 38 }, 39 color: { 40 label: 'Color', 41 type: 'select', 42 valueSources: ['value'], 43 fieldSettings: { 44 listValues: [ 45 { value: 'yellow', title: 'Yellow' }, 46 { value: 'green', title: 'Green' }, 47 { value: 'orange', title: 'Orange' } 48 ], 49 } 50 }, 51 is_promotion: { 52 label: 'Promo?', 53 type: 'boolean', 54 operators: ['equal'], 55 valueSources: ['value'], 56 }, 57 } 58}; 59 60// You can load query value from your backend storage (for saving see `Query.onChange()`) 61const queryValue = {"id": QbUtils.uuid(), "type": "group"}; 62 63 64class DemoQueryBuilder extends Component { 65 state = { 66 tree: QbUtils.checkTree(QbUtils.loadTree(queryValue), config), 67 config: config 68 }; 69 70 render = () => ( 71 <div> 72 <Query 73 {...config} 74 value={this.state.tree} 75 onChange={this.onChange} 76 renderBuilder={this.renderBuilder} 77 /> 78 {this.renderResult(this.state)} 79 </div> 80 ) 81 82 renderBuilder = (props) => ( 83 <div className="query-builder-container" style={{padding: '10px'}}> 84 <div className="query-builder qb-lite"> 85 <Builder {...props} /> 86 </div> 87 </div> 88 ) 89 90 renderResult = ({tree: immutableTree, config}) => ( 91 <div className="query-builder-result"> 92 <div>Query string: <pre>{JSON.stringify(QbUtils.queryString(immutableTree, config))}</pre></div> 93 <div>MongoDb query: <pre>{JSON.stringify(QbUtils.mongodbFormat(immutableTree, config))}</pre></div> 94 <div>SQL where: <pre>{JSON.stringify(QbUtils.sqlFormat(immutableTree, config))}</pre></div> 95 <div>JsonLogic: <pre>{JSON.stringify(QbUtils.jsonLogicFormat(immutableTree, config))}</pre></div> 96 </div> 97 ) 98 99 onChange = (immutableTree, config) => { 100 // Tip: for better performance you can apply `throttle` - see `examples/demo` 101 this.setState({tree: immutableTree, config: config}); 102 103 const jsonTree = QbUtils.getTree(immutableTree); 104 console.log(jsonTree); 105 // `jsonTree` can be saved to backend, and later loaded to `queryValue` 106 } 107}
Minimal TypeScript example with function component
1import React, { useState } from "react"; 2import { Query, Builder, Utils as QbUtils } from "react-awesome-query-builder"; 3// types 4import { 5 JsonGroup, 6 Config, 7 ImmutableTree, 8 BuilderProps 9} from "react-awesome-query-builder"; 10 11// For AntDesign widgets only: 12import AntdConfig from "react-awesome-query-builder/lib/config/antd"; 13import "antd/dist/antd.css"; // or import "react-awesome-query-builder/css/antd.less"; 14// For Material-UI widgets only: 15//import MaterialConfig from "react-awesome-query-builder/lib/config/material"; 16 17import "react-awesome-query-builder/lib/css/styles.css"; 18import "react-awesome-query-builder/lib/css/compact_styles.css"; //optional, for more compact styles 19 20// Choose your skin (ant/material/vanilla): 21const InitialConfig = AntdConfig; // or MaterialConfig or BasicConfig 22 23// You need to provide your own config. See below 'Config format' 24const config: Config = { 25 ...InitialConfig, 26 fields: { 27 qty: { 28 label: "Qty", 29 type: "number", 30 fieldSettings: { 31 min: 0 32 }, 33 valueSources: ["value"], 34 preferWidgets: ["number"] 35 }, 36 price: { 37 label: "Price", 38 type: "number", 39 valueSources: ["value"], 40 fieldSettings: { 41 min: 10, 42 max: 100 43 }, 44 preferWidgets: ["slider", "rangeslider"] 45 }, 46 color: { 47 label: "Color", 48 type: "select", 49 valueSources: ["value"], 50 fieldSettings: { 51 listValues: [ 52 { value: "yellow", title: "Yellow" }, 53 { value: "green", title: "Green" }, 54 { value: "orange", title: "Orange" } 55 ] 56 } 57 }, 58 is_promotion: { 59 label: "Promo?", 60 type: "boolean", 61 operators: ["equal"], 62 valueSources: ["value"] 63 } 64 } 65}; 66 67// You can load query value from your backend storage (for saving see `Query.onChange()`) 68const queryValue: JsonGroup = { id: QbUtils.uuid(), type: "group" }; 69 70export const Demo: React.FC = () => { 71 const [state, setState] = useState({ 72 tree: QbUtils.checkTree(QbUtils.loadTree(queryValue), config), 73 config: config 74 }); 75 76 const onChange = (immutableTree: ImmutableTree, config: Config) => { 77 // Tip: for better performance you can apply `throttle` - see `examples/demo` 78 setState({ tree: immutableTree, config: config }); 79 80 const jsonTree = QbUtils.getTree(immutableTree); 81 console.log(jsonTree); 82 // `jsonTree` can be saved to backend, and later loaded to `queryValue` 83 }; 84 85 const renderBuilder = (props: BuilderProps) => ( 86 <div className="query-builder-container" style={{ padding: "10px" }}> 87 <div className="query-builder qb-lite"> 88 <Builder {...props} /> 89 </div> 90 </div> 91 ); 92 93 return ( 94 <div> 95 <Query 96 {...config} 97 value={state.tree} 98 onChange={onChange} 99 renderBuilder={renderBuilder} 100 /> 101 <div className="query-builder-result"> 102 <div> 103 Query string:{" "} 104 <pre> 105 {JSON.stringify(QbUtils.queryString(state.tree, state.config))} 106 </pre> 107 </div> 108 <div> 109 MongoDb query:{" "} 110 <pre> 111 {JSON.stringify(QbUtils.mongodbFormat(state.tree, state.config))} 112 </pre> 113 </div> 114 <div> 115 SQL where:{" "} 116 <pre> 117 {JSON.stringify(QbUtils.sqlFormat(state.tree, state.config))} 118 </pre> 119 </div> 120 <div> 121 JsonLogic:{" "} 122 <pre> 123 {JSON.stringify(QbUtils.jsonLogicFormat(state.tree, state.config))} 124 </pre> 125 </div> 126 </div> 127 </div> 128 ); 129};
API
<Query />
Props:
{...config}
- destructured queryCONFIG
value
- query value in internal Immutable formatonChange
- callback when value changed. Params:value
(in Immutable format),config
.renderBuilder
- function to render query builder itself. Takes 1 paramprops
you need to pass into<Builder {...props} />
.
Notes:
- If you put query builder component inside Material-UI's
<Dialog />
or<Popover />
, please:- use prop
disableEnforceFocus={true}
for dialog or popver - set css
.MuiPopover-root, .MuiDialog-root { z-index: 900 !important; }
(or 1000 for AntDesign v3)
- use prop
<Builder />
Render this component only inside Query.renderBuilder()
like in example above:
1 renderBuilder = (props) => ( 2 <div className="query-builder-container"> 3 <div className="query-builder qb-lite"> 4 <Builder {...props} /> 5 </div> 6 </div> 7 )
Wrapping <Builder />
in div.query-builder
is necessary.
Optionally you can add class .qb-lite
to it for showing action buttons (like delete rule/group, add, etc.) only on hover, which will look cleaner.
Wrapping in div.query-builder-container
is necessary if you put query builder inside scrollable block.
Utils
- Save, load:
getTree (immutableValue, light = true) -> Object
Convert query value from internal Immutable format to JS format. You can use it to save value on backend inonChange
callback of<Query>
.
Tip: Uselight = false
in case if you want to store query value in your state in JS format and pass it asvalue
of<Query>
after applyingloadTree()
(which is not recommended because of double conversion). See issue #190loadTree (jsValue, config) -> Immutable
Convert query value from JS format to internal Immutable format. You can use it to load saved value from backend and pass asvalue
prop to<Query>
(don't forget to also applycheckTree()
).checkTree (immutableValue, config) -> Immutable
Validate query value corresponding to config. Invalid parts of query (eg. if field was removed from config) will be always deleted. Invalid values (values not passingvalidateValue
in config, bad ranges) will be deleted ifshowErrorMessage
is false OR marked with errors ifshowErrorMessage
is true.isValidTree (immutableValue) -> Boolean
IfshowErrorMessage
in config.settings is true, use this method to check is query has bad values. - Export:
queryString (immutableValue, config, isForDisplay = false) -> String
Convert query value to custom string representation.isForDisplay
= true can be used to make string more "human readable".mongodbFormat (immutableValue, config) -> Object
Convert query value to MongoDb query object.sqlFormat (immutableValue, config) -> String
Convert query value to SQL where string.elasticSearchFormat (immutableValue, config) -> Object
Convert query value to ElasticSearch query object.jsonLogicFormat (immutableValue, config) -> {logic, data, errors}
Convert query value to JsonLogic format. If there are noerrors
,logic
will be rule object anddata
will contain all used fields with null values ("template" data). - Import:
loadFromJsonLogic (jsonLogicObject, config) -> Immutable
Convert query value from JsonLogic format to internal Immutable format.
Config format
This library uses configarion driven aprroach.
Config defines what value types, operators are supported, how they are rendered, imported, exported.
At minimum, you need to provide your own set of fields as in basic usage.
See CONFIG
for full documentation.
Versions
Versions 4.x are backward-compatible with 2.x and 3.x. It's recommended to update your version.
Supported versions
Version | Supported |
---|---|
4.x | :white_check_mark: |
3.x | :white_check_mark: |
2.x | :white_check_mark: |
1.x | :warning: |
0.x | :x: |
Changelog
See CHANGELOG
Migration from v1 to v2
From v2.0 of this lib AntDesign is now optional (peer) dependency, so you need to explicitly include antd
(4.x) in package.json
of your project if you want to use AntDesign UI.
Please import AntdConfig
from react-awesome-query-builder/lib/config/antd
and use it as base for your config (see below in usage).
Alternatively you can use BasicConfig
for simple vanilla UI, which is by default.
Support of other UI frameworks (like Bootstrap) are planned for future, see Other UI frameworks.
Development
Clone this repo and run npm start
.
Open http://localhost:3001/
in a browser.
You will see demo app with hot reload of demo code and local library code.
Directory structure
modules
- Main source code of librarycomponents
- Core React componentswidgets
- Components to render list of fields, operators, values of different types. Built with UI frameworks
config
- Basic config lives here. SeeCONFIG
docs.export
- Code for export to JsonLogic, MongoDb, SQL, ElasticSearch, plain stringimport
- Code for import from JsonLogicactions
- Redux actionsstores/tree.js
- Redux storeindex.d.ts
- TS definitions
css
- Styles for query builderexamples
- Demo app with hot reload of demo code and local library code, uses TS, uses complex config to demonstrate anvanced usage.sandbox
- Demo app with hot reload of only demo code (uses latest version of library from npm), uses TS, uses AntDesign widgets.sandbox_simple
- Demo app with hot reload of only demo code (uses latest version of library from npm), not uses TS, uses vanilla widgets.tests
- All tests are here. Uses Karma, Mocha, Chai, Enzyme
Scripts
npm run install-all
- Install npm packages in root, examples, sandboxes. Required for other scripts!npm test
- Run tests with Karma and update coverage. Requires Node.js v10+npm run lint
- Run ESLint and TSC (in root, tests, examples, sandboxes)npm run lint-fix
- Run ESLint with--fix
option (in root, tests, examples, sandboxes)npm run clean
- Clean all data that can be re-generated (likenode_modules
,build
,coverage
)npm run smoke
- Run tests, lint, build lib, build examples, build sandboxes. Recommended before making PRnpm run build
- Build npm module tolib
, build minified production package tobuild
npm run build-examples
- Build demo with webpack toexamples/build
Feel free to open PR to add new reusable types/widgets/operators (eg., regex operator for string, IP type & widget).
Pull Requests are always welcomed :)
Other UI frameworks
Currently there are 3 collections of widgets:
Let's say you want to create new collection of Bootstrap widgets to be used in this lib (and submit PR which is always welcomed!).
You can use vanilla widgets as skeleton.
Then to enable new widgets you need to create config overrides like this:
material config
Contributors
Code Contributors
This project exists thanks to all the people who contribute. [Contribute].
Financial Contributors
Become a financial contributor and help us sustain our community. [Contribute]
Individuals
Organizations
Support this project with your organization. Your logo will show up here with a link to your website. [Contribute]
react-awesome-query-builder is being sponsored by the following tool; please help to support us by taking a look and signing up to a free trial
License
MIT. See also LICENSE.txt
Forked from https://github.com/fubhy/react-query-builder
![Empty State](/_next/static/media/empty.e5fae2e5.png)
No vulnerabilities found.
Reason
30 commit(s) and 10 issue activity found in the last 90 days -- score normalized to 10
Reason
no dangerous workflow patterns detected
Reason
license file detected
Details
- Info: project has a license file: LICENSE.txt:0
- Info: FSF or OSI recognized license: MIT License: LICENSE.txt:0
Reason
no binaries found in the repo
Reason
3 existing vulnerabilities detected
Details
- Warn: Project is vulnerable to: GHSA-952p-6rrq-rcjv
- Warn: Project is vulnerable to: GHSA-mwcw-c2x4-8c55
- Warn: Project is vulnerable to: GHSA-rhx6-c78j-4q9w
Reason
Found 0/24 approved changesets -- score normalized to 0
Reason
no effort to earn an OpenSSF best practices badge detected
Reason
security policy file not detected
Details
- Warn: no security policy file detected
- Warn: no security file to analyze
- Warn: no security file to analyze
- Warn: no security file to analyze
Reason
detected GitHub workflow tokens with excessive permissions
Details
- Warn: topLevel 'contents' permission set to 'write': .github/workflows/bump-version-pr.yml:12
- Warn: no topLevel permission defined: .github/workflows/codecov-report.yml:1
- Warn: no topLevel permission defined: .github/workflows/gh-pages.yml:1
- Warn: no topLevel permission defined: .github/workflows/long-smoke.yml:1
- Warn: no topLevel permission defined: .github/workflows/npm-publish.yml:1
- Warn: no topLevel permission defined: .github/workflows/smoke.yml:1
- Info: no jobLevel write permissions found
Reason
dependency not pinned by hash detected -- score normalized to 0
Details
- Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/bump-version-pr.yml:20: update your workflow using https://app.stepsecurity.io/secureworkflow/ukrbublik/react-awesome-query-builder/bump-version-pr.yml/master?enable=pin
- Warn: third-party GitHubAction not pinned by hash: .github/workflows/bump-version-pr.yml:21: update your workflow using https://app.stepsecurity.io/secureworkflow/ukrbublik/react-awesome-query-builder/bump-version-pr.yml/master?enable=pin
- Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/bump-version-pr.yml:24: update your workflow using https://app.stepsecurity.io/secureworkflow/ukrbublik/react-awesome-query-builder/bump-version-pr.yml/master?enable=pin
- Warn: third-party GitHubAction not pinned by hash: .github/workflows/bump-version-pr.yml:41: update your workflow using https://app.stepsecurity.io/secureworkflow/ukrbublik/react-awesome-query-builder/bump-version-pr.yml/master?enable=pin
- Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/codecov-report.yml:16: update your workflow using https://app.stepsecurity.io/secureworkflow/ukrbublik/react-awesome-query-builder/codecov-report.yml/master?enable=pin
- Warn: third-party GitHubAction not pinned by hash: .github/workflows/codecov-report.yml:17: update your workflow using https://app.stepsecurity.io/secureworkflow/ukrbublik/react-awesome-query-builder/codecov-report.yml/master?enable=pin
- Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/codecov-report.yml:20: update your workflow using https://app.stepsecurity.io/secureworkflow/ukrbublik/react-awesome-query-builder/codecov-report.yml/master?enable=pin
- Warn: third-party GitHubAction not pinned by hash: .github/workflows/codecov-report.yml:27: update your workflow using https://app.stepsecurity.io/secureworkflow/ukrbublik/react-awesome-query-builder/codecov-report.yml/master?enable=pin
- Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/gh-pages.yml:12: update your workflow using https://app.stepsecurity.io/secureworkflow/ukrbublik/react-awesome-query-builder/gh-pages.yml/master?enable=pin
- Warn: third-party GitHubAction not pinned by hash: .github/workflows/gh-pages.yml:13: update your workflow using https://app.stepsecurity.io/secureworkflow/ukrbublik/react-awesome-query-builder/gh-pages.yml/master?enable=pin
- Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/gh-pages.yml:16: update your workflow using https://app.stepsecurity.io/secureworkflow/ukrbublik/react-awesome-query-builder/gh-pages.yml/master?enable=pin
- Warn: third-party GitHubAction not pinned by hash: .github/workflows/gh-pages.yml:36: update your workflow using https://app.stepsecurity.io/secureworkflow/ukrbublik/react-awesome-query-builder/gh-pages.yml/master?enable=pin
- Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/long-smoke.yml:12: update your workflow using https://app.stepsecurity.io/secureworkflow/ukrbublik/react-awesome-query-builder/long-smoke.yml/master?enable=pin
- Warn: third-party GitHubAction not pinned by hash: .github/workflows/long-smoke.yml:13: update your workflow using https://app.stepsecurity.io/secureworkflow/ukrbublik/react-awesome-query-builder/long-smoke.yml/master?enable=pin
- Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/long-smoke.yml:16: update your workflow using https://app.stepsecurity.io/secureworkflow/ukrbublik/react-awesome-query-builder/long-smoke.yml/master?enable=pin
- Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/long-smoke.yml:31: update your workflow using https://app.stepsecurity.io/secureworkflow/ukrbublik/react-awesome-query-builder/long-smoke.yml/master?enable=pin
- Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/long-smoke.yml:38: update your workflow using https://app.stepsecurity.io/secureworkflow/ukrbublik/react-awesome-query-builder/long-smoke.yml/master?enable=pin
- Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/long-smoke.yml:43: update your workflow using https://app.stepsecurity.io/secureworkflow/ukrbublik/react-awesome-query-builder/long-smoke.yml/master?enable=pin
- Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/long-smoke.yml:48: update your workflow using https://app.stepsecurity.io/secureworkflow/ukrbublik/react-awesome-query-builder/long-smoke.yml/master?enable=pin
- Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/npm-publish.yml:12: update your workflow using https://app.stepsecurity.io/secureworkflow/ukrbublik/react-awesome-query-builder/npm-publish.yml/master?enable=pin
- Warn: third-party GitHubAction not pinned by hash: .github/workflows/npm-publish.yml:13: update your workflow using https://app.stepsecurity.io/secureworkflow/ukrbublik/react-awesome-query-builder/npm-publish.yml/master?enable=pin
- Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/npm-publish.yml:16: update your workflow using https://app.stepsecurity.io/secureworkflow/ukrbublik/react-awesome-query-builder/npm-publish.yml/master?enable=pin
- Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/npm-publish.yml:29: update your workflow using https://app.stepsecurity.io/secureworkflow/ukrbublik/react-awesome-query-builder/npm-publish.yml/master?enable=pin
- Warn: third-party GitHubAction not pinned by hash: .github/workflows/npm-publish.yml:30: update your workflow using https://app.stepsecurity.io/secureworkflow/ukrbublik/react-awesome-query-builder/npm-publish.yml/master?enable=pin
- Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/npm-publish.yml:33: update your workflow using https://app.stepsecurity.io/secureworkflow/ukrbublik/react-awesome-query-builder/npm-publish.yml/master?enable=pin
- Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/smoke.yml:12: update your workflow using https://app.stepsecurity.io/secureworkflow/ukrbublik/react-awesome-query-builder/smoke.yml/master?enable=pin
- Warn: third-party GitHubAction not pinned by hash: .github/workflows/smoke.yml:13: update your workflow using https://app.stepsecurity.io/secureworkflow/ukrbublik/react-awesome-query-builder/smoke.yml/master?enable=pin
- Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/smoke.yml:16: update your workflow using https://app.stepsecurity.io/secureworkflow/ukrbublik/react-awesome-query-builder/smoke.yml/master?enable=pin
- Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/smoke.yml:29: update your workflow using https://app.stepsecurity.io/secureworkflow/ukrbublik/react-awesome-query-builder/smoke.yml/master?enable=pin
- Warn: third-party GitHubAction not pinned by hash: .github/workflows/smoke.yml:30: update your workflow using https://app.stepsecurity.io/secureworkflow/ukrbublik/react-awesome-query-builder/smoke.yml/master?enable=pin
- Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/smoke.yml:33: update your workflow using https://app.stepsecurity.io/secureworkflow/ukrbublik/react-awesome-query-builder/smoke.yml/master?enable=pin
- Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/smoke.yml:44: update your workflow using https://app.stepsecurity.io/secureworkflow/ukrbublik/react-awesome-query-builder/smoke.yml/master?enable=pin
- Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/smoke.yml:49: update your workflow using https://app.stepsecurity.io/secureworkflow/ukrbublik/react-awesome-query-builder/smoke.yml/master?enable=pin
- Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/smoke.yml:54: update your workflow using https://app.stepsecurity.io/secureworkflow/ukrbublik/react-awesome-query-builder/smoke.yml/master?enable=pin
- Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/smoke.yml:61: update your workflow using https://app.stepsecurity.io/secureworkflow/ukrbublik/react-awesome-query-builder/smoke.yml/master?enable=pin
- Warn: third-party GitHubAction not pinned by hash: .github/workflows/smoke.yml:62: update your workflow using https://app.stepsecurity.io/secureworkflow/ukrbublik/react-awesome-query-builder/smoke.yml/master?enable=pin
- Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/smoke.yml:65: update your workflow using https://app.stepsecurity.io/secureworkflow/ukrbublik/react-awesome-query-builder/smoke.yml/master?enable=pin
- Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/smoke.yml:78: update your workflow using https://app.stepsecurity.io/secureworkflow/ukrbublik/react-awesome-query-builder/smoke.yml/master?enable=pin
- Warn: third-party GitHubAction not pinned by hash: .github/workflows/smoke.yml:79: update your workflow using https://app.stepsecurity.io/secureworkflow/ukrbublik/react-awesome-query-builder/smoke.yml/master?enable=pin
- Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/smoke.yml:82: update your workflow using https://app.stepsecurity.io/secureworkflow/ukrbublik/react-awesome-query-builder/smoke.yml/master?enable=pin
- Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/smoke.yml:93: update your workflow using https://app.stepsecurity.io/secureworkflow/ukrbublik/react-awesome-query-builder/smoke.yml/master?enable=pin
- Warn: npmCommand not pinned by hash: scripts/nvms.sh:31
- Info: 0 out of 28 GitHub-owned GitHubAction dependencies pinned
- Info: 0 out of 13 third-party GitHubAction dependencies pinned
- Info: 0 out of 1 npmCommand dependencies pinned
Reason
project is not fuzzed
Details
- Warn: no fuzzer integrations found
Reason
SAST tool is not run on all commits -- score normalized to 0
Details
- Warn: 0 commits out of 17 are checked with a SAST tool
Score
4.5
/10
Last Scanned on 2025-01-27
The Open Source Security Foundation is a cross-industry collaboration to improve the security of open source software (OSS). The Scorecard provides security health metrics for open source projects.
Learn More