{ "name": "ghost", "version": "6.70.0", "description": "The professional publishing platform", "keywords": [ "blog", "cms", "content", "ghost", "headless", "markdown" ], "homepage": "https://ghost.org", "bugs": "https://github.com/TryGhost/Ghost/issues", "license": "MIT", "author": "Ghost Foundation", "contributors": "https://github.com/TryGhost/Ghost/graphs/contributors", "repository": { "type": "git", "url": "git://github.com/TryGhost/Ghost.git" }, "files": [ "core/", "!core/built/**/*.map", "!core/built/**/test-*", "!core/built/**/tests-*", "content/*/README.md", "content/themes/casper/", "!content/themes/casper/pnpm-lock.yaml", "content/themes/source/", "!content/themes/source/pnpm-lock.yaml", "bin/", "scripts/prune.mts", "types/", "index.js", "loggingrc.js", "MigratorConfig.js", "nodemon.json", "tsconfig.json" ], "publishConfig": { "access": "public", "registry": "https://registry.npmjs.org/" }, "scripts": { "archive": "node scripts/pack.mjs", "dev": "nodemon index.js", "build:assets": "pnpm run '/^build:assets:/'", "build:assets:js": "node scripts/minify-assets.mts", "build:assets:cards": "node scripts/build-card-assets.mts", "query-parameter-policy:export": "node --import=tsx scripts/export-query-parameter-policy.ts", "migrate:create": "node ../tools/gx/cli.ts generate migration", "migrate:rebuild-in-development-tables": "node ../tools/scripts/with-ghost-dev-env.ts node --import=tsx bin/rebuild-in-development-tables.ts", "build:assets:css": "postcss core/frontend/public/ghost.css --no-map --use cssnano -o core/frontend/public/ghost.min.css", "build:tsc": "tsc", "pretest": "pnpm build:assets", "test": "pnpm test:unit", "test:watch": "vitest --reporter=default", "test:single": "f() { case \"$1\" in test/unit/*) vitest run \"$1\" ;; test/*) vitest run -c vitest.config.db.ts \"$1\" ;; *) vitest run \"$1\" || vitest run -c vitest.config.db.ts \"$1\" ;; esac; }; f", "test:all": "pnpm test:unit && pnpm test:integration && pnpm test:e2e && pnpm test:types && pnpm lint", "test:debug": "DEBUG=ghost:test* pnpm test", "test:unit": "vitest run", "test:integration": "vitest run -c vitest.config.db.ts --project integration --project integration-migrations", "test:e2e": "vitest run -c vitest.config.db.ts --project e2e --project e2e-api --project e2e-isolated", "test:legacy": "vitest run -c vitest.config.db.ts --project legacy", "test:ci:e2e": "COVERAGE_LANE=e2e pnpm test:e2e --coverage", "test:ci:integration": "COVERAGE_LANE=integration pnpm test:integration --coverage", "test:ci:unit": "vitest run --coverage --coverage.reportsDirectory=coverage-unit --coverage.reporter=cobertura --coverage.reporter=text-summary", "test:int:slow": "pnpm test:integration", "test:e2e:slow": "vitest run -c vitest.config.db.ts --project e2e --project e2e-api --reporter=verbose", "test:leg:slow": "vitest run -c vitest.config.db.ts --project legacy --reporter=verbose", "test:types": "tsc --noEmit && tsc --noEmit -p test/tsconfig.json", "lint:server": "eslint 'core/server/**/*.{js,ts}' 'core/*.{js,ts}' '*.{js,ts}' 'bin/**/*.{js,ts}' 'scripts/**/*.{js,ts}' 'types/**/*.ts' --cache", "lint:kernel": "eslint 'core/kernel/**/*.{js,ts}' --cache", "lint:shared": "eslint 'core/shared/**/*.{js,ts}' --cache", "lint:frontend": "eslint 'core/frontend/**/*.{js,ts}' --cache", "lint:test": "eslint 'test/**/*.{js,ts}' --cache", "lint:code": "pnpm run '/^lint:(server|kernel|shared|frontend)$/'", "lint": "pnpm run '/^lint:(server|kernel|shared|frontend|test)$/'" }, "dependencies": { "@aws-sdk/client-s3": "3.1079.0", "@breejs/later": "catalog:", "@extractus/oembed-extractor": "catalog:", "@faker-js/faker": "catalog:", "@isaacs/ttlcache": "1.4.1", "@sentry/node": "7.120.4", "@slack/webhook": "7.1.0", "@tryghost/adapter-base-cache": "workspace:*", "@tryghost/adapter-base-jobs": "workspace:*", "@tryghost/adapter-base-redirects": "workspace:*", "@tryghost/adapter-base-route-settings": "workspace:*", "@tryghost/adapter-base-scheduling": "workspace:*", "@tryghost/adapter-base-sso": "workspace:*", "@tryghost/admin-api-schema": "workspace:*", "@tryghost/api-framework": "workspace:*", "@tryghost/app-contracts": "workspace:*", "@tryghost/bookshelf-plugins": "2.3.18", "@tryghost/brute-knex": "catalog:", "@tryghost/checkout": "workspace:*", "@tryghost/color-utils": "catalog:", "@tryghost/config-url-helpers": "1.0.28", "@tryghost/custom-fonts": "catalog:", "@tryghost/database-info": "2.3.16", "@tryghost/debug": "catalog:", "@tryghost/domain-events": "catalog:", "@tryghost/errors": "catalog:", "@tryghost/helpers": "catalog:", "@tryghost/html-to-plaintext": "1.0.12", "@tryghost/i18n": "workspace:*", "@tryghost/image-transform": "workspace:*", "@tryghost/kg-card-factory": "workspace:*", "@tryghost/kg-converters": "workspace:*", "@tryghost/kg-default-cards": "workspace:*", "@tryghost/kg-default-nodes": "workspace:*", "@tryghost/kg-html-to-lexical": "workspace:*", "@tryghost/kg-lexical-html-renderer": "workspace:*", "@tryghost/kg-markdown-html-renderer": "workspace:*", "@tryghost/limit-service": "workspace:*", "@tryghost/logging": "catalog:", "@tryghost/metafield-csv": "workspace:*", "@tryghost/metafield-types": "workspace:*", "@tryghost/metrics": "catalog:", "@tryghost/mg-clean-html": "catalog:", "@tryghost/mongo-knex": "catalog:", "@tryghost/mongo-utils": "0.6.6", "@tryghost/mw-error-handler": "3.3.17", "@tryghost/mw-vhost": "3.3.16", "@tryghost/nodemailer": "2.3.17", "@tryghost/nql": "catalog:", "@tryghost/nql-lang": "catalog:", "@tryghost/nql-string": "workspace:*", "@tryghost/parse-email-address": "workspace:*", "@tryghost/pretty-cli": "3.3.16", "@tryghost/prometheus-metrics": "5.0.3", "@tryghost/referrer-parser": "0.1.22", "@tryghost/request": "catalog:", "@tryghost/root-utils": "2.3.16", "@tryghost/security": "3.3.16", "@tryghost/social-urls": "0.1.64", "@tryghost/string": "catalog:", "@tryghost/tpl": "catalog:", "@tryghost/url-utils": "catalog:", "@tryghost/validator": "catalog:", "@tryghost/version": "2.3.16", "@tryghost/zip": "3.5.16", "@x402/core": "catalog:", "@x402/evm": "catalog:", "@x402/hono": "catalog:", "archiver": "8.0.0", "body-parser": "catalog:", "bookshelf": "1.2.0", "bookshelf-relations": "3.0.0", "bson-objectid": "catalog:", "cache-manager": "4.1.0", "cache-manager-ioredis": "2.1.0", "chalk": "4.1.2", "charset": "1.0.1", "cheerio": "catalog:", "clsx": "catalog:", "common-tags": "1.8.2", "compression": "1.8.2", "connect-slashes": "1.4.0", "cookie-session": "2.1.1", "cookies": "0.9.2", "cors": "2.8.6", "countries-and-timezones": "3.9.0", "cron-validate": "catalog:", "csso": "5.0.5", "dequal": "catalog:", "dompurify": "catalog:", "downsize-cjs": "1.1.2", "entities": "4.5.0", "express": "catalog:", "express-brute": "1.0.1", "express-hbs": "2.5.0", "express-jwt": "8.5.1", "express-lazy-router": "1.0.6", "express-query-boolean": "2.0.0", "express-session": "1.19.0", "fastq": "catalog:", "file-type": "21.3.4", "form-data": "catalog:", "fs-extra": "catalog:", "ghost-storage-base": "workspace:*", "glob": "catalog:", "got": "catalog:", "gscan": "6.6.1", "handlebars": "4.7.10", "heic-convert": "2.1.0", "hono": "catalog:", "html-to-text": "5.1.1", "html5parser": "2.0.2", "human-number": "3.0.0", "iconv-lite": "0.7.3", "image-size": "2.0.4", "intl-messageformat": "5.4.3", "ipaddr.js": "catalog:", "jose": "catalog:", "js-yaml": "catalog:", "jsdom": "catalog:", "jsonc-parser": "catalog:", "jsonwebtoken": "8.5.1", "juice": "catalog:", "knex": "2.4.2", "knex-migrator": "catalog:", "leaky-bucket": "2.2.0", "lodash": "catalog:", "lru-cache": "catalog:", "luxon": "3.7.2", "mailgun.js": "10.4.0", "metascraper": "5.55.2", "metascraper-amazon": "5.55.2", "metascraper-author": "5.55.2", "metascraper-description": "5.55.2", "metascraper-image": "5.55.2", "metascraper-logo": "5.55.2", "metascraper-logo-favicon": "5.55.2", "metascraper-publisher": "5.55.2", "metascraper-title": "5.55.2", "metascraper-url": "5.55.2", "mime-types": "2.1.35", "mingo": "catalog:", "moment": "catalog:", "moment-timezone": "catalog:", "mppx": "catalog:", "multer": "2.4.0", "mysql2": "3.24.5", "nconf": "0.13.0", "node-html-markdown": "catalog:", "nodemailer": "10.0.16", "on-headers": "1.1.0", "otplib": "12.0.1", "papaparse": "5.5.4", "path-match": "1.2.4", "probability-distributions": "0.9.1", "probe-image-size": "7.4.0", "rss": "1.2.2", "sanitize-html": "2.17.7", "semver": "catalog:", "simple-dom": "1.4.0", "stoppable": "1.1.0", "stripe": "8.222.0", "temporal-polyfill": "catalog:", "terser": "5.48.0", "tiny-glob": "0.2.9", "tldts": "catalog:", "type-fest": "catalog:", "ua-parser-js": "1.0.41", "unidecode": "catalog:", "zod": "catalog:" }, "devDependencies": { "@eslint/js": "catalog:", "@internal/cfg-eslint": "workspace:*", "@tryghost/email-mock-receiver": "2.3.16", "@tryghost/express-test": "2.3.17", "@tryghost/webhook-mock-receiver": "2.3.16", "@types/bookshelf": "1.2.9", "@types/common-tags": "1.8.4", "@types/express": "catalog:", "@types/express-brute": "catalog:", "@types/fs-extra": "11.0.4", "@types/js-yaml": "4.0.9", "@types/jsdom": "catalog:", "@types/jsonwebtoken": "9.0.10", "@types/lodash": "4.17.25", "@types/lodash-es": "4.17.12", "@types/luxon": "catalog:", "@types/mime-types": "3.0.1", "@types/nconf": "catalog:", "@types/node": "catalog:", "@types/on-headers": "1.0.4", "@types/papaparse": "5.5.2", "@types/probability-distributions": "catalog:", "@types/sanitize-html": "catalog:", "@types/semver": "catalog:", "@types/sinon": "catalog:", "@types/stoppable": "catalog:", "@types/supertest": "6.0.3", "@typescript/native": "catalog:", "@vitest/coverage-v8": "catalog:", "chai": "catalog:", "cli-progress": "3.12.0", "cssnano": "7.1.9", "esbuild": "catalog:", "eslint": "catalog:", "eslint-plugin-ghost": "catalog:", "globals": "17.7.0", "html-validate": "11.5.5", "inquirer": "8.2.7", "lodash-es": "4.18.1", "nock": "catalog:", "nodemon": "3.1.14", "postcss": "catalog:", "postcss-cli": "11.0.1", "qs": "catalog:", "sharp": "catalog:", "sinon": "catalog:", "supertest": "catalog:", "tmp": "0.2.7", "tsx": "catalog:", "typescript": "catalog:", "typescript-eslint": "catalog:", "validator": "catalog:", "vitest": "catalog:" }, "optionalDependencies": { "better-sqlite3": "catalog:" }, "overrides": { "cron-validate": "1.4.5" }, "engines": { "cli": "^1.29.1", "node": "^22.23.1 || ^24.20.0" }, "nx": { "tags": [ "i18n" ], "targets": { "build:tsc": { "dependsOn": [ "^build" ] }, "archive": { "dependsOn": [ "build:assets", "build:tsc", { "projects": [ "@tryghost/admin" ], "target": "build" } ] }, "dev": { "dependsOn": [ "build:assets" ] }, "test:all": { "dependsOn": [ "build:assets" ] }, "test:unit": { "dependsOn": [ "build:assets", "^build" ] }, "test:e2e": { "dependsOn": [ "build:assets", "^build" ] }, "test:integration": { "dependsOn": [ "build:assets", "^build" ] }, "test:legacy": { "dependsOn": [ "build:assets", "^build" ] }, "test:ci:e2e": { "dependsOn": [ "build:assets", "^build" ], "outputs": [ "{projectRoot}/coverage-e2e/cobertura-coverage.xml" ] }, "test:ci:integration": { "dependsOn": [ "build:assets", "^build" ], "outputs": [ "{projectRoot}/coverage-integration/cobertura-coverage.xml" ] }, "test:ci:unit": { "dependsOn": [ "build:assets", "^build" ], "outputs": [ "{projectRoot}/coverage-unit/cobertura-coverage.xml" ] } } } }