rush.json•27.4 kB
/**
* This is the main configuration file for Rush.
* For full documentation, please see https://rushjs.io
*/
{
"$schema": "https://developer.microsoft.com/json-schemas/rush/v5/rush.schema.json",
/**
* (Required) This specifies the version of the Rush engine to be used in this repo.
* Rush's "version selector" feature ensures that the globally installed tool will
* behave like this release, regardless of which version is installed globally.
*
* The common/scripts/install-run-rush.js automation script also uses this version.
*
* NOTE: If you upgrade to a new major version of Rush, you should replace the "v5"
* path segment in the "$schema" field for all your Rush config files. This will ensure
* correct error-underlining and tab-completion for editors such as VS Code.
*/
"rushVersion": "5.147.1",
/**
* The next field selects which package manager should be installed and determines its version.
* Rush installs its own local copy of the package manager to ensure that your build process
* is fully isolated from whatever tools are present in the local environment.
*
* Specify one of: "pnpmVersion", "npmVersion", or "yarnVersion". See the Rush documentation
* for details about these alternatives.
*/
"pnpmVersion": "10.11.0",
// "npmVersion": "4.5.0",
// "yarnVersion": "1.9.4",
/**
* Older releases of the Node.js engine may be missing features required by your system.
* Other releases may have bugs. In particular, the "latest" version will not be a
* Long Term Support (LTS) version and is likely to have regressions.
*
* Specify a SemVer range to ensure developers use a Node.js version that is appropriate
* for your repo.
*
* LTS schedule: https://nodejs.org/en/about/releases/
* LTS versions: https://nodejs.org/en/download/releases/
*/
"nodeSupportedVersionRange": ">=18.0.0 <23.0.0",
/**
* Odd-numbered major versions of Node.js are experimental. Even-numbered releases
* spend six months in a stabilization period before the first Long Term Support (LTS) version.
* For example, 8.9.0 was the first LTS version of Node.js 8. Pre-LTS versions are not recommended
* for production usage because they frequently have bugs. They may cause Rush itself
* to malfunction.
*
* Rush normally prints a warning if it detects a pre-LTS Node.js version. If you are testing
* pre-LTS versions in preparation for supporting the first LTS version, you can use this setting
* to disable Rush's warning.
*/
// "suppressNodeLtsWarning": false,
/**
* If you would like the version specifiers for your dependencies to be consistent, then
* uncomment this line. This is effectively similar to running "rush check" before any
* of the following commands:
*
* rush install, rush update, rush link, rush version, rush publish
*
* In some cases you may want this turned on, but need to allow certain packages to use a different
* version. In those cases, you will need to add an entry to the "allowedAlternativeVersions"
* section of the common-versions.json.
*/
"ensureConsistentVersions": true,
/**
* Large monorepos can become intimidating for newcomers if project folder paths don't follow
* a consistent and recognizable pattern. When the system allows nested folder trees,
* we've found that teams will often use subfolders to create islands that isolate
* their work from others ("shipping the org"). This hinders collaboration and code sharing.
*
* The Rush developers recommend a "category folder" model, where buildable project folders
* must always be exactly two levels below the repo root. The parent folder acts as the category.
* This provides a basic facility for grouping related projects (e.g. "apps", "libraries",
* "tools", "prototypes") while still encouraging teams to organize their projects into
* a unified taxonomy. Limiting to 2 levels seems very restrictive at first, but if you have
* 20 categories and 20 projects in each category, this scheme can easily accommodate hundreds
* of projects. In practice, you will find that the folder hierarchy needs to be rebalanced
* occasionally, but if that's painful, it's a warning sign that your development style may
* discourage refactoring. Reorganizing the categories should be an enlightening discussion
* that brings people together, and maybe also identifies poor coding practices (e.g. file
* references that reach into other project's folders without using Node.js module resolution).
*
* The defaults are projectFolderMinDepth=1 and projectFolderMaxDepth=2.
*
* To remove these restrictions, you could set projectFolderMinDepth=1
* and set projectFolderMaxDepth to a large number.
*/
// "projectFolderMinDepth": 2,
"projectFolderMaxDepth": 5,
/**
* Today the npmjs.com registry enforces fairly strict naming rules for packages, but in the early
* days there was no standard and hardly any enforcement. A few large legacy projects are still using
* nonstandard package names, and private registries sometimes allow it. Set "allowMostlyStandardPackageNames"
* to true to relax Rush's enforcement of package names. This allows upper case letters and in the future may
* relax other rules, however we want to minimize these exceptions. Many popular tools use certain punctuation
* characters as delimiters, based on the assumption that they will never appear in a package name; thus if we relax
* the rules too much it is likely to cause very confusing malfunctions.
*
* The default value is false.
*/
// "allowMostlyStandardPackageNames": true,
/**
* This feature helps you to review and approve new packages before they are introduced
* to your monorepo. For example, you may be concerned about licensing, code quality,
* performance, or simply accumulating too many libraries with overlapping functionality.
* The approvals are tracked in two config files "browser-approved-packages.json"
* and "nonbrowser-approved-packages.json". See the Rush documentation for details.
*/
// "approvedPackagesPolicy": {
// /**
// * The review categories allow you to say for example "This library is approved for usage
// * in prototypes, but not in production code."
// *
// * Each project can be associated with one review category, by assigning the "reviewCategory" field
// * in the "projects" section of rush.json. The approval is then recorded in the files
// * "common/config/rush/browser-approved-packages.json" and "nonbrowser-approved-packages.json"
// * which are automatically generated during "rush update".
// *
// * Designate categories with whatever granularity is appropriate for your review process,
// * or you could just have a single category called "default".
// */
// "reviewCategories": [
// // Some example categories:
// "production", // projects that ship to production
// "tools", // non-shipping projects that are part of the developer toolchain
// "prototypes" // experiments that should mostly be ignored by the review process
// ],
//
// /**
// * A list of NPM package scopes that will be excluded from review.
// * We recommend to exclude TypeScript typings (the "@types" scope), because
// * if the underlying package was already approved, this would imply that the typings
// * are also approved.
// */
// // "ignoredNpmScopes": ["@types"]
// },
/**
* If you use Git as your version control system, this section has some additional
* optional features you can use.
*/
"gitPolicy": {
/**
* Work at a big company? Tired of finding Git commits at work with unprofessional Git
* emails such as "beer-lover@my-college.edu"? Rush can validate people's Git email address
* before they get started.
*
* Define a list of regular expressions describing allowable e-mail patterns for Git commits.
* They are case-insensitive anchored JavaScript RegExps. Example: ".*@example\.com"
*
* IMPORTANT: Because these are regular expressions encoded as JSON string literals,
* RegExp escapes need two backslashes, and ordinary periods should be "\\.".
*/
// "allowedEmailRegExps": [
// "[^@]+@users\\.noreply\\.github\\.com",
// "travis@example\\.org"
// ],
/**
* When Rush reports that the address is malformed, the notice can include an example
* of a recommended email. Make sure it conforms to one of the allowedEmailRegExps
* expressions.
*/
// "sampleEmail": "mrexample@users.noreply.github.com",
/**
* The commit message to use when committing changes during 'rush publish'.
*
* For example, if you want to prevent these commits from triggering a CI build,
* you might configure your system's trigger to look for a special string such as "[skip-ci]"
* in the commit message, and then customize Rush's message to contain that string.
*/
// "versionBumpCommitMessage": "Applying package updates. [skip-ci]",
/**
* The commit message to use when committing changes during 'rush version'.
*
* For example, if you want to prevent these commits from triggering a CI build,
* you might configure your system's trigger to look for a special string such as "[skip-ci]"
* in the commit message, and then customize Rush's message to contain that string.
*/
// "changeLogUpdateCommitMessage": "Deleting change files and updating change logs for package updates. [skip-ci]"
},
"repository": {
/**
* The URL of this Git repository, used by "rush change" to determine the base branch for your PR.
*
* The "rush change" command needs to determine which files are affected by your PR diff.
* If you merged or cherry-picked commits from the master branch into your PR branch, those commits
* should be excluded from this diff (since they belong to some other PR). In order to do that,
* Rush needs to know where to find the base branch for your PR. This information cannot be
* determined from Git alone, since the "pull request" feature is not a Git concept. Ideally
* Rush would use a vendor-specific protocol to query the information from GitHub, Azure DevOps, etc.
* But to keep things simple, "rush change" simply assumes that your PR is against the "master" branch
* of the Git remote indicated by the repository.url setting in rush.json. If you are working in
* a GitHub "fork" of the real repo, this setting will be different from the repository URL of your
* your PR branch, and in this situation "rush change" will also automatically invoke "git fetch"
* to retrieve the latest activity for the remote master branch.
*/
"url": "https://github.com/get-convex/convex",
/**
* The default branch name. This tells "rush change" which remote branch to compare against.
* The default value is "master"
*/
"defaultBranch": "main"
/**
* The default remote. This tells "rush change" which remote to compare against if the remote URL is
* not set or if a remote matching the provided remote URL is not found.
*/
// "defaultRemote": "origin"
},
/**
* Event hooks are customized script actions that Rush executes when specific events occur
*/
"eventHooks": {
/**
* The list of shell commands to run before the Rush installation starts
*/
"preRushInstall": [
// "common/scripts/pre-rush-install.js"
],
/**
* The list of shell commands to run after the Rush installation finishes
*/
"postRushInstall": [],
/**
* The list of shell commands to run before the Rush build command starts
*/
"preRushBuild": [],
/**
* The list of shell commands to run after the Rush build command finishes
*/
"postRushBuild": []
},
/**
* Rush can collect anonymous telemetry about everyday developer activity such as
* success/failure of installs, builds, and other operations. You can use this to identify
* problems with your toolchain or Rush itself. THIS TELEMETRY IS NOT SHARED WITH MICROSOFT.
* It is written into JSON files in the common/temp folder. It's up to you to write scripts
* that read these JSON files and do something with them. These scripts are typically registered
* in the "eventHooks" section.
*/
// "telemetryEnabled": false,
/**
* Allows creation of hotfix changes. This feature is experimental so it is disabled by default.
* If this is set, 'rush change' only allows a 'hotfix' change type to be specified. This change type
* will be used when publishing subsequent changes from the monorepo.
*/
// "hotfixChangeEnabled": false,
/**
* (Required) This is the inventory of projects to be managed by Rush.
*
* Rush does not automatically scan for projects using wildcards, for a few reasons:
* 1. Depth-first scans are expensive, particularly when tools need to repeatedly collect the list.
* 2. On a caching CI machine, scans can accidentally pick up files left behind from a previous build.
* 3. It's useful to have a centralized inventory of all projects and their important metadata.
*/
"projects": [
{
"packageName": "udf-syscall-ffi",
"projectFolder": "udf-syscall-ffi"
},
{
"packageName": "convex",
"projectFolder": "convex",
"versionPolicyName": "convex"
},
{
"packageName": "@convex-dev/react-query",
"projectFolder": "@convex-dev/react-query"
// move to `"versionPolicyName": "convex"` once this is stable
},
{
"packageName": "@convex-dev/eslint-plugin",
"projectFolder": "@convex-dev/eslint-plugin"
// move to `"versionPolicyName": "convex"` once this is stable
},
{
"packageName": "@convex-dev/codemod",
"projectFolder": "@convex-dev/codemod"
},
{
"packageName": "codemod-test-custom-convex-folder",
"projectFolder": "@convex-dev/codemod/test/explicit-ids/custom-convex-folder"
},
{
"packageName": "codemod-test-sample-convex-project",
"projectFolder": "@convex-dev/codemod/test/explicit-ids/sample-convex-project"
},
{
"packageName": "@convex-dev/workos",
"projectFolder": "@convex-dev/workos"
},
{
"packageName": "publishing-tests",
"projectFolder": "publishing-tests"
},
{
"packageName": "package-tests",
"projectFolder": "package-tests"
},
{
"packageName": "@convex-dev/platform",
"projectFolder": "@convex-dev/platform"
},
{
"packageName": "clerk-initial-auth",
"projectFolder": "private-demos/clerk-initial-auth"
},
{
"packageName": "bundle-size",
"projectFolder": "private-demos/bundle-size"
},
{
"packageName": "tanstack-start",
"projectFolder": "private-demos/tanstack-start"
},
{
"packageName": "tanstack-start-clerk",
"projectFolder": "private-demos/tanstack-start-clerk"
},
{
"packageName": "test-data",
"projectFolder": "private-demos/test-data"
},
{
"packageName": "typescript-demo",
"projectFolder": "demos/typescript"
},
{
"packageName": "prewarming-demo",
"projectFolder": "demos/prewarming"
},
{
"packageName": "typescript-demo-old",
"projectFolder": "private-demos/typescript-old"
},
{
"packageName": "typescript-exact-optional-property-types",
"projectFolder": "private-demos/typescript-exact-optional-property-types"
},
{
"packageName": "typescript-modern",
"projectFolder": "private-demos/typescript-modern"
},
{
"packageName": "middleware",
"projectFolder": "private-demos/middleware"
},
{
"packageName": "snippets",
"projectFolder": "private-demos/snippets"
},
{
"packageName": "components-poc",
"projectFolder": "private-demos/components-poc"
},
{
"packageName": "components-npm",
"projectFolder": "private-demos/components-npm"
},
{
"packageName": "@convex-dev/ratelimiter",
"projectFolder": "components/ratelimiter"
},
{
"packageName": "@convex-dev/triggers",
"projectFolder": "components/triggers"
},
{
"packageName": "convex-chat-speculative",
"projectFolder": "convex-chat-speculative"
},
{
"packageName": "shared-cursors",
"projectFolder": "shared-cursors"
},
{
"packageName": "js-integration-tests",
"projectFolder": "js-integration-tests"
},
{
"packageName": "react-query-demo",
"projectFolder": "demos/react-query"
},
{
"packageName": "convex-tour-chat-0",
"projectFolder": "demos/tour-chat/0-start"
},
{
"packageName": "convex-tour-chat-1",
"projectFolder": "demos/tour-chat/1-smileys"
},
{
"packageName": "convex-tour-chat-2",
"projectFolder": "demos/tour-chat/2-likes"
},
{
"packageName": "convex-tour-chat-3",
"projectFolder": "demos/tour-chat/3-ai"
},
{
"packageName": "convex-tutorial-original",
"projectFolder": "demos/tutorial"
},
{
"packageName": "convex-analytics",
"projectFolder": "convex-analytics"
},
{
"packageName": "convex-ai-chat",
"projectFolder": "convex-ai-chat"
},
{
"packageName": "docs",
"projectFolder": "docs"
},
{
"packageName": "args-validation",
"projectFolder": "demos/args-validation"
},
{
"packageName": "relational-data-modeling",
"projectFolder": "demos/relational-data-modeling"
},
{
"packageName": "users-and-auth",
"projectFolder": "demos/users-and-auth"
},
{
"packageName": "convex-and-clerk",
"projectFolder": "demos/clerk"
},
{
"packageName": "users-and-clerk",
"projectFolder": "demos/users-and-clerk"
},
{
"packageName": "users-and-clerk-webhooks",
"projectFolder": "demos/users-and-clerk-webhooks"
},
{
"packageName": "giphy-action",
"projectFolder": "demos/giphy-action"
},
{
"packageName": "dall-e-storage-action",
"projectFolder": "demos/dall-e-storage-action"
},
{
"packageName": "pagination",
"projectFolder": "demos/pagination"
},
{
"packageName": "pagination-adversarial",
"projectFolder": "private-demos/pagination-adversarial"
},
{
"packageName": "presence-facepile",
"projectFolder": "demos/presence-facepile"
},
{
"packageName": "presence-typing-indicator",
"projectFolder": "demos/presence-typing-indicator"
},
{
"packageName": "nextjs-pages-router",
"projectFolder": "demos/nextjs-pages-router"
},
{
"packageName": "nextjs-app-router",
"projectFolder": "demos/nextjs-app-router"
},
{
"packageName": "nextjs-app-router-snippets",
"projectFolder": "private-demos/nextjs-app-router-snippets"
},
{
"packageName": "nextjs-15-app",
"projectFolder": "private-demos/nextjs-15-app"
},
{
"packageName": "nextjs-15-app-clerk",
"projectFolder": "private-demos/nextjs-15-app-clerk"
},
{
"packageName": "scheduling",
"projectFolder": "demos/scheduling"
},
{
"packageName": "search",
"projectFolder": "demos/search"
},
{
"packageName": "vector-search",
"projectFolder": "demos/vector-search"
},
{
"packageName": "private-vector-search",
"projectFolder": "private-demos/vector-search"
},
{
"packageName": "sessions",
"projectFolder": "demos/sessions"
},
{
"packageName": "file-storage",
"projectFolder": "demos/file-storage"
},
{
"packageName": "file-storage-with-http",
"projectFolder": "demos/file-storage-with-http"
},
{
"packageName": "zod-validation-ts",
"projectFolder": "demos/zod-validation-ts"
},
{
"packageName": "cron-jobs",
"projectFolder": "demos/cron-jobs"
},
{
"packageName": "html",
"projectFolder": "demos/html"
},
{
"packageName": "node-demo",
"projectFolder": "demos/node"
},
{
"packageName": "javascript",
"projectFolder": "private-demos/javascript"
},
{
"packageName": "javascript-old-syntax",
"projectFolder": "private-demos/javascript-old-syntax"
},
{
"packageName": "actions",
"projectFolder": "private-demos/actions"
},
{
"packageName": "cjs-typescript",
"projectFolder": "private-demos/cjs-typescript"
},
{
"packageName": "cron",
"projectFolder": "private-demos/cron"
},
{
"packageName": "private-http",
"projectFolder": "private-demos/http"
},
{
"packageName": "waitlist",
"projectFolder": "private-demos/waitlist"
},
{
"packageName": "http",
"projectFolder": "demos/http"
},
{
"packageName": "dashboard",
"projectFolder": "dashboard"
},
{
"packageName": "dashboard-common",
"projectFolder": "dashboard-common"
},
{
"packageName": "dashboard-self-hosted",
"projectFolder": "dashboard-self-hosted"
},
{
"packageName": "@convex-dev/design-system",
"projectFolder": "@convex-dev/design-system"
},
{
"packageName": "dashboard-storybook",
"projectFolder": "dashboard-storybook"
},
{
"packageName": "udf-runtime",
"projectFolder": "udf-runtime"
},
{
"packageName": "simulation",
"projectFolder": "simulation"
},
{
"packageName": "system-udfs",
"projectFolder": "system-udfs"
},
{
"packageName": "system-tables",
"projectFolder": "demos/system-tables"
},
{
"packageName": "udf-tests",
"projectFolder": "udf-tests"
},
{
"packageName": "component-tests",
"projectFolder": "component-tests"
},
{
"packageName": "component-tests-empty",
"projectFolder": "component-tests/projects/empty"
},
{
"packageName": "component-tests-mounted",
"projectFolder": "component-tests/projects/mounted"
},
{
"packageName": "component-tests-with-schema",
"projectFolder": "component-tests/projects/with-schema"
},
{
"packageName": "component-tests-schema-with-index",
"projectFolder": "component-tests/projects/schema_with_index"
},
{
"packageName": "component-tests-basic",
"projectFolder": "component-tests/projects/basic"
},
{
"packageName": "component-tests-http-actions",
"projectFolder": "component-tests/projects/http_actions"
},
{
"packageName": "scenario-runner",
"projectFolder": "scenario-runner"
},
{
"packageName": "node-executor",
"projectFolder": "node-executor"
},
{
"packageName": "retention-tester",
"projectFolder": "retention-tester"
},
{
"packageName": "shapes",
"projectFolder": "shapes"
},
{
"packageName": "id-encoding",
"projectFolder": "id-encoding"
},
{
"packageName": "vector-importer",
"projectFolder": "private-demos/vector-importer"
},
{
"packageName": "text-importer",
"projectFolder": "private-demos/text-importer"
},
{
"packageName": "npm-showcase",
"projectFolder": "private-demos/npm-showcase"
},
{
"packageName": "deploy-speed-test",
"projectFolder": "private-demos/deploy-speed-test"
},
{
"packageName": "custom-errors",
"projectFolder": "demos/custom-errors"
},
{
"packageName": "python-quickstart",
"projectFolder": "demos/python-quickstart"
},
{
"packageName": "convex-tour-chat-tutorial",
"projectFolder": "private-demos/convex-tour-chat-tutorial"
},
{
"packageName": "convex-tutorial",
"projectFolder": "private-demos/tutorial"
},
{
"packageName": "openauth-react",
"projectFolder": "private-demos/openauth-react"
},
{
"packageName": "local-store",
"projectFolder": "local-store"
},
{
"packageName": "version",
"projectFolder": "version"
}
// {
// /**
// * The NPM package name of the project (must match package.json)
// */
// "packageName": "my-app",
//
// /**
// * The path to the project folder, relative to the rush.json config file.
// */
// "projectFolder": "apps/my-app",
//
// /**
// * An optional category for usage in the "browser-approved-packages.json"
// * and "nonbrowser-approved-packages.json" files. The value must be one of the
// * strings from the "reviewCategories" defined above.
// */
// "reviewCategory": "production",
//
// /**
// * A list of local projects that appear as devDependencies for this project, but cannot be
// * locally linked because it would create a cyclic dependency; instead, the last published
// * version will be installed in the Common folder.
// */
// "cyclicDependencyProjects": [
// // "my-toolchain"
// ],
//
// /**
// * If true, then this project will be ignored by the "rush check" command.
// * The default value is false.
// */
// // "skipRushCheck": false,
//
// /**
// * A flag indicating that changes to this project will be published to npm, which affects
// * the Rush change and publish workflows. The default value is false.
// * NOTE: "versionPolicyName" and "shouldPublish" are alternatives; you cannot specify them both.
// */
// // "shouldPublish": false,
//
// /**
// * Facilitates postprocessing of a project's files prior to publishing.
// *
// * If specified, the "publishFolder" is the relative path to a subfolder of the project folder.
// * The "rush publish" command will publish the subfolder instead of the project folder. The subfolder
// * must contain its own package.json file, which is typically a build output.
// */
// // "publishFolder": "temp/publish",
//
// /**
// * An optional version policy associated with the project. Version policies are defined
// * in "version-policies.json" file. See the "rush publish" documentation for more info.
// * NOTE: "versionPolicyName" and "shouldPublish" are alternatives; you cannot specify them both.
// */
// // "versionPolicyName": ""
// },
//
// {
// "packageName": "my-controls",
// "projectFolder": "libraries/my-controls",
// "reviewCategory": "production"
// },
//
// {
// "packageName": "my-toolchain",
// "projectFolder": "tools/my-toolchain",
// "reviewCategory": "tools"
// }
]
}