This PR allows to have full type safety on `payload.drizzle` with a single command ```sh pnpm payload generate:db-schema ``` Which generates TypeScript code with Drizzle declarations based on the current database schema. Example of generated file with the website template: https://gist.github.com/r1tsuu/b8687f211b51d9a3a7e78ba41e8fbf03 Video that shows the power: https://github.com/user-attachments/assets/3ced958b-ec1d-49f5-9f51-d859d5fae236 We also now proxy drizzle package the same way we do for Lexical so you don't have to install it (and you shouldn't because you may have version mismatch). Instead, you can import from Drizzle like this: ```ts import { pgTable, index, foreignKey, integer, text, varchar, jsonb, boolean, numeric, serial, timestamp, uniqueIndex, pgEnum, } from '@payloadcms/db-postgres/drizzle/pg-core' import { sql } from '@payloadcms/db-postgres/drizzle' import { relations } from '@payloadcms/db-postgres/drizzle/relations' ``` Fixes https://github.com/payloadcms/payload/discussions/4318 In the future we can also support types generation for mongoose / raw mongodb results.
206 lines
11 KiB
JSON
206 lines
11 KiB
JSON
{
|
|
"name": "payload-monorepo",
|
|
"version": "3.9.0",
|
|
"private": true,
|
|
"type": "module",
|
|
"scripts": {
|
|
"bf": "pnpm run build:force",
|
|
"build": "pnpm run build:core",
|
|
"build:all": "turbo build",
|
|
"build:app": "next build",
|
|
"build:app:analyze": "cross-env ANALYZE=true next build",
|
|
"build:clean": "pnpm clean:build",
|
|
"build:core": "turbo build --filter \"!@payloadcms/plugin-*\" --filter \"!@payloadcms/storage-*\"",
|
|
"build:core:force": "pnpm clean:build && pnpm build:core --no-cache --force",
|
|
"build:create-payload-app": "turbo build --filter create-payload-app",
|
|
"build:db-mongodb": "turbo build --filter \"@payloadcms/db-mongodb\"",
|
|
"build:db-postgres": "turbo build --filter \"@payloadcms/db-postgres\"",
|
|
"build:db-sqlite": "turbo build --filter \"@payloadcms/db-sqlite\"",
|
|
"build:db-vercel-postgres": "turbo build --filter \"@payloadcms/db-vercel-postgres\"",
|
|
"build:drizzle": "turbo build --filter \"@payloadcms/drizzle\"",
|
|
"build:email-nodemailer": "turbo build --filter \"@payloadcms/email-nodemailer\"",
|
|
"build:email-resend": "turbo build --filter \"@payloadcms/email-resend\"",
|
|
"build:eslint-config": "turbo build --filter \"@payloadcms/eslint-config\"",
|
|
"build:essentials:force": "pnpm clean:build && turbo build --filter=\"payload...\" --filter=\"@payloadcms/ui\" --filter=\"@payloadcms/next\" --filter=\"@payloadcms/db-mongodb\" --filter=\"@payloadcms/db-postgres\" --filter=\"@payloadcms/richtext-lexical\" --filter=\"@payloadcms/translations\" --filter=\"@payloadcms/plugin-cloud\" --filter=\"@payloadcms/graphql\" --no-cache --force",
|
|
"build:force": "pnpm run build:core:force",
|
|
"build:graphql": "turbo build --filter \"@payloadcms/graphql\"",
|
|
"build:live-preview": "turbo build --filter \"@payloadcms/live-preview\"",
|
|
"build:live-preview-react": "turbo build --filter \"@payloadcms/live-preview-react\"",
|
|
"build:live-preview-vue": "turbo build --filter \"@payloadcms/live-preview-vue\"",
|
|
"build:next": "turbo build --filter \"@payloadcms/next\"",
|
|
"build:payload": "turbo build --filter payload",
|
|
"build:payload-cloud": "turbo build --filter \"@payloadcms/payload-cloud\"",
|
|
"build:plugin-cloud-storage": "turbo build --filter \"@payloadcms/plugin-cloud-storage\"",
|
|
"build:plugin-form-builder": "turbo build --filter \"@payloadcms/plugin-form-builder\"",
|
|
"build:plugin-nested-docs": "turbo build --filter \"@payloadcms/plugin-nested-docs\"",
|
|
"build:plugin-redirects": "turbo build --filter \"@payloadcms/plugin-redirects\"",
|
|
"build:plugin-search": "turbo build --filter \"@payloadcms/plugin-search\"",
|
|
"build:plugin-sentry": "turbo build --filter \"@payloadcms/plugin-sentry\"",
|
|
"build:plugin-seo": "turbo build --filter \"@payloadcms/plugin-seo\"",
|
|
"build:plugin-stripe": "turbo build --filter \"@payloadcms/plugin-stripe\"",
|
|
"build:plugins": "turbo build --filter \"@payloadcms/plugin-*\"",
|
|
"build:richtext-lexical": "turbo build --filter \"@payloadcms/richtext-lexical\"",
|
|
"build:richtext-slate": "turbo build --filter \"@payloadcms/richtext-slate\"",
|
|
"build:storage-azure": "turbo build --filter \"@payloadcms/storage-azure\"",
|
|
"build:storage-gcs": "turbo build --filter \"@payloadcms/storage-gcs\"",
|
|
"build:storage-s3": "turbo build --filter \"@payloadcms/storage-s3\"",
|
|
"build:storage-uploadthing": "turbo build --filter \"@payloadcms/storage-uploadthing\"",
|
|
"build:storage-vercel-blob": "turbo build --filter \"@payloadcms/storage-vercel-blob\"",
|
|
"build:tests": "pnpm --filter payload-test-suite run typecheck",
|
|
"build:translations": "turbo build --filter \"@payloadcms/translations\"",
|
|
"build:ui": "turbo build --filter \"@payloadcms/ui\"",
|
|
"clean": "turbo clean",
|
|
"clean:all": "node ./scripts/delete-recursively.js '@node_modules' 'media/*' '**/dist/' '**/.cache/*' '**/.next/*' '**/.turbo/*' '**/tsconfig.tsbuildinfo' '**/payload*.tgz' '**/meta_*.json'",
|
|
"clean:build": "node ./scripts/delete-recursively.js 'media/' '**/dist/' '**/.cache/' '**/.next/' '**/.turbo/' '**/tsconfig.tsbuildinfo' '**/payload*.tgz' '**/meta_*.json'",
|
|
"clean:cache": "node ./scripts/delete-recursively.js node_modules/.cache! packages/payload/node_modules/.cache! .next/*",
|
|
"dev": "cross-env NODE_OPTIONS=--no-deprecation tsx ./test/dev.ts",
|
|
"dev:generate-db-schema": "pnpm runts ./test/generateDatabaseSchema.ts",
|
|
"dev:generate-graphql-schema": "pnpm runts ./test/generateGraphQLSchema.ts",
|
|
"dev:generate-importmap": "pnpm runts ./test/generateImportMap.ts",
|
|
"dev:generate-types": "pnpm runts ./test/generateTypes.ts",
|
|
"dev:postgres": "cross-env PAYLOAD_DATABASE=postgres pnpm runts ./test/dev.ts",
|
|
"dev:prod": "cross-env NODE_OPTIONS=--no-deprecation tsx ./test/dev.ts --prod",
|
|
"dev:prod:memorydb": "cross-env NODE_OPTIONS=--no-deprecation tsx ./test/dev.ts --prod --start-memory-db",
|
|
"dev:vercel-postgres": "cross-env PAYLOAD_DATABASE=vercel-postgres pnpm runts ./test/dev.ts",
|
|
"devsafe": "node ./scripts/delete-recursively.js '**/.next' && pnpm dev",
|
|
"docker:restart": "pnpm docker:stop --remove-orphans && pnpm docker:start",
|
|
"docker:start": "docker compose -f packages/plugin-cloud-storage/docker-compose.yml up -d",
|
|
"docker:stop": "docker compose -f packages/plugin-cloud-storage/docker-compose.yml down",
|
|
"force:build": "pnpm run build:core:force",
|
|
"lint": "turbo run lint --concurrency 1 --continue",
|
|
"lint-staged": "lint-staged",
|
|
"lint:fix": "turbo run lint:fix --concurrency 1 --continue",
|
|
"obliterate-playwright-cache-macos": "rm -rf ~/Library/Caches/ms-playwright && find /System/Volumes/Data/private/var/folders -type d -name 'playwright*' -exec rm -rf {} +",
|
|
"prepare": "husky",
|
|
"prepare-run-test-against-prod": "pnpm bf && rm -rf test/packed && rm -rf test/node_modules && rm -rf app && rm -f test/pnpm-lock.yaml && pnpm run script:pack --all --no-build --dest test/packed && pnpm runts test/setupProd.ts && cd test && pnpm i --ignore-workspace && cd ..",
|
|
"prepare-run-test-against-prod:ci": "rm -rf test/node_modules && rm -rf app && rm -f test/pnpm-lock.yaml && pnpm run script:pack --all --no-build --dest test/packed && pnpm runts test/setupProd.ts && cd test && pnpm i --ignore-workspace && cd ..",
|
|
"reinstall": "pnpm clean:all && pnpm install",
|
|
"release": "pnpm runts ./scripts/release.ts --tag latest",
|
|
"release:beta": "pnpm runts ./scripts/release.ts --bump prerelease --tag beta",
|
|
"runts": "cross-env NODE_OPTIONS=--no-deprecation node --no-deprecation --import @swc-node/register/esm-register",
|
|
"script:gen-templates": "pnpm runts ./scripts/generate-template-variations.ts",
|
|
"script:list-published": "pnpm runts scripts/lib/getPackageRegistryVersions.ts",
|
|
"script:pack": "pnpm runts scripts/pack-all-to-dest.ts",
|
|
"pretest": "pnpm build",
|
|
"test": "pnpm test:int && pnpm test:components && pnpm test:e2e",
|
|
"test:components": "cross-env NODE_OPTIONS=\" --no-deprecation\" jest --config=jest.components.config.js",
|
|
"test:e2e": "pnpm runts ./test/runE2E.ts",
|
|
"test:e2e:debug": "cross-env NODE_OPTIONS=--no-deprecation NODE_NO_WARNINGS=1 PWDEBUG=1 DISABLE_LOGGING=true playwright test",
|
|
"test:e2e:headed": "cross-env NODE_OPTIONS=--no-deprecation NODE_NO_WARNINGS=1 DISABLE_LOGGING=true playwright test --headed",
|
|
"test:e2e:prod": "pnpm prepare-run-test-against-prod && pnpm runts ./test/runE2E.ts --prod",
|
|
"test:e2e:prod:ci": "pnpm prepare-run-test-against-prod:ci && pnpm runts ./test/runE2E.ts --prod",
|
|
"test:int": "cross-env NODE_OPTIONS=\"--no-deprecation\" NODE_NO_WARNINGS=1 DISABLE_LOGGING=true jest --forceExit --detectOpenHandles --config=test/jest.config.js --runInBand",
|
|
"test:int:postgres": "cross-env NODE_OPTIONS=\"--no-deprecation\" NODE_NO_WARNINGS=1 PAYLOAD_DATABASE=postgres DISABLE_LOGGING=true jest --forceExit --detectOpenHandles --config=test/jest.config.js --runInBand",
|
|
"test:int:sqlite": "cross-env NODE_OPTIONS=\"--no-deprecation\" NODE_NO_WARNINGS=1 PAYLOAD_DATABASE=sqlite DISABLE_LOGGING=true jest --forceExit --detectOpenHandles --config=test/jest.config.js --runInBand",
|
|
"test:types": "tstyche",
|
|
"test:unit": "cross-env NODE_OPTIONS=\"--no-deprecation\" NODE_NO_WARNINGS=1 DISABLE_LOGGING=true jest --forceExit --detectOpenHandles --config=jest.config.js --runInBand",
|
|
"translateNewKeys": "pnpm --filter payload run translateNewKeys"
|
|
},
|
|
"lint-staged": {
|
|
"**/package.json": "sort-package-json",
|
|
"*.{md,mdx,yml,json}": "prettier --write",
|
|
"*.{js,jsx,ts,tsx}": [
|
|
"prettier --write",
|
|
"eslint --cache --fix"
|
|
],
|
|
"templates/website/**/*": "sh -c \"cd templates/website; pnpm install --no-frozen-lockfile --ignore-workspace; pnpm run lint --fix\"",
|
|
"templates/**/pnpm-lock.yaml": "pnpm runts scripts/remove-template-lock-files.ts",
|
|
"tsconfig.json": "node scripts/reset-tsconfig.js"
|
|
},
|
|
"devDependencies": {
|
|
"@jest/globals": "29.7.0",
|
|
"@libsql/client": "0.14.0",
|
|
"@next/bundle-analyzer": "15.0.3",
|
|
"@payloadcms/db-postgres": "workspace:*",
|
|
"@payloadcms/eslint-config": "workspace:*",
|
|
"@payloadcms/eslint-plugin": "workspace:*",
|
|
"@payloadcms/live-preview-react": "workspace:*",
|
|
"@playwright/test": "1.48.1",
|
|
"@sentry/nextjs": "^8.33.1",
|
|
"@sentry/node": "^8.33.1",
|
|
"@swc-node/register": "1.10.9",
|
|
"@swc/cli": "0.5.1",
|
|
"@swc/jest": "0.2.37",
|
|
"@types/fs-extra": "^11.0.2",
|
|
"@types/jest": "29.5.12",
|
|
"@types/minimist": "1.2.5",
|
|
"@types/node": "22.5.4",
|
|
"@types/prompts": "^2.4.5",
|
|
"@types/react": "19.0.1",
|
|
"@types/react-dom": "19.0.1",
|
|
"@types/semver": "^7.5.3",
|
|
"@types/shelljs": "0.8.15",
|
|
"chalk": "^4.1.2",
|
|
"changelogen": "^0.5.5",
|
|
"comment-json": "^4.2.3",
|
|
"copyfiles": "2.4.1",
|
|
"create-payload-app": "workspace:*",
|
|
"cross-env": "7.0.3",
|
|
"dotenv": "16.4.5",
|
|
"drizzle-kit": "0.28.0",
|
|
"drizzle-orm": "0.36.1",
|
|
"escape-html": "^1.0.3",
|
|
"execa": "5.1.1",
|
|
"form-data": "3.0.1",
|
|
"fs-extra": "10.1.0",
|
|
"globby": "11.1.0",
|
|
"husky": "9.0.11",
|
|
"jest": "29.7.0",
|
|
"jest-environment-jsdom": "29.7.0",
|
|
"lint-staged": "15.2.7",
|
|
"minimist": "1.2.8",
|
|
"mongodb-memory-server": "^9.0",
|
|
"next": "15.0.3",
|
|
"open": "^10.1.0",
|
|
"p-limit": "^5.0.0",
|
|
"playwright": "1.48.1",
|
|
"playwright-core": "1.48.1",
|
|
"prettier": "3.3.3",
|
|
"prompts": "2.4.2",
|
|
"react": "19.0.0",
|
|
"react-dom": "19.0.0",
|
|
"rimraf": "3.0.2",
|
|
"semver": "^7.5.4",
|
|
"sharp": "0.32.6",
|
|
"shelljs": "0.8.5",
|
|
"slash": "3.0.0",
|
|
"sort-package-json": "^2.10.0",
|
|
"swc-plugin-transform-remove-imports": "2.0.0",
|
|
"tempy": "1.0.1",
|
|
"tstyche": "^3.1.1",
|
|
"tsx": "4.19.2",
|
|
"turbo": "^2.3.3",
|
|
"typescript": "5.7.2"
|
|
},
|
|
"peerDependencies": {
|
|
"react": "^19.0.0 || ^19.0.0-rc-65a56d0e-20241020",
|
|
"react-dom": "^19.0.0 || ^19.0.0-rc-65a56d0e-20241020"
|
|
},
|
|
"packageManager": "pnpm@9.7.1",
|
|
"engines": {
|
|
"node": "^18.20.2 || >=20.9.0",
|
|
"pnpm": "^9.7.0"
|
|
},
|
|
"pnpm": {
|
|
"allowedDeprecatedVersions": {
|
|
"abab": "2",
|
|
"domexception": "4"
|
|
},
|
|
"overrides": {
|
|
"copyfiles": "$copyfiles",
|
|
"cross-env": "$cross-env",
|
|
"dotenv": "$dotenv",
|
|
"drizzle-orm": "$drizzle-orm",
|
|
"graphql": "^16.8.1",
|
|
"mongodb-memory-server": "$mongodb-memory-server",
|
|
"react": "$react",
|
|
"react-dom": "$react-dom",
|
|
"typescript": "$typescript"
|
|
}
|
|
},
|
|
"workspaces:": [
|
|
"packages/*",
|
|
"test/*"
|
|
]
|
|
}
|