UNPKG

projen

Version:

CDK for software projects

208 lines (207 loc) • 6.64 kB
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; }