{
    "name": "@flowforge/flowforge",
    "version": "1.14.1",
    "description": "An open source low-code development platform",
    "homepage": "https://flowfuse.com",
    "bugs": {
        "url": "https://github.com/FlowFuse/flowfuse/issues"
    },
    "repository": {
        "type": "git",
        "url": "git+https://github.com/FlowFuse/flowfuse.git"
    },
    "license": "SEE LICENSE IN ./LICENSE",
    "author": {
        "name": "FlowFuse Inc."
    },
    "bin": {
        "ff-install-stack": "./scripts/install-stack.js",
        "flowforge": "./forge/app.js"
    },
    "scripts": {
        "start": "node forge/app.js",
        "repl": "node forge/app.js --repl",
        "build": "webpack -c ./config/webpack.config.js",
        "serve": "npm-run-all --parallel build-watch start-watch",
        "serve-repl": "npm-run-all --parallel build-watch start-watch-repl",
        "start-watch": "cross-env NODE_ENV=development nodemon -w forge -w ee/forge -i forge/containers/localfs_root forge/app.js",
        "start-watch-repl": "cross-env NODE_ENV=development nodemon -w forge -w ee/forge -i forge/containers/localfs_root forge/app.js --repl",
        "build-watch": "webpack --mode=development -c ./config/webpack.config.js --watch",
        "lint": "eslint -c .eslintrc \"forge/**/*.js\" \"frontend/**/*.js\" \"frontend/**/*.vue\" \"test/**/*.js\" --ignore-pattern \"frontend/dist/**\"",
        "lint:fix": "eslint -c .eslintrc \"forge/**/*.js\" \"frontend/**/*.js\" \"frontend/**/*.vue\" \"test/**/*.js\" --ignore-pattern \"frontend/dist/**\" --fix",
        "test": "npm-run-all --sequential lint test:unit test:system",
        "test:unit": "npm-run-all --sequential test:unit:forge test:unit:frontend",
        "test:unit:forge": "mocha 'test/unit/forge/**/*_spec.js' --timeout 10000 --node-option=unhandled-rejections=strict",
        "test:unit:frontend": "vitest run --config ./config/vitest.config.ts",
        "test:docs": "node test/e2e/docs/valid-links.js ./docs",
        "test:system": "mocha 'test/system/**/*_spec.js' --timeout 10000 --node-option=unhandled-rejections=strict",
        "cy:web-server": "npm-run-all --parallel cy:web-server:os cy:web-server:ee",
        "cy:web-server:os": "node ./test/e2e/frontend/test_environment_os",
        "cy:web-server:ee": "node ./test/e2e/frontend/test_environment_ee",
        "cy:run": "npm-run-all --parallel cy:run:os cy:run:ee",
        "cy:run:os": "cypress run --config-file ./config/cypress-os.config.js",
        "cy:run:ee": "cypress run --config-file ./config/cypress-ee.config.js",
        "cy:open:os": "cypress open --config-file ./config/cypress-os.config.js",
        "cy:open:ee": "cypress open --config-file ./config/cypress-ee.config.js",
        "cover": "npm-run-all --sequential cover:unit cover:system cover:report",
        "cover:unit": "npm-run-all --sequential cover:unit:forge cover:unit:frontend",
        "cover:unit:forge": "nyc --silent npm run test:unit:forge && nyc report --reporter=json --report-dir ./coverage/reports/forge/ && mv ./coverage/reports/forge/coverage-final.json ./coverage/reports/forge-coverage.json",
        "cover:unit:frontend": "vitest --config ./config/vitest.config.ts run --coverage && mv ./coverage/reports/frontend/coverage-final.json ./coverage/reports/frontend-coverage.json",
        "cover:system": "nyc --silent npm run test:system && nyc report --reporter=json --report-dir ./coverage/reports/system/  && mv ./coverage/reports/system/coverage-final.json ./coverage/reports/system-coverage.json",
        "cover:report": "nyc report --reporter=html --reporter=json -t './coverage/reports'",
        "install-stack": "node scripts/install-stack.js --"
    },
    "dependencies": {
        "@aws-sdk/client-ses": "^3.352.0",
        "@aws-sdk/credential-provider-node": "^3.352.0",
        "@fastify/cookie": "^9.1.0",
        "@fastify/csrf-protection": "^6.3.0",
        "@fastify/formbody": "^7.4.0",
        "@fastify/helmet": "^11.1.1",
        "@fastify/passport": "^2.3.0",
        "@fastify/rate-limit": "^8.0.3",
        "@fastify/routes": "^5.1.0",
        "@fastify/static": "^6.10.2",
        "@fastify/swagger": "^8.10.1",
        "@fastify/swagger-ui": "^1.9.0",
        "@fastify/websocket": "^8.1.0",
        "@flowfuse/driver-localfs": "^1.14.0",
        "@headlessui/vue": "1.7.16",
        "@heroicons/vue": "1.0.6",
        "@immobiliarelabs/fastify-sentry": "^7.1.1",
        "@levminer/speakeasy": "^1.4.2",
        "@node-saml/passport-saml": "^4.0.4",
        "@sentry/node": "^7.73.0",
        "@sentry/profiling-node": "^1.2.1",
        "@sentry/vue": "^7.72.0",
        "@sentry/webpack-plugin": "^2.7.1",
        "axios": "^1.4.0",
        "bcrypt": "^5.1.0",
        "cronosjs": "^1.7.1",
        "dotenv": "^16.3.1",
        "fastify": "^4.24.0",
        "fastify-metrics": "^10.3.2",
        "fastify-plugin": "^4.5.0",
        "handlebars": "^4.7.7",
        "hashids": "^2.3.0",
        "jsonwebtoken": "^9.0.0",
        "lottie-web-vue": "^2.0.7",
        "lru-cache": "^10.0.0",
        "marked": "^10.0.0",
        "mqtt": "^5.1.1",
        "nodemailer": "^6.9.3",
        "pg": "^8.11.3",
        "pino": "^8.15.1",
        "pino-pretty": "^10.0.0",
        "qrcode": "^1.5.3",
        "semver": "~7.5.4",
        "sequelize": "^6.33.0",
        "sqlite3": "^5.1.6",
        "stripe": "^8.222.0",
        "uuid": "^9.0.0",
        "vue": "^3.3.4",
        "vue-router": "^4.2.2",
        "vuex": "^4.1.0",
        "yaml": "^2.3.1"
    },
    "devDependencies": {
        "@babel/core": "^7.22.15",
        "@babel/preset-env": "^7.22.15",
        "@vitejs/plugin-vue": "^4.3.4",
        "@vitest/coverage-istanbul": "^0.34.4",
        "@vue/test-utils": "^2.4.1",
        "autoprefixer": "^10.4.15",
        "babel-loader": "^9.1.3",
        "c8": "^8.0.1",
        "clean-webpack-plugin": "^4.0.0",
        "copy-webpack-plugin": "^11.0.0",
        "cross-env": "^7.0.3",
        "css-loader": "^6.8.1",
        "cypress": "^13.2.0",
        "dotenv-webpack": "^8.0.1",
        "eslint": "^8.48.0",
        "eslint-config-standard": "^17.1.0",
        "eslint-plugin-cypress": "2.15.1",
        "eslint-plugin-import": "^2.28.1",
        "eslint-plugin-n": "^16.0.2",
        "eslint-plugin-no-only-tests": "^3.1.0",
        "eslint-plugin-promise": "^6.1.1",
        "eslint-plugin-vue": "^9.17.0",
        "file-loader": "^6.2.0",
        "html-link-extractor": "^1.0.5",
        "html-webpack-plugin": "^5.5.3",
        "jsdom": "^22.1.0",
        "mini-css-extract-plugin": "^2.7.6",
        "mocha": "^10.2.0",
        "mocha-cli": "^1.0.1",
        "mockdate": "^3.0.5",
        "node-sass": "^9.0.0",
        "nodemon": "^3.0.1",
        "npm-run-all": "^4.1.5",
        "nyc": "^15.1.0",
        "postcss": "^8.4.29",
        "postcss-loader": "^7.3.3",
        "postcss-preset-env": "^9.1.3",
        "promptly": "^3.2.0",
        "sass-loader": "^13.3.2",
        "should": "^13.2.3",
        "should-sinon": "^0.0.6",
        "sinon": "^16.0.0",
        "style-loader": "^3.3.3",
        "tailwindcss": "^2.2.19",
        "vitest": "^0.34.4",
        "vue-loader": "^17.2.2",
        "vue-template-compiler": "^2.7.14",
        "webpack": "^5.88.2",
        "webpack-cli": "^5.1.4",
        "webpack-dev-server": "^4.15.1",
        "ws": "^8.14.0"
    },
    "engines": {
        "node": ">=16.x"
    },
    "keywords": [
        "low-code-platform",
        "low-code-development",
        "low-code-development-platform",
        "visual-programming",
        "flow-based-programming",
        "no-code",
        "low-code",
        "node-red"
    ]
}
