import { javascript, github, IgnoreFileOptions, GitOptions, LoggerOptions, ProjenrcJsonOptions, typescript, SampleReadmeProps, ReleasableCommits, release, RenovatebotOptions, GroupRunnerOptions } from 'projen'; import { yarn } from '../'; /** * TypeScriptWorkspaceOptions */ export interface TypeScriptWorkspaceOptions { /** * Automatically add the resolved `packageManager` to `devEngines.packageManager` in `package.json`, setting `onFail` to `ignore`. * @default true */ readonly addPackageManagerToDevEngines?: boolean; /** * Allow the project to include `peerDependencies` and `bundledDependencies`. * This is normally only allowed for libraries. For apps, there's no meaning * for specifying these. * @default true */ readonly allowLibraryDependencies?: boolean; /** * Allow private workspace dependencies in the 'deps' parameter. By default, private dependencies are not allowed as users will not be able to install your package. It makes sense to relax this check *only* if you are bundling your package. * @default false */ readonly allowPrivateDeps?: boolean; /** * List of dependency (package) names that are allowed to run lifecycle install scripts (`preinstall`, `install`, `postinstall`, `prepare`) during dependency installation. * These scripts can execute arbitrary code, making them a common * supply-chain attack vector. Package managers are moving toward * blocking them by default and requiring an explicit allowlist. * Configuring `allowScripts` sets up that allowlist so scripts only run * for the packages you have explicitly reviewed and trust. * * Support for this setting depends on the configured `packageManager`: * * - `NPM`: written to the native `allowScripts` field in `package.json` * (requires npm >= 11.16; see https://docs.npmjs.com/cli/v11/commands/npm-approve-scripts). * - `BUN`: written to the native `trustedDependencies` field in * `package.json` (see https://bun.com/docs/pm/lifecycle). * - `PNPM`: written to the `onlyBuiltDependencies` setting in * `pnpm-workspace.yaml` (see https://pnpm.io/settings#onlybuiltdependencies). * - `YARN2`, `YARN_BERRY`: written to the native * `dependenciesMeta..built` allowlist in `package.json`, combined * with `enableScripts: false` in `.yarnrc.yml` (see * https://yarnpkg.com/features/security#postinstalls). If you set * `yarnBerryOptions.yarnRcOptions.enableScripts` explicitly, that value * is respected instead of being overridden. * - `YARN`, `YARN_CLASSIC`: not supported. Yarn Classic has no native * mechanism to allowlist install scripts for specific dependencies. * Setting this option with one of these package managers throws an * error at synthesis time. * @default - all install scripts are allowed to run (package manager default) */ readonly allowScripts?: Array; /** * A directory which will contain build artifacts. * @default "dist" */ readonly artifactsDirectory?: string; /** * Run security audit on dependencies. * When enabled, creates an "audit" task that checks for known security vulnerabilities * in dependencies. By default, runs during every build and checks for "high" severity * vulnerabilities or above in all dependencies (including dev dependencies). * @default false */ readonly auditDeps?: boolean; /** * Security audit options. * @default - default options */ readonly auditDepsOptions?: javascript.AuditOptions; /** * Author's e-mail. */ readonly authorEmail?: string; /** * Author's name. */ readonly authorName?: string; /** * Is the author an organization. */ readonly authorOrganization?: boolean; /** * Author's URL / Website. */ readonly authorUrl?: string; /** * Enable and configure the 'auto approve' workflow. * @default - auto approve is disabled */ readonly autoApproveOptions?: github.AutoApproveOptions; /** * Automatically approve deps upgrade PRs, allowing them to be merged by mergify (if configured). * Throw if set to true but `autoApproveOptions` are not defined. * @default - true */ readonly autoApproveUpgrades?: boolean; /** * Enable automatic merging on GitHub. * Has no effect if `github.mergify` * is set to false. * @default true */ readonly autoMerge?: boolean; /** * Configure options for automatic merging on GitHub. * Has no effect if * `github.mergify` or `autoMerge` is set to false. * @default - see defaults in `AutoMergeOptions` */ readonly autoMergeOptions?: github.AutoMergeOptions; /** * Binary programs vended with your module. * You can use this option to add/customize how binaries are represented in * your `package.json`, but unless `autoDetectBin` is `false`, every * executable file under `bin` will automatically be added to this section. */ readonly bin?: Record; /** * Setup Biome. * @default false */ readonly biome?: boolean; /** * Biome options. * @default - default options */ readonly biomeOptions?: javascript.BiomeOptions; /** * The email address to which issues should be reported. */ readonly bugsEmail?: string; /** * The url to your project's issue tracker. */ readonly bugsUrl?: string; /** * Define a GitHub workflow for building PRs. * @default - true if not a subproject */ readonly buildWorkflow?: boolean; /** * Options for PR build workflow. */ readonly buildWorkflowOptions?: javascript.BuildWorkflowOptions; /** * The `commit-and-tag-version` compatible package used to bump the package version, as a dependency string. * This can be any compatible package version, including the deprecated `standard-version@9`. * @default - A recent version of "commit-and-tag-version" */ readonly bumpPackage?: string; /** * List of dependencies to bundle into this module. * These modules will be * added both to the `dependencies` section and `bundledDependencies` section of * your `package.json`. * * The recommendation is to only specify the module name here (e.g. * `express`). This will behave similar to `pnpm add` or `npm install` in the * sense that it will add the module as a dependency to your `package.json` * file with the latest version (`^`). You can specify semver requirements in * the same syntax passed to `pnpm add` or `npm i` (e.g. `express@^2`) and * this will be what your `package.json` will eventually include. */ readonly bundledDeps?: Array; /** * Options for `Bundler`. */ readonly bundlerOptions?: javascript.BundlerOptions; /** * The version of Bun to use if using Bun as a package manager. * @default "latest" */ readonly bunVersion?: string; /** * Configure which licenses should be deemed acceptable for use by dependencies. * This setting will cause the build to fail, if any prohibited or not allowed licenses ares encountered. * @default - no license checks are run during the build and all licenses will be accepted */ readonly checkLicenses?: javascript.LicenseCheckerOptions; /** * Add a `clobber` task which resets the repo to origin. * @default - true, but false for subprojects */ readonly clobber?: boolean; /** * Options for npm packages using AWS CodeArtifact. * This is required if publishing packages to, or installing scoped packages from AWS CodeArtifact * @default - undefined */ readonly codeArtifactOptions?: javascript.CodeArtifactOptions; /** * Define a GitHub workflow step for sending code coverage metrics to https://codecov.io/. * Uses codecov/codecov-action. By default, OIDC auth is used. * Alternatively a token can be provided via `codeCovTokenSecret`. * @default false */ readonly codeCov?: boolean; /** * Define the secret name for a specified https://codecov.io/ token. * @default - OIDC auth is used */ readonly codeCovTokenSecret?: string; /** * Whether to commit the managed files by default. * @default true */ readonly commitGenerated?: boolean; /** * Configuration values available to package scripts at runtime. * Values should be JSON-serializable. * @default - no package configuration */ readonly config?: Record; /** * License copyright owner. * This value is only used if the selected license text contains the * `$copyright_owner` placeholder. For example, it has no effect on the * MPL-2.0 license text. * @default - defaults to the value of authorName or "" if `authorName` is undefined. */ readonly copyrightOwner?: string; /** * The copyright years to put in the LICENSE file. * This value is only used if the selected license text contains the * `$copyright_period` placeholder. For example, it has no effect on the * MPL-2.0 license text. * @default - current year */ readonly copyrightPeriod?: string; /** * Add a `dedupe` task that deduplicates project dependencies. * Deduplication prevents multiple versions of the same package from being * installed, if a single version can satisfy all requested version ranges. * This prevents version proliferation and reduces the size of the dependency * tree. * * The behavior depends on the package manager: * - npm: runs `npm dedupe` after every mutating install. * - pnpm: runs `pnpm dedupe` after every mutating install. * - Yarn Berry: runs `yarn dedupe` after every mutating install. If * `yarnBerryOptions.dedupePackages` is set, only the listed packages are * deduplicated. * - Yarn Classic: `yarn install` already deduplicates, so the task only * prints an informational message. * - Bun: not supported, enabling this option throws an error. * @default - false, unless `yarnBerryOptions.dedupePackages` is set */ readonly dedupeDeps?: boolean; /** * Automatically delete lockfiles from package managers that are not the active one. * Only triggered when the lockfile for the configured package * manager already exists. * * This is useful when migrating between package managers to avoid conflicts. * @default true */ readonly deleteOrphanedLockFiles?: boolean; /** * Use dependabot to handle dependency upgrades. * Cannot be used in conjunction with `depsUpgrade`. * @default false */ readonly dependabot?: boolean; /** * Options for dependabot. * @default - default options */ readonly dependabotOptions?: github.DependabotOptions; /** * Runtime dependencies of this module. * The recommendation is to only specify the module name here (e.g. * `express`). This will behave similar to `pnpm add` or `npm install` in the * sense that it will add the module as a dependency to your `package.json` * file with the latest version (`^`). You can specify semver requirements in * the same syntax passed to `pnpm add` or `npm i` (e.g. `express@^2`) and * this will be what your `package.json` will eventually include. * @default [] */ readonly deps?: Array; /** * Use tasks and github workflows to handle dependency upgrades. * Cannot be used in conjunction with `dependabot`. * @default - `true` for root projects, `false` for subprojects */ readonly depsUpgrade?: boolean; /** * The description is just a string that helps people understand the purpose of the package. * It can be used when searching for packages in a package manager as well. * See https://classic.yarnpkg.com/en/docs/package-json/#toc-description */ readonly description?: string; /** * Add a VSCode development environment (used for GitHub Codespaces). * @default false */ readonly devContainer?: boolean; /** * Build dependencies for this module. * These dependencies will only be * available in your build environment but will not be fetched when this * module is consumed. * * The recommendation is to only specify the module name here (e.g. * `express`). This will behave similar to `pnpm add` or `npm install` in the * sense that it will add the module as a dependency to your `package.json` * file with the latest version (`^`). You can specify semver requirements in * the same syntax passed to `pnpm add` or `npm i` (e.g. `express@^2`) and * this will be what your `package.json` will eventually include. * @default [] */ readonly devDeps?: Array; /** * Configure the `devEngines` field in `package.json`. * The `devEngines.packageManager` field is automatically populated based on * the resolved `packageManager` value. Any fields provided here are merged * with the auto-populated `packageManager` entry. */ readonly devEngines?: javascript.DevEngines; /** * Do not generate a `tsconfig.json` file (used by jsii projects since tsconfig.json is generated by the jsii compiler). * @default false */ readonly disableTsconfig?: boolean; /** * Do not generate a development tsconfig file. * @default false */ readonly disableTsconfigDev?: boolean; /** * Docgen by Typedoc. * @default false */ readonly docgen?: boolean; /** * Docs directory. * @default "docs" */ readonly docsDirectory?: string; /** * Module entrypoint (`main` in `package.json`). * Set to an empty string to not include `main` in your package.json * @default "lib/index.js" */ readonly entrypoint?: string; /** * The .d.ts file that includes the type declarations for this module. * @default - .d.ts file derived from the project's entrypoint (usually lib/index.d.ts) */ readonly entrypointTypes?: string; /** * Setup eslint. * @default - true, unless biome is enabled */ readonly eslint?: boolean; /** * Eslint options. * @default - opinionated default options */ readonly eslintOptions?: javascript.EslintOptions; /** * Dependencies that should be excluded from upgrades. * @default [] */ readonly excludeDepsFromUpgrade?: Array; /** * Enable GitHub integration. * Enabled by default for root projects. Disabled for non-root projects. * @default true */ readonly github?: boolean; /** * Options for GitHub integration. * @default - see GitHubOptions */ readonly githubOptions?: github.GitHubOptions; /** * Whether GitHub should explicitly mark the release from the default branch as the latest release. * Set to `true` to mark the release as latest, or `false` to explicitly not * mark it as latest. * @default - GitHub determines the latest release based on date and semantic version. */ readonly githubReleaseLatest?: boolean; /** * Additional entries to .gitignore. */ readonly gitignore?: Array; /** * Configuration options for .gitignore file. */ readonly gitIgnoreOptions?: IgnoreFileOptions; /** * Configuration options for git. */ readonly gitOptions?: GitOptions; /** * Add a Gitpod development environment. * @default false */ readonly gitpod?: boolean; /** * Configure Yarn Berry's `installConfig.hoistingLimits` for this workspace. * Sets the `installConfig.hoistingLimits` field in the workspace `package.json`. * Accepted values are `workspaces`, `dependencies`, or `none`. * Only has an effect when the parent monorepo uses Yarn Berry. */ readonly hoistingLimits?: string; /** * Package's Homepage / Website. */ readonly homepage?: string; /** * Setup jest unit tests. * @default true */ readonly jest?: boolean; /** * Jest options. * @default - default options */ readonly jestOptions?: javascript.JestOptions; /** * Version requirement of `publib` which is used to publish modules to npm. * @default "latest" */ readonly jsiiReleaseVersion?: string; /** * Keywords to include in `package.json`. */ readonly keywords?: Array; /** * Typescript artifacts output directory. * @default "lib" */ readonly libdir?: string; /** * License's SPDX identifier. * See https://github.com/projen/projen/tree/main/license-text for a list of supported licenses. * Use the `licensed` option if you want to no license to be specified. * @default "Apache-2.0" */ readonly license?: string; /** * Indicates if a license should be added. * @default true */ readonly licensed?: boolean; /** * Configure logging options such as verbosity. * @default {} */ readonly logging?: LoggerOptions; /** * Major version to release from the default branch. * If this is specified, we bump the latest version of this major version line. * If not specified, we bump the global latest version. * @default - Major version is not enforced. */ readonly majorVersion?: number; /** * The maximum node version supported by this package. Most projects should not use this option. * The value indicates that the package is incompatible with any newer versions of node. * This requirement is enforced via the engines field. * * You will normally not need to set this option. * Consider this option only if your package is known to not function with newer versions of node. * @default - no maximum version is enforced */ readonly maxNodeVersion?: string; /** * Minimal Major version to release. * This can be useful to set to 1, as breaking changes before the 1.x major * release are not incrementing the major version number. * * Can not be set together with `majorVersion`. * @default - No minimum version is being enforced */ readonly minMajorVersion?: number; /** * Minimum Node.js version to require via package.json `engines` (inclusive). * * Only set this if your package will not work properly on specific (older?) * Node versions. * * @default - no "engines" specified */ readonly minNodeVersion?: string; /** * This is the name of your project. * @default $BASEDIR */ readonly name: string; /** * A shell command to control the next version to release. * If present, this shell command will be run before the bump is executed, and * it determines what version to release. It will be executed in the following * environment: * * - Working directory: the project directory. * - `$VERSION`: the current version. Looks like `1.2.3`. * - `$LATEST_TAG`: the most recent tag. Looks like `prefix-v1.2.3`, or may be unset. * - `$SUGGESTED_BUMP`: the suggested bump action based on commits. One of `major|minor|patch|none`. * * The command should print one of the following to `stdout`: * * - Nothing: the next version number will be determined based on commit history. * - `x.y.z`: the next version number will be `x.y.z`. * - `major|minor|patch`: the next version number will be the current version number * with the indicated component bumped. * * This setting cannot be specified together with `minMajorVersion`; the invoked * script can be used to achieve the effects of `minMajorVersion`. * @default - The next version will be determined based on the commit history and project settings. */ readonly nextVersionCommand?: string; /** * Access level of the npm package. * @default - for scoped packages (e.g. `foo@bar`), the default is `NpmAccess.RESTRICTED`, for non-scoped packages, the default is `NpmAccess.PUBLIC`. */ readonly npmAccess?: javascript.NpmAccess; /** * The npmDistTag to use when publishing from the default branch. * To set the npm dist-tag for release branches, set the `npmDistTag` property * for each branch. * @default "latest" */ readonly npmDistTag?: string; /** * Defines an .npmignore file. Normally this is only needed for libraries that are packaged as tarballs. * @default true */ readonly npmignoreEnabled?: boolean; /** * Configuration options for .npmignore file. */ readonly npmIgnoreOptions?: IgnoreFileOptions; /** * Should provenance statements be generated when the package is published. * A supported package manager is required to publish a package with npm provenance statements and * you will need to use a supported CI/CD provider. * * Note that the projen `Release` and `Publisher` components are using `publib` to publish packages, * which is using npm internally and supports provenance statements independently of the package manager used. * @default - true for public packages, false otherwise */ readonly npmProvenance?: boolean; /** * The base URL of the npm package registry. * Must be a URL (e.g. start with "https://" or "http://") * @default "https://registry.npmjs.org" */ readonly npmRegistryUrl?: string; /** * GitHub secret which contains the NPM token to use when publishing packages. * @default "NPM_TOKEN" */ readonly npmTokenSecret?: string; /** * Use trusted publishing for publishing to npmjs.com Needs to be pre-configured on npm.js to work. * @default - false */ readonly npmTrustedPublishing?: boolean; /** * Defines a `package` task that will produce an npm tarball under the artifacts directory (e.g. `dist`). * @default true */ readonly package?: boolean; /** * The Node Package Manager used to execute scripts. * @default - Detected from the calling process or `YARN_CLASSIC` if detection fails. */ readonly packageManager?: javascript.NodePackageManager; /** * The "name" in package.json. * @default - defaults to project name */ readonly packageName?: string; /** * The parent `yarn.Monorepo` project. */ readonly parent: yarn.Monorepo; /** * Options for `peerDeps`. */ readonly peerDependencyOptions?: javascript.PeerDependencyOptions; /** * Peer dependencies for this module. * Dependencies listed here are required to * be installed (and satisfied) by the _consumer_ of this library. Using peer * dependencies allows you to ensure that only a single module of a certain * library exists in the `node_modules` tree of your consumers. * * Note that prior to npm@7, peer dependencies are _not_ automatically * installed, which means that adding peer dependencies to a library will be a * breaking change for your customers. * * Unless `peerDependencyOptions.pinnedDevDependency` is disabled (it is * enabled by default), projen will automatically add a dev dependency with a * pinned version for each peer dependency. This will ensure that you build & * test your module against the lowest peer version required. * @default [] */ readonly peerDeps?: Array; /** * Options for pnpm. * @default - all default options */ readonly pnpmOptions?: javascript.PnpmOptions; /** * The version of PNPM to use if using PNPM as a package manager. * @default "10.33.0" */ readonly pnpmVersion?: string; /** * Steps to execute after build as part of the release workflow. * @default [] */ readonly postBuildSteps?: Array; /** * Bump versions from the default branch as pre-releases (e.g. "beta", "alpha", "pre"). * @default - normal semantic versions */ readonly prerelease?: string; /** * Setup prettier. * @default false */ readonly prettier?: boolean; /** * Prettier options. * @default - default options */ readonly prettierOptions?: javascript.PrettierOptions; /** * Make this a private package. * @default false */ readonly private?: boolean; /** * Generate a project tree file (`.projen/tree.json`) that shows all components and their relationships. Useful for understanding your project structure and debugging. * @default false */ readonly projectTree?: boolean; /** * The shell command to use in order to run the projen CLI. * Inserted verbatim into task steps, workflows and IDE configuration, and run * by each of their shells - locally, in CI and in dev containers. Keep it a * plain unquoted command, since shell syntax in it executes in all of them. * * Can be used to customize in special environments. * @default "npx projen" */ readonly projenCommand?: string; /** * Choose a method of providing GitHub API access for projen workflows. * @default - use a personal access token named PROJEN_GITHUB_TOKEN */ readonly projenCredentials?: github.GithubCredentials; /** * Indicates of "projen" should be installed as a devDependency. * @default - true if not a subproject */ readonly projenDevDependency?: boolean; /** * Generate (once) .projenrc.js (in JavaScript). Set to `false` in order to disable .projenrc.js generation. * @default - true if projenrcJson is false */ readonly projenrcJs?: boolean; /** * Generate (once) .projenrc.json (in JSON). Set to `false` in order to disable .projenrc.json generation. * @default false */ readonly projenrcJson?: boolean; /** * Options for .projenrc.json. * @default - default options */ readonly projenrcJsonOptions?: ProjenrcJsonOptions; /** * Options for .projenrc.js. * @default - default options */ readonly projenrcJsOptions?: javascript.ProjenrcOptions; /** * Use TypeScript for your projenrc file (`.projenrc.ts`). * @default false */ readonly projenrcTs?: boolean; /** * Options for .projenrc.ts. */ readonly projenrcTsOptions?: typescript.ProjenrcOptions; /** * Version of projen to install. * @default - Defaults to the latest version. */ readonly projenVersion?: string; /** * Instead of actually publishing to package managers, just print the publishing command. * @default false */ readonly publishDryRun?: boolean; /** * Define publishing tasks that can be executed manually as well as workflows. * Normally, publishing only happens within automated workflows. Enable this * in order to create a publishing task for each publishing activity. * @default false */ readonly publishTasks?: boolean; /** * Include a GitHub pull request template. * @default true */ readonly pullRequestTemplate?: boolean; /** * The contents of the pull request template. * @default - default content */ readonly pullRequestTemplateContents?: Array; /** * The README setup. * @default - { filename: 'README.md', contents: '# replace this' } */ readonly readme?: SampleReadmeProps; /** * Find commits that should be considered releasable Used to decide if a release is required. * @default ReleasableCommits.everyCommit() */ readonly releasableCommits?: ReleasableCommits; /** * Defines additional release branches. * A workflow will be created for each * release branch which will publish releases from commits in this branch. * Each release branch _must_ be assigned a major version number which is used * to enforce that versions published from that branch always use that major * version. If multiple branches are used, the `majorVersion` field must also * be provided for the default branch. * @default - no additional branches are used for release. you can use `addBranch()` to add additional branches. */ readonly releaseBranches?: Record; /** * The GitHub Actions environment used for the release. * This can be used to add an explicit approval step to the release * or limit who can initiate a release through environment protection rules. * * When multiple artifacts are released, the environment can be overwritten * on a per artifact basis. * @default - no environment used, unless set at the artifact level */ readonly releaseEnvironment?: string; /** * Create a github issue on every failed publishing task. * @default false */ readonly releaseFailureIssue?: boolean; /** * The label to apply to issues indicating publish failures. * Only applies if `releaseFailureIssue` is true. * @default "failed-release" */ readonly releaseFailureIssueLabel?: string; /** * Automatically add the given prefix to release tags. Useful if you are releasing on multiple branches with overlapping version numbers. * Note: this prefix is used to detect the latest tagged version * when bumping, so if you change this on a project with an existing version * history, you may need to manually tag your latest release * with the new prefix. * @default "v" */ readonly releaseTagPrefix?: string; /** * Automatically release to npm when new versions are introduced. * @default false */ readonly releaseToNpm?: boolean; /** * The release trigger to use. * @default - Continuous releases (`ReleaseTrigger.continuous()`) */ readonly releaseTrigger?: release.ReleaseTrigger; /** * Build environment variables for release workflows. * @default {} */ readonly releaseWorkflowEnv?: Record; /** * The name of the default release workflow. * @default "release" */ readonly releaseWorkflowName?: string; /** * A set of workflow steps to execute in order to setup the workflow container. */ readonly releaseWorkflowSetupSteps?: Array; /** * Use renovatebot to handle dependency upgrades. * @default false */ readonly renovatebot?: boolean; /** * Options for renovatebot. * @default - default options */ readonly renovatebotOptions?: RenovatebotOptions; /** * The repository is the location where the actual code for your package lives. * See https://classic.yarnpkg.com/en/docs/package-json/#toc-repository */ readonly repository?: string; /** * The TypeScript runner to use for executing TypeScript files. * This is a project-level setting that components (e.g. projenrc) will * use as their default runner. * @default TypeScriptRunner.tsNode() */ readonly runner?: typescript.TypeScriptRunner; /** * Generate one-time sample in `src/` and `test/` if there are no files there. * @default true */ readonly sampleCode?: boolean; /** * Options for privately hosted scoped packages. * @default - fetch all scoped packages from the public npm registry */ readonly scopedPackagesOptions?: Array; /** * Typescript sources directory. * @default "src" */ readonly srcdir?: string; /** * Package's Stability. */ readonly stability?: string; /** * Auto-close of stale issues and pull request. * See `staleOptions` for options. * @default false */ readonly stale?: boolean; /** * Auto-close stale issues and pull requests. * To disable set `stale` to `false`. * @default - see defaults in `StaleOptions` */ readonly staleOptions?: github.StaleOptions; /** * Jest tests directory. Tests files should be named `xxx.test.ts`. * If this directory is under `srcdir` (e.g. `src/test`, `src/__tests__`), * then tests are going to be compiled into `lib/` and executed as javascript. * If the test directory is outside of `src`, then we configure jest to * compile the code in-memory. * @default "test" */ readonly testdir?: string; /** * Custom TSConfig. * @default - default options */ readonly tsconfig?: javascript.TypescriptConfigOptions; /** * Custom tsconfig options for the development tsconfig.json file (used for testing). * @default - use the production tsconfig options */ readonly tsconfigDev?: javascript.TypescriptConfigOptions; /** * The name (and path) of the development tsconfig file. * By default this lives inside the test directory (e.g. `test/tsconfig.json`) * so that the TypeScript language service resolves it as the nearest config * for test files. * @default - "{testdir}/tsconfig.json" */ readonly tsconfigDevFile?: string; /** * Options for ts-jest. */ readonly tsJestOptions?: typescript.TsJestOptions; /** * Type-check the test suite as part of the `test` task. * Adds a `tsc --noEmit` step against the development tsconfig. * @default false */ readonly typecheckTests?: boolean; /** * TypeScript version to use. * NOTE: Typescript is not semantically versioned and should remain on the * same minor, so we recommend using a `~` dependency (e.g. `~1.2.3`). * @default "latest" */ readonly typescriptVersion?: string; /** * Custom configuration used when creating changelog with commit-and-tag-version package. * Given values either append to default configuration or overwrite values in it. * @default - standard configuration applicable for GitHub repositories */ readonly versionrcOptions?: Record; /** * Enable VSCode integration. * Enabled by default for root projects. Disabled for non-root projects. * @default true */ readonly vscode?: boolean; /** * Workflow steps to use in order to bootstrap this repo. * @default "yarn install --frozen-lockfile && yarn projen" */ readonly workflowBootstrapSteps?: Array; /** * Container image to use for GitHub workflows. * @default - default image */ readonly workflowContainerImage?: string; /** * The git identity to use in workflows. * @default - default GitHub Actions user */ readonly workflowGitIdentity?: github.GitIdentity; /** * The node version to use in GitHub workflows. * @default 'lts/*' */ readonly workflowNodeVersion?: string; /** * Enable Node.js package cache in GitHub workflows. * @default false */ readonly workflowPackageCache?: boolean; /** * Github Runner selection labels. * @default ["ubuntu-latest"] * @deprecated use `githubOptions.workflowRunsOn` on the project, or `runsOn` on `ReleaseOptions` */ readonly workflowRunsOn?: Array; /** * Github Runner Group selection options. * @deprecated use `githubOptions.workflowRunsOnGroup` on the project, or `runsOnGroup` on `ReleaseOptions` */ readonly workflowRunsOnGroup?: GroupRunnerOptions; /** * The workspace scope the package is located in. * @default "packages" */ readonly workspaceScope?: string; /** * Options for Yarn Berry. * @default - Yarn Berry v4 with all default options */ readonly yarnBerryOptions?: javascript.YarnBerryOptions; }