From 836ecb853319b1c6f9e08dc44a4fbccb9b8126f4 Mon Sep 17 00:00:00 2001 From: Ifiok Jr Date: Mon, 10 Feb 2020 21:25:27 +0100 Subject: [PATCH] Add `workspaces` to `PackageJson` type (#77) Co-authored-by: Sindre Sorhus --- source/package-json.d.ts | 41 ++++++++++++++++++++++++++++++++++++++-- test-d/package-json.ts | 1 + 2 files changed, 40 insertions(+), 2 deletions(-) diff --git a/source/package-json.d.ts b/source/package-json.d.ts index 61a467a76..648169da1 100644 --- a/source/package-json.d.ts +++ b/source/package-json.d.ts @@ -257,11 +257,48 @@ declare namespace PackageJson { typings?: string; } + /** + An alternative configuration for Yarn workspaces. + */ + export interface WorkspaceConfig { + /** + An array of workspace pattern strings which contain the workspace packages. + */ + packages?: WorkspacePattern[]; + + /** + Designed to solve the problem of packages which break when their `node_modules` are moved to the root workspace directory - a process known as hoisting. For these packages, both within your workspace, and also some that have been installed via `node_modules`, it is important to have a mechanism for preventing the default Yarn workspace behavior. By adding workspace pattern strings here, Yarn will resume non-workspace behavior for any package which matches the defined patterns. + + [Read more](https://classic.yarnpkg.com/blog/2018/02/15/nohoist/) + */ + nohoist?: WorkspacePattern[]; + } + + /** + A workspace pattern points to a directory or group of directories which contain packages that should be included in the workspace installation process. + + The patterns are handled with [minimatch](https://github.com/isaacs/minimatch). + + @example + `docs` → Include the docs directory and install its dependencies. + `packages/*` → Include all nested directories within the packages directory, like `packages/cli` and `packages/core`. + */ + type WorkspacePattern = string; + export interface YarnConfiguration { /** - If your package only allows one version of a given dependency, and you’d like to enforce the same behavior as `yarn install --flat` on the command line, set this to `true`. + Used to configure [Yarn workspaces](https://classic.yarnpkg.com/docs/workspaces/). + + Workspaces allow you to manage multiple packages within the same repository in such a way that you only need to run `yarn install` once to install all of them in a single pass. + + Please note that the top-level `private` property of `package.json` **must** be set to `true` in order to use workspaces. + */ + workspaces?: WorkspacePattern[] | WorkspaceConfig; + + /** + If your package only allows one version of a given dependency, and you’d like to enforce the same behavior as `yarn install --flat` on the command-line, set this to `true`. - Note that if your `package.json` contains `"flat": true` and other packages depend on yours (e.g. you are building a library rather than an application), those other packages will also need `"flat": true` in their `package.json` or be installed with `yarn install --flat` on the command-line. + Note that if your `package.json` contains `"flat": true` and other packages depend on yours (e.g. you are building a library rather than an app), those other packages will also need `"flat": true` in their `package.json` or be installed with `yarn install --flat` on the command-line. */ flat?: boolean; diff --git a/test-d/package-json.ts b/test-d/package-json.ts index 470d6e29e..d007fb05c 100644 --- a/test-d/package-json.ts +++ b/test-d/package-json.ts @@ -35,6 +35,7 @@ expectType(packageJson.peerDependencies); expectType(packageJson.bundleDependencies); expectType(packageJson.bundledDependencies); expectType(packageJson.resolutions); +expectType(packageJson.workspaces); expectType<{[engineName: string]: string} | undefined>(packageJson.engines); expectType(packageJson.engineStrict); expectType<