projen
Version:
CDK for software projects
208 lines (207 loc) • 6.64 kB
TypeScript
import type { IConstruct, IMixin } from "constructs";
import type { JsiiDotNetTarget, JsiiGoTarget, JsiiJavaTarget, JsiiPythonTarget } from "./jsii-project";
import type { Step } from "../github/workflows-model";
import type { TypescriptConfig } from "../javascript";
import type { NpmPublishOptions } from "../release";
import { TypeScriptProject } from "../typescript";
/**
* Level of tsconfig validation jsii should perform.
*/
export declare enum ValidateTsconfig {
/**
* Validates against a strict rule set designed for widespread support and backwards-compatibility.
*/
STRICT = "strict",
/**
* Enforces a tsconfig as if it were generated by jsii.
*/
GENERATED = "generated",
/**
* Only reject options known to be incompatible with jsii.
*/
MINIMAL = "minimal",
/**
* Disables all config validation. Use at your own risk.
*/
OFF = "off"
}
/**
* Options for `JsiiBuild`.
*/
export interface JsiiBuildOptions {
/**
* Publish to maven
* @default - no publishing
*/
readonly publishToMaven?: JsiiJavaTarget;
/**
* Publish to pypi
* @default - no publishing
*/
readonly publishToPypi?: JsiiPythonTarget;
/**
* Publish Go bindings to a git repository.
* @default - no publishing
*/
readonly publishToGo?: JsiiGoTarget;
/**
* Publish to NuGet
* @default - no publishing
*/
readonly publishToNuget?: JsiiDotNetTarget;
/**
* Automatically run API compatibility test against the latest version published to npm after compilation.
*
* - You can manually run compatibility tests using `yarn compat` if this feature is disabled.
* - You can ignore compatibility failures by adding lines to a ".compatignore" file.
*
* @default false
*/
readonly compat?: boolean;
/**
* Name of the ignore file for API compatibility tests.
*
* @default ".compatignore"
*/
readonly compatIgnore?: string;
/**
* Accepts a list of glob patterns. Files matching any of those patterns will be excluded from the TypeScript compiler input.
*
* By default, jsii will include all *.ts files (except .d.ts files) in the TypeScript compiler input.
* This can be problematic for example when the package's build or test procedure generates .ts files
* that cannot be compiled with jsii's compiler settings.
*/
readonly excludeTypescript?: string[];
/**
* File path for generated docs.
* @default "API.md"
*/
readonly docgenFilePath?: string;
/**
* Emit a compressed version of the assembly
* @default false
*/
readonly compressAssembly?: boolean;
/**
* Version of the jsii compiler to use.
*
* Set to "*" if you want to manually manage the version of jsii in your
* project by managing updates to `package.json` on your own.
*
* NOTE: The jsii compiler releases since 5.0.0 are not semantically versioned
* and should remain on the same minor, so we recommend using a `~` dependency
* (e.g. `~5.0.0`).
*
* @default "~5.9.0"
*/
readonly jsiiVersion?: string;
/**
* The stability of the package.
*
* @default "stable"
*/
readonly stability?: string;
/**
* Generate a MarkDown file describing the jsii API.
*
* @default true
*/
readonly docgen?: boolean;
/**
* Whether to publish to npm.
*
* @default true
*/
readonly releaseToNpm?: boolean;
/**
* Whether to use trusted publishing for npm.
*
* @default false
*/
readonly npmTrustedPublishing?: boolean;
/**
* Options for publishing npm package to AWS CodeArtifact.
*
* @default - undefined
*/
readonly codeArtifactOptions?: NpmPublishOptions["codeArtifactOptions"];
/**
* Relative path of the package within the repository.
*
* This is used in monorepo setups where the package is not at the root.
* Packaging steps will extract build artifacts into this subdirectory.
*
* @default "." - root of the repository
*/
readonly workspaceDirectory?: string;
/**
* The node version to use in packaging workflows.
*
* @default "lts/*"
*/
readonly workflowNodeVersion?: string;
/**
* Additional steps to run before packaging in workflows.
*
* @default []
*/
readonly workflowBootstrapSteps?: Array<Step>;
/**
* Level of tsconfig validation jsii should perform on the user-provided tsconfig.
*
* Only relevant when the project synthesizes its own tsconfig
* (i.e. `disableTsconfig` is not set on the TypeScriptProject).
*
* @see https://aws.github.io/jsii/user-guides/lib-author/configuration/#validatetsconfig
* @default ValidateTsconfig.STRICT
*/
readonly validateTsconfig?: ValidateTsconfig;
/**
* The TypescriptConfig that jsii compiles against.
*
* Provide a dedicated config (e.g. one named `tsconfig.jsii.json`) to keep
* jsii compilation separate from the project's editor-facing `tsconfig.json`.
* jsii requires a comment-free, strict-valid config, so `JsiiBuild` disables
* comments on whichever config it is given.
*
* @default - the project's tsconfig (i.e. `project.tsconfig`)
*/
readonly tsconfig?: TypescriptConfig;
}
/**
* A mixin that adds jsii compilation, multi-language packaging, and publishing
* capabilities to any TypeScript project.
*
* This implements the constructs `IMixin` interface and is applied using the
* `.with()` method on any construct.
*
* @example
* const project = new TypeScriptProject({ disableTsconfig: true, ... });
* project.with(new JsiiBuild({
* jsiiVersion: '~5.9.0',
* publishToMaven: { ... },
* }));
*/
export declare class JsiiBuild implements IMixin {
private readonly options;
private readonly extraJobOptions;
constructor(options?: JsiiBuildOptions, extraJobOptions?: Record<string, unknown>);
/**
* Returns true if the construct is a TypeScriptProject.
*/
supports(construct: IConstruct): construct is TypeScriptProject;
/**
* Applies jsii configuration to the target TypeScriptProject.
*/
applyTo(project: IConstruct): void;
/**
* Adds a target language to the release workflow.
*/
private addTargetToRelease;
/**
* Adds a target language to the build workflow.
*/
private addTargetToBuild;
private addPackagingTask;
private pacmakForLanguage;
}