Instances that accumulated project managers, favorites, board memberships or board subscriptions pointing at a project or board that no longer exists had no way to find or clear them. The script reports by default and only deletes with `--apply`, which first asks whether a backup exists and refuses outright without a terminal to ask on. It removes nothing but reference rows: structural orphans such as a board without a project carry user content, and a membership whose denormalized project is stale still grants real access to an existing board, so both are reported and left alone.
112 lines
3.0 KiB
JSON
112 lines
3.0 KiB
JSON
{
|
|
"name": "planka-server",
|
|
"private": true,
|
|
"main": "app.js",
|
|
"scripts": {
|
|
"build": "node build.js",
|
|
"console": "dotenv sails console",
|
|
"db:clean-orphaned-records": "node db/clean-orphaned-records.js",
|
|
"db:create-admin-user": "node db/create-admin-user.js",
|
|
"db:init": "node db/init.js",
|
|
"db:migrate": "knex migrate:latest --cwd db",
|
|
"db:seed": "knex seed:run --cwd db",
|
|
"db:upgrade": "node db/upgrade.js",
|
|
"postinstall": "patch-package && npm run setup-python",
|
|
"lint": "eslint . --max-warnings=0 --report-unused-disable-directives && echo '✔ Your .js files look good.'",
|
|
"setup-python": "node setup-python.js",
|
|
"start": "nodemon",
|
|
"start:prod": "cross-env NODE_ENV=production node app.js --prod",
|
|
"swagger:generate": "node generate-swagger.js",
|
|
"test": "mocha test/lifecycle.test.js test/integration/**/*.test.js test/utils/**/*.test.js"
|
|
},
|
|
"eslintConfig": {
|
|
"plugins": [
|
|
"prettier"
|
|
],
|
|
"extends": [
|
|
"airbnb-base",
|
|
"plugin:prettier/recommended"
|
|
],
|
|
"rules": {
|
|
"no-throw-literal": "off",
|
|
"no-undef": "off",
|
|
"prettier/prettier": [
|
|
"error",
|
|
{
|
|
"printWidth": 100,
|
|
"singleQuote": true,
|
|
"trailingComma": "all"
|
|
}
|
|
]
|
|
},
|
|
"globals": {
|
|
"_": true,
|
|
"sails": true
|
|
}
|
|
},
|
|
"overrides": {
|
|
"body-parser": "^1.20.6",
|
|
"diff": "^8.0.4",
|
|
"multiparty": "^4.3.0",
|
|
"qs": "^6.15.2",
|
|
"serialize-javascript": "^7.0.7",
|
|
"uuid": "$uuid"
|
|
},
|
|
"dependencies": {
|
|
"@aws-sdk/client-s3": "^3.1009.0",
|
|
"@aws-sdk/lib-storage": "^3.1009.0",
|
|
"bcrypt": "^6.0.0",
|
|
"bytes": "^3.1.2",
|
|
"cross-env": "^10.1.0",
|
|
"dotenv": "^17.3.1",
|
|
"dotenv-cli": "^11.0.0",
|
|
"escape-html": "^1.0.3",
|
|
"escape-markdown": "^1.0.4",
|
|
"file-type": "^21.3.2",
|
|
"fs-extra": "^11.3.4",
|
|
"i18n-2": "^0.7.3",
|
|
"ico-to-png": "^0.2.2",
|
|
"istextorbinary": "^9.5.0",
|
|
"jsonwebtoken": "^9.0.3",
|
|
"knex": "^3.1.0",
|
|
"lodash": "^4.18.1",
|
|
"mime-types": "^3.0.2",
|
|
"moment": "^2.30.1",
|
|
"nodemailer": "^9.0.3",
|
|
"otplib": "^12.0.1",
|
|
"patch-package": "^8.0.1",
|
|
"pg": "^8.20.0",
|
|
"read": "^5.0.1",
|
|
"rimraf": "^6.1.3",
|
|
"sails": "^1.5.17",
|
|
"sails-hook-orm": "^4.0.3",
|
|
"sails-hook-sockets": "^3.0.2",
|
|
"sails-postgresql": "^5.0.1",
|
|
"serve-static": "^2.2.1",
|
|
"sharp": "^0.35.3",
|
|
"ua-parser-js": "^2.0.10",
|
|
"undici": "^7.24.0",
|
|
"uuid": "^11.1.1",
|
|
"validator": "^13.15.26",
|
|
"winston": "^3.19.0",
|
|
"zxcvbn": "^4.4.2"
|
|
},
|
|
"devDependencies": {
|
|
"chai": "^6.2.2",
|
|
"eslint": "^8.57.1",
|
|
"eslint-config-airbnb-base": "^15.0.0",
|
|
"eslint-config-prettier": "^10.1.8",
|
|
"eslint-plugin-import": "^2.32.0",
|
|
"eslint-plugin-prettier": "^5.5.5",
|
|
"ignore": "^7.0.5",
|
|
"mocha": "^11.7.5",
|
|
"nodemon": "^3.1.14",
|
|
"prettier": "3.8.1",
|
|
"supertest": "^7.2.2",
|
|
"swagger-jsdoc": "^6.2.8"
|
|
},
|
|
"engines": {
|
|
"node": ">=24"
|
|
}
|
|
}
|