From 6c96bfaffc4ef2f03c240e33b40a8fb348932dfa Mon Sep 17 00:00:00 2001 From: Ifiok Jr Date: Tue, 4 Feb 2020 03:27:24 +0100 Subject: [PATCH] Add `workspaces` to `PackageJson` type --- source/package-json.d.ts | 32 ++++++++++++++++++++++++++++++++ test-d/package-json.ts | 1 + 2 files changed, 33 insertions(+) diff --git a/source/package-json.d.ts b/source/package-json.d.ts index 61a467a76..947dc772d 100644 --- a/source/package-json.d.ts +++ b/source/package-json.d.ts @@ -257,7 +257,39 @@ 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[]; + /** + `nohoist` is 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 packages which matches the pattern (https://classic.yarnpkg.com/blog/2018/02/15/nohoist/). + */ + nohoist?: WorkspacePattern[]; + } + + /** + A workspace pattern points to a folder or group of folders 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 folder and install it's dependencies. + `packages/*` -> Include all nested folders within the packages folder like `packages/cli` and `packages/core`. + */ + type WorkspacePattern = string; + export interface YarnConfiguration { + /** + 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 the top level `private` property of the `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`. 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<