Showing preview only (4,931K chars total). Download the full file or copy to clipboard to get everything.
Repository: eladb/projen
Branch: main
Commit: cddd4d13b563
Files: 407
Total size: 4.6 MB
Directory structure:
gitextract_rzfgxmkm/
├── .all-contributorsrc
├── .devcontainer.json
├── .eslintrc.json
├── .gitattributes
├── .github/
│ ├── pull_request_template.md
│ └── workflows/
│ ├── auto-approve.yml
│ ├── build.yml
│ ├── pull-request-lint.yml
│ ├── release.yml
│ └── upgrade-main.yml
├── .gitignore
├── .gitpod.yml
├── .markdownlint.json
├── .mergify.yml
├── .npmignore
├── .prettierignore
├── .prettierrc.json
├── .projen/
│ ├── deps.json
│ ├── files.json
│ └── tasks.json
├── .projenrc.js
├── .vscode/
│ └── launch.json
├── ARCHITECTURE.md
├── CODE_OF_CONDUCT.md
├── CONTRIBUTING.md
├── LICENSE
├── README.md
├── SECURITY.md
├── VISION.md
├── assets/
│ └── web/
│ └── react/
│ ├── index.html
│ ├── manifest.json
│ └── robots.txt
├── bin/
│ └── projen
├── docs/
│ ├── CNAME
│ ├── README.md
│ ├── api/
│ │ └── API.md
│ ├── awscdk-apps.md
│ ├── awscdk-construct.md
│ ├── awscdk.md
│ ├── build.md
│ ├── bundling.md
│ ├── cdk8s.md
│ ├── circleci.md
│ ├── components.md
│ ├── deps.md
│ ├── eject.md
│ ├── escape-hatches.md
│ ├── github.md
│ ├── gitlab.md
│ ├── java.md
│ ├── node.md
│ ├── programmatic-api.md
│ ├── publisher.md
│ ├── python.md
│ ├── releases.md
│ ├── subproject.md
│ ├── tasks.md
│ └── typescript.md
├── license-text/
│ ├── Apache-2.0.txt
│ ├── Artistic-1.0.txt
│ ├── Artistic-2.0.txt
│ ├── EUPL-1.2.txt
│ ├── GPL-2.0-or-later.txt
│ ├── GPL-3.0-WITH-GCC-exception-3.1.txt
│ ├── GPL-3.0-or-later.txt
│ ├── LGPL-2.1-or-later.txt
│ ├── LGPL-3.0-or-later.txt
│ ├── MIT-0.txt
│ ├── MIT.txt
│ ├── MPL-2.0.txt
│ ├── OFL-1.1.txt
│ ├── PHP-3.01.txt
│ ├── Ruby.txt
│ ├── Unlicense.txt
│ ├── WTFPL.txt
│ └── ZPL-2.1.txt
├── package.json
├── projen.bash
├── rfcs/
│ ├── github-project-settings.md
│ └── project-creation-prompt.md
├── scripts/
│ ├── python-compat.sh
│ └── readme-projects.js
├── src/
│ ├── _resolve.ts
│ ├── awscdk/
│ │ ├── auto-discover.ts
│ │ ├── awscdk-app-java.ts
│ │ ├── awscdk-app-py.ts
│ │ ├── awscdk-app-ts.ts
│ │ ├── awscdk-construct.ts
│ │ ├── awscdk-deps-java.ts
│ │ ├── awscdk-deps-js.ts
│ │ ├── awscdk-deps-py.ts
│ │ ├── awscdk-deps.ts
│ │ ├── awscdk-pytest-sample.ts
│ │ ├── cdk-config.ts
│ │ ├── cdk-tasks.ts
│ │ ├── index.ts
│ │ ├── integration-test.ts
│ │ ├── internal.ts
│ │ ├── lambda-extension.ts
│ │ └── lambda-function.ts
│ ├── build/
│ │ ├── build-workflow.ts
│ │ └── index.ts
│ ├── builtin-example.task.ts
│ ├── cdk/
│ │ ├── auto-discover-base.ts
│ │ ├── construct-lib.ts
│ │ ├── consts.ts
│ │ ├── index.ts
│ │ ├── integration-test-base.ts
│ │ ├── internal.ts
│ │ ├── jsii-docgen.ts
│ │ └── jsii-project.ts
│ ├── cdk8s/
│ │ ├── auto-discover.ts
│ │ ├── cdk8s-app-py.ts
│ │ ├── cdk8s-app-ts.ts
│ │ ├── cdk8s-construct.ts
│ │ ├── cdk8s-deps-js.ts
│ │ ├── cdk8s-deps-py.ts
│ │ ├── cdk8s-deps.ts
│ │ ├── index.ts
│ │ └── integration-test.ts
│ ├── cdktf/
│ │ ├── cdktf-construct.ts
│ │ └── index.ts
│ ├── circleci/
│ │ ├── circleci.ts
│ │ ├── constant.ts
│ │ ├── index.ts
│ │ └── model.ts
│ ├── cleanup.ts
│ ├── cli/
│ │ ├── cmds/
│ │ │ └── new.ts
│ │ ├── index.ts
│ │ ├── macros.ts
│ │ ├── synth.ts
│ │ ├── tasks.ts
│ │ └── util.ts
│ ├── clobber.ts
│ ├── common.ts
│ ├── component.ts
│ ├── dependencies.ts
│ ├── dev-env.ts
│ ├── docker-compose.ts
│ ├── file.ts
│ ├── gitattributes.ts
│ ├── github/
│ │ ├── auto-approve.ts
│ │ ├── auto-merge.ts
│ │ ├── constants.ts
│ │ ├── dependabot.ts
│ │ ├── github-credentials.ts
│ │ ├── github-project.ts
│ │ ├── github.ts
│ │ ├── index.ts
│ │ ├── mergify.ts
│ │ ├── pr-template.ts
│ │ ├── pull-request-lint.ts
│ │ ├── stale-util.ts
│ │ ├── stale.ts
│ │ ├── task-workflow.ts
│ │ ├── util.ts
│ │ ├── workflow-actions.ts
│ │ ├── workflows-model.ts
│ │ └── workflows.ts
│ ├── gitlab/
│ │ ├── configuration-model.ts
│ │ ├── configuration.ts
│ │ ├── gitlab-configuration.ts
│ │ ├── index.ts
│ │ └── nested-configuration.ts
│ ├── gitpod.ts
│ ├── ignore-file.ts
│ ├── index.ts
│ ├── ini.ts
│ ├── inventory.ts
│ ├── java/
│ │ ├── index.ts
│ │ ├── java-project.ts
│ │ ├── junit.ts
│ │ ├── maven-compile.ts
│ │ ├── maven-packaging.ts
│ │ ├── maven-sample.ts
│ │ ├── pom.ts
│ │ └── projenrc.ts
│ ├── javascript/
│ │ ├── bundler.ts
│ │ ├── eslint.ts
│ │ ├── index.ts
│ │ ├── jest.ts
│ │ ├── node-package.ts
│ │ ├── node-project.ts
│ │ ├── npm-config.ts
│ │ ├── prettier.ts
│ │ ├── projenrc.ts
│ │ ├── render-options.ts
│ │ ├── typescript-config.ts
│ │ ├── upgrade-dependencies.ts
│ │ └── util.ts
│ ├── json-patch.ts
│ ├── json.ts
│ ├── license.ts
│ ├── logger.ts
│ ├── logging.ts
│ ├── makefile.ts
│ ├── object-file.ts
│ ├── option-hints.ts
│ ├── project-build.ts
│ ├── project.ts
│ ├── projects.ts
│ ├── projenrc-json.ts
│ ├── python/
│ │ ├── index.ts
│ │ ├── pip.ts
│ │ ├── poetry.ts
│ │ ├── projenrc.ts
│ │ ├── pytest-sample.ts
│ │ ├── pytest.ts
│ │ ├── python-deps.ts
│ │ ├── python-env.ts
│ │ ├── python-packaging.ts
│ │ ├── python-project.ts
│ │ ├── python-sample.ts
│ │ ├── requirements-file.ts
│ │ ├── setuppy.ts
│ │ ├── setuptools.ts
│ │ └── venv.ts
│ ├── readme.ts
│ ├── release/
│ │ ├── bump-version.task.ts
│ │ ├── bump-version.ts
│ │ ├── index.ts
│ │ ├── publisher.ts
│ │ ├── release-trigger.ts
│ │ ├── release.ts
│ │ ├── reset-version.task.ts
│ │ ├── tag-version.task.ts
│ │ ├── tag-version.ts
│ │ ├── update-changelog.task.ts
│ │ └── update-changelog.ts
│ ├── renovatebot.ts
│ ├── run-projenrc-json.task.ts
│ ├── sample-file.ts
│ ├── semver.ts
│ ├── smithy/
│ │ └── smithy-build.ts
│ ├── source-code.ts
│ ├── task-model.ts
│ ├── task-runtime.ts
│ ├── task.ts
│ ├── tasks.ts
│ ├── testing.ts
│ ├── textfile.ts
│ ├── toml.ts
│ ├── typescript/
│ │ ├── index.ts
│ │ ├── projenrc.ts
│ │ ├── typescript-typedoc.ts
│ │ └── typescript.ts
│ ├── util/
│ │ ├── semver.ts
│ │ └── synth.ts
│ ├── util.ts
│ ├── version.ts
│ ├── vscode/
│ │ ├── devcontainer.ts
│ │ ├── extensions.ts
│ │ ├── index.ts
│ │ ├── launch-config.ts
│ │ ├── settings.ts
│ │ └── vscode.ts
│ ├── web/
│ │ ├── index.ts
│ │ ├── next.ts
│ │ ├── postcss.ts
│ │ ├── react.ts
│ │ └── tailwind.ts
│ ├── xmlfile.ts
│ └── yaml.ts
├── test/
│ ├── __snapshots__/
│ │ ├── cleanup.test.ts.snap
│ │ ├── cli.test.ts.snap
│ │ ├── deps.test.ts.snap
│ │ ├── integ.test.ts.snap
│ │ ├── inventory.test.ts.snap
│ │ ├── license.test.ts.snap
│ │ ├── new.test.ts.snap
│ │ ├── project.test.ts.snap
│ │ ├── projects.test.ts.snap
│ │ └── xml.test.ts.snap
│ ├── awscdk/
│ │ ├── __snapshots__/
│ │ │ ├── integration-test.test.ts.snap
│ │ │ ├── java-app.test.ts.snap
│ │ │ ├── lambda-extension.test.ts.snap
│ │ │ ├── lambda-function.test.ts.snap
│ │ │ └── python-app.test.ts.snap
│ │ ├── awscdk-app.test.ts
│ │ ├── awscdk-construct.test.ts
│ │ ├── cdk-config.test.ts
│ │ ├── integration-test.test.ts
│ │ ├── java-app.test.ts
│ │ ├── lambda-extension.test.ts
│ │ ├── lambda-function.test.ts
│ │ └── python-app.test.ts
│ ├── cdk/
│ │ ├── __snapshots__/
│ │ │ └── jsii.test.ts.snap
│ │ ├── auto-discover-base.test.ts
│ │ ├── jsii.test.ts
│ │ └── testtree/
│ │ └── abc.myext.ts
│ ├── cdk8s/
│ │ ├── __snapshots__/
│ │ │ └── integration-test.test.ts.snap
│ │ ├── cdk8s-app-project-py.test.ts
│ │ ├── cdk8s-app-project-ts.test.ts
│ │ ├── cdk8s-construct.test.ts
│ │ └── integration-test.test.ts
│ ├── cdktf/
│ │ └── cdktf-construct.test.ts
│ ├── cirlceci/
│ │ ├── __snapshots__/
│ │ │ └── circleci.test.ts.snap
│ │ └── circleci.test.ts
│ ├── cleanup.test.ts
│ ├── cli.test.ts
│ ├── deps.test.ts
│ ├── docker-compose.test.ts
│ ├── github/
│ │ ├── __snapshots__/
│ │ │ ├── auto-approve.test.ts.snap
│ │ │ ├── dependabot.test.ts.snap
│ │ │ ├── github-workflow.test.ts.snap
│ │ │ ├── mergify.test.ts.snap
│ │ │ ├── pull-request-lint.test.ts.snap
│ │ │ ├── stale.test.ts.snap
│ │ │ ├── task-workflow.test.ts.snap
│ │ │ └── workflows.test.ts.snap
│ │ ├── auto-approve.test.ts
│ │ ├── dependabot.test.ts
│ │ ├── github-workflow.test.ts
│ │ ├── mergify.test.ts
│ │ ├── pull-request-lint.test.ts
│ │ ├── stale.test.ts
│ │ ├── task-workflow.test.ts
│ │ └── workflows.test.ts
│ ├── gitlab/
│ │ ├── __snapshots__/
│ │ │ └── configuration.test.ts.snap
│ │ ├── configuration.test.ts
│ │ └── gitlab-configuration.test.ts
│ ├── ignore-file.test.ts
│ ├── ini.test.ts
│ ├── integ.test.ts
│ ├── integration/
│ │ ├── cdk-watchful.projenrc.js
│ │ ├── cdk8s/
│ │ │ ├── cdk8s-cli.projenrc.js
│ │ │ ├── cdk8s.common.js
│ │ │ └── cdk8s.projenrc.js
│ │ └── pnpm.projenrc.js
│ ├── inventory/
│ │ ├── gzip_compression/
│ │ │ └── .jsii
│ │ └── no_compression/
│ │ └── .jsii
│ ├── inventory.test.ts
│ ├── java/
│ │ ├── __snapshots__/
│ │ │ ├── java-project.test.ts.snap
│ │ │ ├── pom.test.ts.snap
│ │ │ └── projenrc.test.ts.snap
│ │ ├── java-project.test.ts
│ │ ├── pom.test.ts
│ │ └── projenrc.test.ts
│ ├── javascript/
│ │ ├── __snapshots__/
│ │ │ ├── eslint.test.ts.snap
│ │ │ ├── node-package.test.ts.snap
│ │ │ ├── node-project.test.ts.snap
│ │ │ ├── npm-config.test.ts.snap
│ │ │ ├── prettier.test.ts.snap
│ │ │ └── upgrade-dependencies.test.ts.snap
│ │ ├── bundler.test.ts
│ │ ├── eslint.test.ts
│ │ ├── jest.test.ts
│ │ ├── node-package.test.ts
│ │ ├── node-project.test.ts
│ │ ├── npm-config.test.ts
│ │ ├── prettier.test.ts
│ │ └── upgrade-dependencies.test.ts
│ ├── json/
│ │ ├── __snapshots__/
│ │ │ └── projenrc.test.ts.snap
│ │ └── projenrc.test.ts
│ ├── json.test.ts
│ ├── license.test.ts
│ ├── makefile.test.ts
│ ├── new.test.ts
│ ├── object-file.test.ts
│ ├── pr-template.test.ts
│ ├── project.test.ts
│ ├── projects.test.ts
│ ├── python/
│ │ ├── __snapshots__/
│ │ │ ├── poetry.test.ts.snap
│ │ │ ├── projenrc.test.ts.snap
│ │ │ └── python-project.test.ts.snap
│ │ ├── poetry.test.ts
│ │ ├── projenrc.test.ts
│ │ ├── python-project.test.ts
│ │ └── setuptools.test.ts
│ ├── readme.test.ts
│ ├── release/
│ │ ├── __snapshots__/
│ │ │ └── release.test.ts.snap
│ │ ├── bump.test.ts
│ │ ├── release-trigger.test.ts
│ │ ├── release.test.ts
│ │ ├── tag.test.ts
│ │ └── update-changelog.test.ts
│ ├── resolve.test.ts
│ ├── sample-file.test.ts
│ ├── smithy/
│ │ └── smithy-build.test.ts
│ ├── source-code.test.ts
│ ├── subproject.test.ts
│ ├── tasks/
│ │ ├── __snapshots__/
│ │ │ └── tasks.test.ts.snap
│ │ ├── runtime.test.ts
│ │ └── tasks.test.ts
│ ├── textfile.test.ts
│ ├── toml.test.ts
│ ├── typescript/
│ │ ├── __snapshots__/
│ │ │ └── typescript.test.ts.snap
│ │ └── typescript.test.ts
│ ├── util.test.ts
│ ├── util.ts
│ ├── vscode/
│ │ ├── __snapshots__/
│ │ │ └── dev-env.test.ts.snap
│ │ ├── dev-env.test.ts
│ │ ├── extensions.test.ts
│ │ ├── settings.test.ts
│ │ └── vscode-launch-config.test.ts
│ ├── web/
│ │ ├── __snapshots__/
│ │ │ ├── nextjs-project.test.ts.snap
│ │ │ ├── nextjs-ts-project.test.ts.snap
│ │ │ ├── react-project.test.ts.snap
│ │ │ └── react-ts-project.test.ts.snap
│ │ ├── nextjs-project.test.ts
│ │ ├── nextjs-ts-project.test.ts
│ │ ├── react-project.test.ts
│ │ └── react-ts-project.test.ts
│ ├── xml.test.ts
│ └── yaml.test.ts
├── tsconfig.dev.json
└── version.json
================================================
FILE CONTENTS
================================================
================================================
FILE: .all-contributorsrc
================================================
{
"projectName": "projen",
"projectOwner": "projen",
"repoType": "github",
"repoHost": "https://github.com",
"files": [
"README.md"
],
"imageSize": 100,
"commit": false,
"commitConvention": "angular",
"contributors": [
{
"login": "eladb",
"name": "Elad Ben-Israel",
"avatar_url": "https://avatars3.githubusercontent.com/u/598796?v=4",
"profile": "http://eladb.github.com/",
"contributions": [
"code"
]
},
{
"login": "Chriscbr",
"name": "Christopher Rybicki",
"avatar_url": "https://avatars2.githubusercontent.com/u/5008987?v=4",
"profile": "https://rybicki.io/",
"contributions": [
"code"
]
},
{
"login": "pgollucci",
"name": "Philip M. Gollucci",
"avatar_url": "https://avatars0.githubusercontent.com/u/34295?v=4",
"profile": "http://p6m7g8.github.io/",
"contributions": [
"code"
]
},
{
"login": "hoegertn",
"name": "Thorsten Hoeger",
"avatar_url": "https://avatars2.githubusercontent.com/u/1287829?v=4",
"profile": "https://github.com/hoegertn",
"contributions": [
"code"
]
},
{
"login": "kcwinner",
"name": "Kenneth Winner",
"avatar_url": "https://avatars3.githubusercontent.com/u/2728868?v=4",
"profile": "https://github.com/kcwinner",
"contributions": [
"code"
]
},
{
"login": "JordanSinko",
"name": "Jordan Sinko",
"avatar_url": "https://avatars2.githubusercontent.com/u/10212966?v=4",
"profile": "https://github.com/JordanSinko",
"contributions": [
"code"
]
},
{
"login": "misterjoshua",
"name": "Josh Kellendonk",
"avatar_url": "https://avatars2.githubusercontent.com/u/644092?v=4",
"profile": "https://github.com/misterjoshua",
"contributions": [
"code"
]
},
{
"login": "andrestone",
"name": "andrestone",
"avatar_url": "https://avatars1.githubusercontent.com/u/7958086?v=4",
"profile": "https://github.com/andrestone",
"contributions": [
"code"
]
},
{
"login": "skyrpex",
"name": "Cristian Pallarés",
"avatar_url": "https://avatars3.githubusercontent.com/u/1077520?v=4",
"profile": "https://pallares.io/",
"contributions": [
"code"
]
},
{
"login": "jogold",
"name": "Jonathan Goldwasser",
"avatar_url": "https://avatars2.githubusercontent.com/u/12623249?v=4",
"profile": "https://github.com/jogold",
"contributions": [
"code"
]
},
{
"login": "mbonig",
"name": "Matthew Bonig",
"avatar_url": "https://avatars2.githubusercontent.com/u/1559437?v=4",
"profile": "http://www.matthewbonig.com/",
"contributions": [
"code"
]
},
{
"login": "pahud",
"name": "Pahud Hsieh",
"avatar_url": "https://avatars3.githubusercontent.com/u/278432?v=4",
"profile": "https://github.com/pahud",
"contributions": [
"code"
]
},
{
"login": "adamelmore",
"name": "Adam Elmore",
"avatar_url": "https://avatars2.githubusercontent.com/u/2363879?v=4",
"profile": "https://github.com/adamelmore",
"contributions": [
"code"
]
},
{
"login": "abelmokadem",
"name": "Ash",
"avatar_url": "https://avatars0.githubusercontent.com/u/9717944?v=4",
"profile": "https://github.com/abelmokadem",
"contributions": [
"code"
]
},
{
"login": "jmourelos",
"name": "Jacob",
"avatar_url": "https://avatars3.githubusercontent.com/u/3878434?v=4",
"profile": "https://github.com/jmourelos",
"contributions": [
"code"
]
},
{
"login": "bigkraig",
"name": "Kraig Amador",
"avatar_url": "https://avatars1.githubusercontent.com/u/508403?v=4",
"profile": "https://github.com/bigkraig",
"contributions": [
"code"
]
},
{
"login": "mmuller88",
"name": "Martin Muller",
"avatar_url": "https://avatars0.githubusercontent.com/u/18393842?v=4",
"profile": "https://github.com/mmuller88",
"contributions": [
"code"
]
},
{
"login": "tlakomy",
"name": "Tomasz Łakomy",
"avatar_url": "https://avatars2.githubusercontent.com/u/16646517?v=4",
"profile": "https://tlakomy.com/",
"contributions": [
"code"
]
},
{
"login": "john-tipper",
"name": "john-tipper",
"avatar_url": "https://avatars2.githubusercontent.com/u/9730398?v=4",
"profile": "https://github.com/john-tipper",
"contributions": [
"code"
]
},
{
"login": "henrysachs",
"name": "Henry Sachs",
"avatar_url": "https://avatars0.githubusercontent.com/u/17173951?v=4",
"profile": "https://github.com/henrysachs",
"contributions": [
"code"
]
},
{
"login": "eganjs",
"name": "Joseph Egan",
"avatar_url": "https://avatars3.githubusercontent.com/u/6639482?v=4",
"profile": "https://github.com/eganjs",
"contributions": [
"code"
]
},
{
"login": "skorfmann",
"name": "Sebastian Korfmann",
"avatar_url": "https://avatars1.githubusercontent.com/u/136789?v=4",
"profile": "https://skorfmann.com/",
"contributions": [
"code"
]
},
{
"login": "bartcallant",
"name": "Bart Callant",
"avatar_url": "https://avatars1.githubusercontent.com/u/5915843?v=4",
"profile": "http://www.callant.net/",
"contributions": [
"code"
]
},
{
"login": "campionfellin",
"name": "Campion Fellin",
"avatar_url": "https://avatars3.githubusercontent.com/u/11984923?v=4",
"profile": "https://github.com/campionfellin",
"contributions": [
"code"
]
},
{
"login": "gradybarrett",
"name": "Grady Barrett",
"avatar_url": "https://avatars1.githubusercontent.com/u/1140074?v=4",
"profile": "https://github.com/gradybarrett",
"contributions": [
"code"
]
},
{
"login": "HassanMahmud",
"name": "Hassan Mahmud",
"avatar_url": "https://avatars3.githubusercontent.com/u/58504381?v=4",
"profile": "https://github.com/HassanMahmud",
"contributions": [
"code"
]
},
{
"login": "hass123uk",
"name": "Hassan Mahmud",
"avatar_url": "https://avatars1.githubusercontent.com/u/7426703?v=4",
"profile": "https://dk.linkedin.com/in/hassanmahmud93",
"contributions": [
"code"
]
},
{
"login": "jakepearson",
"name": "Jake Pearson",
"avatar_url": "https://avatars3.githubusercontent.com/u/325306?v=4",
"profile": "http://joapy.com/",
"contributions": [
"code"
]
},
{
"login": "JeremyJonas",
"name": "Jeremy Jonas",
"avatar_url": "https://avatars1.githubusercontent.com/u/464119?v=4",
"profile": "https://github.com/JeremyJonas",
"contributions": [
"code"
]
},
{
"login": "martzcodes",
"name": "Matt Martz",
"avatar_url": "https://avatars1.githubusercontent.com/u/978362?v=4",
"profile": "https://dev.to/martzcodes",
"contributions": [
"code"
]
},
{
"login": "fongie",
"name": "Max Körlinge",
"avatar_url": "https://avatars1.githubusercontent.com/u/19932622?v=4",
"profile": "https://github.com/fongie",
"contributions": [
"code"
]
},
{
"login": "guan840912",
"name": "Neil Kuan",
"avatar_url": "https://avatars2.githubusercontent.com/u/46012524?v=4",
"profile": "https://blog.neilkuan.dev/",
"contributions": [
"code"
]
},
{
"login": "RafalWilinski",
"name": "Rafal Wilinski",
"avatar_url": "https://avatars3.githubusercontent.com/u/3391616?v=4",
"profile": "https://dynobase.dev/",
"contributions": [
"code"
]
},
{
"login": "RomainMuller",
"name": "Romain Marcadier",
"avatar_url": "https://avatars2.githubusercontent.com/u/411689?v=4",
"profile": "https://keybase.io/romainmuller",
"contributions": [
"code"
]
},
{
"login": "thomasklinger1234",
"name": "Thomas Klinger",
"avatar_url": "https://avatars1.githubusercontent.com/u/39558817?v=4",
"profile": "https://github.com/thomasklinger1234",
"contributions": [
"code"
]
},
{
"login": "gwriss",
"name": "Tobias",
"avatar_url": "https://avatars2.githubusercontent.com/u/1842089?v=4",
"profile": "https://github.com/gwriss",
"contributions": [
"code"
]
},
{
"login": "flyingImer",
"name": "flyingImer",
"avatar_url": "https://avatars0.githubusercontent.com/u/1973868?v=4",
"profile": "https://github.com/flyingImer",
"contributions": [
"code"
]
},
{
"login": "Hunter-Thompson",
"name": " Aatman ",
"avatar_url": "https://avatars.githubusercontent.com/u/20844961?v=4",
"profile": "https://github.com/Hunter-Thompson",
"contributions": [
"code"
]
},
{
"login": "mmcculloh-dms",
"name": "Mark McCulloh",
"avatar_url": "https://avatars.githubusercontent.com/u/68597641?v=4",
"profile": "https://github.com/mmcculloh-dms",
"contributions": [
"code"
]
},
{
"login": "aisamu",
"name": "Samuel Tschiedel",
"avatar_url": "https://avatars.githubusercontent.com/u/431708?v=4",
"profile": "https://github.com/aisamu",
"contributions": [
"code"
]
},
{
"login": "iliapolo",
"name": "Eli Polonsky",
"avatar_url": "https://avatars.githubusercontent.com/u/1428812?v=4",
"profile": "https://github.com/iliapolo",
"contributions": [
"code"
]
},
{
"login": "Miradorn",
"name": "Alexander Steppke",
"avatar_url": "https://avatars.githubusercontent.com/u/1308885?v=4",
"profile": "https://unsubstantiated.blog/",
"contributions": [
"code"
]
},
{
"login": "kanatti",
"name": "Balagopal Kanattil",
"avatar_url": "https://avatars.githubusercontent.com/u/8623654?v=4",
"profile": "https://github.com/kanatti",
"contributions": [
"code"
]
},
{
"login": "bracki",
"name": "Jan Brauer",
"avatar_url": "https://avatars.githubusercontent.com/u/49786?v=4",
"profile": "http://twitter.com/bracki",
"contributions": [
"code"
]
},
{
"login": "polothy",
"name": "Mark Nielsen",
"avatar_url": "https://avatars.githubusercontent.com/u/634657?v=4",
"profile": "https://polothy.github.io/",
"contributions": [
"code"
]
},
{
"login": "MrArnoldPalmer",
"name": "Mitchell Valine",
"avatar_url": "https://avatars.githubusercontent.com/u/7221111?v=4",
"profile": "https://github.com/MrArnoldPalmer",
"contributions": [
"code"
]
},
{
"login": "neilkuan",
"name": "Neil Kuan",
"avatar_url": "https://avatars.githubusercontent.com/u/46012524?v=4",
"profile": "https://blog.neilkuan.net/",
"contributions": [
"code"
]
},
{
"login": "pgarbe",
"name": "Philipp Garbe",
"avatar_url": "https://avatars.githubusercontent.com/u/721899?v=4",
"profile": "https://garbe.io/",
"contributions": [
"code"
]
},
{
"login": "smacintyre",
"name": "Shawn MacIntyre",
"avatar_url": "https://avatars.githubusercontent.com/u/361689?v=4",
"profile": "https://selfstructured.com/",
"contributions": [
"code"
]
},
{
"login": "tobias-bardino",
"name": "Tobias",
"avatar_url": "https://avatars.githubusercontent.com/u/1842089?v=4",
"profile": "https://github.com/tobias-bardino",
"contributions": [
"code"
]
},
{
"login": "yglcode",
"name": "Yigong Liu",
"avatar_url": "https://avatars.githubusercontent.com/u/11893614?v=4",
"profile": "https://github.com/yglcode",
"contributions": [
"code"
]
},
{
"login": "eduardomourar",
"name": "Eduardo Rodrigues",
"avatar_url": "https://avatars.githubusercontent.com/u/16357187?v=4",
"profile": "https://github.com/eduardomourar",
"contributions": [
"code"
]
},
{
"login": "hassanazharkhan",
"name": "Hassan Azhar",
"avatar_url": "https://avatars.githubusercontent.com/u/57677979?v=4",
"profile": "https://github.com/hassanazharkhan",
"contributions": [
"code"
]
},
{
"login": "jumic",
"name": "Julian Michel",
"avatar_url": "https://avatars.githubusercontent.com/u/15660169?v=4",
"profile": "https://www.linkedin.com/in/julian-michel-812a223a/",
"contributions": [
"code"
]
},
{
"login": "lmarsden",
"name": "lmarsden",
"avatar_url": "https://avatars.githubusercontent.com/u/51232932?v=4",
"profile": "https://github.com/lmarsden",
"contributions": [
"code"
]
},
{
"login": "adrianmace",
"name": "Adrian Mace",
"avatar_url": "https://avatars.githubusercontent.com/u/5071859?v=4",
"profile": "https://github.com/adrianmace",
"contributions": [
"code"
]
},
{
"login": "mKeRix",
"name": "Heiko Rothe",
"avatar_url": "https://avatars.githubusercontent.com/u/770596?v=4",
"profile": "https://github.com/mKeRix",
"contributions": [
"code"
]
},
{
"login": "hyandell",
"name": "Henri Yandell",
"avatar_url": "https://avatars.githubusercontent.com/u/477715?v=4",
"profile": "https://github.com/hyandell",
"contributions": [
"code"
]
},
{
"login": "mwg-rea",
"name": "Matthew Gamble",
"avatar_url": "https://avatars.githubusercontent.com/u/82480228?v=4",
"profile": "https://github.com/mwg-rea",
"contributions": [
"code"
]
},
{
"login": "willdady",
"name": "Will Dady",
"avatar_url": "https://avatars.githubusercontent.com/u/204259?v=4",
"profile": "https://willdady.com/",
"contributions": [
"code"
]
},
{
"login": "msessa",
"name": "Matteo Sessa",
"avatar_url": "https://avatars.githubusercontent.com/u/1912143?v=4",
"profile": "https://github.com/msessa",
"contributions": [
"code"
]
},
{
"login": "Hi-Fi",
"name": "Juho Saarinen",
"avatar_url": "https://avatars.githubusercontent.com/u/1499780?v=4",
"profile": "https://github.com/Hi-Fi",
"contributions": [
"code"
]
},
{
"login": "njlynch",
"name": "Nick Lynch",
"avatar_url": "https://avatars.githubusercontent.com/u/1376292?v=4",
"profile": "https://github.com/njlynch",
"contributions": [
"code"
]
},
{
"login": "dkaksl",
"name": "Amani Kilumanga",
"avatar_url": "https://avatars.githubusercontent.com/u/8690282?v=4",
"profile": "https://amani.kilumanga.com/",
"contributions": [
"code"
]
},
{
"login": "gherlein",
"name": "Greg Herlein",
"avatar_url": "https://avatars.githubusercontent.com/u/173428?v=4",
"profile": "http://blog.herlein.com/",
"contributions": [
"code"
]
},
{
"login": "kaizen3031593",
"name": "Kaizen Conroy",
"avatar_url": "https://avatars.githubusercontent.com/u/36202692?v=4",
"profile": "https://github.com/kaizen3031593",
"contributions": [
"code"
]
},
{
"login": "saudkhanzada",
"name": "Saud Khanzada",
"avatar_url": "https://avatars.githubusercontent.com/u/30137907?v=4",
"profile": "https://github.com/saudkhanzada",
"contributions": [
"code"
]
}
],
"contributorsPerLine": 7
}
================================================
FILE: .devcontainer.json
================================================
{
"postCreateCommand": "( npx projen devenv:setup )",
"//": "~~ Generated by projen. To modify, edit .projenrc.js and run \"npx projen\"."
}
================================================
FILE: .eslintrc.json
================================================
{
"env": {
"jest": true,
"node": true
},
"root": true,
"plugins": [
"@typescript-eslint",
"import",
"prettier"
],
"parser": "@typescript-eslint/parser",
"parserOptions": {
"ecmaVersion": 2018,
"sourceType": "module",
"project": "./tsconfig.dev.json"
},
"extends": [
"plugin:import/typescript",
"prettier",
"plugin:prettier/recommended"
],
"settings": {
"import/parsers": {
"@typescript-eslint/parser": [
".ts",
".tsx"
]
},
"import/resolver": {
"node": {},
"typescript": {
"project": "./tsconfig.dev.json",
"alwaysTryTypes": true
}
}
},
"ignorePatterns": [
"*.js",
"!.projenrc.js",
"*.d.ts",
"node_modules/",
"*.generated.ts",
"coverage"
],
"rules": {
"prettier/prettier": [
"error"
],
"@typescript-eslint/no-require-imports": [
"error"
],
"import/no-extraneous-dependencies": [
"error",
{
"devDependencies": [
"**/test/**",
"**/build-tools/**"
],
"optionalDependencies": false,
"peerDependencies": true
}
],
"import/no-unresolved": [
"error"
],
"import/order": [
"warn",
{
"groups": [
"builtin",
"external"
],
"alphabetize": {
"order": "asc",
"caseInsensitive": true
}
}
],
"no-duplicate-imports": [
"error"
],
"no-shadow": [
"off"
],
"@typescript-eslint/no-shadow": [
"error"
],
"key-spacing": [
"error"
],
"no-multiple-empty-lines": [
"error"
],
"@typescript-eslint/no-floating-promises": [
"error"
],
"no-return-await": [
"off"
],
"@typescript-eslint/return-await": [
"error"
],
"no-trailing-spaces": [
"error"
],
"dot-notation": [
"error"
],
"no-bitwise": [
"error"
],
"@typescript-eslint/member-ordering": [
"error",
{
"default": [
"public-static-field",
"public-static-method",
"protected-static-field",
"protected-static-method",
"private-static-field",
"private-static-method",
"field",
"constructor",
"method"
]
}
]
},
"overrides": [
{
"files": [
".projenrc.js"
],
"rules": {
"@typescript-eslint/no-require-imports": "off",
"import/no-extraneous-dependencies": "off"
}
}
]
}
================================================
FILE: .gitattributes
================================================
# ~~ Generated by projen. To modify, edit .projenrc.js and run "npx projen".
*.snap linguist-generated
/.devcontainer.json linguist-generated
/.eslintrc.json linguist-generated
/.gitattributes linguist-generated
/.github/pull_request_template.md linguist-generated
/.github/workflows/auto-approve.yml linguist-generated
/.github/workflows/build.yml linguist-generated
/.github/workflows/pull-request-lint.yml linguist-generated
/.github/workflows/release.yml linguist-generated
/.github/workflows/upgrade-main.yml linguist-generated
/.gitignore linguist-generated
/.gitpod.yml linguist-generated
/.markdownlint.json linguist-generated
/.mergify.yml linguist-generated
/.npmignore linguist-generated
/.prettierignore linguist-generated
/.prettierrc.json linguist-generated
/.projen/** linguist-generated
/.projen/deps.json linguist-generated
/.projen/files.json linguist-generated
/.projen/tasks.json linguist-generated
/.vscode/launch.json linguist-generated
/docs/api/API.md linguist-generated
/LICENSE linguist-generated
/package.json linguist-generated
/projen.bash linguist-generated
/tsconfig.dev.json linguist-generated
/yarn.lock linguist-generated
================================================
FILE: .github/pull_request_template.md
================================================
---
By submitting this pull request, I confirm that my contribution is made under the terms of the Apache 2.0 license.
================================================
FILE: .github/workflows/auto-approve.yml
================================================
# ~~ Generated by projen. To modify, edit .projenrc.js and run "npx projen".
name: auto-approve
on:
pull_request_target:
types:
- labeled
- opened
- synchronize
- reopened
- ready_for_review
jobs:
approve:
runs-on: ubuntu-latest
permissions:
pull-requests: write
if: contains(github.event.pull_request.labels.*.name, 'auto-approve') && (github.event.pull_request.user.login == 'cdklabs-automation')
steps:
- uses: hmarr/auto-approve-action@v2.2.1
with:
github-token: ${{ secrets.GITHUB_TOKEN }}
================================================
FILE: .github/workflows/build.yml
================================================
# ~~ Generated by projen. To modify, edit .projenrc.js and run "npx projen".
name: build
on:
pull_request: {}
workflow_dispatch: {}
jobs:
build:
runs-on: ubuntu-latest
permissions:
contents: write
outputs:
self_mutation_happened: ${{ steps.self_mutation.outputs.self_mutation_happened }}
env:
CI: "true"
steps:
- name: Checkout
uses: actions/checkout@v3
with:
ref: ${{ github.event.pull_request.head.ref }}
repository: ${{ github.event.pull_request.head.repo.full_name }}
- name: Setup Node.js
uses: actions/setup-node@v3
with:
node-version: 14.17.0
- name: Install dependencies
run: yarn install --check-files
- name: build
run: /bin/bash ./projen.bash build
- name: Upload coverage to Codecov
uses: codecov/codecov-action@v1
with:
directory: coverage
- id: self_mutation
name: Find mutations
run: |-
git add .
git diff --staged --patch --exit-code > .repo.patch || echo "::set-output name=self_mutation_happened::true"
- if: steps.self_mutation.outputs.self_mutation_happened
name: Upload patch
uses: actions/upload-artifact@v2
with:
name: .repo.patch
path: .repo.patch
- name: Fail build on mutation
if: steps.self_mutation.outputs.self_mutation_happened
run: |-
echo "::error::Files were changed during build (see build log). If this was triggered from a fork, you will need to update your branch."
cat .repo.patch
exit 1
- name: Upload artifact
uses: actions/upload-artifact@v2.1.1
with:
name: build-artifact
path: dist
self-mutation:
needs: build
runs-on: ubuntu-latest
permissions:
contents: write
if: always() && needs.build.outputs.self_mutation_happened && !(github.event.pull_request.head.repo.full_name != github.repository)
steps:
- name: Checkout
uses: actions/checkout@v3
with:
token: ${{ secrets.PROJEN_GITHUB_TOKEN }}
ref: ${{ github.event.pull_request.head.ref }}
repository: ${{ github.event.pull_request.head.repo.full_name }}
- name: Download patch
uses: actions/download-artifact@v3
with:
name: .repo.patch
path: ${{ runner.temp }}
- name: Apply patch
run: '[ -s ${{ runner.temp }}/.repo.patch ] && git apply ${{ runner.temp }}/.repo.patch || echo "Empty patch. Skipping."'
- name: Set git identity
run: |-
git config user.name "github-actions"
git config user.email "github-actions@github.com"
- name: Push changes
run: |2-
git add .
git commit -s -m "chore: self mutation"
git push origin HEAD:${{ github.event.pull_request.head.ref }}
package-js:
needs: build
runs-on: ubuntu-latest
permissions: {}
if: "! needs.build.outputs.self_mutation_happened"
steps:
- uses: actions/setup-node@v3
with:
node-version: 14.17.0
- name: Download build artifacts
uses: actions/download-artifact@v3
with:
name: build-artifact
path: dist
- name: Prepare Repository
run: mv dist .repo
- name: Install Dependencies
run: cd .repo && yarn install --check-files --frozen-lockfile
- name: Create js artifact
run: cd .repo && npx projen package:js
- name: Collect js Artifact
run: mv .repo/dist dist
package-java:
needs: build
runs-on: ubuntu-latest
permissions: {}
if: "! needs.build.outputs.self_mutation_happened"
steps:
- uses: actions/setup-java@v3
with:
distribution: temurin
java-version: 11.x
- uses: actions/setup-node@v3
with:
node-version: 14.17.0
- name: Download build artifacts
uses: actions/download-artifact@v3
with:
name: build-artifact
path: dist
- name: Prepare Repository
run: mv dist .repo
- name: Install Dependencies
run: cd .repo && yarn install --check-files --frozen-lockfile
- name: Create java artifact
run: cd .repo && npx projen package:java
- name: Collect java Artifact
run: mv .repo/dist dist
package-python:
needs: build
runs-on: ubuntu-latest
permissions: {}
if: "! needs.build.outputs.self_mutation_happened"
steps:
- uses: actions/setup-node@v3
with:
node-version: 14.17.0
- uses: actions/setup-python@v3
with:
python-version: 3.x
- name: Download build artifacts
uses: actions/download-artifact@v3
with:
name: build-artifact
path: dist
- name: Prepare Repository
run: mv dist .repo
- name: Install Dependencies
run: cd .repo && yarn install --check-files --frozen-lockfile
- name: Create python artifact
run: cd .repo && npx projen package:python
- name: Collect python Artifact
run: mv .repo/dist dist
package-go:
needs: build
runs-on: ubuntu-latest
permissions: {}
if: "! needs.build.outputs.self_mutation_happened"
steps:
- uses: actions/setup-node@v3
with:
node-version: 14.17.0
- uses: actions/setup-go@v3
with:
go-version: ^1.16.0
- name: Download build artifacts
uses: actions/download-artifact@v3
with:
name: build-artifact
path: dist
- name: Prepare Repository
run: mv dist .repo
- name: Install Dependencies
run: cd .repo && yarn install --check-files --frozen-lockfile
- name: Create go artifact
run: cd .repo && npx projen package:go
- name: Collect go Artifact
run: mv .repo/dist dist
post-build-integ:
needs: build
runs-on: ubuntu-latest
permissions:
contents: read
if: "! needs.build.outputs.self_mutation_happened"
steps:
- uses: actions/setup-python@v3
with:
python-version: 3.x
- uses: actions/setup-go@v3
with:
go-version: 1.16.x
- name: Download build artifacts
uses: actions/download-artifact@v3
with:
name: build-artifact
path: dist
- name: Checkout
uses: actions/checkout@v3
with:
ref: ${{ github.event.pull_request.head.ref }}
repository: ${{ github.event.pull_request.head.repo.full_name }}
- name: Install dependencies
run: yarn install --check-files --frozen-lockfile
- run: /bin/bash ./projen.bash integ
================================================
FILE: .github/workflows/pull-request-lint.yml
================================================
# ~~ Generated by projen. To modify, edit .projenrc.js and run "npx projen".
name: pull-request-lint
on:
pull_request_target:
types:
- labeled
- opened
- synchronize
- reopened
- ready_for_review
- edited
jobs:
validate:
name: Validate PR title
runs-on: ubuntu-latest
permissions:
pull-requests: write
steps:
- uses: amannn/action-semantic-pull-request@v4.5.0
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
with:
types: |-
feat
fix
chore
requireScope: false
================================================
FILE: .github/workflows/release.yml
================================================
# ~~ Generated by projen. To modify, edit .projenrc.js and run "npx projen".
name: release
on:
push:
branches:
- main
workflow_dispatch: {}
jobs:
release:
runs-on: ubuntu-latest
permissions:
contents: write
outputs:
latest_commit: ${{ steps.git_remote.outputs.latest_commit }}
env:
CI: "true"
steps:
- name: Checkout
uses: actions/checkout@v3
with:
fetch-depth: 0
- name: Set git identity
run: |-
git config user.name "github-actions"
git config user.email "github-actions@github.com"
- name: Setup Node.js
uses: actions/setup-node@v3
with:
node-version: 14.17.0
- name: Install dependencies
run: yarn install --check-files --frozen-lockfile
- name: release
run: /bin/bash ./projen.bash release
- name: Upload coverage to Codecov
uses: codecov/codecov-action@v1
with:
directory: coverage
- name: Check for new commits
id: git_remote
run: echo ::set-output name=latest_commit::"$(git ls-remote origin -h ${{ github.ref }} | cut -f1)"
- name: Upload artifact
if: ${{ steps.git_remote.outputs.latest_commit == github.sha }}
uses: actions/upload-artifact@v2.1.1
with:
name: build-artifact
path: dist
release_github:
name: Publish to GitHub Releases
needs: release
runs-on: ubuntu-latest
permissions:
contents: write
issues: write
if: needs.release.outputs.latest_commit == github.sha
steps:
- uses: actions/setup-node@v3
with:
node-version: 14.17.0
- name: Download build artifacts
uses: actions/download-artifact@v3
with:
name: build-artifact
path: dist
- name: Prepare Repository
run: mv dist .repo
- name: Collect GitHub Metadata
run: mv .repo/dist dist
- name: Release
run: errout=$(mktemp); gh release create $(cat dist/releasetag.txt) -R $GITHUB_REPOSITORY -F dist/changelog.md -t $(cat dist/releasetag.txt) --target $GITHUB_REF 2> $errout && true; exitcode=$?; if [ $exitcode -ne 0 ] && ! grep -q "Release.tag_name already exists" $errout; then cat $errout; exit $exitcode; fi
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
GITHUB_REPOSITORY: ${{ github.repository }}
GITHUB_REF: ${{ github.ref }}
- name: Extract Version
if: ${{ failure() }}
id: extract-version
run: echo "::set-output name=VERSION::$(cat dist/version.txt)"
- name: Create Issue
if: ${{ failure() }}
uses: imjohnbo/issue-bot@v3
with:
labels: failed-release
title: Publishing v${{ steps.extract-version.outputs.VERSION }} to GitHub Releases failed
body: See https://github.com/${{ github.repository }}/actions/runs/${{ github.run_id }}
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
release_npm:
name: Publish to npm
needs: release
runs-on: ubuntu-latest
permissions:
contents: read
issues: write
if: needs.release.outputs.latest_commit == github.sha
steps:
- uses: actions/setup-node@v3
with:
node-version: 14.17.0
- name: Download build artifacts
uses: actions/download-artifact@v3
with:
name: build-artifact
path: dist
- name: Prepare Repository
run: mv dist .repo
- name: Install Dependencies
run: cd .repo && yarn install --check-files --frozen-lockfile
- name: Create js artifact
run: cd .repo && npx projen package:js
- name: Collect js Artifact
run: mv .repo/dist dist
- name: Release
run: npx -p publib@latest publib-npm
env:
NPM_DIST_TAG: latest
NPM_REGISTRY: registry.npmjs.org
NPM_TOKEN: ${{ secrets.NPM_TOKEN }}
- name: Extract Version
if: ${{ failure() }}
id: extract-version
run: echo "::set-output name=VERSION::$(cat dist/version.txt)"
- name: Create Issue
if: ${{ failure() }}
uses: imjohnbo/issue-bot@v3
with:
labels: failed-release
title: Publishing v${{ steps.extract-version.outputs.VERSION }} to npm failed
body: See https://github.com/${{ github.repository }}/actions/runs/${{ github.run_id }}
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
release_maven:
name: Publish to Maven Central
needs: release
runs-on: ubuntu-latest
permissions:
contents: read
issues: write
if: needs.release.outputs.latest_commit == github.sha
steps:
- uses: actions/setup-java@v3
with:
distribution: temurin
java-version: 11.x
- uses: actions/setup-node@v3
with:
node-version: 14.17.0
- name: Download build artifacts
uses: actions/download-artifact@v3
with:
name: build-artifact
path: dist
- name: Prepare Repository
run: mv dist .repo
- name: Install Dependencies
run: cd .repo && yarn install --check-files --frozen-lockfile
- name: Create java artifact
run: cd .repo && npx projen package:java
- name: Collect java Artifact
run: mv .repo/dist dist
- name: Release
run: npx -p publib@latest publib-maven
env:
MAVEN_ENDPOINT: https://s01.oss.sonatype.org
MAVEN_GPG_PRIVATE_KEY: ${{ secrets.MAVEN_GPG_PRIVATE_KEY }}
MAVEN_GPG_PRIVATE_KEY_PASSPHRASE: ${{ secrets.MAVEN_GPG_PRIVATE_KEY_PASSPHRASE }}
MAVEN_PASSWORD: ${{ secrets.MAVEN_PASSWORD }}
MAVEN_USERNAME: ${{ secrets.MAVEN_USERNAME }}
MAVEN_STAGING_PROFILE_ID: ${{ secrets.MAVEN_STAGING_PROFILE_ID }}
- name: Extract Version
if: ${{ failure() }}
id: extract-version
run: echo "::set-output name=VERSION::$(cat dist/version.txt)"
- name: Create Issue
if: ${{ failure() }}
uses: imjohnbo/issue-bot@v3
with:
labels: failed-release
title: Publishing v${{ steps.extract-version.outputs.VERSION }} to Maven Central failed
body: See https://github.com/${{ github.repository }}/actions/runs/${{ github.run_id }}
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
release_pypi:
name: Publish to PyPI
needs: release
runs-on: ubuntu-latest
permissions:
contents: read
issues: write
if: needs.release.outputs.latest_commit == github.sha
steps:
- uses: actions/setup-node@v3
with:
node-version: 14.17.0
- uses: actions/setup-python@v3
with:
python-version: 3.x
- name: Download build artifacts
uses: actions/download-artifact@v3
with:
name: build-artifact
path: dist
- name: Prepare Repository
run: mv dist .repo
- name: Install Dependencies
run: cd .repo && yarn install --check-files --frozen-lockfile
- name: Create python artifact
run: cd .repo && npx projen package:python
- name: Collect python Artifact
run: mv .repo/dist dist
- name: Release
run: npx -p publib@latest publib-pypi
env:
TWINE_USERNAME: ${{ secrets.TWINE_USERNAME }}
TWINE_PASSWORD: ${{ secrets.TWINE_PASSWORD }}
- name: Extract Version
if: ${{ failure() }}
id: extract-version
run: echo "::set-output name=VERSION::$(cat dist/version.txt)"
- name: Create Issue
if: ${{ failure() }}
uses: imjohnbo/issue-bot@v3
with:
labels: failed-release
title: Publishing v${{ steps.extract-version.outputs.VERSION }} to PyPI failed
body: See https://github.com/${{ github.repository }}/actions/runs/${{ github.run_id }}
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
release_golang:
name: Publish to GitHub Go Module Repository
needs: release
runs-on: ubuntu-latest
permissions:
contents: read
issues: write
if: needs.release.outputs.latest_commit == github.sha
steps:
- uses: actions/setup-node@v3
with:
node-version: 14.17.0
- uses: actions/setup-go@v3
with:
go-version: ^1.16.0
- name: Download build artifacts
uses: actions/download-artifact@v3
with:
name: build-artifact
path: dist
- name: Prepare Repository
run: mv dist .repo
- name: Install Dependencies
run: cd .repo && yarn install --check-files --frozen-lockfile
- name: Create go artifact
run: cd .repo && npx projen package:go
- name: Collect go Artifact
run: mv .repo/dist dist
- name: Release
run: npx -p publib@latest publib-golang
env:
GIT_USER_NAME: github-actions
GIT_USER_EMAIL: github-actions@github.com
GITHUB_TOKEN: ${{ secrets.GO_GITHUB_TOKEN }}
- name: Extract Version
if: ${{ failure() }}
id: extract-version
run: echo "::set-output name=VERSION::$(cat dist/version.txt)"
- name: Create Issue
if: ${{ failure() }}
uses: imjohnbo/issue-bot@v3
with:
labels: failed-release
title: Publishing v${{ steps.extract-version.outputs.VERSION }} to GitHub Go Module Repository failed
body: See https://github.com/${{ github.repository }}/actions/runs/${{ github.run_id }}
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
================================================
FILE: .github/workflows/upgrade-main.yml
================================================
# ~~ Generated by projen. To modify, edit .projenrc.js and run "npx projen".
name: upgrade-main
on:
workflow_dispatch: {}
schedule:
- cron: 0 0 * * *
jobs:
upgrade:
name: Upgrade
runs-on: ubuntu-latest
permissions:
contents: read
outputs:
patch_created: ${{ steps.create_patch.outputs.patch_created }}
steps:
- name: Checkout
uses: actions/checkout@v3
with:
ref: main
- name: Setup Node.js
uses: actions/setup-node@v3
with:
node-version: 14.17.0
- name: Install dependencies
run: yarn install --check-files --frozen-lockfile
- name: Upgrade dependencies
run: /bin/bash ./projen.bash upgrade
- id: create_patch
name: Find mutations
run: |-
git add .
git diff --staged --patch --exit-code > .repo.patch || echo "::set-output name=patch_created::true"
- if: steps.create_patch.outputs.patch_created
name: Upload patch
uses: actions/upload-artifact@v2
with:
name: .repo.patch
path: .repo.patch
pr:
name: Create Pull Request
needs: upgrade
runs-on: ubuntu-latest
permissions:
contents: write
pull-requests: write
if: ${{ needs.upgrade.outputs.patch_created }}
steps:
- name: Checkout
uses: actions/checkout@v3
with:
token: ${{ secrets.PROJEN_GITHUB_TOKEN }}
ref: main
- name: Download patch
uses: actions/download-artifact@v3
with:
name: .repo.patch
path: ${{ runner.temp }}
- name: Apply patch
run: '[ -s ${{ runner.temp }}/.repo.patch ] && git apply ${{ runner.temp }}/.repo.patch || echo "Empty patch. Skipping."'
- name: Set git identity
run: |-
git config user.name "github-actions"
git config user.email "github-actions@github.com"
- name: Create Pull Request
id: create-pr
uses: peter-evans/create-pull-request@v3
with:
token: ${{ secrets.PROJEN_GITHUB_TOKEN }}
commit-message: |-
chore(deps): upgrade dependencies
Upgrades project dependencies. See details in [workflow run].
[Workflow Run]: https://github.com/${{ github.repository }}/actions/runs/${{ github.run_id }}
------
*Automatically created by projen via the "upgrade-main" workflow*
branch: github-actions/upgrade-main
title: "chore(deps): upgrade dependencies"
labels: auto-approve
body: |-
Upgrades project dependencies. See details in [workflow run].
[Workflow Run]: https://github.com/${{ github.repository }}/actions/runs/${{ github.run_id }}
------
*Automatically created by projen via the "upgrade-main" workflow*
author: github-actions <github-actions@github.com>
committer: github-actions <github-actions@github.com>
signoff: true
================================================
FILE: .gitignore
================================================
# ~~ Generated by projen. To modify, edit .projenrc.js and run "npx projen".
!/.gitattributes
!/.projen/tasks.json
!/.projen/deps.json
!/.projen/files.json
!/.github/workflows/pull-request-lint.yml
!/.gitpod.yml
!/.devcontainer.json
!/.github/workflows/auto-approve.yml
!/package.json
!/LICENSE
!/.npmignore
logs
*.log
npm-debug.log*
yarn-debug.log*
yarn-error.log*
lerna-debug.log*
report.[0-9]*.[0-9]*.[0-9]*.[0-9]*.json
pids
*.pid
*.seed
*.pid.lock
lib-cov
coverage
*.lcov
.nyc_output
build/Release
node_modules/
jspm_packages/
*.tsbuildinfo
.eslintcache
*.tgz
.yarn-integrity
.cache
!/.projenrc.js
/test-reports/
junit.xml
/coverage/
!/.github/workflows/build.yml
/dist/changelog.md
/dist/version.txt
!/.github/workflows/release.yml
!/.mergify.yml
!/.github/workflows/upgrade-main.yml
!/.github/pull_request_template.md
!/.prettierignore
!/.prettierrc.json
!/test/
!/tsconfig.dev.json
!/src/
/lib
/dist/
!/.eslintrc.json
.jsii
tsconfig.json
!/docs/api/API.md
!/projen.bash
!templates/**
/.idea
!test/inventory/**
!/.markdownlint.json
!/.vscode/launch.json
================================================
FILE: .gitpod.yml
================================================
# ~~ Generated by projen. To modify, edit .projenrc.js and run "npx projen".
tasks:
- name: Setup
command: npx projen build
init: yarn install
prebuild: bash ./projen.bash
================================================
FILE: .markdownlint.json
================================================
{
"default": true,
"commands-show-output": false,
"line-length": {
"line_length": 200
},
"//": "~~ Generated by projen. To modify, edit .projenrc.js and run \"npx projen\"."
}
================================================
FILE: .mergify.yml
================================================
# ~~ Generated by projen. To modify, edit .projenrc.js and run "npx projen".
queue_rules:
- name: default
conditions:
- "#approved-reviews-by>=1"
- -label~=(do-not-merge)
- status-success=build
- status-success=package-js
- status-success=package-java
- status-success=package-python
- status-success=package-go
- status-success=post-build-integ
pull_request_rules:
- name: Automatic merge on approval and successful build
actions:
delete_head_branch: {}
queue:
method: squash
name: default
commit_message_template: |-
{{ title }} (#{{ number }})
{{ body }}
conditions:
- "#approved-reviews-by>=1"
- -label~=(do-not-merge)
- status-success=build
- status-success=package-js
- status-success=package-java
- status-success=package-python
- status-success=package-go
- status-success=post-build-integ
- name: Label core contributions
actions:
label:
add:
- contribution/core
conditions:
- author~=^(eladb|Chriscbr)$
- label!=contribution/core
================================================
FILE: .npmignore
================================================
# ~~ Generated by projen. To modify, edit .projenrc.js and run "npx projen".
/.projen/
/test-reports/
junit.xml
/coverage/
/dist/changelog.md
/dist/version.txt
/.mergify.yml
/test/
/tsconfig.dev.json
/src/
!/lib/
!/lib/**/*.js
!/lib/**/*.d.ts
dist
/tsconfig.json
/.github/
/.vscode/
/.idea/
/.projenrc.js
tsconfig.tsbuildinfo
/.eslintrc.json
!.jsii
/projen.bash
/.markdownlint.json
/.devcontainer.json
/.all-contributorsrc
/scripts/
/ARCHITECTURE.md
/CODE_OF_CONDUCT.md
/CONTRIBUTING.md
/VISION.md
/SECURITY.md
/.gitattributes
/.gitpod.yml
================================================
FILE: .prettierignore
================================================
# ~~ Generated by projen. To modify, edit .projenrc.js and run "npx projen".
================================================
FILE: .prettierrc.json
================================================
{
"overrides": []
}
================================================
FILE: .projen/deps.json
================================================
{
"dependencies": [
{
"name": "@types/conventional-changelog-config-spec",
"type": "build"
},
{
"name": "@types/fs-extra",
"version": "^8",
"type": "build"
},
{
"name": "@types/glob",
"type": "build"
},
{
"name": "@types/ini",
"type": "build"
},
{
"name": "@types/jest",
"version": "^27",
"type": "build"
},
{
"name": "@types/node",
"version": "^14",
"type": "build"
},
{
"name": "@types/semver",
"type": "build"
},
{
"name": "@types/yargs",
"type": "build"
},
{
"name": "@typescript-eslint/eslint-plugin",
"version": "^5",
"type": "build"
},
{
"name": "@typescript-eslint/parser",
"version": "^5",
"type": "build"
},
{
"name": "all-contributors-cli",
"type": "build"
},
{
"name": "esbuild",
"type": "build"
},
{
"name": "eslint-config-prettier",
"type": "build"
},
{
"name": "eslint-import-resolver-node",
"type": "build"
},
{
"name": "eslint-import-resolver-typescript",
"type": "build"
},
{
"name": "eslint-plugin-import",
"type": "build"
},
{
"name": "eslint-plugin-prettier",
"type": "build"
},
{
"name": "eslint",
"version": "^8",
"type": "build"
},
{
"name": "jest-junit",
"version": "^13",
"type": "build"
},
{
"name": "jest",
"version": "^27",
"type": "build"
},
{
"name": "jsii",
"type": "build"
},
{
"name": "jsii-diff",
"type": "build"
},
{
"name": "jsii-docgen",
"type": "build"
},
{
"name": "jsii-pacmak",
"type": "build"
},
{
"name": "json-schema",
"type": "build"
},
{
"name": "json5",
"type": "build"
},
{
"name": "markmac",
"type": "build"
},
{
"name": "npm-check-updates",
"version": "^15",
"type": "build"
},
{
"name": "prettier",
"type": "build"
},
{
"name": "standard-version",
"version": "^9",
"type": "build"
},
{
"name": "ts-jest",
"version": "^27",
"type": "build"
},
{
"name": "typescript",
"type": "build"
},
{
"name": "@iarna/toml",
"type": "bundled"
},
{
"name": "case",
"type": "bundled"
},
{
"name": "chalk",
"type": "bundled"
},
{
"name": "conventional-changelog-config-spec",
"type": "bundled"
},
{
"name": "fast-json-patch",
"type": "bundled"
},
{
"name": "fs-extra",
"type": "bundled"
},
{
"name": "glob",
"version": "^7",
"type": "bundled"
},
{
"name": "ini",
"type": "bundled"
},
{
"name": "semver",
"type": "bundled"
},
{
"name": "shx",
"type": "bundled"
},
{
"name": "xmlbuilder2",
"type": "bundled"
},
{
"name": "yaml",
"version": "2.0.0",
"type": "bundled"
},
{
"name": "yargs",
"type": "bundled"
},
{
"name": "zlib",
"type": "bundled"
}
],
"//": "~~ Generated by projen. To modify, edit .projenrc.js and run \"npx projen\"."
}
================================================
FILE: .projen/files.json
================================================
{
"files": [
".devcontainer.json",
".eslintrc.json",
".gitattributes",
".github/pull_request_template.md",
".github/workflows/auto-approve.yml",
".github/workflows/build.yml",
".github/workflows/pull-request-lint.yml",
".github/workflows/release.yml",
".github/workflows/upgrade-main.yml",
".gitignore",
".gitpod.yml",
".markdownlint.json",
".mergify.yml",
".prettierignore",
".prettierrc.json",
".projen/deps.json",
".projen/files.json",
".projen/tasks.json",
".vscode/launch.json",
"LICENSE",
"projen.bash",
"tsconfig.dev.json"
],
"//": "~~ Generated by projen. To modify, edit .projenrc.js and run \"npx projen\"."
}
================================================
FILE: .projen/tasks.json
================================================
{
"tasks": {
"build": {
"name": "build",
"description": "Full release build",
"steps": [
{
"spawn": "default"
},
{
"spawn": "pre-compile"
},
{
"spawn": "compile"
},
{
"spawn": "post-compile"
},
{
"spawn": "test"
},
{
"spawn": "package"
}
]
},
"bump": {
"name": "bump",
"description": "Bumps version based on latest git tag and generates a changelog entry",
"env": {
"OUTFILE": "package.json",
"CHANGELOG": "dist/changelog.md",
"BUMPFILE": "dist/version.txt",
"RELEASETAG": "dist/releasetag.txt",
"RELEASE_TAG_PREFIX": ""
},
"steps": [
{
"builtin": "release/bump-version"
}
],
"condition": "! git log --oneline -1 | grep -q \"chore(release):\""
},
"bundle:task-runner": {
"name": "bundle:task-runner",
"description": "Bundle the run-task script needed for \"projen eject\"",
"steps": [
{
"exec": "esbuild src/task-runtime.ts --outfile=lib/run-task.js --bundle --platform=node --external:\"*/package.json\""
},
{
"exec": "echo \"#!/usr/bin/env node\" | cat - lib/run-task.js | tee lib/run-task.js > /dev/null",
"name": "Insert Node shebang to beginning of the file"
},
{
"exec": "echo \"const runtime = new TaskRuntime(\\\".\\\");\nruntime.runTask(process.argv[2]);\" >> lib/run-task.js",
"name": "Add driver code to end of the file"
}
]
},
"clobber": {
"name": "clobber",
"description": "hard resets to HEAD of origin and cleans the local repo",
"env": {
"BRANCH": "$(git branch --show-current)"
},
"steps": [
{
"exec": "git checkout -b scratch",
"name": "save current HEAD in \"scratch\" branch"
},
{
"exec": "git checkout $BRANCH"
},
{
"exec": "git fetch origin",
"name": "fetch latest changes from origin"
},
{
"exec": "git reset --hard origin/$BRANCH",
"name": "hard reset to origin commit"
},
{
"exec": "git clean -fdx",
"name": "clean all untracked files"
},
{
"say": "ready to rock! (unpushed commits are under the \"scratch\" branch)"
}
],
"condition": "git diff --exit-code > /dev/null"
},
"compat": {
"name": "compat",
"description": "Perform API compatibility check against latest version",
"steps": [
{
"exec": "jsii-diff npm:$(node -p \"require('./package.json').name\") -k --ignore-file .compatignore || (echo \"\nUNEXPECTED BREAKING CHANGES: add keys such as 'removed:constructs.Node.of' to .compatignore to skip.\n\" && exit 1)"
}
]
},
"compile": {
"name": "compile",
"description": "Only compile",
"steps": [
{
"exec": "jsii --silence-warnings=reserved-word"
}
]
},
"contributors:update": {
"name": "contributors:update",
"steps": [
{
"exec": "all-contributors check | grep \"Missing contributors\" -A 1 | tail -n1 | sed -e \"s/,//g\" | xargs -n1 | grep -v \"[bot]\" | xargs -n1 -I{} all-contributors add {} code"
}
]
},
"default": {
"name": "default",
"description": "Synthesize project files",
"steps": [
{
"exec": "node .projenrc.js"
}
]
},
"devenv:setup": {
"name": "devenv:setup",
"steps": [
{
"exec": "yarn install"
},
{
"spawn": "build"
}
]
},
"docgen": {
"name": "docgen",
"description": "Generate API.md from .jsii manifest",
"steps": [
{
"exec": "jsii-docgen -o docs/api/API.md"
}
]
},
"eject": {
"name": "eject",
"description": "Remove projen from the project",
"env": {
"PROJEN_EJECTING": "true"
},
"steps": [
{
"spawn": "default"
}
]
},
"eslint": {
"name": "eslint",
"description": "Runs eslint against the codebase",
"steps": [
{
"exec": "eslint --ext .ts,.tsx --fix --no-error-on-unmatched-pattern src test build-tools .projenrc.js"
}
]
},
"integ": {
"name": "integ",
"description": "Run integration tests",
"steps": [
{
"spawn": "compile"
},
{
"spawn": "package:python"
},
{
"spawn": "integ:python-compat"
}
]
},
"integ:python-compat": {
"name": "integ:python-compat",
"description": "Checks that projen's submodule structure does not cause import failures for python. Expects python to be installed and projen to be fully built.",
"steps": [
{
"exec": "scripts/python-compat.sh"
}
]
},
"package": {
"name": "package",
"description": "Creates the distribution package",
"steps": [
{
"exec": "if [ ! -z ${CI} ]; then rsync -a . .repo --exclude .git --exclude node_modules && rm -rf dist && mv .repo dist; else /bin/bash ./projen.bash package-all; fi"
}
]
},
"package-all": {
"name": "package-all",
"description": "Packages artifacts for all target languages",
"steps": [
{
"spawn": "package:js"
},
{
"spawn": "package:java"
},
{
"spawn": "package:python"
},
{
"spawn": "package:go"
}
]
},
"package:go": {
"name": "package:go",
"description": "Create go language bindings",
"steps": [
{
"exec": "jsii-pacmak -v --target go"
}
]
},
"package:java": {
"name": "package:java",
"description": "Create java language bindings",
"steps": [
{
"exec": "jsii-pacmak -v --target java"
}
]
},
"package:js": {
"name": "package:js",
"description": "Create js language bindings",
"steps": [
{
"exec": "jsii-pacmak -v --target js"
}
]
},
"package:python": {
"name": "package:python",
"description": "Create python language bindings",
"steps": [
{
"exec": "jsii-pacmak -v --target python"
}
]
},
"post-compile": {
"name": "post-compile",
"description": "Runs after successful compilation",
"steps": [
{
"spawn": "docgen"
},
{
"spawn": "readme-macros"
},
{
"spawn": "bundle:task-runner"
},
{
"spawn": "default"
}
]
},
"post-upgrade": {
"name": "post-upgrade",
"description": "Runs after upgrading dependencies"
},
"pre-compile": {
"name": "pre-compile",
"description": "Prepare the project for compilation"
},
"readme-macros": {
"name": "readme-macros",
"steps": [
{
"exec": "mv README.md README.md.bak"
},
{
"exec": "cat README.md.bak | markmac > README.md"
},
{
"exec": "rm README.md.bak"
}
]
},
"release": {
"name": "release",
"description": "Prepare a release from \"main\" branch",
"env": {
"RELEASE": "true"
},
"steps": [
{
"exec": "rm -fr dist"
},
{
"spawn": "bump"
},
{
"spawn": "build"
},
{
"spawn": "unbump"
},
{
"exec": "git diff --ignore-space-at-eol --exit-code"
}
]
},
"test": {
"name": "test",
"description": "Run tests",
"steps": [
{
"exec": "jest --passWithNoTests --all --updateSnapshot --coverageProvider=v8"
},
{
"spawn": "eslint"
}
]
},
"test:update": {
"name": "test:update",
"description": "Update jest snapshots",
"steps": [
{
"exec": "jest --updateSnapshot"
}
]
},
"test:watch": {
"name": "test:watch",
"description": "Run jest in watch mode",
"steps": [
{
"exec": "jest --watch"
}
]
},
"unbump": {
"name": "unbump",
"description": "Restores version to 0.0.0",
"env": {
"OUTFILE": "package.json",
"CHANGELOG": "dist/changelog.md",
"BUMPFILE": "dist/version.txt",
"RELEASETAG": "dist/releasetag.txt",
"RELEASE_TAG_PREFIX": ""
},
"steps": [
{
"builtin": "release/reset-version"
}
]
},
"upgrade": {
"name": "upgrade",
"description": "upgrade dependencies",
"env": {
"CI": "0"
},
"steps": [
{
"exec": "yarn upgrade npm-check-updates"
},
{
"exec": "npm-check-updates --dep dev --upgrade --target=minor --reject='yaml,markmac'"
},
{
"exec": "npm-check-updates --dep optional --upgrade --target=minor --reject='yaml,markmac'"
},
{
"exec": "npm-check-updates --dep peer --upgrade --target=minor --reject='yaml,markmac'"
},
{
"exec": "npm-check-updates --dep prod --upgrade --target=minor --reject='yaml,markmac'"
},
{
"exec": "npm-check-updates --dep bundle --upgrade --target=minor --reject='yaml,markmac'"
},
{
"exec": "yarn install --check-files"
},
{
"exec": "yarn upgrade @types/conventional-changelog-config-spec @types/fs-extra @types/glob @types/ini @types/jest @types/node @types/semver @types/yargs @typescript-eslint/eslint-plugin @typescript-eslint/parser all-contributors-cli esbuild eslint-config-prettier eslint-import-resolver-node eslint-import-resolver-typescript eslint-plugin-import eslint-plugin-prettier eslint jest-junit jest jsii jsii-diff jsii-docgen jsii-pacmak json-schema json5 npm-check-updates prettier standard-version ts-jest typescript @iarna/toml case chalk conventional-changelog-config-spec fast-json-patch fs-extra glob ini semver shx xmlbuilder2 yaml yargs zlib"
},
{
"exec": "/bin/bash ./projen.bash"
},
{
"spawn": "post-upgrade"
}
]
},
"watch": {
"name": "watch",
"description": "Watch & compile in the background",
"steps": [
{
"exec": "jsii -w --silence-warnings=reserved-word"
}
]
}
},
"env": {
"PATH": "$(npx -c \"node -e \\\"console.log(process.env.PATH)\\\"\")"
},
"//": "~~ Generated by projen. To modify, edit .projenrc.js and run \"npx projen\"."
}
================================================
FILE: .projenrc.js
================================================
const { cdk, JsonFile, TextFile } = require("./lib");
const { PROJEN_MARKER } = require("./lib/common");
const project = new cdk.JsiiProject({
name: "projen",
description: "CDK for software projects",
repository: "https://github.com/projen/projen.git",
authorName: "Amazon Web Services",
authorUrl: "https://aws.amazon.com",
authorOrganization: true,
stability: "experimental",
keywords: [
"scaffolding",
"cicd",
"project",
"management",
"generator",
"cdk",
],
pullRequestTemplateContents: [
"---",
"By submitting this pull request, I confirm that my contribution is made under the terms of the Apache 2.0 license.",
],
bundledDeps: [
"conventional-changelog-config-spec",
"yaml@2.0.0",
"fs-extra",
"yargs",
"case",
"glob@^7",
"semver",
"chalk",
"@iarna/toml",
"xmlbuilder2",
"ini",
"shx",
"fast-json-patch",
"zlib",
],
devDeps: [
"@types/conventional-changelog-config-spec",
"@types/fs-extra@^8",
"@types/yargs",
"@types/glob",
"@types/semver",
"@types/ini",
"markmac",
"esbuild",
"all-contributors-cli",
"json5",
],
depsUpgradeOptions: {
// markmac depends on projen, we are excluding it here to avoid a circular update loop
exclude: ["markmac"],
},
projenDevDependency: false, // because I am projen
releaseToNpm: true,
minNodeVersion: "14.0.0",
workflowNodeVersion: "14.17.0", // required by @typescript-eslint/eslint-plugin@5.19.0
codeCov: true,
prettier: true,
defaultReleaseBranch: "main",
gitpod: true,
devContainer: true,
// since this is projen, we need to always compile before we run
projenCommand: "/bin/bash ./projen.bash",
// cli tests need projen to be compiled
compileBeforeTest: true,
jestOptions: {
// makes it very hard to iterate with jest --watch
coverageText: false,
jestConfig: {
// By default jest will try to use all CPU cores on the running machine.
// But some of our integration tests spawn child processes - so by
// creating one jest worker per test, some of the child processes will get
// starved of CPU time and sometimes hang or timeout. This should
// help mitigate that.
maxWorkers: "50%",
},
},
publishToMaven: {
javaPackage: "io.github.cdklabs.projen",
mavenGroupId: "io.github.cdklabs",
mavenArtifactId: "projen",
mavenEndpoint: "https://s01.oss.sonatype.org",
},
publishToPypi: {
distName: "projen",
module: "projen",
},
publishToGo: {
moduleName: "github.com/projen/projen-go",
},
releaseFailureIssue: true,
autoApproveUpgrades: true,
autoApproveOptions: { allowedUsernames: ["cdklabs-automation"] },
docgenFilePath: "docs/api/API.md",
});
// this script is what we use as the projen command in this project
// it will compile the project if needed and then run the cli.
new TextFile(project, "projen.bash", {
lines: [
"#!/bin/bash",
`# ${PROJEN_MARKER}`,
"set -euo pipefail",
"if [ ! -f lib/cli/index.js ]; then",
' echo "bootstrapping..."',
" npx jsii --silence-warnings=reserved-word --no-fix-peer-dependencies",
"fi",
"exec bin/projen $@",
],
});
project.npmignore.exclude("/projen.bash");
project.addExcludeFromCleanup("test/**"); // because snapshots include the projen marker...
project.gitignore.include("templates/**");
project.gitignore.exclude("/.idea");
project.gitignore.include("test/inventory/**");
// expand markdown macros in readme
const macros = project.addTask("readme-macros");
macros.exec("mv README.md README.md.bak");
macros.exec("cat README.md.bak | markmac > README.md");
macros.exec("rm README.md.bak");
project.postCompileTask.spawn(macros);
new JsonFile(project, ".markdownlint.json", {
obj: {
default: true,
"commands-show-output": false,
"line-length": {
line_length: 200,
},
},
});
project.npmignore.exclude("/.markdownlint.json");
project.vscode.launchConfiguration.addConfiguration({
type: "pwa-node",
request: "launch",
name: "projen CLI",
skipFiles: ["<node_internals>/**"],
program: "${workspaceFolder}/lib/cli/index.js",
outFiles: ["${workspaceFolder}/lib/**/*.js"],
});
project.github.mergify.addRule({
name: "Label core contributions",
actions: {
label: {
add: ["contribution/core"],
},
},
conditions: ["author~=^(eladb|Chriscbr)$", "label!=contribution/core"],
});
project.gitpod.addCustomTask({
name: "Setup",
init: "yarn install",
prebuild: "bash ./projen.bash",
command: "npx projen build",
});
const setup = project.addTask("devenv:setup");
setup.exec("yarn install");
setup.spawn(project.buildTask);
project.devContainer.addTasks(setup);
project.npmignore.exclude("/.devcontainer.json");
project.addTask("contributors:update", {
exec: 'all-contributors check | grep "Missing contributors" -A 1 | tail -n1 | sed -e "s/,//g" | xargs -n1 | grep -v "[bot]" | xargs -n1 -I{} all-contributors add {} code',
});
project.npmignore.exclude("/.all-contributorsrc");
project.npmignore.exclude("/scripts/");
project.npmignore.exclude("/ARCHITECTURE.md");
project.npmignore.exclude("/CODE_OF_CONDUCT.md");
project.npmignore.exclude("/CONTRIBUTING.md");
project.npmignore.exclude("/VISION.md");
project.npmignore.exclude("/SECURITY.md");
project.npmignore.exclude("/.gitattributes");
project.npmignore.exclude("/.gitpod.yml");
function setupIntegTest() {
const pythonCompatTask = project.addTask("integ:python-compat", {
exec: "scripts/python-compat.sh",
description:
"Checks that projen's submodule structure does not cause import failures for python. Expects python to be installed and projen to be fully built.",
});
const integTask = project.addTask("integ", {
description: "Run integration tests",
});
integTask.spawn(project.compileTask);
integTask.spawn(project.tasks.tryFind("package:python"));
integTask.spawn(pythonCompatTask);
project.buildWorkflow.addPostBuildJobTask(integTask, {
tools: { python: { version: "3.x" }, go: { version: "1.16.x" } },
});
}
// build `run-task` script needed for "projen eject" functionality
function setupBundleTaskRunner() {
const taskRunnerPath = "lib/run-task.js";
const task = project.addTask("bundle:task-runner", {
description: 'Bundle the run-task script needed for "projen eject"',
exec: `esbuild src/task-runtime.ts --outfile=${taskRunnerPath} --bundle --platform=node --external:"*/package.json"`,
});
task.exec(
`echo "#!/usr/bin/env node" | cat - lib/run-task.js | tee lib/run-task.js > /dev/null`,
{
name: "Insert Node shebang to beginning of the file",
}
);
task.exec(
`echo "const runtime = new TaskRuntime(\\".\\");\nruntime.runTask(process.argv[2]);" >> ${taskRunnerPath}`,
{
name: "Add driver code to end of the file",
}
);
project.postCompileTask.spawn(task);
}
setupIntegTest();
setupBundleTaskRunner();
// we are projen, so re-synth after compiling.
// fixes feedback loop where projen contibutors run "build"
// but not all files are updated
project.postCompileTask.spawn(project.defaultTask);
project.synth();
================================================
FILE: .vscode/launch.json
================================================
{
"version": "0.2.0",
"configurations": [
{
"type": "pwa-node",
"request": "launch",
"name": "projen CLI",
"skipFiles": [
"<node_internals>/**"
],
"program": "${workspaceFolder}/lib/cli/index.js",
"outFiles": [
"${workspaceFolder}/lib/**/*.js"
]
}
],
"//": "~~ Generated by projen. To modify, edit .projenrc.js and run \"npx projen\"."
}
================================================
FILE: ARCHITECTURE.md
================================================
# Architecture
This document attempts to document the high-level architecture of projen. This
could be useful if you're trying to contribute to projen, trying to debug an
error message, or if you're just curious!
## How are a project's files synthesized?
### Bird's eye view
When `npx projen` is run, the command-line process executes the project's
projenrc file. This is usually a file like `.projenrc.js` or `projenrc.java`.
> The "rc" in the name is a common convention for configuration files - see
https://en.wikipedia.org/wiki/Configuration_file.
projenrc files follow a general structure:
1. they define one or more `Project` instances
2. these projects are configured and customized
3. `project.synth()` is called on the root project
For simplicity, most of this document will just assume there is a single project
unless otherwise specified.
Steps 1 and 2 only serve to initialize an in-memory representation of the
project. projen runs on Node.js; so in the JavaScript runtime, these steps
create a hierarchy of objects (called `Component`'s), each with various fields
specifying the names of files, tasks, options, and so on. The data within each
component provides enough information to uniquely determine the structure and
contents of the files it is responsible for. Components can add other components
to the project, and even make changes to existing components through common
interfaces like `project.tasks`, `project.deps`, or
`project.tryFindObjectFile()`.
Step 3 is the only step that actually performs any changes to files in the
user's project / file system.
### Synthesizing actual files
The `synth()` method of `Project` performs the actual synthesizing (and
updating) of all configuration files managed by projen. This is achieved by
deleting all projen-managed files (if there are any), and then re-synthesizing
them based on the latest configuration specified by the user. In code, this
breaks down as follows (slightly simplified):
1. the project's `preSynthesize()` method is called
2. all components' `preSynthesize()` methods are called
3. all projen-synthesized files are cleaned up
4. all components' `synthesize()` methods are called (most files are generated)
5. all components' `postSynthesize()` methods are called
6. the project's `postSynthesize()` method is called
In the above list, step 3 is critical since it's important that only files that
are managed by projen get cleaned up - we don't want user source code to be
deleted! Moreover, if a file was synthesized by projen at one point in time, but
later a user changes their projenrc configuration so it is no longer necessary,
we want it to be automatically cleaned up.
Rather than manually keeping track of synthesized files with some form of stored
state (which could easily get desynced by tampering from users or other tools),
projen simply looks for files with the _magic string_ that you get by
concatenating `"~~ Generated by "` and `"projen"`, and removes them. See
[cleanup.ts](src/cleanup.ts).
Since any file with this string gets automatically cleaned up, you should not
include this magic string verbatim in source code files. If you are writing your
own projen project type or component, you can simply reference this magic string
via `FileBase.PROJEN_MARKER`.
----
Steps 1, 2, 4, 5, and 6 are more straightforward. `synthesize()` is used to
generate the actual files in the user's file system (including applying
appropriate read/write permissions). `preSynthesize()` and `postSynthesize()`
are complementary methods that can used to enable components to perform
additional logic before and after synthesis. See the source code of `Component`
and `FileBase` for more details.
> Note: in practice, there are many existing components for creating specific
> types of files (such as `JsonFile` and `TextFile`), so we recommend using
> these over hand-making components wherever possible. (Believe in the power of
> abstractions!)
Since `preSynthesize()` is called before any files are cleaned up, it can be
used for e.g. observing any changes made to a generated file, and then adjusting
how the file is re-synthesized based on those changes. (As an example, running
`npm install` or `yarn install` can change the dependencies listed in the
`package.json` file of JavaScript projects. The built-in `NodeProject` uses
`preSynthesize()` to automatically integrate these changes to the `package.json`
file synthesized by projen, instead of overriding them.)
## How can projenrc files be written in multiple languages?
The projen library is transpiled by [jsii](https://github.com/aws/jsii) so that
projenrc files can be written in languages besides JavaScript. Under the hood,
API calls made in projen's Java/Python/etc. libraries communicate with a
JavaScript runtime to deliver the same behavior as if you wrote the code in
JavaScript. For more information, check out [jsii](https://github.com/aws/jsii).
================================================
FILE: CODE_OF_CONDUCT.md
================================================
# Contributor Covenant Code of Conduct
## Our Pledge
We as members, contributors, and leaders pledge to make participation in our
community a harassment-free experience for everyone, regardless of age, body
size, visible or invisible disability, ethnicity, sex characteristics, gender
identity and expression, level of experience, education, socio-economic status,
nationality, personal appearance, race, religion, or sexual identity
and orientation.
We pledge to act and interact in ways that contribute to an open, welcoming,
diverse, inclusive, and healthy community.
## Our Standards
Examples of behavior that contributes to a positive environment for our
community include:
* Demonstrating empathy and kindness toward other people
* Being respectful of differing opinions, viewpoints, and experiences
* Giving and gracefully accepting constructive feedback
* Accepting responsibility and apologizing to those affected by our mistakes,
and learning from the experience
* Focusing on what is best not just for us as individuals, but for the
overall community
Examples of unacceptable behavior include:
* The use of sexualized language or imagery, and sexual attention or
advances of any kind
* Trolling, insulting or derogatory comments, and personal or political attacks
* Public or private harassment
* Publishing others' private information, such as a physical or email
address, without their explicit permission
* Other conduct which could reasonably be considered inappropriate in a
professional setting
## Enforcement Responsibilities
Community leaders are responsible for clarifying and enforcing our standards of
acceptable behavior and will take appropriate and fair corrective action in
response to any behavior that they deem inappropriate, threatening, offensive,
or harmful.
Community leaders have the right and responsibility to remove, edit, or reject
comments, commits, code, wiki edits, issues, and other contributions that are
not aligned to this Code of Conduct, and will communicate reasons for moderation
decisions when appropriate.
## Scope
This Code of Conduct applies within all community spaces, and also applies when
an individual is officially representing the community in public spaces.
Examples of representing our community include using an official e-mail address,
posting via an official social media account, or acting as an appointed
representative at an online or offline event.
## Enforcement
Instances of abusive, harassing, or otherwise unacceptable behavior may be
reported to the community leaders responsible for enforcement at
elad.benisrael@gmail.com. All complaints will be reviewed and investigated
promptly and fairly.
All community leaders are obligated to respect the privacy and security of the
reporter of any incident.
## Enforcement Guidelines
Community leaders will follow these Community Impact Guidelines in determining
the consequences for any action they deem in violation of this Code of Conduct:
### 1. Correction
**Community Impact**: Use of inappropriate language or other behavior deemed
unprofessional or unwelcome in the community.
**Consequence**: A private, written warning from community leaders, providing
clarity around the nature of the violation and an explanation of why the
behavior was inappropriate. A public apology may be requested.
### 2. Warning
**Community Impact**: A violation through a single incident or series
of actions.
**Consequence**: A warning with consequences for continued behavior. No
interaction with the people involved, including unsolicited interaction with
those enforcing the Code of Conduct, for a specified period of time. This
includes avoiding interactions in community spaces as well as external channels
like social media. Violating these terms may lead to a temporary or
permanent ban.
### 3. Temporary Ban
**Community Impact**: A serious violation of community standards, including
sustained inappropriate behavior.
**Consequence**: A temporary ban from any sort of interaction or public
communication with the community for a specified period of time. No public or
private interaction with the people involved, including unsolicited interaction
with those enforcing the Code of Conduct, is allowed during this period.
Violating these terms may lead to a permanent ban.
### 4. Permanent Ban
**Community Impact**: Demonstrating a pattern of violation of community
standards, including sustained inappropriate behavior, harassment of an
individual, or aggression toward or disparagement of classes of individuals.
**Consequence**: A permanent ban from any sort of public interaction within
the community.
## Attribution
This Code of Conduct is adapted from the [Contributor Covenant][homepage],
version 2.0, available at
https://www.contributor-covenant.org/version/2/0/code_of_conduct.html.
Community Impact Guidelines were inspired by [Mozilla's code of conduct
enforcement ladder](https://github.com/mozilla/diversity).
[homepage]: https://www.contributor-covenant.org
For answers to common questions about this code of conduct, see the FAQ at
https://www.contributor-covenant.org/faq. Translations are available at
https://www.contributor-covenant.org/translations.
================================================
FILE: CONTRIBUTING.md
================================================
# Contributing to projen
Thanks for your interest in contributing to projen! :heart:
This document describes how to set up a development environment and submit your
contributions. Please read it carefully and let us know if it's not up-to date
(or even better, submit a pull request with your corrections! :wink:).
## Prerequisites
### Manually install tools
The following tools need to be installed to develop on projen locally.
- [Node]
- [Yarn]
- [Maven]
[Node]: https://nodejs.org/en/download/
[Yarn]: https://yarnpkg.com/en/docs/install
[Maven]: https://maven.apache.org/install
## Getting Started
The basic commands to get the repository cloned and built locally follow:
```console
$ git clone git@github.com:projen/projen
$ cd projen
$ yarn # install dependencies
$ yarn build # build projen
```
## Code Organization
Check out [this recording](https://www.youtube.com/watch?v=8dHwnuSND14) from a walkthrough of the projen codebase.
### Development workflow
The projen package has the following scripts:
- `build` - builds the package and runs all unit tests
- `watch` - watches for file changes and builds them progressively
- `test` - executes all unit tests
- `test:update` - executes all unit tests and overwrites snapshot expectations (those `.snap` files).
- `test:watch` - runs all unit tests and reruns tests when files are changed
- `package` - emits publishable artifacts to `dist`.
- `eslint` - run linter against source code
Each of these scripts can be executed using `yarn <script>` or `npx projen <script>`.
Tests are located under `src/__tests__` and executed from javascript code, so
make sure to compile once before running any tests.
One trick for quickly iterating is to run `yarn watch` in one terminal, and
`yarn test:watch` in another. Then, when you change your unit tests the code
will automatically recompile, thus triggering the tests to automatically re-run.
#### Linting & Formatting
Eslint is used to lint and format our typescript code. The `eslint`
script can be run from the root of the package.
You can integrate the linting and formatting workflow with your editor or ide by
installing the approporiate eslint plugin. For example, when using Visual Studio
Code, the [eslint plugin](https://marketplace.visualstudio.com/items?itemName=dbaeumer.vscode-eslint)
exposes a number of options including "fix on save". This will auto correct lint
and formatting errors whenever possible while saving a document.
### Testing against local projects
When your local version of projen builds successfully, you can test it to create
a new project by going into another directory and invoking the binary directly:
First, tell yarn to create a link from your local development copy:
```console
$ cd /path/to/local/projen
$ yarn link
```
Now, to create new projects:
```console
$ mkdir /my/new/project
$ cd /my/new/project
$ yarn link projen
$ alias pj="node_modules/projen/bin/projen"
$ pj new TYPE
$ yarn link projen # <-- important to run this again
```
If you already have an existing project and you want to test a new projen
feature against it:
```console
$ cd /my/other/project
$ yarn link projen
$ pj
```
From now on, running `pj` in this session will use the local development version of
projen instead of the latest one from npm.
```console
$ yarn unlink projen
```
### Version bumping
Currently projen bumps versions automatically thru a GitHub action when a commit
pushed to master successfully builds. Projen follows [semantic versioning](https://semver.org/)
through the [standard-version](https://github.com/conventional-changelog/standard-version)
npm utility.
## Making a pull request
* Commit title and message (and PR title and description) must adhere to [conventionalcommits](https://www.conventionalcommits.org).
* The title must begin with `feat(module): title`, `fix(module): title`,
`refactor(module): title` or `chore(module): title`, where the module refers
to the projects or components that the change centers on.
The module can be omitted, so "feat: title" is okay as well.
* Title should be lowercase.
* No period at the end of the title.
* Commit message should describe _motivation_. Think about your code reviewers and what information they need in
order to understand what you did. If it's a big commit (hopefully not), try to provide some good entry points so
it will be easier to follow.
* Commit message should indicate which issues are fixed: `fixes #<issue>` or `closes #<issue>`.
* Shout out to collaborators.
* If not obvious (i.e. from unit tests), describe how you verified that your change works.
* If this commit includes breaking changes, they must be listed at the end in the following format (notice how multiple breaking changes should be formatted):
```
BREAKING CHANGE: Description of what broke and how to achieve this behavior now
* **module-name:** Another breaking change
* **module-name:** Yet another breaking change
```
================================================
FILE: LICENSE
================================================
Apache License
Version 2.0, January 2004
http://www.apache.org/licenses/
TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
1. Definitions.
"License" shall mean the terms and conditions for use, reproduction,
and distribution as defined by Sections 1 through 9 of this document.
"Licensor" shall mean the copyright owner or entity authorized by
the copyright owner that is granting the License.
"Legal Entity" shall mean the union of the acting entity and all
other entities that control, are controlled by, or are under common
control with that entity. For the purposes of this definition,
"control" means (i) the power, direct or indirect, to cause the
direction or management of such entity, whether by contract or
otherwise, or (ii) ownership of fifty percent (50%) or more of the
outstanding shares, or (iii) beneficial ownership of such entity.
"You" (or "Your") shall mean an individual or Legal Entity
exercising permissions granted by this License.
"Source" form shall mean the preferred form for making modifications,
including but not limited to software source code, documentation
source, and configuration files.
"Object" form shall mean any form resulting from mechanical
transformation or translation of a Source form, including but
not limited to compiled object code, generated documentation,
and conversions to other media types.
"Work" shall mean the work of authorship, whether in Source or
Object form, made available under the License, as indicated by a
copyright notice that is included in or attached to the work
(an example is provided in the Appendix below).
"Derivative Works" shall mean any work, whether in Source or Object
form, that is based on (or derived from) the Work and for which the
editorial revisions, annotations, elaborations, or other modifications
represent, as a whole, an original work of authorship. For the purposes
of this License, Derivative Works shall not include works that remain
separable from, or merely link (or bind by name) to the interfaces of,
the Work and Derivative Works thereof.
"Contribution" shall mean any work of authorship, including
the original version of the Work and any modifications or additions
to that Work or Derivative Works thereof, that is intentionally
submitted to Licensor for inclusion in the Work by the copyright owner
or by an individual or Legal Entity authorized to submit on behalf of
the copyright owner. For the purposes of this definition, "submitted"
means any form of electronic, verbal, or written communication sent
to the Licensor or its representatives, including but not limited to
communication on electronic mailing lists, source code control systems,
and issue tracking systems that are managed by, or on behalf of, the
Licensor for the purpose of discussing and improving the Work, but
excluding communication that is conspicuously marked or otherwise
designated in writing by the copyright owner as "Not a Contribution."
"Contributor" shall mean Licensor and any individual or Legal Entity
on behalf of whom a Contribution has been received by Licensor and
subsequently incorporated within the Work.
2. Grant of Copyright License. Subject to the terms and conditions of
this License, each Contributor hereby grants to You a perpetual,
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
copyright license to reproduce, prepare Derivative Works of,
publicly display, publicly perform, sublicense, and distribute the
Work and such Derivative Works in Source or Object form.
3. Grant of Patent License. Subject to the terms and conditions of
this License, each Contributor hereby grants to You a perpetual,
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
(except as stated in this section) patent license to make, have made,
use, offer to sell, sell, import, and otherwise transfer the Work,
where such license applies only to those patent claims licensable
by such Contributor that are necessarily infringed by their
Contribution(s) alone or by combination of their Contribution(s)
with the Work to which such Contribution(s) was submitted. If You
institute patent litigation against any entity (including a
cross-claim or counterclaim in a lawsuit) alleging that the Work
or a Contribution incorporated within the Work constitutes direct
or contributory patent infringement, then any patent licenses
granted to You under this License for that Work shall terminate
as of the date such litigation is filed.
4. Redistribution. You may reproduce and distribute copies of the
Work or Derivative Works thereof in any medium, with or without
modifications, and in Source or Object form, provided that You
meet the following conditions:
(a) You must give any other recipients of the Work or
Derivative Works a copy of this License; and
(b) You must cause any modified files to carry prominent notices
stating that You changed the files; and
(c) You must retain, in the Source form of any Derivative Works
that You distribute, all copyright, patent, trademark, and
attribution notices from the Source form of the Work,
excluding those notices that do not pertain to any part of
the Derivative Works; and
(d) If the Work includes a "NOTICE" text file as part of its
distribution, then any Derivative Works that You distribute must
include a readable copy of the attribution notices contained
within such NOTICE file, excluding those notices that do not
pertain to any part of the Derivative Works, in at least one
of the following places: within a NOTICE text file distributed
as part of the Derivative Works; within the Source form or
documentation, if provided along with the Derivative Works; or,
within a display generated by the Derivative Works, if and
wherever such third-party notices normally appear. The contents
of the NOTICE file are for informational purposes only and
do not modify the License. You may add Your own attribution
notices within Derivative Works that You distribute, alongside
or as an addendum to the NOTICE text from the Work, provided
that such additional attribution notices cannot be construed
as modifying the License.
You may add Your own copyright statement to Your modifications and
may provide additional or different license terms and conditions
for use, reproduction, or distribution of Your modifications, or
for any such Derivative Works as a whole, provided Your use,
reproduction, and distribution of the Work otherwise complies with
the conditions stated in this License.
5. Submission of Contributions. Unless You explicitly state otherwise,
any Contribution intentionally submitted for inclusion in the Work
by You to the Licensor shall be under the terms and conditions of
this License, without any additional terms or conditions.
Notwithstanding the above, nothing herein shall supersede or modify
the terms of any separate license agreement you may have executed
with Licensor regarding such Contributions.
6. Trademarks. This License does not grant permission to use the trade
names, trademarks, service marks, or product names of the Licensor,
except as required for reasonable and customary use in describing the
origin of the Work and reproducing the content of the NOTICE file.
7. Disclaimer of Warranty. Unless required by applicable law or
agreed to in writing, Licensor provides the Work (and each
Contributor provides its Contributions) on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
implied, including, without limitation, any warranties or conditions
of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
PARTICULAR PURPOSE. You are solely responsible for determining the
appropriateness of using or redistributing the Work and assume any
risks associated with Your exercise of permissions under this License.
8. Limitation of Liability. In no event and under no legal theory,
whether in tort (including negligence), contract, or otherwise,
unless required by applicable law (such as deliberate and grossly
negligent acts) or agreed to in writing, shall any Contributor be
liable to You for damages, including any direct, indirect, special,
incidental, or consequential damages of any character arising as a
result of this License or out of the use or inability to use the
Work (including but not limited to damages for loss of goodwill,
work stoppage, computer failure or malfunction, or any and all
other commercial damages or losses), even if such Contributor
has been advised of the possibility of such damages.
9. Accepting Warranty or Additional Liability. While redistributing
the Work or Derivative Works thereof, You may choose to offer,
and charge a fee for, acceptance of support, warranty, indemnity,
or other liability obligations and/or rights consistent with this
License. However, in accepting such obligations, You may act only
on Your own behalf and on Your sole responsibility, not on behalf
of any other Contributor, and only if You agree to indemnify,
defend, and hold each Contributor harmless for any liability
incurred by, or claims asserted against, such Contributor by reason
of your accepting any such warranty or additional liability.
END OF TERMS AND CONDITIONS
APPENDIX: How to apply the Apache License to your work.
To apply the Apache License to your work, attach the following
boilerplate notice, with the fields enclosed by brackets "[]"
replaced with your own identifying information. (Don't include
the brackets!) The text should be enclosed in the appropriate
comment syntax for the file format. We also recommend that a
file or class name and description of purpose be included on the
same "printed page" as the copyright notice for easier
identification within third-party archives.
Copyright [yyyy] [name of copyright owner]
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
================================================
FILE: README.md
================================================
<p align="center">
<a href="https://projen.io">
<img src="https://raw.githubusercontent.com/projen/projen/main/logo/projen.svg">
<h3 align="center">projen</h3>
</a>
</p>
<p align="center">
Define and maintain complex project configuration through code.
</p>
<p align="center">
<a href="https://projen.io/"><strong>Documentation</strong></a> ·
<a href="https://github.com/projen/projen/releases"><strong>Changelog</strong></a> ·
<a href="#project-types"><strong>Project types</strong></a> ·
<a href="#community"><strong>Join the community</strong></a>
</p>
<p align="center">
<a href="https://opensource.org/licenses/Apache-2.0"><img src="https://img.shields.io/badge/License-Apache%202.0-yellowgreen.svg" alt="Apache 2.0 License"></a>
<a href="https://gitpod.io/#https://github.com/projen/projen"><img src="https://img.shields.io/badge/Gitpod-ready--to--code-blue?logo=gitpod" alt="Gitpod ready-to-code"></a>
<a href="https://github.com/projen/projen/actions/workflows/build.yml"><img src="https://github.com/projen/projen/workflows/Build/badge.svg" alt="Build badge"></a>
<a href="https://github.com/projen/projen/actions/workflows/release.yml"><img src="https://github.com/projen/projen/workflows/Release/badge.svg" alt="Release badge"></a>
<a href="https://github.com/projen/projen/commits/main"><img src="https://img.shields.io/github/commit-activity/w/projen/projen" alt="Commit activity"></a>
</p>
<br/>
*projen* synthesizes project configuration files such as `package.json`,
`tsconfig.json`, `.gitignore`, GitHub Workflows, eslint, jest, etc from a
well-typed definition written in JavaScript.
As opposed to existing templating/scaffolding tools, *projen* is not a one-off
generator. Synthesized files should never be manually edited (in fact, projen
enforces that). To modify your project setup, users interact with rich
strongly-typed class and execute `projen` to update their project configuration
files.
By defining a custom project type and using projen in multiple repositories, it's
possible to update configuration files and CI/CD workflows across dozens (or
hundreds!?) of projects.
Check out [this talk](https://youtu.be/SOWMPzXtTCw) about projen from its creator.
## Getting Started
_projen_ doesn't need to be installed. You will be using [npx](https://docs.npmjs.com/cli/v7/commands/npx) to run _projen_ which takes care of all required setup steps.
To create a new project, run the following command and follow the instructions:
```console
$ mkdir my-project
$ cd my-project
$ npx projen new PROJECT-TYPE
🤖 Synthesizing project...
...
```
### Project types
Currently supported project types (use `npx projen new` without a type for a
full list):
**Built-in:** (run `npx projen new <type>`)
<!-- <macro exec="node ./scripts/readme-projects.js"> -->
* [awscdk-app-java](https://projen.io/api/API.html#projen-awscdk-awscdkjavaapp) - AWS CDK app in Java.
* [awscdk-app-py](https://projen.io/api/API.html#projen-awscdk-awscdkpythonapp) - AWS CDK app in Python.
* [awscdk-app-ts](https://projen.io/api/API.html#projen-awscdk-awscdktypescriptapp) - AWS CDK app in TypeScript.
* [awscdk-construct](https://projen.io/api/API.html#projen-awscdk-awscdkconstructlibrary) - AWS CDK construct library project.
* [cdk8s-app-py](https://projen.io/api/API.html#projen-cdk8s-cdk8spythonapp) - CDK8s app in Python.
* [cdk8s-app-ts](https://projen.io/api/API.html#projen-cdk8s-cdk8stypescriptapp) - CDK8s app in TypeScript.
* [cdk8s-construct](https://projen.io/api/API.html#projen-cdk8s-constructlibrarycdk8s) - CDK8s construct library project.
* [cdktf-construct](https://projen.io/api/API.html#projen-cdktf-constructlibrarycdktf) - CDKTF construct library project.
* [java](https://projen.io/api/API.html#projen-java-javaproject) - Java project.
* [jsii](https://projen.io/api/API.html#projen-cdk-jsiiproject) - Multi-language jsii library project.
* [nextjs](https://projen.io/api/API.html#projen-web-nextjsproject) - Next.js project without TypeScript.
* [nextjs-ts](https://projen.io/api/API.html#projen-web-nextjstypescriptproject) - Next.js project with TypeScript.
* [node](https://projen.io/api/API.html#projen-javascript-nodeproject) - Node.js project.
* [project](https://projen.io/api/API.html#projen-project) - Base project.
* [python](https://projen.io/api/API.html#projen-python-pythonproject) - Python project.
* [react](https://projen.io/api/API.html#projen-web-reactproject) - React project without TypeScript.
* [react-ts](https://projen.io/api/API.html#projen-web-reacttypescriptproject) - React project with TypeScript.
* [typescript](https://projen.io/api/API.html#projen-typescript-typescriptproject) - TypeScript project.
* [typescript-app](https://projen.io/api/API.html#projen-typescript-typescriptappproject) - TypeScript app.
<!-- </macro> -->
**External:** (run `npx projen new --from <type>`)
* [projen-github-action-typescript](https://github.com/projen/projen-github-action-typescript/blob/main/API.md) - GitHub Action in TypeScript project.
> Use `npx projen new PROJECT-TYPE --help` to view a list of command line
> switches that allows you to specify most project options during bootstrapping.
> For example: `npx projen new jsii --author-name "Jerry Berry"`.
The `new` command will create a `.projenrc.js` file which looks like this for
`jsii` projects:
```js
const { JsiiProject } = require('projen');
const project = new JsiiProject({
authorAddress: "elad.benisrael@gmail.com",
authorName: "Elad Ben-Israel",
name: "foobar",
repository: "https://github.com/eladn/foobar.git",
});
project.synth();
```
This program instantiates the project type with minimal setup, and then calls
`synth()` to synthesize the project files. By default, the `new` command will
also execute this program, which will result in a fully working project.
Once your project is created, you can configure your project by editing
`.projenrc.js` and re-running `npx projen` to synthesize again.
> The files generated by _projen_ are considered an "implementation detail" and
> _projen_ protects them from being manually edited (most files are marked
> read-only, and an "anti tamper" check is configured in the CI build workflow
> to ensure that files are not updated during build).
For example, to setup PyPI publishing in `jsii` projects, you can use
[`python option`](https://github.com/eladb/projen/blob/master/API.md#projen-jsiipythontarget):
```js
const project = new JsiiProject({
// ...
python: {
distName: "mydist",
module: "my_module",
}
});
```
Run:
```shell
npx projen
```
And you'll notice that your `package.json` file now contains a `python` section in
its `jsii` config and the GitHub `release.yml` workflow includes a PyPI
publishing step.
We recommend to put this in your shell profile, so you can simply run `pj` every
time you update `.projenrc.js`:
```bash
alias pj='npx projen'
```
Most projects come with an assortment of **tasks** that handle various
development activities, from compiling to publishing. Tasks can be and composed
together, and can be run as local commands or turned into GitHub workflows. You
can list all tasks with `npx projen --help`:
```shell
$ npx projen --help
projen [command]
Commands:
projen new [PROJECT-TYPE-NAME] [OPTIONS] Creates a new projen project
projen clobber hard resets to HEAD of origin and cleans the local repo
projen compile Only compile
projen test:compile compiles the test code
projen test Run tests
projen build Full release build (test+compile)
projen upgrade-dependencies upgrade dependencies
projen upgrade-projen upgrade projen
...
```
The `build` task is the same task that's executed in your CI builds. It
typically compiles, lints, tests and packages your module for distribution.
### Shell Completions
If installed as a global package, `projen` includes rich shell tab-completion support. To enable this in your shell, run:
```shell
# Bash
projen completion >> ~/.bashrc
# ZSH
projen completion >> ~/.zshrc
```
## Features
Some examples for features built-in to project types:
* Fully synthesize `package.json`
* Standard npm scripts like `compile`, `build`, `test`, `package`
* eslint
* Jest
* jsii: compile, package, api compatibility checks, API.md
* Bump & release scripts with CHANGELOG generation based on conventional commits
* Automated PR builds
* Automated releases to npm, maven, NuGet and PyPI
* Automated dependency upgrades
* Mergify configuration
* LICENSE file generation
* gitignore + npmignore management
* Node "engines" support with coupling to CI build environment and @types/node
* Anti-tamper: CI builds will fail if a synthesized file is modified manually
## Documentation
For documentation including examples and a full API reference, visit <https://projen.io/>.
## Ecosystem
_projen_ takes a "batteries included" approach and aims to offer dozens of different project types out of
the box (we are just getting started). Think `projen new react`, `projen new angular`, `projen new java-maven`,
`projen new awscdk-typescript`, `projen new cdk8s-python` (nothing in projen is tied to javascript or npm!)...
Adding new project types is as simple as submitting a pull request to this repo and exporting a class that
extends `projen.Project` (or one of its derivatives). Projen automatically discovers project types so your
type will immediately be available in `projen new`.
### Projects in external modules
_projen_ is bundled with many project types out of the box, but it can also work
with project types and components defined in external jsii modules (the reason
we need jsii is because projen uses the jsii metadata to discover project types
& options in projen new).
Say we have a module in npm called `projen-vuejs` which includes a single project
type for vue.js:
```bash
$ npx projen new --from projen-vuejs
```
If the referenced module includes multiple project types, the type is required.
Switches can also be used to specify initial values based on the project type
APIs. You can also use any package syntax supported by [yarn
add](https://classic.yarnpkg.com/en/docs/cli/add#toc-adding-dependencies) like
`projen-vuejs@1.2.3`, `file:/path/to/local/folder`,
`git@github.com/awesome/projen-vuejs#1.2.3`, etc.
```bash
$ npx projen new --from projen-vuejs@^2 vuejs-ts --description "my awesome vue project"
```
Under the hood, `projen new` will install the `projen-vuejs` module from npm
(version 2.0.0 and above), discover the project types in it and bootstrap the
`vuejs-ts` project type. It will assign the value `"my awesome vue project"` to
the `description` field. If you examine your `.projenrc.js` file, you'll see
that `projen-vuejs` is defined as a dev dependency:
```javascript
const { VueJsProject } = require('projen-vuejs');
const project = new VueJsProject({
name: 'my-vuejs-sample',
description: "my awesome vue project",
// ...
devDeps: [
'projen-vuejs'
]
});
project.synth();
```
## Roadmap
See [Vision](./VISION.md).
## FAQ
### Do I have to write my configuration in JavaScript?
Not at all! JavaScript is the default, but it's also possible to write it in
Java, TypeScript, or even JSON. Python support is also planned. This is made
possible by the [jsii](https://github.com/aws/jsii) library which allows us
to write APIs once and generate libraries in several languages. You can choose
a different language by passing the `--projenrc-ts`, `--projenrc-java`, or
`--projenrc-json` flags when running `projen new`.
Note: using a `.projenrc.json` file to specify configuration only allows
accessing a subset of the entire API - the options which are passed to the
constructor of each project type.
### How does projen work with my IDE?
projen has an unofficial [VS Code extension]. Check it out!
[VS Code extension]: https://marketplace.visualstudio.com/items?itemName=MarkMcCulloh.vscode-projen
## Community
The projen community can be found within the #projen channel in the [cdk.dev]
community Slack workspace.
[cdk.dev]: https://cdk.dev/
### Virtual Meetup
- Thursday June 30, 2022
- 1-2pm America/New_York (EDT)
- [CFP](https://bit.ly/3NEc0UQ) a Google Form
- CFP Closes Saturday April 30, 2022
- Hosted on [Zoom](https://zoom.us/j/92399854777?pwd=OUZybHlobHNoZUs1VVordWhaRTVGdz09#success)
## Contributions
Contributions of all kinds are welcome! Check out our [contributor's
guide](./CONTRIBUTING.md) and our [code of conduct](./CODE_OF_CONDUCT.md).
For a quick start, check out a development environment:
```bash
$ git clone git@github.com:projen/projen
$ cd projen
$ yarn
$ yarn watch # compile in the background
```
Thanks goes to these wonderful people ([emoji key](https://allcontributors.org/docs/en/emoji-key)):
<!-- ALL-CONTRIBUTORS-BADGE:START - Do not remove or modify this section -->
[](#contributors-)
<!-- ALL-CONTRIBUTORS-BADGE:END -->
<!-- ALL-CONTRIBUTORS-LIST:START - Do not remove or modify this section -->
<!-- prettier-ignore-start -->
<!-- markdownlint-disable -->
<table>
<tr>
<td align="center"><a href="http://eladb.github.com/"><img src="https://avatars3.githubusercontent.com/u/598796?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Elad Ben-Israel</b></sub></a><br /><a href="https://github.com/projen/projen/commits?author=eladb" title="Code">💻</a></td>
<td align="center"><a href="https://rybicki.io/"><img src="https://avatars2.githubusercontent.com/u/5008987?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Christopher Rybicki</b></sub></a><br /><a href="https://github.com/projen/projen/commits?author=Chriscbr" title="Code">💻</a></td>
<td align="center"><a href="http://p6m7g8.github.io/"><img src="https://avatars0.githubusercontent.com/u/34295?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Philip M. Gollucci</b></sub></a><br /><a href="https://github.com/projen/projen/commits?author=pgollucci" title="Code">💻</a></td>
<td align="center"><a href="https://github.com/hoegertn"><img src="https://avatars2.githubusercontent.com/u/1287829?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Thorsten Hoeger</b></sub></a><br /><a href="https://github.com/projen/projen/commits?author=hoegertn" title="Code">💻</a></td>
<td align="center"><a href="https://github.com/kcwinner"><img src="https://avatars3.githubusercontent.com/u/2728868?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Kenneth Winner</b></sub></a><br /><a href="https://github.com/projen/projen/commits?author=kcwinner" title="Code">💻</a></td>
<td align="center"><a href="https://github.com/JordanSinko"><img src="https://avatars2.githubusercontent.com/u/10212966?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Jordan Sinko</b></sub></a><br /><a href="https://github.com/projen/projen/commits?author=JordanSinko" title="Code">💻</a></td>
<td align="center"><a href="https://github.com/misterjoshua"><img src="https://avatars2.githubusercontent.com/u/644092?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Josh Kellendonk</b></sub></a><br /><a href="https://github.com/projen/projen/commits?author=misterjoshua" title="Code">💻</a></td>
</tr>
<tr>
<td align="center"><a href="https://github.com/andrestone"><img src="https://avatars1.githubusercontent.com/u/7958086?v=4?s=100" width="100px;" alt=""/><br /><sub><b>andrestone</b></sub></a><br /><a href="https://github.com/projen/projen/commits?author=andrestone" title="Code">💻</a></td>
<td align="center"><a href="https://pallares.io/"><img src="https://avatars3.githubusercontent.com/u/1077520?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Cristian Pallarés</b></sub></a><br /><a href="https://github.com/projen/projen/commits?author=skyrpex" title="Code">💻</a></td>
<td align="center"><a href="https://github.com/jogold"><img src="https://avatars2.githubusercontent.com/u/12623249?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Jonathan Goldwasser</b></sub></a><br /><a href="https://github.com/projen/projen/commits?author=jogold" title="Code">💻</a></td>
<td align="center"><a href="http://www.matthewbonig.com/"><img src="https://avatars2.githubusercontent.com/u/1559437?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Matthew Bonig</b></sub></a><br /><a href="https://github.com/projen/projen/commits?author=mbonig" title="Code">💻</a></td>
<td align="center"><a href="https://github.com/pahud"><img src="https://avatars3.githubusercontent.com/u/278432?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Pahud Hsieh</b></sub></a><br /><a href="https://github.com/projen/projen/commits?author=pahud" title="Code">💻</a></td>
<td align="center"><a href="https://github.com/adamelmore"><img src="https://avatars2.githubusercontent.com/u/2363879?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Adam Elmore</b></sub></a><br /><a href="https://github.com/projen/projen/commits?author=adamelmore" title="Code">💻</a></td>
<td align="center"><a href="https://github.com/abelmokadem"><img src="https://avatars0.githubusercontent.com/u/9717944?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Ash</b></sub></a><br /><a href="https://github.com/projen/projen/commits?author=abelmokadem" title="Code">💻</a></td>
</tr>
<tr>
<td align="center"><a href="https://github.com/jmourelos"><img src="https://avatars3.githubusercontent.com/u/3878434?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Jacob</b></sub></a><br /><a href="https://github.com/projen/projen/commits?author=jmourelos" title="Code">💻</a></td>
<td align="center"><a href="https://github.com/bigkraig"><img src="https://avatars1.githubusercontent.com/u/508403?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Kraig Amador</b></sub></a><br /><a href="https://github.com/projen/projen/commits?author=bigkraig" title="Code">💻</a></td>
<td align="center"><a href="https://github.com/mmuller88"><img src="https://avatars0.githubusercontent.com/u/18393842?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Martin Muller</b></sub></a><br /><a href="https://github.com/projen/projen/commits?author=mmuller88" title="Code">💻</a></td>
<td align="center"><a href="https://tlakomy.com/"><img src="https://avatars2.githubusercontent.com/u/16646517?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Tomasz Łakomy</b></sub></a><br /><a href="https://github.com/projen/projen/commits?author=tlakomy" title="Code">💻</a></td>
<td align="center"><a href="https://github.com/john-tipper"><img src="https://avatars2.githubusercontent.com/u/9730398?v=4?s=100" width="100px;" alt=""/><br /><sub><b>john-tipper</b></sub></a><br /><a href="https://github.com/projen/projen/commits?author=john-tipper" title="Code">💻</a></td>
<td align="center"><a href="https://github.com/henrysachs"><img src="https://avatars0.githubusercontent.com/u/17173951?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Henry Sachs</b></sub></a><br /><a href="https://github.com/projen/projen/commits?author=henrysachs" title="Code">💻</a></td>
<td align="center"><a href="https://github.com/eganjs"><img src="https://avatars3.githubusercontent.com/u/6639482?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Joseph Egan</b></sub></a><br /><a href="https://github.com/projen/projen/commits?author=eganjs" title="Code">💻</a></td>
</tr>
<tr>
<td align="center"><a href="https://skorfmann.com/"><img src="https://avatars1.githubusercontent.com/u/136789?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Sebastian Korfmann</b></sub></a><br /><a href="https://github.com/projen/projen/commits?author=skorfmann" title="Code">💻</a></td>
<td align="center"><a href="http://www.callant.net/"><img src="https://avatars1.githubusercontent.com/u/5915843?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Bart Callant</b></sub></a><br /><a href="https://github.com/projen/projen/commits?author=bartcallant" title="Code">💻</a></td>
<td align="center"><a href="https://github.com/campionfellin"><img src="https://avatars3.githubusercontent.com/u/11984923?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Campion Fellin</b></sub></a><br /><a href="https://github.com/projen/projen/commits?author=campionfellin" title="Code">💻</a></td>
<td align="center"><a href="https://github.com/gradybarrett"><img src="https://avatars1.githubusercontent.com/u/1140074?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Grady Barrett</b></sub></a><br /><a href="https://github.com/projen/projen/commits?author=gradybarrett" title="Code">💻</a></td>
<td align="center"><a href="https://github.com/HassanMahmud"><img src="https://avatars3.githubusercontent.com/u/58504381?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Hassan Mahmud</b></sub></a><br /><a href="https://github.com/projen/projen/commits?author=HassanMahmud" title="Code">💻</a></td>
<td align="center"><a href="https://dk.linkedin.com/in/hassanmahmud93"><img src="https://avatars1.githubusercontent.com/u/7426703?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Hassan Mahmud</b></sub></a><br /><a href="https://github.com/projen/projen/commits?author=hass123uk" title="Code">💻</a></td>
<td align="center"><a href="http://joapy.com/"><img src="https://avatars3.githubusercontent.com/u/325306?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Jake Pearson</b></sub></a><br /><a href="https://github.com/projen/projen/commits?author=jakepearson" title="Code">💻</a></td>
</tr>
<tr>
<td align="center"><a href="https://github.com/JeremyJonas"><img src="https://avatars1.githubusercontent.com/u/464119?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Jeremy Jonas</b></sub></a><br /><a href="https://github.com/projen/projen/commits?author=JeremyJonas" title="Code">💻</a></td>
<td align="center"><a href="https://dev.to/martzcodes"><img src="https://avatars1.githubusercontent.com/u/978362?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Matt Martz</b></sub></a><br /><a href="https://github.com/projen/projen/commits?author=martzcodes" title="Code">💻</a></td>
<td align="center"><a href="https://github.com/fongie"><img src="https://avatars1.githubusercontent.com/u/19932622?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Max Körlinge</b></sub></a><br /><a href="https://github.com/projen/projen/commits?author=fongie" title="Code">💻</a></td>
<td align="center"><a href="https://blog.neilkuan.dev/"><img src="https://avatars2.githubusercontent.com/u/46012524?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Neil Kuan</b></sub></a><br /><a href="https://github.com/projen/projen/commits?author=guan840912" title="Code">💻</a></td>
<td align="center"><a href="https://dynobase.dev/"><img src="https://avatars3.githubusercontent.com/u/3391616?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Rafal Wilinski</b></sub></a><br /><a href="https://github.com/projen/projen/commits?author=RafalWilinski" title="Code">💻</a></td>
<td align="center"><a href="https://keybase.io/romainmuller"><img src="https://avatars2.githubusercontent.com/u/411689?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Romain Marcadier</b></sub></a><br /><a href="https://github.com/projen/projen/commits?author=RomainMuller" title="Code">💻</a></td>
<td align="center"><a href="https://github.com/thomasklinger1234"><img src="https://avatars1.githubusercontent.com/u/39558817?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Thomas Klinger</b></sub></a><br /><a href="https://github.com/projen/projen/commits?author=thomasklinger1234" title="Code">💻</a></td>
</tr>
<tr>
<td align="center"><a href="https://github.com/gwriss"><img src="https://avatars2.githubusercontent.com/u/1842089?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Tobias</b></sub></a><br /><a href="https://github.com/projen/projen/commits?author=gwriss" title="Code">💻</a></td>
<td align="center"><a href="https://github.com/flyingImer"><img src="https://avatars0.githubusercontent.com/u/1973868?v=4?s=100" width="100px;" alt=""/><br /><sub><b>flyingImer</b></sub></a><br /><a href="https://github.com/projen/projen/commits?author=flyingImer" title="Code">💻</a></td>
<td align="center"><a href="https://github.com/Hunter-Thompson"><img src="https://avatars.githubusercontent.com/u/20844961?v=4?s=100" width="100px;" alt=""/><br /><sub><b> Aatman </b></sub></a><br /><a href="https://github.com/projen/projen/commits?author=Hunter-Thompson" title="Code">💻</a></td>
<td align="center"><a href="https://github.com/mmcculloh-dms"><img src="https://avatars.githubusercontent.com/u/68597641?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Mark McCulloh</b></sub></a><br /><a href="https://github.com/projen/projen/commits?author=mmcculloh-dms" title="Code">💻</a></td>
<td align="center"><a href="https://github.com/aisamu"><img src="https://avatars.githubusercontent.com/u/431708?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Samuel Tschiedel</b></sub></a><br /><a href="https://github.com/projen/projen/commits?author=aisamu" title="Code">💻</a></td>
<td align="center"><a href="https://github.com/iliapolo"><img src="https://avatars.githubusercontent.com/u/1428812?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Eli Polonsky</b></sub></a><br /><a href="https://github.com/projen/projen/commits?author=iliapolo" title="Code">💻</a></td>
<td align="center"><a href="https://unsubstantiated.blog/"><img src="https://avatars.githubusercontent.com/u/1308885?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Alexander Steppke</b></sub></a><br /><a href="https://github.com/projen/projen/commits?author=Miradorn" title="Code">💻</a></td>
</tr>
<tr>
<td align="center"><a href="https://github.com/kanatti"><img src="https://avatars.githubusercontent.com/u/8623654?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Balagopal Kanattil</b></sub></a><br /><a href="https://github.com/projen/projen/commits?author=kanatti" title="Code">💻</a></td>
<td align="center"><a href="http://twitter.com/bracki"><img src="https://avatars.githubusercontent.com/u/49786?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Jan Brauer</b></sub></a><br /><a href="https://github.com/projen/projen/commits?author=bracki" title="Code">💻</a></td>
<td align="center"><a href="https://polothy.github.io/"><img src="https://avatars.githubusercontent.com/u/634657?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Mark Nielsen</b></sub></a><br /><a href="https://github.com/projen/projen/commits?author=polothy" title="Code">💻</a></td>
<td align="center"><a href="https://github.com/MrArnoldPalmer"><img src="https://avatars.githubusercontent.com/u/7221111?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Mitchell Valine</b></sub></a><br /><a href="https://github.com/projen/projen/commits?author=MrArnoldPalmer" title="Code">💻</a></td>
<td align="center"><a href="https://blog.neilkuan.net/"><img src="https://avatars.githubusercontent.com/u/46012524?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Neil Kuan</b></sub></a><br /><a href="https://github.com/projen/projen/commits?author=neilkuan" title="Code">💻</a></td>
<td align="center"><a href="https://garbe.io/"><img src="https://avatars.githubusercontent.com/u/721899?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Philipp Garbe</b></sub></a><br /><a href="https://github.com/projen/projen/commits?author=pgarbe" title="Code">💻</a></td>
<td align="center"><a href="https://selfstructured.com/"><img src="https://avatars.githubusercontent.com/u/361689?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Shawn MacIntyre</b></sub></a><br /><a href="https://github.com/projen/projen/commits?author=smacintyre" title="Code">💻</a></td>
</tr>
<tr>
<td align="center"><a href="https://github.com/tobias-bardino"><img src="https://avatars.githubusercontent.com/u/1842089?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Tobias</b></sub></a><br /><a href="https://github.com/projen/projen/commits?author=tobias-bardino" title="Code">💻</a></td>
<td align="center"><a href="https://github.com/yglcode"><img src="https://avatars.githubusercontent.com/u/11893614?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Yigong Liu</b></sub></a><br /><a href="https://github.com/projen/projen/commits?author=yglcode" title="Code">💻</a></td>
<td align="center"><a href="https://github.com/eduardomourar"><img src="https://avatars.githubusercontent.com/u/16357187?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Eduardo Rodrigues</b></sub></a><br /><a href="https://github.com/projen/projen/commits?author=eduardomourar" title="Code">💻</a></td>
<td align="center"><a href="https://github.com/hassanazharkhan"><img src="https://avatars.githubusercontent.com/u/57677979?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Hassan Azhar</b></sub></a><br /><a href="https://github.com/projen/projen/commits?author=hassanazharkhan" title="Code">💻</a></td>
<td align="center"><a href="https://www.linkedin.com/in/julian-michel-812a223a/"><img src="https://avatars.githubusercontent.com/u/15660169?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Julian Michel</b></sub></a><br /><a href="https://github.com/projen/projen/commits?author=jumic" title="Code">💻</a></td>
<td align="center"><a href="https://github.com/lmarsden"><img src="https://avatars.githubusercontent.com/u/51232932?v=4?s=100" width="100px;" alt=""/><br /><sub><b>lmarsden</b></sub></a><br /><a href="https://github.com/projen/projen/commits?author=lmarsden" title="Code">💻</a></td>
<td align="center"><a href="https://github.com/adrianmace"><img src="https://avatars.githubusercontent.com/u/5071859?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Adrian Mace</b></sub></a><br /><a href="https://github.com/projen/projen/commits?author=adrianmace" title="Code">💻</a></td>
</tr>
<tr>
<td align="center"><a href="https://github.com/mKeRix"><img src="https://avatars.githubusercontent.com/u/770596?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Heiko Rothe</b></sub></a><br /><a href="https://github.com/projen/projen/commits?author=mKeRix" title="Code">💻</a></td>
<td align="center"><a href="https://github.com/hyandell"><img src="https://avatars.githubusercontent.com/u/477715?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Henri Yandell</b></sub></a><br /><a href="https://github.com/projen/projen/commits?author=hyandell" title="Code">💻</a></td>
<td align="center"><a href="https://github.com/mwg-rea"><img src="https://avatars.githubusercontent.com/u/82480228?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Matthew Gamble</b></sub></a><br /><a href="https://github.com/projen/projen/commits?author=mwg-rea" title="Code">💻</a></td>
<td align="center"><a href="https://willdady.com/"><img src="https://avatars.githubusercontent.com/u/204259?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Will Dady</b></sub></a><br /><a href="https://github.com/projen/projen/commits?author=willdady" title="Code">💻</a></td>
<td align="center"><a href="https://github.com/msessa"><img src="https://avatars.githubusercontent.com/u/1912143?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Matteo Sessa</b></sub></a><br /><a href="https://github.com/projen/projen/commits?author=msessa" title="Code">💻</a></td>
<td align="center"><a href="https://github.com/Hi-Fi"><img src="https://avatars.githubusercontent.com/u/1499780?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Juho Saarinen</b></sub></a><br /><a href="https://github.com/projen/projen/commits?author=Hi-Fi" title="Code">💻</a></td>
<td align="center"><a href="https://github.com/njlynch"><img src="https://avatars.githubusercontent.com/u/1376292?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Nick Lynch</b></sub></a><br /><a href="https://github.com/projen/projen/commits?author=njlynch" title="Code">💻</a></td>
</tr>
<tr>
<td align="center"><a href="https://amani.kilumanga.com/"><img src="https://avatars.githubusercontent.com/u/8690282?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Amani Kilumanga</b></sub></a><br /><a href="https://github.com/projen/projen/commits?author=dkaksl" title="Code">💻</a></td>
<td align="center"><a href="http://blog.herlein.com/"><img src="https://avatars.githubusercontent.com/u/173428?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Greg Herlein</b></sub></a><br /><a href="https://github.com/projen/projen/commits?author=gherlein" title="Code">💻</a></td>
<td align="center"><a href="https://github.com/kaizen3031593"><img src="https://avatars.githubusercontent.com/u/36202692?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Kaizen Conroy</b></sub></a><br /><a href="https://github.com/projen/projen/commits?author=kaizen3031593" title="Code">💻</a></td>
<td align="center"><a href="https://github.com/saudkhanzada"><img src="https://avatars.githubusercontent.com/u/30137907?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Saud Khanzada</b></sub></a><br /><a href="https://github.com/projen/projen/commits?author=saudkhanzada" title="Code">💻</a></td>
</tr>
</table>
<!-- markdownlint-restore -->
<!-- prettier-ignore-end -->
<!-- ALL-CONTRIBUTORS-LIST:END -->
## License
Distributed under the [Apache-2.0](./LICENSE) license.
================================================
FILE: SECURITY.md
================================================
# Security Policy
## Supported Versions
Use this section to tell people about which versions of your project are
currently being supported with security updates.
| Version | Supported |
| ------- | ------------------ |
| 0.x | :white_check_mark: |
## Reporting a Vulnerability
Use this section to tell people how to report a vulnerability.
Tell them where to go, how often they can expect to get an update on a
reported vulnerability, what to expect if the vulnerability is accepted or
declined, etc.
================================================
FILE: VISION.md
================================================
# The vision of projen
This is basically a paper napkin for ideas for the roadmap for the project. Comments/PRs are more than welcome!
## Ecosystem
"Batteries included" is a very powerful concept. It allows users to discover the breadth of their options using a
single experience, instead of having to read the manual for 4 different plugins with horrible versioning conflicts.
On the other hand, one of the goals of projen is to support the ever-increasing amount of tools people use in order to build software,
and to allow teams to use projen internally for their needs and to do that, we must have an open ecosystem which allows anyone to
freely publish and consume components and projects.
So we need to solve a few problems:
- Discovery: projects/components from ecosystem libraries should feel 1st class.
- Velocity: a single codebase can easily manage breaking changes in APIs, but it's much harder to do that at the
ecosystem level, and usually a source of a lot of frustration.
### Discovery
The desired experience is that `projen new --help` will list all public project types, including types from ecosystem libraries.
A simple solution that may go a long way is to create a "sources" file in the projen repo, and allow anyone to add their library
to the file through a pull request. The source list will be basically names of npm modules. During _build_, we will process this
list by downloading the package information from npm, and injest their `.jsii` manifests into the CLI.
Yes, this means that new sources will be added only when projen is released. But projen is released for every merged PR.
We will also need to indicate major version compatibility of each project/component (see "Velocity" below).
### Velocity
In semver (semantic versioning), the only right way to introduce a breaking change (API or behavioral) is to release
a new major version. It will take a couple of years for projen to stabilize, and we want the ecosystem to grow with it.
A monolithic module makes this less of a problem because there aren't many libraries that depend on projen, so a major
version once in a while is tolerable.
This means that projen will release major versions all the time. Think 232.4.34.
So we need our ecosystem to continuously take updates and release new versions that were tested with the new major version.
In most cases, projects and component won't get broken, but sometimes they will and then the maintainer will need to resolve.
Luckily this mechanism already exists in projen (`projenUpgradeSecret`).
It is opt-in because it requires a the user to upload a GitHub secret, but maybe if we implement some support for secret management,
we could make that the default behavior.
As mentioned above, when we process our "sources" during build, we can check the projen version they were tested with and
determine if it's compatible with the version on the user's system.
## Services
projen should be able to deploy & manage cloud services related to your development environment. For example,
a service to manage secrets for me in AWS Secrets Manager, a cloud development account, CI/CD infrastructure, etc.
Using the CDKs (AWS CDK, CDK for Terraform, CDK for Kubernetes), complete services can be expressed as constructs
and shared and published as libraries. It is fairly easy (#) to simply allow CDK constructs to be freely used
inside projen components.
## Ideas
- [ ] Components: re-think/re-factor how components and projects interact to allow more modular and composable usage.
- [ ] Discoverability of external components/modules through the CLI
- [ ] Support projenrc in YAML (fully declarative, if one desires)
- [x] CLI bash completion
- [ ] License checking (non CDK specific)
- [ ] Multi-repository projects (alternative to mono-repos)
- [ ] IDE integration (e.g. task execution)
- [ ] Support multiple workflow engines (currently only GitHub is supported)
================================================
FILE: assets/web/react/index.html
================================================
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8" />
<link rel="icon" href="%PUBLIC_URL%/favicon.ico" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<meta name="theme-color" content="#000000" />
<meta
name="description"
content="Web site created using create-react-app"
/>
<link rel="apple-touch-icon" href="%PUBLIC_URL%/logo192.png" />
<!--
manifest.json provides metadata used when your web app is installed on a
user's mobile device or desktop. See https://developers.google.com/web/fundamentals/web-app-manifest/
-->
<link rel="manifest" href="%PUBLIC_URL%/manifest.json" />
<!--
Notice the use of %PUBLIC_URL% in the tags above.
It will be replaced with the URL of the `public` folder during the build.
Only files inside the `public` folder can be referenced from the HTML.
Unlike "/favicon.ico" or "favicon.ico", "%PUBLIC_URL%/favicon.ico" will
work correctly both with client-side routing and a non-root public URL.
Learn how to configure a non-root public URL by running `npm run build`.
-->
<title>React App</title>
</head>
<body>
<noscript>You need to enable JavaScript to run this app.</noscript>
<div id="root"></div>
<!--
This HTML file is a template.
If you open it directly in the browser, you will see an empty page.
You can add webfonts, meta tags, or analytics to this file.
The build step will place the bundled scripts into the <body> tag.
To begin the development, run `npm start` or `yarn start`.
To create a production bundle, use `npm run build` or `yarn build`.
-->
</body>
</html>
================================================
FILE: assets/web/react/manifest.json
================================================
{
"short_name": "React App",
"name": "Create React App Sample",
"icons": [
{
"src": "favicon.ico",
"sizes": "64x64 32x32 24x24 16x16",
"type": "image/x-icon"
},
{
"src": "logo192.png",
"type": "image/png",
"sizes": "192x192"
},
{
"src": "logo512.png",
"type": "image/png",
"sizes": "512x512"
}
],
"start_url": ".",
"display": "standalone",
"theme_color": "#000000",
"background_color": "#ffffff"
}
================================================
FILE: assets/web/react/robots.txt
================================================
# https://www.robotstxt.org/robotstxt.html
User-agent: *
Disallow:
================================================
FILE: bin/projen
================================================
#!/usr/bin/env node
// eslint-disable-next-line @typescript-eslint/no-require-imports
require('../lib/cli/index.js');
================================================
FILE: docs/CNAME
================================================
projen.io
================================================
FILE: docs/README.md
================================================
# Documentation
* [AWS CDK Applications](awscdk-apps.md)
* [AWS CDK Construct Library](awscdk-construct.md)
* [AWS Cloud Projects](awscdk.md)
* [Build](build.md)
* [Bundling](bundling.md)
* [Components](components.md)
* [CDK8s](cdk8s.md)
* [CircleCI](circleci.md)
* [Dependencies](deps.md)
* [Escape hatches](escape-hatches.md)
* [Ejecting](eject.md)
* [GitHub](github.md)
* [GitLab](gitlab.md)
* [Java Projects](java.md)
* [Node.js Projects](node.md)
* [Programmatic API](programmatic-api.md)
* [Publishing Modules](publisher.md)
* [Python Projects](python.md)
* [Releases and Versioning](releases.md)
* [Subprojects](subproject.md)
* [Tasks](tasks.md)
* [TypeScript Projects](typescript.md)
## API Reference
* [TypeScript](api/API.md)
================================================
FILE: docs/api/API.md
================================================
# API Reference
**Classes**
Name|Description
----|-----------
[Component](#projen-component)|Represents a project component.
[Dependencies](#projen-dependencies)|The `Dependencies` component is responsible to track the list of dependencies a project has, and then used by project types as the model for rendering project-specific dependency manifests such as the dependencies section `package.json` files.
[DevEnvironmentDockerImage](#projen-devenvironmentdockerimage)|Options for specifying the Docker image of the container.
[DockerCompose](#projen-dockercompose)|Create a docker-compose YAML file.
[DockerComposeService](#projen-dockercomposeservice)|A docker-compose service.
[FileBase](#projen-filebase)|*No description*
[GitAttributesFile](#projen-gitattributesfile)|Assign attributes to file names in a git repository.
[Gitpod](#projen-gitpod)|The Gitpod component which emits .gitpod.yml.
[IgnoreFile](#projen-ignorefile)|*No description*
[IniFile](#projen-inifile)|Represents an INI file.
[JsonFile](#projen-jsonfile)|Represents a JSON file.
[JsonPatch](#projen-jsonpatch)|Utility for applying RFC-6902 JSON-Patch to a document.
[License](#projen-license)|*No description*
[Logger](#projen-logger)|Project-level logging utilities.
[Makefile](#projen-makefile)|Minimal Makefile.
[ObjectFile](#projen-objectfile)|Represents an Object file.
[Project](#projen-project)|Base project.
[ProjectBuild](#projen-projectbuild)|Manages a standard build process for all projects.
[Projects](#projen-projects)|Programmatic API for projen.
[Projenrc](#projen-projenrc)|Sets up a project to use JSON for projenrc.
[Renovatebot](#projen-renovatebot)|Defines renovatebot configuration for projen project.
[SampleDir](#projen-sampledir)|Renders the given files into the directory if the directory does not exist.
[SampleFile](#projen-samplefile)|Produces a file with the given contents but only once, if the file doesn't already exist.
[SampleReadme](#projen-samplereadme)|Represents a README.md sample file. You are expected to manage this file after creation.
[Semver](#projen-semver)|*No description*
[SourceCode](#projen-sourcecode)|Represents a source file.
[Task](#projen-task)|A task that can be performed on the project.
[TaskRuntime](#projen-taskruntime)|The runtime component of the tasks engine.
[Tasks](#projen-tasks)|Defines project tasks.
[Testing](#projen-testing)|A Testing static class with a .synth helper for getting a snapshots of construct outputs. Useful for snapshot testing with Jest.
[TextFile](#projen-textfile)|A text file.
[TomlFile](#projen-tomlfile)|Represents a TOML file.
[Version](#projen-version)|*No description*
[XmlFile](#projen-xmlfile)|Represents an XML file.
[YamlFile](#projen-yamlfile)|Represents a YAML file.
[awscdk.AutoDiscover](#projen-awscdk-autodiscover)|Discovers and creates integration tests and lambdas from code in the project's source and test trees.
[awscdk.AwsCdkConstructLibrary](#projen-awscdk-awscdkconstructlibrary)|AWS CDK construct library project.
[awscdk.AwsCdkDeps](#projen-awscdk-awscdkdeps)|Manages dependencies on the AWS CDK.
[awscdk.AwsCdkDepsJava](#projen-awscdk-awscdkdepsjava)|Manages dependencies on the AWS CDK for Java projects.
[awscdk.AwsCdkDepsJs](#projen-awscdk-awscdkdepsjs)|Manages dependencies on the AWS CDK for Node.js projects.
[awscdk.AwsCdkJavaApp](#projen-awscdk-awscdkjavaapp)|AWS CDK app in Java.
[awscdk.AwsCdkPythonApp](#projen-awscdk-awscdkpythonapp)|AWS CDK app in Python.
[awscdk.AwsCdkTypeScriptApp](#projen-awscdk-awscdktypescriptapp)|AWS CDK app in TypeScript.
[awscdk.CdkConfig](#projen-awscdk-cdkconfig)|Represents cdk.json file.
[awscdk.CdkTasks](#projen-awscdk-cdktasks)|Adds standard AWS CDK tasks to your project.
[awscdk.ConstructLibraryAws](#projen-awscdk-constructlibraryaws)|*No description*
[awscdk.EdgeLambdaAutoDiscover](#projen-awscdk-edgelambdaautodiscover)|Creates edge lambdas from entry points discovered in the project's source tree.
[awscdk.IntegrationTest](#projen-awscdk-integrationtest)|Cloud integration tests.
[awscdk.IntegrationTestAutoDiscover](#projen-awscdk-integrationtestautodiscover)|Creates integration tests from entry points discovered in the test tree.
[awscdk.LambdaAutoDiscover](#projen-awscdk-lambdaautodiscover)|Creates lambdas from entry points discovered in the project's source tree.
[awscdk.LambdaExtension](#projen-awscdk-lambdaextension)|Create a Lambda Extension.
[awscdk.LambdaExtensionAutoDiscover](#projen-awscdk-lambdaextensionautodiscover)|Creates Lambda Extensions from entrypoints discovered in the project's source tree.
[awscdk.LambdaFunction](#projen-awscdk-lambdafunction)|Generates a pre-bundled AWS Lambda function construct from handler code.
[awscdk.LambdaRuntime](#projen-awscdk-lambdaruntime)|The runtime for the AWS Lambda function.
[build.BuildWorkflow](#projen-build-buildworkflow)|*No description*
[cdk.AutoDiscoverBase](#projen-cdk-autodiscoverbase)|Base class for auto-discovering and creating project subcomponents.
[cdk.ConstructLibrary](#projen-cdk-constructlibrary)|A multi-language library for CDK constructs.
[cdk.IntegrationTestAutoDiscoverBase](#projen-cdk-integrationtestautodiscoverbase)|Base class for locating integration tests in the project's test tree.
[cdk.IntegrationTestBase](#projen-cdk-integrationtestbase)|*No description*
[cdk.JsiiDocgen](#projen-cdk-jsiidocgen)|Creates a markdown file based on the jsii manifest: - Adds a `docgen` script to package.json - Runs `jsii-docgen` after compilation - Enforces that markdown file is checked in.
[cdk.JsiiProject](#projen-cdk-jsiiproject)|Multi-language jsii library project.
[cdk8s.AutoDiscover](#projen-cdk8s-autodiscover)|Automatically discovers and creates `IntegrationTest`s from entry points found in the test tree.
[cdk8s.Cdk8sDeps](#projen-cdk8s-cdk8sdeps)|Manages dependencies on the CDK8s.
[cdk8s.Cdk8sDepsPy](#projen-cdk8s-cdk8sdepspy)|*No description*
[cdk8s.Cdk8sPythonApp](#projen-cdk8s-cdk8spythonapp)|CDK8s app in Python.
[cdk8s.Cdk8sTypeScriptApp](#projen-cdk8s-cdk8stypescriptapp)|CDK8s app in TypeScript.
[cdk8s.ConstructLibraryCdk8s](#projen-cdk8s-constructlibrarycdk8s)|CDK8s construct library project.
[cdk8s.IntegrationTest](#projen-cdk8s-integrationtest)|CDK8S integration test.
[cdk8s.IntegrationTestAutoDiscover](#projen-cdk8s-integrationtestautodiscover)|Discovers and creates integration tests from files in the test root.
[cdktf.ConstructLibraryCdktf](#projen-cdktf-constructlibrarycdktf)|CDKTF construct library project.
[circleci.Circleci](#projen-circleci-circleci)|Circleci Class to manage `.circleci/config.yml`. Check projen's docs for more information.
[github.AutoApprove](#projen-github-autoapprove)|Auto approve pull requests that meet a criteria.
[github.AutoMerge](#projen-github-automerge)|Sets up mergify to merging approved pull requests.
[github.Dependabot](#projen-github-dependabot)|Defines dependabot configuration for node projects.
[github.GitHub](#projen-github-github)|*No description*
[github.GitHubProject](#projen-github-githubproject)|GitHub-based project.
[github.GithubCredentials](#projen-github-githubcredentials)|Represents a method of providing GitHub API access for projen workflows.
[github.GithubWorkflow](#projen-github-githubworkflow)|Workflow for GitHub.
[github.Mergify](#projen-github-mergify)|*No description*
[github.PullRequestLint](#projen-github-pullrequestlint)|Configure validations to run on GitHub pull requests.
[github.PullRequestTemplate](#projen-github-pullrequesttemplate)|Template for GitHub pull requests.
[github.Stale](#projen-github-stale)|Warns and then closes issues and PRs that have had no activity for a specified amount of time.
[github.TaskWorkflow](#projen-github-taskworkflow)|A GitHub workflow for common build tasks within a project.
[gitlab.CiConfiguration](#projen-gitlab-ciconfiguration)|CI for GitLab.
[gitlab.GitlabConfiguration](#projen-gitlab-gitlabconfiguration)|A GitLab CI for the main `.gitlab-ci.yml` file.
[gitlab.NestedConfiguration](#projen-gitlab-nestedconfiguration)|A GitLab CI for templates that are created and included in the `.gitlab-ci.yml` file.
[java.JavaProject](#projen-java-javaproject)|Java project.
[java.Junit](#projen-java-junit)|Implements JUnit-based testing.
[java.MavenCompile](#projen-java-mavencompile)|Adds the maven-compiler plugin to a POM file and the `compile` task.
[java.MavenPackaging](#projen-java-mavenpackaging)|Configures a maven project to produce a .jar archive with sources and javadocs.
[java.MavenSample](#projen-java-mavensample)|Java code sample.
[java.Pom](#projen-java-pom)|A Project Object Model or POM is the fundamental unit of work in Maven.
[java.Projenrc](#projen-java-projenrc)|Allows writing projenrc files in java.
[javascript.Bundler](#projen-javascript-bundler)|Adds support for bundling JavaScript applications and dependencies into a single file.
[javascript.Eslint](#projen-javascript-eslint)|Represents eslint configuration.
[javascript.Jest](#projen-javascript-jest)|Installs the following npm scripts:.
[javascript.NodePackage](#projen-javascript-nodepackage)|Represents the npm `package.json` file.
[javascript.NodeProject](#projen-javascript-nodeproject)|Node.js project.
[javascript.NpmConfig](#projen-javascript-npmconfig)|File representing the local NPM config in .npmrc.
[javascript.Prettier](#projen-javascript-prettier)|Represents prettier configuration.
[javascript.Projenrc](#projen-javascript-projenrc)|Sets up a javascript project to use TypeScript for projenrc.
[javascript.TypescriptConfig](#projen-javascript-typescriptconfig)|*No description*
[javascript.UpgradeDependencies](#projen-javascript-upgradedependencies)|Upgrade node project dependencies.
[javascript.UpgradeDependenciesSchedule](#projen-javascript-upgradedependenciesschedule)|How often to check for new versions and raise pull requests for version upgrades.
[python.Pip](#projen-python-pip)|Manages dependencies using a requirements.txt file and the pip CLI tool.
[python.Poetry](#projen-python-poetry)|Manage project dependencies, virtual environments, and packaging through the poetry CLI tool.
[python.PoetryPyproject](#projen-python-poetrypyproject)|Represents configuration of a pyproject.toml file for a Poetry project.
[python.Projenrc](#projen-python-projenrc)|Allows writing projenrc files in python.
[python.Pytest](#projen-python-pytest)|*No description*
[python.PytestSample](#projen-python-pytestsample)|Python test code sample.
[python.PythonProject](#projen-python-pythonproject)|Python project.
[python.PythonSample](#projen-python-pythonsample)|Python code sample.
[python.RequirementsFile](#projen-python-requirementsfile)|Specifies a list of packages to be installed using pip.
[python.SetupPy](#projen-python-setuppy)|Python packaging script where package metadata can be placed.
[python.Setuptools](#projen-python-setuptools)|Manages packaging through setuptools with a setup.py script.
[python.Venv](#projen-python-venv)|Manages a virtual environment through the Python venv module.
[release.Publisher](#projen-release-publisher)|Implements GitHub jobs for publishing modules to package managers.
[release.Release](#projen-release-release)|Manages releases (currently through GitHub workflows).
[release.ReleaseTrigger](#projen-release-releasetrigger)|Used to manage release strategies.
[typescript.Projenrc](#projen-typescript-projenrc)|Sets up a typescript project to use TypeScript for projenrc.
[typescript.TypeScriptAppProject](#projen-typescript-typescriptappproject)|TypeScript app.
[typescript.TypeScriptLibraryProject](#projen-typescript-typescriptlibraryproject)|*No description*
[typescript.TypeScriptProject](#projen-typescript-typescriptproject)|TypeScript project.
[typescript.TypedocDocgen](#projen-typescript-typedocdocgen)|Adds a simple Typescript documentation generator.
[vscode.DevContainer](#projen-vscode-devcontainer)|A development environment running VSCode in a container;
[vscode.VsCode](#projen-vscode-vscode)|*No description*
[vscode.VsCodeLaunchConfig](#projen-vscode-vscodelaunchconfig)|VSCode launch configuration file (launch.json), useful for enabling in-editor debugger.
[vscode.VsCodeRecommendedExtensions](#projen-vscode-vscoderecommendedextensions)|VS Code Workspace recommended extensions Source: https://code.visualstudio.com/docs/editor/extension-marketplace#_workspace-recommended-extensions.
[vscode.VsCodeSettings](#projen-vscode-vscodesettings)|VS Code Workspace settings Source: https://code.visualstudio.com/docs/getstarted/settings#_workspace-settings.
[web.NextComponent](#projen-web-nextcomponent)|*No description*
[web.NextJsProject](#projen-web-nextjsproject)|Next.js project without TypeScript.
[web.NextJsTypeScriptProject](#projen-web-nextjstypescriptproject)|Next.js project with TypeScript.
[web.PostCss](#projen-web-postcss)|Declares a PostCSS dependency with a default config file.
[web.ReactComponent](#projen-web-reactcomponent)|*No description*
[web.ReactProject](#projen-web-reactproject)|React project without TypeScript.
[web.ReactTypeDef](#projen-web-reacttypedef)|*No description*
[web.ReactTypeScriptProject](#projen-web-reacttypescriptproject)|React project with TypeScript.
[web.TailwindConfig](#projen-web-tailwindconfig)|Declares a Tailwind CSS configuration file.
**Structs**
Name|Description
----|-----------
[CreateProjectOptions](#projen-createprojectoptions)|*No description*
[Dependency](#projen-dependency)|Represents a project dependency.
[DependencyCoordinates](#projen-dependencycoordinates)|Coordinates of the dependency (name and version).
[DepsManifest](#projen-depsmanifest)|*No description*
[DevEnvironmentOptions](#projen-devenvironmentoptions)|Base options for configuring a container-based development environment.
[DockerComposeBuild](#projen-dockercomposebuild)|Build arguments for creating a docker image.
[DockerComposePortMappingOptions](#projen-dockercomposeportmappingoptions)|Options for port mappings.
[DockerComposeProps](#projen-dockercomposeprops)|Props for DockerCompose.
[DockerComposeServiceDescription](#projen-dockercomposeservicedescription)|Description of a docker-compose.yml service.
[DockerComposeServicePort](#projen-dockercomposeserviceport)|A service port mapping.
[DockerComposeVolumeConfig](#projen-dockercomposevolumeconfig)|Volume configuration.
[DockerComposeVolumeMount](#projen-dockercomposevolumemount)|Service volume mounting information.
[FileBaseOptions](#projen-filebaseoptions)|*No description*
[GitpodOptions](#projen-gitpodoptions)|Constructor options for the Gitpod component.
[GitpodPort](#projen-gitpodport)|Options for an exposed port on Gitpod.
[GitpodPrebuilds](#projen-gitpodprebuilds)|Configure the Gitpod App for prebuilds.
[GitpodTask](#projen-gitpodtask)|Configure options for a task to be run when opening a Gitpod workspace (e.g. running tests, or starting a dev server).
[IniFileOptions](#projen-inifileoptions)|Options for `IniFile`.
[InitProject](#projen-initproject)|Information passed from `projen new` to the project object when the project is first created.
[JsonFileOptions](#projen-jsonfileoptions)|Options for `JsonFile`.
[LicenseOptions](#projen-licenseoptions)|*No description*
[LoggerOptions](#projen-loggeroptions)|Options for logging utilities.
[MakefileOptions](#projen-makefileoptions)|Options for Makefiles.
[ObjectFileOptions](#projen-objectfileoptions)|Options for `ObjectFile`.
[ProjectOptions](#projen-projectoptions)|Options for `Project`.
[ProjenrcOptions](#projen-projenrcoptions)|*No description*
[RenovatebotOptions](#projen-renovatebotoptions)|Options for Renovatebot.
[ResolveOptions](#projen-resolveoptions)|Resolve options.
[Rule](#projen-rule)|A Make rule.
[SampleDirOptions](#projen-samplediroptions)|SampleDir options.
[SampleFileOptions](#projen-samplefileoptions)|Options for the SampleFile object.
[SampleReadmeProps](#projen-samplereadmeprops)|SampleReadme Properties.
[SnapshotOptions](#projen-snapshotoptions)|Options for the Snapshot synthesis.
[SourceCodeOptions](#projen-sourcecodeoptions)|Options for `SourceCodeFile`.
[TaskCommonOptions](#projen-taskcommonoptions)|*No description*
[TaskOptions](#projen-taskoptions)|*No description*
[TaskSpec](#projen-taskspec)|Specification of a single task.
[TaskStep](#projen-taskstep)|A single step within a task.
[TaskStepOptions](#projen-taskstepoptions)|Options for task steps.
[TasksManifest](#projen-tasksmanifest)|Schema for `tasks.json`.
[TextFileOptions](#projen-textfileoptions)|Options for `TextFile`.
[TomlFileOptions](#projen-tomlfileoptions)|Options for `TomlFile`.
[VersionOptions](#projen-versionoptions)|Options for `Version`.
[XmlFileOptions](#projen-xmlfileoptions)|Options for `XmlFile`.
[YamlFileOptions](#projen-yamlfileoptions)|Options for `JsonFile`.
[awscdk.AutoDiscoverCommonOptions](#projen-awscdk-autodiscovercommonoptions)|Common options for auto discovering project subcomponents.
[awscdk.AutoDiscoverOptions](#projen-awscdk-autodiscoveroptions)|Options for `AutoDiscover`.
[awscdk.AwsCdkConstructLibraryOptions](#projen-awscdk-awscdkconstructlibraryoptions)|Options for `AwsCdkConstructLibrary`.
[awscdk.AwsCdkDepsCommonOptions](#projen-awscdk-awscdkdepscommonoptions)|Options for `AwsCdkDeps`.
[awscdk.AwsCdkDepsOptions](#projen-awscdk-awscdkdepsoptions)|*No description*
[awscdk.AwsCdkJavaAppOptions](#projen-awscdk-awscdkjavaappoptions)|*No description*
[awscdk.AwsCdkPackageNames](#projen-awscdk-awscdkpackagenames)|Language-specific AWS CDK package names.
[awscdk.AwsCdkPythonAppOptions](#projen-awscdk-awscdkpythonappoptions)|Options for `AwsCdkPythonApp`.
[awscdk.AwsCdkTypeScriptAppOptions](#projen-awscdk-awscdktypescriptappoptions)|*No description*
[awscdk.CdkConfigCommonOptions](#projen-awscdk-cdkconfigcommonoptions)|Common options for `cdk.json`.
[awscdk.CdkConfigOptions](#projen-awscdk-cdkconfigoptions)|Options for `CdkJson`.
[awscdk.ConstructLibraryAwsOptions](#projen-awscdk-constructlibraryawsoptions)|*No description*
[awscdk.EdgeLambdaAutoDiscoverOptions](#projen-awscdk-edgelambdaautodiscoveroptions)|Options for `EdgeLambdaAutoDiscover`.
[awscdk.IntegrationTestAutoDiscoverOptions](#projen-awscdk-integrationtestautodiscoveroptions)|Options for `IntegrationTestAutoDiscover`.
[awscdk.IntegrationTestCommonOptions](#projen-awscdk-integrationtestcommonoptions)|*No description*
[awscdk.IntegrationTestOptions](#projen-awscdk-integrationtestoptions)|Options for `IntegrationTest`.
[awscdk.LambdaAutoDiscoverOptions](#projen-awscdk-lambdaautodiscoveroptions)|Options for `LambdaAutoDiscover`.
[awscdk.LambdaExtensionAutoDiscoverOptions](#projen-awscdk-lambdaextensionautodiscoveroptions)|Options for `LambdaExtensionAutoDiscover`.
[awscdk.LambdaExtensionCommonOptions](#projen-awscdk-lambdaextensioncommonoptions)|Common options for creating lambda extensions.
[awscdk.LambdaExtensionOptions](#projen-awscdk-lambdaextensionoptions)|Options for creating lambda extensions.
[awscdk.LambdaFunctionCommonOptions](#projen-awscdk-lambdafunctioncommonoptions)|Common options for `LambdaFunction`.
[awscdk.LambdaFunctionOptions](#projen-awscdk-lambdafunctionoptions)|Options for `Function`.
[build.AddPostBuildJobCommandsOptions](#projen-build-addpostbuildjobcommandsoptions)|Options for `BuildWorkflow.addPostBuildJobCommands`.
[build.AddPostBuildJobTaskOptions](#projen-build-addpostbuildjobtaskoptions)|Options for `BuildWorkflow.addPostBuildJobTask`.
[build.BuildWorkflowOptions](#projen-build-buildworkflowoptions)|*No description*
[cdk.AutoDiscoverBaseOptions](#projen-cdk-autodiscoverbaseoptions)|Options for `AutoDiscoverBase`.
[cdk.Catalog](#projen-cdk-catalog)|*No description*
[cdk.ConstructLibraryOptions](#projen-cdk-constructlibraryoptions)|*No description*
[cdk.IntegrationTestAutoDiscoverBaseOptions](#projen-cdk-integrationtestautodiscoverbaseoptions)|Options for `IntegrationTestAutoDiscoverBase`.
[cdk.IntegrationTestBaseOptions](#projen-cdk-integrationtestbaseoptions)|Options for IntegrationTest.
[cdk.JsiiDocgenOptions](#projen-cdk-jsiidocgenoptions)|Options for `JsiiDocgen`.
[cdk.JsiiDotNetTarget](#projen-cdk-jsiidotnettarget)|*No description*
[cdk.JsiiGoTarget](#projen-cdk-jsiigotarget)|Go target configuration.
[cdk.JsiiJavaTarget](#projen-cdk-jsiijavatarget)|*No description*
[cdk.JsiiProjectOptions](#projen-cdk-jsiiprojectoptions)|*No description*
[cdk.JsiiPythonTarget](#projen-cdk-jsiipythontarget)|*No description*
[cdk8s.AutoDiscoverOptions](#projen-cdk8s-autodiscoveroptions)|Options for `AutoDiscover`.
[cdk8s.Cdk8sDepsCommonOptions](#projen-cdk8s-cdk8sdepscommonoptions)|Options for `Cdk8sDeps`.
[cdk8s.Cdk8sDepsOptions](#projen-cdk8s-cdk8sdepsoptions)|*No description*
[cdk8s.Cdk8sPackageNames](#projen-cdk8s-cdk8spackagenames)|*No description*
[cdk8s.Cdk8sPythonOptions](#projen-cdk8s-cdk8spythonoptions)|Options for `Cdk8sPythonApp`.
[cdk8s.Cdk8sTypeScriptAppOptions](#projen-cdk8s-cdk8stypescriptappoptions)|*No description*
[cdk8s.ConstructLibraryCdk8sOptions](#projen-cdk8s-constructlibrarycdk8soptions)|*No description*
[cdk8s.IntegrationTestAutoDiscoverOptions](#projen-cdk8s-integrationtestautodiscoveroptions)|*No description*
[cdk8s.IntegrationTestOptions](#projen-cdk8s-integrationtestoptions)|Options for IntegrationTest.
[cdktf.ConstructLibraryCdktfOptions](#projen-cdktf-constructlibrarycdktfoptions)|*No description*
[circleci.CircleCiProps](#projen-circleci-circleciprops)|Options for class {@link Circleci}.
[circleci.Docker](#projen-circleci-docker)|Options for docker executor.
[circleci.Filter](#projen-circleci-filter)|The branches key controls whether the current branch should have a schedule trigger created for it, where current branch is the branch containing the config.yml file with the trigger stanza. That is, a push on the main branch will only schedule a workflow for the main branch.
[circleci.FilterConfig](#projen-circleci-filterconfig)|set an inclusive or exclusive filter.
[circleci.Job](#projen-circleci-job)|A Workflow is comprised of one or more uniquely named jobs.
[circleci.Machine](#projen-circleci-machine)|*No description*
[circleci.Macos](#projen-circleci-macos)|CircleCI supports running jobs on macOS, to allow you to build, test, and deploy apps for macOS, iOS, tvOS and watchOS.
[circleci.Matrix](#projen-circleci-matrix)|The matrix stanza allows you to run a parameterized job multiple times with different arguments.
[circleci.PipelineParameter](#projen-circleci-pipelineparameter)|Parameters are declared by name under a job, command, or executor.
[circleci.Run](#projen-circleci-run)|Used for invoking all command-line programs, taking either a map of configuration values, or, when called in its short-form, a string that will be used as both the command and name.
[circleci.Schedule](#projen-circleci-schedule)|A workflow may have a schedule indicating it runs at a certain time.
[circleci.StepRun](#projen-circleci-steprun)|Execution steps for Job.
[circleci.Triggers](#projen-circleci-triggers)|Specifies which triggers will cause this workflow to be executed.
[circleci.Workflow](#projen-circleci-workflow)|Used for orchestrating all jobs.
[circleci.WorkflowJob](#projen-circleci-workflowjob)|A Job is part of Workflow.
[github.AutoApproveOptions](#projen-github-autoapproveoptions)|Options for 'AutoApprove'.
[github.AutoMergeOptions](#projen-github-automergeoptions)|*No description*
[github.DependabotIgnore](#projen-github-dependabotignore)|You can use the `ignore` option to customize which dependencies are updated.
[github.DependabotOptions](#projen-github-dependabotoptions)|*No description*
[github.DependabotRegistry](#projen-github-dependabotregistry)|Use to add private registry support for dependabot.
[github.GitHubOptions](#projen-github-githuboptions)|*No description*
[github.GitHubProjectOptions](#projen-github-githubprojectoptions)|Options for `GitHubProject`.
[github.GitIdentity](#projen-github-gitidentity)|Represents the git identity.
[github.GithubCredentialsAppOptions](#projen-github-githubcredentialsappoptions)|Options for `GithubCredentials.fromApp`.
[github.GithubCredentialsPersonalAccessTokenOptions](#projen-github-githubcredentialspersonalaccesstokenoptions)|Options for `GithubCredentials.fromPersonalAccessToken`.
[github.GithubWorkflowOptions](#projen-github-githubworkflowoptions)|Options for `GithubWorkflow`.
[github.MergifyConditionalOperator](#projen-github-mergifyconditionaloperator)|The Mergify conditional operators that can be used are: `or` and `and`.
[github.MergifyOptions](#projen-github-mergifyoptions)|*No description*
[github.MergifyQueue](#projen-github-mergifyqueue)|*No description*
[github.MergifyRule](#projen-github-mergifyrule)|*No description*
[github.PullRequestLintOptions](#projen-github-pullrequestlintoptions)|Options for PullRequestLint.
[github.PullRequestTemplateOptions](#projen-github-pullrequesttemplateoptions)|Options for `PullRequestTemplate`.
[github.SemanticTitleOptions](#projen-github-semantictitleoptions)|Options for linting that PR titles follow Conventional Commits.
[github.StaleBehavior](#projen-github-stalebehavior)|Stale behavior.
[github.StaleOptions](#projen-github-staleoptions)|Options for `Stale`.
[github.TaskWorkflowOptions](#projen-github-taskworkflowoptions)|*No description*
[gitlab.AllowFailure](#projen-gitlab-allowfailure)|Exit code that are not considered failure.
[gitlab.Artifacts](#projen-gitlab-artifacts)|Used to specify a list of files and directories that should be attached to the job if it succeeds.
[gitlab.Assets](#projen-gitlab-assets)|Asset configuration for a release.
[gitlab.Cache](#projen-gitlab-cache)|Cache Definition.
[gitlab.CacheKeyFiles](#projen-gitlab-cachekeyfiles)|Use this construct to generate a new key when one or two specific files change.
[gitlab.CiConfigurationOptions](#projen-gitlab-ciconfigurationoptions)|Options for `CiConfiguration`.
[gitlab.Default](#projen-gitlab-default)|Default settings for the CI Configuration.
[gitlab.Engine](#projen-gitlab-engine)|The engine configuration for a secret.
[gitlab.Environment](#projen-gitlab-environment)|The environment that a job deploys to.
[gitlab.Filter](#projen-gitlab-filter)|Filtering options for when a job will run.
[gitlab.Image](#projen-gitlab-image)|Specifies the docker image to use for the job or globally for all jobs.
[gitlab.Include](#projen-gitlab-include)|An included YAML file.
[gitlab.IncludeRule](#projen-gitlab-includerule)|Rules allows for an array of individual rule objects to be evaluated in order, until one matches and dynamically provides attributes to the job.
[gitlab.Inherit](#projen-gitlab-inherit)|Controls inheritance of globally-defined defaults and variables.
[gitlab.Job](#projen-gitlab-job)|Jobs are the most fundamental element of a .gitlab-ci.yml file.
[gitlab.KubernetesConfig](#projen-gitlab-kubernetesconfig)|Used to configure the kubernetes deployment for this environment.
[gitlab.Link](#projen-gitlab-link)|Link configuration for an asset.
[gitlab.Need](#projen-gitlab-need)|A jobs in a previous stage whose sole completion is needed to start the current job.
[gitlab.Parallel](#projen-gitlab-parallel)|Used to run a job multiple times in parallel in a single pipeline.
[gitlab.Release](#projen-gitlab-release)|Indicates that the job creates a Release.
[gitlab.Reports](#projen-gitlab-reports)|Reports will be uploaded as artifacts, and often displayed in the Gitlab UI, such as in Merge Requests.
[gitlab.Retry](#projen-gitlab-retry)|How many times a job is retried if it fails.
[gitlab.Secret](#projen-gitlab-secret)|A CI/CD secret.
[gitlab.Service](#projen-gitlab-service)|Used to specify an additional Docker image to run scripts in.
[gitlab.Trigger](#projen-gitlab-trigger)|Trigger a multi-project or a child pipeline.
[gitlab.TriggerInclude](#projen-gitlab-triggerinclude)|References a local file or an artifact from another job to define the pipeline configuration.
[gitlab.VariableConfig](#projen-gitlab-variableconfig)|Explains what the global variable is used for, what the acceptable values are.
[gitlab.VaultConfig](#projen-gitlab-vaultconfig)|Specification for a secret provided by a HashiCorp Vault.
[gitlab.Workflow](#projen-gitlab-workflow)|Used to control pipeline behavior.
[gitlab.WorkflowRule](#projen-gitlab-workflowrule)|Used to control whether or not a whole pipeline is created.
[java.JavaProjectCommonOptions](#projen-java-javaprojectcommonoptions)|Options for `JavaProject`.
[java.JavaProjectOptions](#projen-java-javaprojectoptions)|Options for `JavaProject`.
[java.JunitOptions](#projen-java-junitoptions)|Options for `Junit`.
[java.MavenCompileOptions](#projen-java-mavencompileoptions)|Options for `MavenCompile`.
[java.MavenPackagingOptions](#projen-java-mavenpackagingoptions)|Options for `MavenPackage`.
[java.MavenRepository](#projen-java-mavenrepository)|Represents a Maven repository.
[java.MavenSampleOptions](#projen-java-mavensampleoptions)|*No description*
[java.PluginExecution](#projen-java-pluginexecution)|Plugin execution definition.
[java.PluginOptions](#projen-java-pluginoptions)|Options for Maven plugins.
[java.PomOptions](#projen-java-pomoptions)|Options for `Pom`.
[java.ProjenrcOptions](#projen-java-projenrcoptions)|Options for `Projenrc`.
[javascript.AddBundleOptions](#projen-javascript-addbundleoptions)|Options for `addBundle()`.
[javascript.Bundle](#projen-javascript-bundle)|*No description*
[javascript.BundlerOptions](#projen-javascript-bundleroptions)|Options for `Bundler`.
[javascript.BundlingOptions](#projen-javascript-bundlingoptions)|Options for bundling.
[javascript.CodeArtifactOptions](#projen-javascript-codeartifactoptions)|*No description*
[javascript.CoverageThreshold](#projen-javascript-coveragethreshold)|*No description*
[javascript.EslintOptions](#projen-javascript-eslintoptions)|*No description*
[javascript.EslintOverride](#projen-javascript-eslintoverride)|eslint rules override.
[javascript.HasteConfig](#projen-javascript-hasteconfig)|*No description*
[javascript.JestConfigOptions](#projen-javascript-jestconfigoptions)|*No description*
[javascript.JestOptions](#projen-javascript-jestoptions)|*No description*
[javascript.NodePackageOptions](#projen-javascript-nodepackageoptions)|*No description*
[javascript.NodeProjectOptions](#projen-javascript-nodeprojectoptions)|*No description*
[javascript.NpmConfigOptions](#projen-javascript-npmconfigoptions)|Options to configure the local NPM config.
[javascript.PeerDependencyOptions](#projen-javascript-peerdependencyoptions)|*No description*
[javascript.PrettierOptions](#projen-javascript-prettieroptions)|Options for Prettier.
[javascript.PrettierOverride](#projen-javascript-prettieroverride)|*No description*
[javascript.PrettierSettings](#projen-javascript-prettiersettings)|Options to set in Prettier directly or through overrides.
[javascript.ProjenrcOptions](#projen-javascript-projenrcoptions)|*No description*
[javascript.RenderWorkflowSetupOptions](#projen-javascript-renderworkflowsetupoptions)|Options for `renderInstallSteps()`.
[javascript.ScopedPackagesOptions](#projen-javascript-scopedpackagesoptions)|Options for scoped packages.
[javascript.TypeScriptCompilerOptions](#projen-javascript-typescriptcompileroptions)|*No description*
[javascript.TypescriptConfigOptions](#projen-javascript-typescriptconfigoptions)|*No description*
[javascript.UpgradeDependenciesOptions](#projen-javascript-upgradedependenciesoptions)|Options for `UpgradeDependencies`.
[javascript.UpgradeDependenciesWorkflowOptions](#projen-javascript-upgradedependenciesworkflowoptions)|Options for `UpgradeDependencies.workflowOptions`.
[python.PipOptions](#projen-python-pipoptions)|Options for pip.
[python.PoetryPyprojectOptions](#projen-python-poetrypyprojectoptions)|Poetry-specific options.
[python.PoetryPyprojectOptionsWithoutDeps](#projen-python-poetrypyprojectoptionswithoutdeps)|Poetry-specific options.
[python.ProjenrcOptions](#projen-python-projenrcoptions)|Options for `Projenrc`.
[python.PytestOptions](#projen-python-pytestoptions)|*No description*
[python.PytestSampleOptions](#projen-python-pytestsampleoptions)|Options for python test code sample.
[python.PythonPackagingOptions](#projen-python-pythonpackagingoptions)|*No description*
[python.PythonProjectOptions](#projen-python-pythonprojectoptions)|Options for `PythonProject`.
[python.PythonSampleOptions](#projen-python-pythonsampleoptions)|Options for python sample code.
[python.RequirementsFileOptions](#projen-python-requirementsfileoptions)|*No description*
[python.SetupPyOptions](#projen-python-setuppyoptions)|Fields to pass in the setup() function of setup.py.
[python.VenvOptions](#projen-python-venvoptions)|Options for venv.
[release.BranchOptions](#projen-release-branchoptions)|Options for a release branch.
[release.CodeArtifactOptions](#projen-release-codeartifactoptions)|*No description*
[release.CommonPublishOptions](#projen-release-commonpublishoptions)|Common publishing options.
[release.GitHubReleasesPublishOptions](#projen-release-githubreleasespublishoptions)|Publishing options for GitHub releases.
[release.GitPublishOptions](#projen-release-gitpublishoptions)|Publishing options for Git releases.
[release.GoPublishOptions](#projen-release-gopublishoptions)|Options for Go releases.
[release.JsiiReleaseGo](#projen-release-jsiireleasego)|*No description*
[release.JsiiReleaseMaven](#projen-release-jsiireleasemaven)|*No description*
[release.JsiiReleaseNpm](#projen-release-jsiireleasenpm)|*No description*
[release.JsiiReleaseNuget](#projen-release-jsiireleasenuget)|*No description*
[release.JsiiReleasePyPi](#projen-release-jsiireleasepypi)|*No description*
[release.ManualReleaseOptions](#projen-release-manualreleaseoptions)|*No description*
[release.MavenPublishOptions](#projen-release-mavenpublishoptions)|Options for Maven releases.
[release.NpmPublishOptions](#projen-release-npmpublishoptions)|Options for npm release.
[release.NugetPublishOptions](#projen-release-nugetpublishoptions)|Options for NuGet releases.
[release.PublisherOptions](#projen-release-publisheroptions)|Options for `Publisher`.
[release.PyPiPublishOptions](#projen-release-pypipublishoptions)|Options for PyPI release.
[release.ReleaseOptions](#projen-release-releaseoptions)|Options for `Release`.
[release.ReleaseProjectOptions](#projen-release-releaseprojectoptions)|Project options for release.
[release.ScheduledReleaseOptions](#projen-release-scheduledreleaseoptions)|*No description*
[typescript.ProjenrcOptions](#projen-typescript-projenrcoptions)|*No description*
[typescript.TypeScriptLibraryProjectOptions](#projen-typescript-typescriptlibraryprojectoptions)|*No description*
[typescript.TypeScriptProjectOptions](#projen-typescript-typescriptprojectoptions)|*No description*
[vscode.DevContainerOptions](#projen-vscode-devcontaineroptions)|Constructor options for the DevContainer component.
[vscode.Presentation](#projen-vscode-presentation)|VSCode launch configuration Presentation interface "using the order, group, and hidden attributes in the presentation object you can sort, group, and hide configurations and compounds in the Debug configuration dropdown and in the Debug quick pick." Source: https://code.visualstudio.com/docs/editor/debugging#_launchjson-attributes.
[vscode.ServerReadyAction](#projen-vscode-serverreadyaction)|VSCode launch configuration ServerReadyAction interface "if you want to open a URL in a web browser whenever the program under debugging outputs a specific message to the debug console or integrated terminal." Source: https://code.visualstudio.com/docs/editor/debugging#_launchjson-attributes.
[vscode.VsCodeLaunchConfigurationEntry](#projen-vscode-vscodelaunchconfigurationentry)|Options for a 'VsCodeLaunchConfigurationEntry' Source: https://code.visualstudio.com/docs/editor/debugging#_launchjson-attributes.
[web.NextComponentOptions](#projen-web-nextcomponentoptions)|*No description*
[web.NextJsCommonProjectOptions](#projen-web-nextjscommonprojectoptions)|*No description*
[web.NextJsProjectOptions](#projen-web-nextjsprojectoptions)|*No description*
[web.NextJsTypeScriptProjectOptions](#projen-web-nextjstypescriptprojectoptions)|*No description*
[web.PostCssOptions](#projen-web-postcssoptions)|*No description*
[web.ReactComponentOptions](#projen-web-reactcomponentoptions)|*No description*
[web.ReactProjectOptions](#projen-web-reactprojectoptions)|*No description*
[web.ReactRewireOptions](#projen-web-reactrewireoptions)|*No description*
[web.ReactTypeDefOptions](#projen-web-reacttypedefoptions)|*No description*
[web.ReactTypeScriptProjectOptions](#projen-web-reacttypescriptprojectoptions)|*No description*
[web.TailwindConfigOptions](#projen-web-tailwindconfigoptions)|*No description*
**Interfaces**
Name|Description
----|-----------
[IDevEnvironment](#projen-idevenvironment)|Abstract interface for container-based development environments, such as Gitpod and GitHub Codespaces.
[IDockerComposeServiceName](#projen-idockercomposeservicename)|An interface providing the name of a docker compose service.
[IDockerComposeVolumeBinding](#projen-idockercomposevolumebinding)|Volume binding information.
[IDockerComposeVolumeConfig](#projen-idockercomposevolumeconfig)|Storage for volume configuration.
[IResolvable](#projen-iresolvable)|*No description*
[IResolver](#projen-iresolver)|API for resolving tokens when synthesizing file content.
[github.IAddConditionsLater](#projen-github-iaddconditionslater)|*No description*
[github.IJobProvider](#projen-github-ijobprovider)|*No description*
[python.IPackageProvider](#projen-python-ipackageprovider)|*No description*
[python.IPythonDeps](#projen-python-ipythondeps)|*No description*
[python.IPythonEnv](#projen-python-ipythonenv)|*No description*
[python.IPythonPackaging](#projen-python-ipythonpackaging)|*No description*
**Enums**
Name|Description
----|-----------
[DependencyType](#projen-dependencytype)|Type of dependency.
[DockerComposeProtocol](#projen-dockercomposeprotocol)|Network protocol for port mapping.
[GitpodOnOpen](#projen-gitpodonopen)|What to do when a service on a port is detected.
[GitpodOpenIn](#projen-gitpodopenin)|Configure where in the IDE the terminal should be opened.
[GitpodOpenMode](#projen-gitpodopenmode)|Configure how the terminal should be opened relative to the previous task.
[GitpodPortVisibility](#projen-gitpodportvisibility)|Whether the port visibility should be private or public.
[InitProjectOptionHints](#projen-initprojectoptionhints)|Choices for how to display commented out options in projenrc files.
[LogLevel](#projen-loglevel)|Logging verbosity.
[ProjectType](#projen-projecttype)|Which type of project this is.
[RenovatebotScheduleInterval](#projen-renovatebotscheduleinterval)|How often to check for new versions and raise pull requests for version updates.
[awscdk.ApprovalLevel](#projen-awscdk-approvallevel)|Which approval is required when deploying CDK apps.
[cdk.Stability](#projen-cdk-stability)|*No description*
[circleci.JobType](#projen-circleci-jobtype)|A job may have a type of approval indicating it must be manually approved before downstream jobs may proceed.
[circleci.JobWhen](#projen-circleci-jobwhen)|Specify when to enable or disable the step.
[circleci.PipelineParameterType](#projen-circleci-pipelineparametertype)|Pipeline parameter types.
[circleci.ResourceClass](#projen-circleci-resourceclass)|The resource_class feature allows configuring CPU and RAM resources for each job.
[github.DependabotRegistryType](#projen-github-dependabotregistrytype)|Each configuration type requires you to provide particular settings.
[github.DependabotScheduleInterval](#projen-github-dependabotscheduleinterval)|How often to check for new versions and raise pull requests for version updates.
[github.VersioningStrategy](#projen-github-versioningstrategy)|The strategy to use when edits manifest and lock files.
[gitlab.Action](#projen-gitlab-action)|Specifies what this job will do.
[gitlab.CachePolicy](#projen-gitlab-cachepolicy)|Configure the upload and download behaviour of a cache.
[gitlab.CacheWhen](#projen-gitlab-cachewhen)|Configure when artifacts are uploaded depended on job status.
[gitlab.DefaultElement](#projen-gitlab-defaultelement)|*No description*
[gitlab.DeploymentTier](#projen-gitlab-deploymenttier)|Explicitly specifies the tier of the deployment environment if non-standard environment name is used.
[gitlab.JobWhen](#projen-gitlab-jobwhen)|Describes the conditions for when to run the job.
[gitlab.KubernetesEnum](#projen-gitlab-kubernetesenum)|Filter job based on if Kubernetes integration is active.
[gitlab.LinkType](#projen-gitlab-linktype)|The content kind of what users can download via url.
[gitlab.Strategy](#projen-gitlab-strategy)|You can mirror the pipeline status from the triggered pipeline to the source bridge job by using strategy: depend.
[gitlab.WorkflowWhen](#projen-gitlab-workflowwhen)|Describes the conditions for when to run the job.
[javascript.ArrowParens](#projen-javascript-arrowparens)|*No description*
[javascript.AutoRelease](#projen-javascript-autorelease)|Automatic bump modes.
[javascript.EmbeddedLanguageFormatting](#projen-javascript-embeddedlanguageformatting)|*No description*
[javascript.EndOfLine](#projen-javascript-endofline)|*No description*
[javascript.HTMLWhitespaceSensitivity](#projen-javascript-htmlwhitespacesensitivity)|*No description*
[javascript.NodePackageManager](#projen-javascript-nodepackagemanager)|The node package manager to use.
[javascript.NpmAccess](#projen-javascript-npmaccess)|Npm package access level.
[javascript.ProseWrap](#projen-javascript-prosewrap)|*No description*
[javascript.QuoteProps](#projen-javascript-quoteprops)|*No description*
[javascript.TrailingComma](#projen-javascript-trailingcomma)|*No description*
[javascript.TypeScriptJsxMode](#projen-javascript-typescriptjsxmode)|Determines how JSX should get transformed into valid JavaScript.
[javascript.TypeScriptModuleResolution](#projen-javascript-typescriptmoduleresolution)|Determines how modules get resolved.
[vscode.Console](#projen-vscode-console)|Controls where to launch the debug target Source: https://code.visualstudio.com/docs/editor/debugging#_launchjson-attributes.
[vscode.InternalConsoleOptions](#projen-vscode-internalconsoleoptions)|Controls the visibility of the VSCode Debug Console panel during a debugging session Source: https://code.visualstudio.com/docs/editor/debugging#_launchjson-attributes.
## class Component 🔹 <a id="projen-component"></a>
Represents a project component.
### Initializer
```ts
new Component(project: Project)
```
* **project** (<code>[Project](#projen-project)</code>) *No description*
### Properties
Name | Type | Description
-----|------|-------------
**project**🔹 | <code>[Project](#projen-project)</code> | <span></span>
### Methods
#### postSynthesize()🔹 <a id="projen-component-postsynthesize"></a>
Called after synthesis.
Order is *not* guaranteed.
```ts
postSynthesize(): void
```
#### preSynthesize()🔹 <a id="projen-component-presynthesize"></a>
Called before synthesis.
```ts
preSynthesize(): void
```
#### synthesize()🔹 <a id="projen-component-synthesize"></a>
Synthesizes files to the project output directory.
```ts
synthesize(): void
```
## class Dependencies 🔹 <a id="projen-dependencies"></a>
The `Dependencies` component is responsible to track the list of dependencies a project has, and then used by project types as the model for rendering project-specific dependency manifests such as the dependencies section `package.json` files.
To add a dependency you can use a project-type specific API such as
`nodeProject.addDeps()` or use the generic API of `project.deps`:
__Extends__: [Component](#projen-component)
### Initializer
Adds a dependencies component to the project.
```ts
new Dependencies(project: Project)
```
* **project** (<code>[Project](#projen-project)</code>) The parent project.
### Properties
Name | Type | Description
-----|------|-------------
**all**🔹 | <code>Array<[Dependency](#projen-dependency)></code> | A copy of all dependencies recorded for this project.
*static* **MANIFEST_FILE**🔹 | <code>string</code> | The project-relative path of the deps manifest file.
### Methods
#### addDependency(spec, type, metadata?)🔹 <a id="projen-dependencies-adddependency"></a>
Adds a dependency to this project.
```ts
addDependency(spec: string, type: DependencyType, metadata?: Map<string, any>): Dependency
```
* **spec** (<code>string</code>) The dependency spec in the format `MODULE[@VERSION]` where `MODULE` is the package-manager-specific module name and `VERSION` is an optional semantic version requirement (e.g. `^3.4.0`).
* **type** (<code>[DependencyType](#projen-dependencytype)</code>) The type of the dependency.
* **metadata** (<code>Map<string, any></code>) *No description*
__Returns__:
* <code>[Dependency](#projen-dependency)</code>
#### getDependency(name, type?)🔹 <a id="projen-dependencies-getdependency"></a>
Returns a dependency by name.
Fails if there is no dependency defined by that name or if `type` is not
provided and there is more then one dependency type for this dependency.
```ts
getDependency(name: string, type?: DependencyType): Dependency
```
* **name** (<code>string</code>) The name of the dependency.
* **type** (<code>[DependencyType](#projen-dependencytype)</code>) The dependency type.
__Returns__:
* <code>[Dependency](#projen-dependency)</code>
#### removeDependency(name, type?)🔹 <a id="projen-dependencies-removedependency"></a>
Removes a dependency.
```ts
removeDependency(name: string, type?: DependencyType): void
```
* **name** (<code>string</code>) The name of the module to remove (without the version).
* **type** (<code>[DependencyType](#projen-dependencytype)</code>) The dependency type.
#### tryGetDependency(name, type?)🔹 <a id="projen-dependencies-trygetdependency"></a>
Returns a dependency by name.
Returns `undefined` if there is no dependency defined by that name or if
`type` is not provided and there is more then one dependency type for this
dependency.
```ts
tryGetDependency(name: string, type?: DependencyType): Dependency
```
* **name** (<code>string</code>) The name of the dependency.
* **type** (<code>[DependencyType](#projen-dependencytype)</code>) The dependency type.
__Returns__:
* <code>[Dependency](#projen-dependency)</code>
#### *static* parseDependency(spec)🔹 <a id="projen-dependencies-parsedependency"></a>
Returns the coordinates of a dependency spec.
Given `foo@^3.4.0` returns `{ name: "foo", version: "^3.4.0" }`.
Given `bar@npm:@bar/legacy` returns `{ name: "bar", version: "npm:@bar/legacy" }`.
```ts
static parseDependency(spec: string): DependencyCoordinates
```
* **spec** (<code>string</code>) *No description*
__Returns__:
* <code>[DependencyCoordinates](#projen-dependencycoordinates)</code>
## class DevEnvironmentDockerImage 🔹 <a id="projen-devenvironmentdockerimage"></a>
Options for specifying the Docker image of the container.
### Properties
Name | Type | Description
-----|------|-------------
**dockerFile**?🔹 | <code>string</code> | The relative path of a Dockerfile that defines the container contents.<br/>__*Optional*__
**image**?🔹 | <code>string</code> | A publicly available Docker image.<br/>__*Optional*__
### Methods
#### *static* fromFile(dockerFile)🔹 <a id="projen-devenvironmentdockerimage-fromfile"></a>
The relative path of a Dockerfile that defines the container contents.
```ts
static fromFile(dockerFile: string): DevEnvironmentDockerImage
```
* **dockerFile** (<code>string</code>) a relative path.
__Returns__:
* <code>[DevEnvironmentDockerImage](#projen-devenvironmentdockerimage)</code>
#### *static* fromImage(image)🔹 <a id="projen-devenvironmentdockerimage-fromimage"></a>
A publicly available Docker image.
```ts
static fromImage(image: string): DevEnvironmentDockerImage
```
* **image** (<code>string</code>) a Docker image.
__Returns__:
* <code>[DevEnvironmentDockerImage](#projen-devenvironmentdockerimage)</code>
## class DockerCompose 🔹 <a id="projen-dockercompose"></a>
Create a docker-compose YAML file.
__Extends__: [Component](#projen-component)
### Initializer
```ts
new DockerCompose(project: Project, props?: DockerComposeProps)
```
* **project** (<code>[Project](#projen-project)</code>) *No description*
* **props** (<code>[DockerComposeProps](#projen-dockercomposeprops)</code>) *No description*
* **nameSuffix** (<code>string</code>) A name to add to the docker-compose.yml filename. __*Default*__: no name is added
* **schemaVersion** (<code>string</code>) Docker Compose schema version do be used. __*Default*__: 3.3
* **services** (<code>Map<string, [DockerComposeServiceDescription](#projen-dockercomposeservicedescription)></code>) Service descriptions. __*Optional*__
### Methods
#### addService(serviceName, description)🔹 <a id="projen-dockercompose-addservice"></a>
Add a service to the docker-compose file.
```ts
addService(serviceName: string, description: DockerComposeServiceDescription): DockerComposeService
```
* **serviceName** (<code>string</code>) name of the service.
* **description** (<code>[DockerComposeServiceDescription](#projen-dockercomposeservicedescription)</code>) a service description.
* **command** (<code>Array<string></code>) Provide a command to the docker container. __*Default*__: use the container's default command
* **dependsOn** (<code>Array<[IDockerComposeServiceName](#projen-idockercomposeservicename)></code>) Names of other services this service depends on. __*Default*__: no dependencies
* **environment** (<code>Map<string, string></code>) Add environment variables. __*Default*__: no environment variables are provided
* **image** (<code>string</code>) Use a docker image. __*Optional*__
* **imageBuild** (<code>[DockerComposeBuild](#projen-dockercomposebuild)</code>) Build a docker image. __*Optional*__
* **ports** (<code>Array<[DockerComposeServicePort](#projen-dockercomposeserviceport)></code>) Map some ports. __*Default*__: no ports are mapped
* **volumes** (<code>Array<[IDockerComposeVolumeBinding](#projen-idockercomposevolumebinding)></code>) Mount some volumes into the service. __*Optional*__
__Returns__:
* <code>[DockerComposeService](#projen-dockercomposeservice)</code>
#### *static* bindVolume(sourcePath, targetPath)🔹 <a id="projen-dockercompose-bindvolume"></a>
Create a bind volume that binds a host path to the target path in the container.
```ts
static bindVolume(sourcePath: string, targetPath: string): IDockerComposeVolumeBinding
```
* **sourcePath** (<code>string</code>) Host path name.
* **targetPath** (<code>string</code>) Target path name.
__Returns__:
* <code>[IDockerComposeVolumeBinding](#projen-idockercomposevolumebinding)</code>
#### *static* namedVolume(volumeName, targetPath, options?)🔹 <a id="projen-dockercompose-namedvolume"></a>
Create a named volume and mount it to the target path.
If you use this
named volume in several services, the volume will be shared. In this
case, the volume configuration of the first-provided options are used.
```ts
static namedVolume(volumeName: string, targetPath: string, options?: DockerComposeVolumeConfig): IDockerComposeVolumeBinding
```
* **volumeName** (<code>string</code>) Name of the volume.
* **targetPath** (<code>string</code>) Target path.
* **options** (<code>[DockerComposeVolumeConfig](#projen-dockercomposevolumeconfig)</code>) volume configuration (default: docker compose defaults).
* **driver** (<code>string</code>) Driver to use for the volume. __*Default*__: value is not provided
* **driverOpts** (<code>Map<string, string></code>) Options to provide to the driver. __*Optional*__
* **external** (<code>boolean</code>) Set to true to indicate that the volume is externally created. __*Default*__: unset, indicating that docker-compose creates the volume
* **name** (<code>string</code>) Name of the volume for when the volume name isn't going to work in YAML. __*Default*__: unset, indicating that docker-compose creates volumes as usual
__Returns__:
* <code>[IDockerComposeVolumeBinding](#projen-idockercomposevolumebinding)</code>
#### *static* portMapping(publishedPort, targetPort, options?)🔹 <a id="projen-dockercompose-portmapping"></a>
Create a port mapping.
```ts
static portMapping(publishedPort: number, targetPort: number, options?: DockerComposePortMappingOptions): DockerComposeServicePort
```
* **publishedPort** (<code>number</code>) Published port number.
* **targetPort** (<code>number</code>) Container's port number.
* **options** (<code>[DockerComposePortMappingOptions](#projen-dockercomposeportmappingoptions)</code>) Port mapping options.
* **protocol** (<code>[DockerComposeProtocol](#projen-dockercomposeprotocol)</code>) Port mapping protocol. __*Default*__: DockerComposeProtocol.TCP
__Returns__:
* <code>[DockerComposeServicePort](#projen-dockercomposeserviceport)</code>
#### *static* serviceName(serviceName)🔹 <a id="projen-dockercompose-servicename"></a>
Depends on a service name.
```ts
static serviceName(serviceName: string): IDockerComposeServiceName
```
* **serviceName** (<code>string</code>) *No description*
__Returns__:
* <code>[IDockerComposeServiceName](#projen-idockercomposeservicename)</code>
## class DockerComposeService 🔹 <a id="projen-dockercomposeservice"></a>
A docker-compose service.
__Implements__: [IDockerComposeServiceName](#projen-idockercomposeservicename)
### Initializer
```ts
new DockerComposeService(serviceName: string, serviceDescription: DockerComposeServiceDescription)
```
* **serviceName** (<code>string</code>) *No description*
* **serviceDescription** (<code>[DockerComposeServiceDescription](#projen-dockercomposeservicedescription)</code>) *No description*
* **command** (<code>Array<string></code>) Provide a command to the docker container. __*Default*__: use the container's default command
* **dependsOn** (<code>Array<[IDockerComposeServiceName](#projen-idockercomposeservicename)></code>) Names of other services this service depends on. __*Default*__: no dependencies
* **environment** (<code>Map<string, string></code>) Add environment variables. __*Default*__: no environment variables are provided
* **image** (<code>string</code>) Use a docker image. __*Optional*__
* **imageBuild** (<code>[DockerComposeBuild](#projen-dockercomposebuild)</code>) Build a docker image. __*Optional*__
* **ports** (<code>Array<[DockerComposeServicePort](#projen-dockercomposeserviceport)></code>) Map some ports. __*Default*__: no ports are mapped
* **volumes** (<code>Array<[IDockerComposeVolumeBinding](#projen-idockercomposevolumebinding)></code>) Mount some volumes into the service. __*Optional*__
### Properties
Name | Type | Description
-----|------|-------------
**dependsOn**🔹 | <code>Array<[IDockerComposeServiceName](#projen-idockercomposeservicename)></code> | Other services that this service depends on.
**environment**🔹 | <code>Map<string, string></code> | Environment variables.
**ports**🔹 | <code>Array<[DockerComposeServicePort](#projen-dockercomposeserviceport)></code> | Published ports.
**serviceName**🔹 | <code>string</code> | Name of the service.
**volumes**🔹 | <code>Array<[IDockerComposeVolumeBinding](#projen-idockercomposevolumebinding)></code> | Volumes mounted in the container.
**command**?🔹 | <code>Array<string></code> | Command to run in the container.<br/>__*Optional*__
**image**?🔹 | <code>string</code> | Docker image.<br/>__*Optional*__
**imageBuild**?🔹 | <code>[DockerComposeBuild](#projen-dockercomposebuild)</code> | Docker image build instructions.<br/>__*Optional*__
### Methods
#### addDependsOn(serviceName)🔹 <a id="projen-dockercomposeservice-adddependson"></a>
Make the service depend on another service.
```ts
addDependsOn(serviceName: IDockerComposeServiceName): void
```
* **serviceName** (<code>[IDockerComposeServiceName](#projen-idockercomposeservicename)</code>) *No description*
#### addEnvironment(name, value)🔹 <a id="projen-dockercomposeservice-addenvironment"></a>
Add an environment variable.
```ts
addEnvironment(name: string, value: string): void
```
* **name** (<code>string</code>) environment variable name.
* **value** (<code>string</code>) value of the environment variable.
#### addPort(publishedPort, targetPort, options?)🔹 <a id="projen-dockercomposeservice-addport"></a>
Add a port mapping.
```ts
addPort(publishedPort: number, targetPort: number, options?: DockerComposePortMappingOptions): void
```
* **publishedPort** (<code>number</code>) Published port number.
* **targetPort** (<code>number</code>) Container's port number.
* **options** (<code>[DockerComposePortMappingOptions](#projen-dockercomposeportmappingoptions)</code>) Port mapping options.
* **protocol** (<code>[DockerComposeProtocol](#projen-dockercomposeprotocol)</code>) Port mapping protocol. __*Default*__: DockerComposeProtocol.TCP
#### addVolume(volume)🔹 <a id="projen-dockercomposeservice-addvolume"></a>
Add a volume to the service.
```ts
addVolume(volume: IDockerComposeVolumeBinding): void
```
* **volume** (<code>[IDockerComposeVolumeBinding](#projen-idockercomposevolumebinding)</code>) *No description*
## class FileBase 🔹 <a id="projen-filebase"></a>
__Extends__: [Component](#projen-component)
__Implemented by__: [github.PullRequestTemplate](#projen-github-pullrequesttemplate), [python.RequirementsFile](#projen-python-requirementsfile), [python.SetupPy](#projen-python-setuppy), [web.ReactTypeDef](#projen-web-reacttypedef), [GitAttributesFile](#projen-gitattributesfile), [IgnoreFile](#projen-ignorefile), [IniFile](#projen-inifile), [JsonFile](#projen-jsonfile), [License](#projen-license), [Makefile](#projen-makefile), [TextFile](#projen-textfile), [TomlFile](#projen-tomlfile), [XmlFile](#projen-xmlfile), [YamlFile](#projen-yamlfile)
__Obtainable from__: [Project](#projen-project).[tryFindFile](#projen-project#projen-project-tryfindfile)(), [Project](#projen-project).[tryRemoveFile](#projen-project#projen-project-tryremovefile)()
### Initializer
```ts
new FileBase(project: Project, filePath: string, options?: FileBaseOptions)
```
* **project** (<code>[Project](#projen-project)</code>) *No description*
* **filePath** (<code>string</code>) *No description*
* **options** (<code>[FileBaseOptions](#projen-filebaseoptions)</code>) *No description*
* **committed** (<code>boolean</code>) Indicates whether this file should be committed to git or ignored. __*Default*__: true
* **editGitignore** (<code>boolean</code>) Update the project's .gitignore file. __*Default*__: true
* **executable** (<code>boolean</code>) Whether the generated file should be marked as executable. __*Default*__: false
* **marker** (<code>boolean</code>) Adds the projen marker to the file. __*Default*__: marker will be included as long as the project is not ejected
* **readonly** (<code>boolean</code>) Whether the generated file should be readonly. __*Default*__: true
### Properties
Name | Type | Description
-----|------|-------------
**absolutePath**🔹 | <code>string</code> | The absolute path of this file.
**executable**🔹 | <code>boolean</code> | Indicates if the file should be marked as executable.
**path**🔹 | <code>string</code> | The file path, relative to the project root.
**readonly**🔹 | <code>boolean</code> | Indicates if the file should be read-only or read-write.
**changed**?🔹 | <code>boolean</code> | Indicates if the file has been changed during synthesis.<br/>__*Optional*__
**marker**?🔹 | <code>string</code> | The projen marker, used to identify files as projen-generated.<br/>__*Optional*__
### Methods
#### synthesize()🔹 <a id="projen-filebase-synthesize"></a>
Writes the file to the project's output directory.
```ts
synthesize(): void
```
#### protected synthesizeContent(resolver)🔹 <a id="projen-filebase-synthesizecontent"></a>
Implemented by derived classes and returns the contents of the file to emit.
```ts
protected synthesizeContent(resolver: IResolver): string
```
* **resolver** (<code>[IResolver](#projen-iresolver)</code>) Call `resolver.resolve(obj)` on any objects in order to resolve token functions.
__Returns__:
* <code>string</code>
## class GitAttributesFile 🔹 <a id="projen-gitattributesfile"></a>
Assign attributes to file names in a git repository.
__Extends__: [FileBase](#projen-filebase)
### Initializer
```ts
new GitAttributesFile(project: Project)
```
* **project** (<code>[Project](#projen-project)</code>) *No description*
### Methods
#### addAttributes(glob, ...attributes)🔹 <a id="projen-gitattributesfile-addattributes"></a>
Maps a set of attributes to a set o
gitextract_rzfgxmkm/ ├── .all-contributorsrc ├── .devcontainer.json ├── .eslintrc.json ├── .gitattributes ├── .github/ │ ├── pull_request_template.md │ └── workflows/ │ ├── auto-approve.yml │ ├── build.yml │ ├── pull-request-lint.yml │ ├── release.yml │ └── upgrade-main.yml ├── .gitignore ├── .gitpod.yml ├── .markdownlint.json ├── .mergify.yml ├── .npmignore ├── .prettierignore ├── .prettierrc.json ├── .projen/ │ ├── deps.json │ ├── files.json │ └── tasks.json ├── .projenrc.js ├── .vscode/ │ └── launch.json ├── ARCHITECTURE.md ├── CODE_OF_CONDUCT.md ├── CONTRIBUTING.md ├── LICENSE ├── README.md ├── SECURITY.md ├── VISION.md ├── assets/ │ └── web/ │ └── react/ │ ├── index.html │ ├── manifest.json │ └── robots.txt ├── bin/ │ └── projen ├── docs/ │ ├── CNAME │ ├── README.md │ ├── api/ │ │ └── API.md │ ├── awscdk-apps.md │ ├── awscdk-construct.md │ ├── awscdk.md │ ├── build.md │ ├── bundling.md │ ├── cdk8s.md │ ├── circleci.md │ ├── components.md │ ├── deps.md │ ├── eject.md │ ├── escape-hatches.md │ ├── github.md │ ├── gitlab.md │ ├── java.md │ ├── node.md │ ├── programmatic-api.md │ ├── publisher.md │ ├── python.md │ ├── releases.md │ ├── subproject.md │ ├── tasks.md │ └── typescript.md ├── license-text/ │ ├── Apache-2.0.txt │ ├── Artistic-1.0.txt │ ├── Artistic-2.0.txt │ ├── EUPL-1.2.txt │ ├── GPL-2.0-or-later.txt │ ├── GPL-3.0-WITH-GCC-exception-3.1.txt │ ├── GPL-3.0-or-later.txt │ ├── LGPL-2.1-or-later.txt │ ├── LGPL-3.0-or-later.txt │ ├── MIT-0.txt │ ├── MIT.txt │ ├── MPL-2.0.txt │ ├── OFL-1.1.txt │ ├── PHP-3.01.txt │ ├── Ruby.txt │ ├── Unlicense.txt │ ├── WTFPL.txt │ └── ZPL-2.1.txt ├── package.json ├── projen.bash ├── rfcs/ │ ├── github-project-settings.md │ └── project-creation-prompt.md ├── scripts/ │ ├── python-compat.sh │ └── readme-projects.js ├── src/ │ ├── _resolve.ts │ ├── awscdk/ │ │ ├── auto-discover.ts │ │ ├── awscdk-app-java.ts │ │ ├── awscdk-app-py.ts │ │ ├── awscdk-app-ts.ts │ │ ├── awscdk-construct.ts │ │ ├── awscdk-deps-java.ts │ │ ├── awscdk-deps-js.ts │ │ ├── awscdk-deps-py.ts │ │ ├── awscdk-deps.ts │ │ ├── awscdk-pytest-sample.ts │ │ ├── cdk-config.ts │ │ ├── cdk-tasks.ts │ │ ├── index.ts │ │ ├── integration-test.ts │ │ ├── internal.ts │ │ ├── lambda-extension.ts │ │ └── lambda-function.ts │ ├── build/ │ │ ├── build-workflow.ts │ │ └── index.ts │ ├── builtin-example.task.ts │ ├── cdk/ │ │ ├── auto-discover-base.ts │ │ ├── construct-lib.ts │ │ ├── consts.ts │ │ ├── index.ts │ │ ├── integration-test-base.ts │ │ ├── internal.ts │ │ ├── jsii-docgen.ts │ │ └── jsii-project.ts │ ├── cdk8s/ │ │ ├── auto-discover.ts │ │ ├── cdk8s-app-py.ts │ │ ├── cdk8s-app-ts.ts │ │ ├── cdk8s-construct.ts │ │ ├── cdk8s-deps-js.ts │ │ ├── cdk8s-deps-py.ts │ │ ├── cdk8s-deps.ts │ │ ├── index.ts │ │ └── integration-test.ts │ ├── cdktf/ │ │ ├── cdktf-construct.ts │ │ └── index.ts │ ├── circleci/ │ │ ├── circleci.ts │ │ ├── constant.ts │ │ ├── index.ts │ │ └── model.ts │ ├── cleanup.ts │ ├── cli/ │ │ ├── cmds/ │ │ │ └── new.ts │ │ ├── index.ts │ │ ├── macros.ts │ │ ├── synth.ts │ │ ├── tasks.ts │ │ └── util.ts │ ├── clobber.ts │ ├── common.ts │ ├── component.ts │ ├── dependencies.ts │ ├── dev-env.ts │ ├── docker-compose.ts │ ├── file.ts │ ├── gitattributes.ts │ ├── github/ │ │ ├── auto-approve.ts │ │ ├── auto-merge.ts │ │ ├── constants.ts │ │ ├── dependabot.ts │ │ ├── github-credentials.ts │ │ ├── github-project.ts │ │ ├── github.ts │ │ ├── index.ts │ │ ├── mergify.ts │ │ ├── pr-template.ts │ │ ├── pull-request-lint.ts │ │ ├── stale-util.ts │ │ ├── stale.ts │ │ ├── task-workflow.ts │ │ ├── util.ts │ │ ├── workflow-actions.ts │ │ ├── workflows-model.ts │ │ └── workflows.ts │ ├── gitlab/ │ │ ├── configuration-model.ts │ │ ├── configuration.ts │ │ ├── gitlab-configuration.ts │ │ ├── index.ts │ │ └── nested-configuration.ts │ ├── gitpod.ts │ ├── ignore-file.ts │ ├── index.ts │ ├── ini.ts │ ├── inventory.ts │ ├── java/ │ │ ├── index.ts │ │ ├── java-project.ts │ │ ├── junit.ts │ │ ├── maven-compile.ts │ │ ├── maven-packaging.ts │ │ ├── maven-sample.ts │ │ ├── pom.ts │ │ └── projenrc.ts │ ├── javascript/ │ │ ├── bundler.ts │ │ ├── eslint.ts │ │ ├── index.ts │ │ ├── jest.ts │ │ ├── node-package.ts │ │ ├── node-project.ts │ │ ├── npm-config.ts │ │ ├── prettier.ts │ │ ├── projenrc.ts │ │ ├── render-options.ts │ │ ├── typescript-config.ts │ │ ├── upgrade-dependencies.ts │ │ └── util.ts │ ├── json-patch.ts │ ├── json.ts │ ├── license.ts │ ├── logger.ts │ ├── logging.ts │ ├── makefile.ts │ ├── object-file.ts │ ├── option-hints.ts │ ├── project-build.ts │ ├── project.ts │ ├── projects.ts │ ├── projenrc-json.ts │ ├── python/ │ │ ├── index.ts │ │ ├── pip.ts │ │ ├── poetry.ts │ │ ├── projenrc.ts │ │ ├── pytest-sample.ts │ │ ├── pytest.ts │ │ ├── python-deps.ts │ │ ├── python-env.ts │ │ ├── python-packaging.ts │ │ ├── python-project.ts │ │ ├── python-sample.ts │ │ ├── requirements-file.ts │ │ ├── setuppy.ts │ │ ├── setuptools.ts │ │ └── venv.ts │ ├── readme.ts │ ├── release/ │ │ ├── bump-version.task.ts │ │ ├── bump-version.ts │ │ ├── index.ts │ │ ├── publisher.ts │ │ ├── release-trigger.ts │ │ ├── release.ts │ │ ├── reset-version.task.ts │ │ ├── tag-version.task.ts │ │ ├── tag-version.ts │ │ ├── update-changelog.task.ts │ │ └── update-changelog.ts │ ├── renovatebot.ts │ ├── run-projenrc-json.task.ts │ ├── sample-file.ts │ ├── semver.ts │ ├── smithy/ │ │ └── smithy-build.ts │ ├── source-code.ts │ ├── task-model.ts │ ├── task-runtime.ts │ ├── task.ts │ ├── tasks.ts │ ├── testing.ts │ ├── textfile.ts │ ├── toml.ts │ ├── typescript/ │ │ ├── index.ts │ │ ├── projenrc.ts │ │ ├── typescript-typedoc.ts │ │ └── typescript.ts │ ├── util/ │ │ ├── semver.ts │ │ └── synth.ts │ ├── util.ts │ ├── version.ts │ ├── vscode/ │ │ ├── devcontainer.ts │ │ ├── extensions.ts │ │ ├── index.ts │ │ ├── launch-config.ts │ │ ├── settings.ts │ │ └── vscode.ts │ ├── web/ │ │ ├── index.ts │ │ ├── next.ts │ │ ├── postcss.ts │ │ ├── react.ts │ │ └── tailwind.ts │ ├── xmlfile.ts │ └── yaml.ts ├── test/ │ ├── __snapshots__/ │ │ ├── cleanup.test.ts.snap │ │ ├── cli.test.ts.snap │ │ ├── deps.test.ts.snap │ │ ├── integ.test.ts.snap │ │ ├── inventory.test.ts.snap │ │ ├── license.test.ts.snap │ │ ├── new.test.ts.snap │ │ ├── project.test.ts.snap │ │ ├── projects.test.ts.snap │ │ └── xml.test.ts.snap │ ├── awscdk/ │ │ ├── __snapshots__/ │ │ │ ├── integration-test.test.ts.snap │ │ │ ├── java-app.test.ts.snap │ │ │ ├── lambda-extension.test.ts.snap │ │ │ ├── lambda-function.test.ts.snap │ │ │ └── python-app.test.ts.snap │ │ ├── awscdk-app.test.ts │ │ ├── awscdk-construct.test.ts │ │ ├── cdk-config.test.ts │ │ ├── integration-test.test.ts │ │ ├── java-app.test.ts │ │ ├── lambda-extension.test.ts │ │ ├── lambda-function.test.ts │ │ └── python-app.test.ts │ ├── cdk/ │ │ ├── __snapshots__/ │ │ │ └── jsii.test.ts.snap │ │ ├── auto-discover-base.test.ts │ │ ├── jsii.test.ts │ │ └── testtree/ │ │ └── abc.myext.ts │ ├── cdk8s/ │ │ ├── __snapshots__/ │ │ │ └── integration-test.test.ts.snap │ │ ├── cdk8s-app-project-py.test.ts │ │ ├── cdk8s-app-project-ts.test.ts │ │ ├── cdk8s-construct.test.ts │ │ └── integration-test.test.ts │ ├── cdktf/ │ │ └── cdktf-construct.test.ts │ ├── cirlceci/ │ │ ├── __snapshots__/ │ │ │ └── circleci.test.ts.snap │ │ └── circleci.test.ts │ ├── cleanup.test.ts │ ├── cli.test.ts │ ├── deps.test.ts │ ├── docker-compose.test.ts │ ├── github/ │ │ ├── __snapshots__/ │ │ │ ├── auto-approve.test.ts.snap │ │ │ ├── dependabot.test.ts.snap │ │ │ ├── github-workflow.test.ts.snap │ │ │ ├── mergify.test.ts.snap │ │ │ ├── pull-request-lint.test.ts.snap │ │ │ ├── stale.test.ts.snap │ │ │ ├── task-workflow.test.ts.snap │ │ │ └── workflows.test.ts.snap │ │ ├── auto-approve.test.ts │ │ ├── dependabot.test.ts │ │ ├── github-workflow.test.ts │ │ ├── mergify.test.ts │ │ ├── pull-request-lint.test.ts │ │ ├── stale.test.ts │ │ ├── task-workflow.test.ts │ │ └── workflows.test.ts │ ├── gitlab/ │ │ ├── __snapshots__/ │ │ │ └── configuration.test.ts.snap │ │ ├── configuration.test.ts │ │ └── gitlab-configuration.test.ts │ ├── ignore-file.test.ts │ ├── ini.test.ts │ ├── integ.test.ts │ ├── integration/ │ │ ├── cdk-watchful.projenrc.js │ │ ├── cdk8s/ │ │ │ ├── cdk8s-cli.projenrc.js │ │ │ ├── cdk8s.common.js │ │ │ └── cdk8s.projenrc.js │ │ └── pnpm.projenrc.js │ ├── inventory/ │ │ ├── gzip_compression/ │ │ │ └── .jsii │ │ └── no_compression/ │ │ └── .jsii │ ├── inventory.test.ts │ ├── java/ │ │ ├── __snapshots__/ │ │ │ ├── java-project.test.ts.snap │ │ │ ├── pom.test.ts.snap │ │ │ └── projenrc.test.ts.snap │ │ ├── java-project.test.ts │ │ ├── pom.test.ts │ │ └── projenrc.test.ts │ ├── javascript/ │ │ ├── __snapshots__/ │ │ │ ├── eslint.test.ts.snap │ │ │ ├── node-package.test.ts.snap │ │ │ ├── node-project.test.ts.snap │ │ │ ├── npm-config.test.ts.snap │ │ │ ├── prettier.test.ts.snap │ │ │ └── upgrade-dependencies.test.ts.snap │ │ ├── bundler.test.ts │ │ ├── eslint.test.ts │ │ ├── jest.test.ts │ │ ├── node-package.test.ts │ │ ├── node-project.test.ts │ │ ├── npm-config.test.ts │ │ ├── prettier.test.ts │ │ └── upgrade-dependencies.test.ts │ ├── json/ │ │ ├── __snapshots__/ │ │ │ └── projenrc.test.ts.snap │ │ └── projenrc.test.ts │ ├── json.test.ts │ ├── license.test.ts │ ├── makefile.test.ts │ ├── new.test.ts │ ├── object-file.test.ts │ ├── pr-template.test.ts │ ├── project.test.ts │ ├── projects.test.ts │ ├── python/ │ │ ├── __snapshots__/ │ │ │ ├── poetry.test.ts.snap │ │ │ ├── projenrc.test.ts.snap │ │ │ └── python-project.test.ts.snap │ │ ├── poetry.test.ts │ │ ├── projenrc.test.ts │ │ ├── python-project.test.ts │ │ └── setuptools.test.ts │ ├── readme.test.ts │ ├── release/ │ │ ├── __snapshots__/ │ │ │ └── release.test.ts.snap │ │ ├── bump.test.ts │ │ ├── release-trigger.test.ts │ │ ├── release.test.ts │ │ ├── tag.test.ts │ │ └── update-changelog.test.ts │ ├── resolve.test.ts │ ├── sample-file.test.ts │ ├── smithy/ │ │ └── smithy-build.test.ts │ ├── source-code.test.ts │ ├── subproject.test.ts │ ├── tasks/ │ │ ├── __snapshots__/ │ │ │ └── tasks.test.ts.snap │ │ ├── runtime.test.ts │ │ └── tasks.test.ts │ ├── textfile.test.ts │ ├── toml.test.ts │ ├── typescript/ │ │ ├── __snapshots__/ │ │ │ └── typescript.test.ts.snap │ │ └── typescript.test.ts │ ├── util.test.ts │ ├── util.ts │ ├── vscode/ │ │ ├── __snapshots__/ │ │ │ └── dev-env.test.ts.snap │ │ ├── dev-env.test.ts │ │ ├── extensions.test.ts │ │ ├── settings.test.ts │ │ └── vscode-launch-config.test.ts │ ├── web/ │ │ ├── __snapshots__/ │ │ │ ├── nextjs-project.test.ts.snap │ │ │ ├── nextjs-ts-project.test.ts.snap │ │ │ ├── react-project.test.ts.snap │ │ │ └── react-ts-project.test.ts.snap │ │ ├── nextjs-project.test.ts │ │ ├── nextjs-ts-project.test.ts │ │ ├── react-project.test.ts │ │ └── react-ts-project.test.ts │ ├── xml.test.ts │ └── yaml.test.ts ├── tsconfig.dev.json └── version.json
SYMBOL INDEX (1415 symbols across 203 files)
FILE: .projenrc.js
function setupIntegTest (line 199) | function setupIntegTest() {
function setupBundleTaskRunner (line 218) | function setupBundleTaskRunner() {
FILE: src/_resolve.ts
function isResolvable (line 3) | function isResolvable(obj: any): obj is IResolvable {
function resolve (line 7) | function resolve(value: any, options: ResolveOptions = {}): any {
FILE: src/awscdk/auto-discover.ts
type AutoDiscoverCommonOptions (line 27) | interface AutoDiscoverCommonOptions {
type IntegrationTestAutoDiscoverOptions (line 42) | interface IntegrationTestAutoDiscoverOptions
class IntegrationTestAutoDiscover (line 54) | class IntegrationTestAutoDiscover extends IntegrationTestAutoDiscoverBase {
method constructor (line 55) | constructor(project: Project, options: IntegrationTestAutoDiscoverOpti...
type LambdaAutoDiscoverOptions (line 72) | interface LambdaAutoDiscoverOptions extends AutoDiscoverCommonOptions {
class LambdaAutoDiscover (line 87) | class LambdaAutoDiscover extends AutoDiscoverBase {
method constructor (line 88) | constructor(project: Project, options: LambdaAutoDiscoverOptions) {
type EdgeLambdaAutoDiscoverOptions (line 107) | interface EdgeLambdaAutoDiscoverOptions
class EdgeLambdaAutoDiscover (line 123) | class EdgeLambdaAutoDiscover extends AutoDiscoverBase {
method constructor (line 124) | constructor(project: Project, options: EdgeLambdaAutoDiscoverOptions) {
type LambdaExtensionAutoDiscoverOptions (line 144) | interface LambdaExtensionAutoDiscoverOptions
class LambdaExtensionAutoDiscover (line 161) | class LambdaExtensionAutoDiscover extends AutoDiscoverBase {
method constructor (line 162) | constructor(project: Project, options: LambdaExtensionAutoDiscoverOpti...
type AutoDiscoverOptions (line 181) | interface AutoDiscoverOptions
class AutoDiscover (line 218) | class AutoDiscover extends Component {
method constructor (line 219) | constructor(project: Project, options: AutoDiscoverOptions) {
FILE: src/awscdk/awscdk-app-java.ts
type AwsCdkJavaAppOptions (line 9) | interface AwsCdkJavaAppOptions
class AwsCdkJavaApp (line 27) | class AwsCdkJavaApp extends JavaProject {
method constructor (line 58) | constructor(options: AwsCdkJavaAppOptions) {
method addCdkDependency (line 98) | public addCdkDependency(...modules: string[]) {
method addSample (line 104) | private addSample() {
FILE: src/awscdk/awscdk-app-py.ts
type AwsCdkPythonAppOptions (line 17) | interface AwsCdkPythonAppOptions
class AwsCdkPythonApp (line 41) | class AwsCdkPythonApp extends PythonProject {
method cdkVersion (line 67) | public get cdkVersion() {
method constructor (line 71) | constructor(options: AwsCdkPythonAppOptions) {
class AppCode (line 112) | class AppCode extends Component {
method constructor (line 113) | constructor(project: AwsCdkPythonApp, fileName: string, cdkVersion: nu...
class MyStackCode (line 145) | class MyStackCode extends Component {
method constructor (line 146) | constructor(project: AwsCdkPythonApp, dir: string, cdkMajorVersion: nu...
FILE: src/awscdk/awscdk-app-ts.ts
type AwsCdkTypeScriptAppOptions (line 13) | interface AwsCdkTypeScriptAppOptions
class AwsCdkTypeScriptApp (line 73) | class AwsCdkTypeScriptApp extends TypeScriptAppProject {
method cdkVersion (line 77) | public get cdkVersion() {
method constructor (line 98) | constructor(options: AwsCdkTypeScriptAppOptions) {
method addCdkDependency (line 185) | public addCdkDependency(...modules: string[]) {
class SampleCode (line 190) | class SampleCode extends Component {
method constructor (line 193) | constructor(
method synthesize (line 201) | public synthesize() {
FILE: src/awscdk/awscdk-construct.ts
type AwsCdkConstructLibraryOptions (line 12) | interface AwsCdkConstructLibraryOptions
class AwsCdkConstructLibrary (line 68) | class AwsCdkConstructLibrary extends ConstructLibrary {
method constructor (line 71) | constructor(options: AwsCdkConstructLibraryOptions) {
method cdkVersion (line 110) | public get cdkVersion() {
method version (line 117) | public get version() {
method addCdkDependencies (line 129) | public addCdkDependencies(...deps: string[]) {
method addCdkTestDependencies (line 139) | public addCdkTestDependencies(...deps: string[]) {
function determineWorkflowContainerImage (line 144) | function determineWorkflowContainerImage(
type ConstructLibraryAwsOptions (line 172) | interface ConstructLibraryAwsOptions
class ConstructLibraryAws (line 176) | class ConstructLibraryAws extends AwsCdkConstructLibrary {}
FILE: src/awscdk/awscdk-deps-java.ts
class AwsCdkDepsJava (line 6) | class AwsCdkDepsJava extends AwsCdkDeps {
method packageNames (line 7) | protected packageNames(): AwsCdkPackageNames {
FILE: src/awscdk/awscdk-deps-js.ts
class AwsCdkDepsJs (line 6) | class AwsCdkDepsJs extends AwsCdkDeps {
method packageNames (line 7) | protected packageNames(): AwsCdkPackageNames {
FILE: src/awscdk/awscdk-deps-py.ts
class AwsCdkDepsPy (line 6) | class AwsCdkDepsPy extends AwsCdkDeps {
method packageNames (line 7) | protected packageNames(): AwsCdkPackageNames {
FILE: src/awscdk/awscdk-deps.ts
type AwsCdkDepsCommonOptions (line 9) | interface AwsCdkDepsCommonOptions {
type AwsCdkDepsOptions (line 84) | interface AwsCdkDepsOptions extends AwsCdkDepsCommonOptions {
type AwsCdkPackageNames (line 96) | interface AwsCdkPackageNames {
method constructor (line 149) | constructor(project: Project, options: AwsCdkDepsOptions) {
method preSynthesize (line 176) | public preSynthesize(): void {
method addV1Dependencies (line 205) | public addV1Dependencies(...deps: string[]) {
method addV1DevDependencies (line 230) | public addV1DevDependencies(...deps: string[]) {
method addConstructsDependency (line 240) | private addConstructsDependency(requestedVersion: string | undefined) {
method addFrameworkDependency (line 282) | private addFrameworkDependency(options: AwsCdkDepsOptions) {
method addV1AssertionLibraryDependency (line 316) | private addV1AssertionLibraryDependency(options: AwsCdkDepsOptions) {
method addV1DependenciesByType (line 353) | private addV1DependenciesByType(type: DependencyType, ...modules: string...
type PACKAGE_AWS_CDK_VERSION (line 368) | enum PACKAGE_AWS_CDK_VERSION {
function cdkVersionOfPackage (line 375) | function cdkVersionOfPackage(packageName: string) {
constant AWS_CDK_V1_V2_SCOPED_PACKAGES (line 395) | const AWS_CDK_V1_V2_SCOPED_PACKAGES = [
function determineFrameworkVersion (line 404) | function determineFrameworkVersion(options: AwsCdkDepsOptions) {
FILE: src/awscdk/awscdk-pytest-sample.ts
class AwsCdkPytestSample (line 4) | class AwsCdkPytestSample extends Component {
method constructor (line 5) | constructor(project: AwsCdkPythonApp, testdir: string) {
FILE: src/awscdk/cdk-config.ts
type CdkConfigCommonOptions (line 9) | interface CdkConfigCommonOptions {
type CdkConfigOptions (line 66) | interface CdkConfigOptions extends CdkConfigCommonOptions {
class CdkConfig (line 77) | class CdkConfig extends Component {
method constructor (line 98) | constructor(project: Project, options: CdkConfigOptions) {
method addIncludes (line 136) | public addIncludes(...patterns: string[]) {
method addExcludes (line 144) | public addExcludes(...patterns: string[]) {
method include (line 151) | public get include(): string[] {
method exclude (line 158) | public get exclude(): string[] {
type ApprovalLevel (line 166) | enum ApprovalLevel {
FILE: src/awscdk/cdk-tasks.ts
class CdkTasks (line 8) | class CdkTasks extends Component {
method constructor (line 39) | constructor(project: Project) {
FILE: src/awscdk/integration-test.ts
type IntegrationTestCommonOptions (line 9) | interface IntegrationTestCommonOptions {
type IntegrationTestOptions (line 28) | interface IntegrationTestOptions
class IntegrationTest (line 46) | class IntegrationTest extends IntegrationTestBase {
method constructor (line 57) | constructor(project: Project, options: IntegrationTestOptions) {
FILE: src/awscdk/internal.ts
constant FEATURE_FLAGS (line 6) | const FEATURE_FLAGS = [
constant TYPESCRIPT_LAMBDA_EXT (line 25) | const TYPESCRIPT_LAMBDA_EXT = ".lambda.ts";
constant TYPESCRIPT_EDGE_LAMBDA_EXT (line 30) | const TYPESCRIPT_EDGE_LAMBDA_EXT = ".edge-lambda.ts";
constant TYPESCRIPT_LAMBDA_EXTENSION_EXT (line 35) | const TYPESCRIPT_LAMBDA_EXTENSION_EXT = ".lambda-extension.ts";
function convertToPosixPath (line 40) | function convertToPosixPath(p: string) {
FILE: src/awscdk/lambda-extension.ts
type LambdaExtensionCommonOptions (line 17) | interface LambdaExtensionCommonOptions {
type LambdaExtensionOptions (line 37) | interface LambdaExtensionOptions extends LambdaExtensionCommonOptions {
class LambdaExtension (line 81) | class LambdaExtension extends Component {
method constructor (line 82) | constructor(project: Project, options: LambdaExtensionOptions) {
type LambdaLayerConstructOptions (line 147) | interface LambdaLayerConstructOptions {
class LambdaLayerConstruct (line 156) | class LambdaLayerConstruct extends SourceCode {
method constructor (line 157) | constructor(project: Project, options: LambdaLayerConstructOptions) {
function encodeCodeString (line 228) | function encodeCodeString(value: string) {
FILE: src/awscdk/lambda-function.ts
type LambdaFunctionCommonOptions (line 18) | interface LambdaFunctionCommonOptions {
type LambdaFunctionOptions (line 64) | interface LambdaFunctionOptions extends LambdaFunctionCommonOptions {
class LambdaFunction (line 118) | class LambdaFunction extends Component {
method constructor (line 125) | constructor(project: Project, options: LambdaFunctionOptions) {
class LambdaRuntime (line 287) | class LambdaRuntime {
method constructor (line 322) | public constructor(
FILE: src/build/build-workflow.ts
constant PULL_REQUEST_REF (line 19) | const PULL_REQUEST_REF = "${{ github.event.pull_request.head.ref }}";
constant PULL_REQUEST_REPOSITORY (line 20) | const PULL_REQUEST_REPOSITORY =
constant BUILD_JOBID (line 22) | const BUILD_JOBID = "build";
constant SELF_MUTATION_STEP (line 23) | const SELF_MUTATION_STEP = "self_mutation";
constant SELF_MUTATION_HAPPENED_OUTPUT (line 24) | const SELF_MUTATION_HAPPENED_OUTPUT = "self_mutation_happened";
constant IS_FORK (line 25) | const IS_FORK =
constant NOT_FORK (line 27) | const NOT_FORK = `!(${IS_FORK})`;
constant SELF_MUTATION_CONDITION (line 28) | const SELF_MUTATION_CONDITION = `needs.${BUILD_JOBID}.outputs.${SELF_MUT...
type BuildWorkflowOptions (line 30) | interface BuildWorkflowOptions {
class BuildWorkflow (line 99) | class BuildWorkflow extends Component {
method constructor (line 111) | constructor(project: Project, options: BuildWorkflowOptions) {
method addBuildJob (line 144) | private addBuildJob(options: BuildWorkflowOptions) {
method buildJobIds (line 170) | public get buildJobIds(): string[] {
method addPostBuildSteps (line 178) | public addPostBuildSteps(...steps: JobStep[]): void {
method addPostBuildJob (line 193) | public addPostBuildJob(id: string, job: Job) {
method addPostBuildJobTask (line 234) | public addPostBuildJobTask(
method addPostBuildJobCommands (line 260) | public addPostBuildJobCommands(
method addSelfMutationJob (line 301) | private addSelfMutationJob(options: BuildWorkflowOptions) {
method renderBuildSteps (line 333) | private renderBuildSteps(): JobStep[] {
type AddPostBuildJobTaskOptions (line 381) | interface AddPostBuildJobTaskOptions {
type AddPostBuildJobCommandsOptions (line 397) | interface AddPostBuildJobCommandsOptions {
FILE: src/cdk/auto-discover-base.ts
type AutoDiscoverBaseOptions (line 10) | interface AutoDiscoverBaseOptions {
method constructor (line 36) | constructor(project: Project, options: AutoDiscoverBaseOptions) {
type IntegrationTestAutoDiscoverBaseOptions (line 50) | interface IntegrationTestAutoDiscoverBaseOptions {
class IntegrationTestAutoDiscoverBase (line 60) | class IntegrationTestAutoDiscoverBase extends AutoDiscoverBase {
method constructor (line 61) | constructor(
FILE: src/cdk/construct-lib.ts
type ConstructLibraryOptions (line 3) | interface ConstructLibraryOptions extends JsiiProjectOptions {
type Catalog (line 24) | interface Catalog {
method constructor (line 41) | constructor(options: ConstructLibraryOptions) {
FILE: src/cdk/consts.ts
type JsiiPacmakTarget (line 3) | type JsiiPacmakTarget = "js" | "go" | "java" | "python" | "dotnet";
constant JSII_TOOLCHAIN (line 8) | const JSII_TOOLCHAIN: Record<JsiiPacmakTarget, Tools> = {
FILE: src/cdk/integration-test-base.ts
type IntegrationTestBaseOptions (line 10) | interface IntegrationTestBaseOptions {
method constructor (line 64) | constructor(project: Project, options: IntegrationTestBaseOptions) {
FILE: src/cdk/internal.ts
constant TYPESCRIPT_INTEG_EXT (line 4) | const TYPESCRIPT_INTEG_EXT = ".integ.ts";
FILE: src/cdk/jsii-docgen.ts
type JsiiDocgenOptions (line 6) | interface JsiiDocgenOptions {
class JsiiDocgen (line 20) | class JsiiDocgen {
method constructor (line 21) | constructor(project: JsiiProject, options: JsiiDocgenOptions = {}) {
FILE: src/cdk/jsii-project.ts
constant EMAIL_REGEX (line 16) | const EMAIL_REGEX =
constant URL_REGEX (line 18) | const URL_REGEX =
constant REPO_TEMP_DIRECTORY (line 20) | const REPO_TEMP_DIRECTORY = ".repo";
type JsiiProjectOptions (line 22) | interface JsiiProjectOptions extends TypeScriptProjectOptions {
type Stability (line 119) | enum Stability {
type JsiiJavaTarget (line 125) | interface JsiiJavaTarget extends MavenPublishOptions {
type JsiiPythonTarget (line 131) | interface JsiiPythonTarget extends PyPiPublishOptions {
type JsiiDotNetTarget (line 136) | interface JsiiDotNetTarget extends NugetPublishOptions {
type JsiiGoTarget (line 145) | interface JsiiGoTarget extends GoPublishOptions {
class JsiiProject (line 167) | class JsiiProject extends TypeScriptProject {
method constructor (line 172) | constructor(options: JsiiProjectOptions) {
method addPackagingTarget (line 397) | private addPackagingTarget(
method addPackagingTask (line 419) | private addPackagingTask(language: JsiiPacmakTarget): Task {
method pacmakForLanguage (line 428) | private pacmakForLanguage(
function parseAuthorAddress (line 460) | function parseAuthorAddress(options: JsiiProjectOptions) {
FILE: src/cdk8s/auto-discover.ts
type AutoDiscoverOptions (line 12) | interface AutoDiscoverOptions
class AutoDiscover (line 26) | class AutoDiscover extends Component {
method constructor (line 27) | constructor(project: Project, options: AutoDiscoverOptions) {
type IntegrationTestAutoDiscoverOptions (line 36) | interface IntegrationTestAutoDiscoverOptions
class IntegrationTestAutoDiscover (line 47) | class IntegrationTestAutoDiscover extends IntegrationTestAutoDiscoverBase {
method constructor (line 48) | constructor(project: Project, options: IntegrationTestAutoDiscoverOpti...
FILE: src/cdk8s/cdk8s-app-py.ts
type Cdk8sPythonOptions (line 9) | interface Cdk8sPythonOptions
class Cdk8sPythonApp (line 40) | class Cdk8sPythonApp extends PythonProject {
method constructor (line 48) | constructor(options: Cdk8sPythonOptions) {
class AppCode (line 92) | class AppCode extends Component {
method constructor (line 93) | constructor(project: Cdk8sPythonApp, filename: string) {
FILE: src/cdk8s/cdk8s-app-ts.ts
type Cdk8sTypeScriptAppOptions (line 11) | interface Cdk8sTypeScriptAppOptions
class Cdk8sTypeScriptApp (line 53) | class Cdk8sTypeScriptApp extends TypeScriptAppProject {
method constructor (line 61) | constructor(options: Cdk8sTypeScriptAppOptions) {
class SampleCode (line 132) | class SampleCode extends Component {
method constructor (line 134) | constructor(project: Cdk8sTypeScriptApp) {
method synthesize (line 139) | public synthesize() {
FILE: src/cdk8s/cdk8s-construct.ts
type ConstructLibraryCdk8sOptions (line 5) | interface ConstructLibraryCdk8sOptions extends ConstructLibraryOptions {
class ConstructLibraryCdk8s (line 71) | class ConstructLibraryCdk8s extends ConstructLibrary {
method constructor (line 82) | constructor(options: ConstructLibraryCdk8sOptions) {
FILE: src/cdk8s/cdk8s-deps-js.ts
class Cdk8sDepsJs (line 3) | class Cdk8sDepsJs extends Cdk8sDeps {
method packageNames (line 4) | protected packageNames(): Cdk8sPackageNames {
FILE: src/cdk8s/cdk8s-deps-py.ts
class Cdk8sDepsPy (line 3) | class Cdk8sDepsPy extends Cdk8sDeps {
method packageNames (line 4) | protected packageNames(): Cdk8sPackageNames {
FILE: src/cdk8s/cdk8s-deps.ts
type Cdk8sDepsCommonOptions (line 9) | interface Cdk8sDepsCommonOptions {
type Cdk8sDepsOptions (line 95) | interface Cdk8sDepsOptions extends Cdk8sDepsCommonOptions {
type Cdk8sPackageNames (line 111) | interface Cdk8sPackageNames {
method constructor (line 154) | constructor(project: Project, options: Cdk8sDepsOptions) {
method getVersionRequirement (line 200) | private getVersionRequirement(
method addCdk8sPlusDependency (line 212) | private addCdk8sPlusDependency(
method addClientDependency (line 243) | private addClientDependency(
method addFrameworkDependency (line 269) | private addFrameworkDependency(
method addConstructsDependency (line 295) | private addConstructsDependency(
function determineFrameworkVersion (line 342) | function determineFrameworkVersion(options: Cdk8sDepsOptions) {
FILE: src/cdk8s/integration-test.ts
type IntegrationTestOptions (line 9) | interface IntegrationTestOptions extends IntegrationTestBaseOptions {}
class IntegrationTest (line 14) | class IntegrationTest extends IntegrationTestBase {
method constructor (line 15) | constructor(project: Project, options: IntegrationTestOptions) {
FILE: src/cdktf/cdktf-construct.ts
type ConstructLibraryCdktfOptions (line 4) | interface ConstructLibraryCdktfOptions extends ConstructLibraryOptions {
class ConstructLibraryCdktf (line 28) | class ConstructLibraryCdktf extends ConstructLibrary {
method constructor (line 29) | constructor(options: ConstructLibraryCdktfOptions) {
FILE: src/circleci/circleci.ts
type CircleCiProps (line 12) | interface CircleCiProps {
class Circleci (line 75) | class Circleci extends Component {
method constructor (line 101) | constructor(project: Project, options: CircleCiProps = {}) {
method renderCircleCi (line 118) | private renderCircleCi() {
method addWorkflow (line 147) | public addWorkflow(workflow: Workflow) {
method addOrb (line 180) | public addOrb(name: string, orb: string) {
FILE: src/circleci/model.ts
type INamed (line 8) | interface INamed {
type Workflow (line 19) | interface Workflow extends INamed {
type JobType (line 32) | enum JobType {
type ResourceClass (line 41) | enum ResourceClass {
type JobWhen (line 54) | enum JobWhen {
type PipelineParameterType (line 64) | enum PipelineParameterType {
type Job (line 77) | interface Job extends INamed {}
type WorkflowJob (line 83) | interface WorkflowJob extends INamed {
type PipelineParameter (line 103) | interface PipelineParameter {
type Matrix (line 116) | interface Matrix {
type Triggers (line 128) | interface Triggers {
type Schedule (line 136) | interface Schedule {
type Filter (line 157) | interface Filter {
type FilterConfig (line 166) | interface FilterConfig {
type Job (line 177) | interface Job {
type Docker (line 201) | interface Docker {
type Machine (line 220) | interface Machine {
type Macos (line 239) | interface Macos {
type StepRun (line 248) | interface StepRun {
type Run (line 262) | interface Run {
FILE: src/cleanup.ts
constant FILE_MANIFEST (line 8) | const FILE_MANIFEST = `${PROJEN_DIR}/files.json`;
function cleanup (line 10) | function cleanup(dir: string, newFiles: string[], exclude: string[]) {
function removeFiles (line 25) | function removeFiles(files: string[]) {
function findGeneratedFiles (line 31) | function findGeneratedFiles(dir: string, exclude: string[]) {
function findOrphanedFiles (line 60) | function findOrphanedFiles(
function getFilesFromManifest (line 70) | function getFilesFromManifest(dir: string): string[] {
function readGitIgnore (line 88) | function readGitIgnore(dir: string) {
FILE: src/cli/cmds/new.ts
class Command (line 13) | class Command implements yargs.CommandModule {
method builder (line 17) | public builder(args: yargs.Argv) {
method handler (line 109) | public async handler(args: any) {
function renderDefault (line 138) | function renderDefault(cwd: string, value: string) {
function commandLineToProps (line 147) | function commandLineToProps(
function initProjectFromModule (line 191) | async function initProjectFromModule(baseDir: string, spec: string, args...
function initProject (line 295) | async function initProject(
FILE: src/cli/index.ts
constant DEFAULT_RC (line 10) | const DEFAULT_RC = resolve(PROJEN_RC);
function main (line 12) | async function main() {
FILE: src/cli/macros.ts
function tryProcessMacro (line 4) | function tryProcessMacro(cwd: string, macro: string) {
function getFromGitConfig (line 38) | function getFromGitConfig(cwd: string, key: string): string | undefined {
function resolveEmail (line 45) | function resolveEmail(cwd: string): string {
FILE: src/cli/synth.ts
type SynthOptions (line 12) | interface SynthOptions {
function synth (line 32) | async function synth(runtime: TaskRuntime, options: SynthOptions) {
FILE: src/cli/tasks.ts
function discoverTaskCommands (line 10) | function discoverTaskCommands(runtime: TaskRuntime, ya: yargs.Argv) {
FILE: src/cli/util.ts
function installPackage (line 11) | function installPackage(baseDir: string, spec: string): string {
function renderInstallCommand (line 54) | function renderInstallCommand(dir: string, module: string): string {
FILE: src/clobber.ts
class Clobber (line 4) | class Clobber extends Component {
method constructor (line 5) | constructor(project: Project) {
FILE: src/common.ts
constant PROJEN_RC (line 1) | const PROJEN_RC = ".projenrc.js";
constant PROJEN_DIR (line 2) | const PROJEN_DIR = ".projen";
constant PROJEN_MARKER (line 3) | const PROJEN_MARKER = "~~ Generated by " + "projen";
constant IS_TEST_RUN (line 5) | const IS_TEST_RUN = process.env.NODE_ENV === "test";
constant PROJEN_VERSION (line 11) | const PROJEN_VERSION = IS_TEST_RUN ? "99.99.99" : packageVersion;
FILE: src/component.ts
class Component (line 6) | class Component {
method constructor (line 7) | constructor(public readonly project: Project) {
method preSynthesize (line 14) | public preSynthesize() {}
method synthesize (line 19) | public synthesize() {}
method postSynthesize (line 24) | public postSynthesize() {}
FILE: src/dependencies.ts
class Dependencies (line 16) | class Dependencies extends Component {
method parseDependency (line 31) | public static parseDependency(spec: string): DependencyCoordinates {
method constructor (line 52) | constructor(project: Project) {
method all (line 71) | public get all(): Dependency[] {
method getDependency (line 87) | public getDependency(name: string, type?: DependencyType): Dependency {
method tryGetDependency (line 113) | public tryGetDependency(
method addDependency (line 134) | public addDependency(
method removeDependency (line 167) | public removeDependency(name: string, type?: DependencyType) {
method tryGetDependencyIndex (line 176) | private tryGetDependencyIndex(name: string, type?: DependencyType): nu...
method toJson (line 199) | private toJson(): DepsManifest | undefined {
function normalizeDep (line 209) | function normalizeDep(d: Dependency) {
function compareDeps (line 227) | function compareDeps(d1: Dependency, d2: Dependency) {
type DepsManifest (line 239) | interface DepsManifest {
type DependencyCoordinates (line 249) | interface DependencyCoordinates {
type Dependency (line 269) | interface Dependency extends DependencyCoordinates {
type DependencyType (line 286) | enum DependencyType {
FILE: src/dev-env.ts
type DevEnvironmentOptions (line 6) | interface DevEnvironmentOptions {
class DevEnvironmentDockerImage (line 32) | class DevEnvironmentDockerImage {
method fromImage (line 38) | public static fromImage(image: string): DevEnvironmentDockerImage {
method fromFile (line 47) | public static fromFile(dockerFile: string): DevEnvironmentDockerImage {
method constructor (line 61) | private constructor() {}
type IDevEnvironment (line 68) | interface IDevEnvironment {
FILE: src/docker-compose.ts
type DockerComposeProps (line 9) | interface DockerComposeProps {
type DockerComposePortMappingOptions (line 32) | interface DockerComposePortMappingOptions {
class DockerCompose (line 43) | class DockerCompose extends Component {
method serviceName (line 47) | static serviceName(serviceName: string): IDockerComposeServiceName {
method portMapping (line 59) | static portMapping(
method bindVolume (line 79) | static bindVolume(
method namedVolume (line 103) | static namedVolume(
method constructor (line 124) | constructor(project: Project, props?: DockerComposeProps) {
method addService (line 152) | public addService(
method _synthesizeDockerCompose (line 164) | _synthesizeDockerCompose(): object {
type IDockerComposeServiceName (line 176) | interface IDockerComposeServiceName {
type DockerComposeServiceDescription (line 186) | interface DockerComposeServiceDescription {
class DockerComposeService (line 237) | class DockerComposeService implements IDockerComposeServiceName {
method constructor (line 278) | constructor(
method addPort (line 307) | public addPort(
method addEnvironment (line 322) | public addEnvironment(name: string, value: string) {
method addDependsOn (line 330) | public addDependsOn(serviceName: IDockerComposeServiceName) {
method addVolume (line 338) | public addVolume(volume: IDockerComposeVolumeBinding) {
type DockerComposeServicePort (line 346) | interface DockerComposeServicePort {
type DockerComposeProtocol (line 371) | enum DockerComposeProtocol {
type DockerComposeBuild (line 386) | interface DockerComposeBuild {
type DockerComposeVolumeConfig (line 408) | interface DockerComposeVolumeConfig {
type IDockerComposeVolumeBinding (line 436) | interface IDockerComposeVolumeBinding {
type IDockerComposeVolumeConfig (line 449) | interface IDockerComposeVolumeConfig {
type DockerComposeVolumeMount (line 464) | interface DockerComposeVolumeMount {
type DockerComposeFileSchema (line 485) | interface DockerComposeFileSchema {
type DockerComposeFileServiceSchema (line 495) | interface DockerComposeFileServiceSchema {
function renderDockerComposeFile (line 505) | function renderDockerComposeFile(
function getObjectWithKeyAndValueIfValueIsDefined (line 601) | function getObjectWithKeyAndValueIfValueIsDefined<K extends string, T>(
function shouldDecamelizeDockerComposeKey (line 616) | function shouldDecamelizeDockerComposeKey(path: string[]) {
FILE: src/file.ts
type FileBaseOptions (line 9) | interface FileBaseOptions {
method constructor (line 77) | constructor(
method synthesize (line 137) | public synthesize() {
method checkForProjenMarker (line 181) | private checkForProjenMarker() {
method changed (line 201) | public get changed(): boolean | undefined {
type IResolver (line 209) | interface IResolver {
type ResolveOptions (line 222) | interface ResolveOptions {
type IResolvable (line 236) | interface IResolvable {
FILE: src/gitattributes.ts
class GitAttributesFile (line 9) | class GitAttributesFile extends FileBase {
method constructor (line 12) | public constructor(project: Project) {
method addAttributes (line 23) | public addAttributes(glob: string, ...attributes: string[]) {
method synthesizeContent (line 33) | protected synthesizeContent(_: IResolver): string | undefined {
FILE: src/github/auto-approve.ts
type AutoApproveOptions (line 8) | interface AutoApproveOptions {
class AutoApprove (line 47) | class AutoApprove extends Component {
method constructor (line 50) | constructor(github: GitHub, options: AutoApproveOptions = {}) {
FILE: src/github/auto-merge.ts
type AutoMergeOptions (line 4) | interface AutoMergeOptions {
class AutoMerge (line 27) | class AutoMerge extends Component {
method constructor (line 30) | constructor(github: GitHub, options: AutoMergeOptions = {}) {
method addConditions (line 84) | public addConditions(...conditions: string[]) {
method addConditionsLater (line 92) | public addConditionsLater(later: IAddConditionsLater) {
method renderConditions (line 96) | private renderConditions() {
type IAddConditionsLater (line 107) | interface IAddConditionsLater {
FILE: src/github/constants.ts
constant BUILD_ARTIFACT_NAME (line 7) | const BUILD_ARTIFACT_NAME = "build-artifact";
constant DEFAULT_GITHUB_ACTIONS_USER (line 14) | const DEFAULT_GITHUB_ACTIONS_USER: GitIdentity = {
FILE: src/github/dependabot.ts
type DependabotOptions (line 6) | interface DependabotOptions {
type DependabotRegistry (line 58) | interface DependabotRegistry {
type DependabotRegistryType (line 114) | enum DependabotRegistryType {
type DependabotIgnore (line 181) | interface DependabotIgnore {
type DependabotScheduleInterval (line 203) | enum DependabotScheduleInterval {
type VersioningStrategy (line 223) | enum VersioningStrategy {
class Dependabot (line 260) | class Dependabot extends Component {
method constructor (line 274) | constructor(github: GitHub, options: DependabotOptions = {}) {
method addIgnore (line 328) | public addIgnore(dependencyName: string, ...versions: string[]) {
FILE: src/github/github-credentials.ts
type GithubCredentialsPersonalAccessTokenOptions (line 6) | interface GithubCredentialsPersonalAccessTokenOptions {
type GithubCredentialsAppOptions (line 13) | interface GithubCredentialsAppOptions {
class GithubCredentials (line 21) | class GithubCredentials {
method fromPersonalAccessToken (line 31) | public static fromPersonalAccessToken(
method fromApp (line 50) | public static fromApp(options: GithubCredentialsAppOptions = {}) {
method constructor (line 71) | private constructor(private readonly options: GithubCredentialsOptions...
method setupSteps (line 76) | public get setupSteps(): JobStep[] {
method tokenRef (line 84) | public get tokenRef(): string {
type GithubCredentialsOptions (line 89) | interface GithubCredentialsOptions {
FILE: src/github/github-project.ts
type GitHubProjectOptions (line 16) | interface GitHubProjectOptions extends ProjectOptions {
class GitHubProject (line 155) | class GitHubProject extends Project {
method constructor (line 196) | constructor(options: GitHubProjectOptions) {
method annotateGenerated (line 248) | public annotateGenerated(glob: string): void {
FILE: src/github/github.ts
type GitHubOptions (line 10) | interface GitHubOptions {
class GitHub (line 65) | class GitHub extends Component {
method of (line 70) | public static of(project: Project): GitHub | undefined {
method constructor (line 91) | public constructor(project: Project, options: GitHubOptions = {}) {
method workflows (line 126) | public get workflows(): GithubWorkflow[] {
method addWorkflow (line 139) | public addWorkflow(name: string) {
method addPullRequestTemplate (line 144) | public addPullRequestTemplate(...content: string[]) {
method addDependabot (line 148) | public addDependabot(options?: DependabotOptions) {
method tryFindWorkflow (line 156) | public tryFindWorkflow(name: string): undefined | GithubWorkflow {
FILE: src/github/mergify.ts
type MergifyConditionalOperator (line 10) | interface MergifyConditionalOperator {
type MergifyCondition (line 15) | type MergifyCondition = string | MergifyConditionalOperator;
type MergifyRule (line 17) | interface MergifyRule {
type MergifyQueue (line 37) | interface MergifyQueue {
type MergifyOptions (line 50) | interface MergifyOptions {
class Mergify (line 55) | class Mergify extends Component {
method constructor (line 61) | constructor(github: GitHub, options: MergifyOptions = {}) {
method createYamlFile (line 73) | private createYamlFile() {
method addRule (line 86) | public addRule(rule: MergifyRule) {
method addQueue (line 91) | public addQueue(queue: MergifyQueue) {
FILE: src/github/pr-template.ts
type PullRequestTemplateOptions (line 7) | interface PullRequestTemplateOptions {
class PullRequestTemplate (line 19) | class PullRequestTemplate extends TextFile {
method constructor (line 20) | constructor(github: GitHub, options: PullRequestTemplateOptions = {}) {
FILE: src/github/pull-request-lint.ts
type PullRequestLintOptions (line 8) | interface PullRequestLintOptions {
type SemanticTitleOptions (line 34) | interface SemanticTitleOptions {
class PullRequestLint (line 53) | class PullRequestLint extends Component {
method constructor (line 54) | constructor(github: GitHub, options: PullRequestLintOptions = {}) {
FILE: src/github/stale-util.ts
type Options (line 3) | interface Options {
function renderBehavior (line 9) | function renderBehavior(
FILE: src/github/stale.ts
type StaleOptions (line 9) | interface StaleOptions {
type StaleBehavior (line 36) | interface StaleBehavior {
class Stale (line 96) | class Stale extends Component {
method constructor (line 97) | constructor(github: GitHub, options: StaleOptions = {}) {
FILE: src/github/task-workflow.ts
constant DEFAULT_JOB_ID (line 15) | const DEFAULT_JOB_ID = "build";
type TaskWorkflowOptions (line 17) | interface TaskWorkflowOptions {
class TaskWorkflow (line 121) | class TaskWorkflow extends GithubWorkflow {
method constructor (line 126) | constructor(github: GitHub, options: TaskWorkflowOptions) {
type GitIdentity (line 208) | interface GitIdentity {
FILE: src/github/util.ts
function secretToString (line 1) | function secretToString(secretName: string): string {
FILE: src/github/workflow-actions.ts
constant GIT_PATCH_FILE (line 4) | const GIT_PATCH_FILE = ".repo.patch";
constant RUNNER_TEMP (line 5) | const RUNNER_TEMP = "${{ runner.temp }}";
class WorkflowActions (line 10) | class WorkflowActions {
method createUploadGitPatch (line 20) | public static createUploadGitPatch(
method checkoutWithPatch (line 64) | public static checkoutWithPatch(
method setGitIdentity (line 94) | public static setGitIdentity(id: GitIdentity): JobStep[] {
type CheckoutWithPatchOptions (line 110) | interface CheckoutWithPatchOptions {
type CreateUploadGitPatchOptions (line 136) | interface CreateUploadGitPatchOptions {
FILE: src/github/workflows-model.ts
type CommonJobDefinition (line 3) | interface CommonJobDefinition {
type JobCallingReusableWorkflow (line 54) | interface JobCallingReusableWorkflow extends CommonJobDefinition {
type Job (line 80) | interface Job extends CommonJobDefinition {
type Tools (line 174) | interface Tools {
type ToolRequirement (line 209) | interface ToolRequirement {
type JobPermissions (line 219) | interface JobPermissions {
type JobPermission (line 238) | enum JobPermission {
type JobStepOutput (line 252) | interface JobStepOutput {
type JobDefaults (line 267) | interface JobDefaults {
type RunSettings (line 275) | interface RunSettings {
type Step (line 292) | interface Step {
type JobStep (line 343) | interface JobStep extends Step {
type JobStrategy (line 360) | interface JobStrategy {
type JobMatrixValue (line 389) | type JobMatrixValue = string | boolean | number;
type JobMatrix (line 394) | interface JobMatrix {
type ContainerOptions (line 424) | interface ContainerOptions {
type ContainerCredentials (line 471) | interface ContainerCredentials {
type Triggers (line 484) | interface Triggers {
type CronScheduleOptions (line 712) | interface CronScheduleOptions {
type RepositoryDispatchOptions (line 722) | interface RepositoryDispatchOptions {
type BranchProtectionRuleOptions (line 734) | interface BranchProtectionRuleOptions {
type CheckRunOptions (line 746) | interface CheckRunOptions {
type CheckSuiteOptions (line 760) | interface CheckSuiteOptions {
type DiscussionOptions (line 772) | interface DiscussionOptions {
type DiscussionCommentOptions (line 797) | interface DiscussionCommentOptions {
type IssueCommentOptions (line 809) | interface IssueCommentOptions {
type IssuesOptions (line 821) | interface IssuesOptions {
type LabelOptions (line 850) | interface LabelOptions {
type MilestoneOptions (line 862) | interface MilestoneOptions {
type ProjectOptions (line 876) | interface ProjectOptions {
type ProjectCardOptions (line 890) | interface ProjectCardOptions {
type ProjectColumnOptions (line 904) | interface ProjectColumnOptions {
type PullRequestOptions (line 916) | interface PullRequestOptions {
type PullRequestReviewOptions (line 943) | interface PullRequestReviewOptions {
type PullRequestReviewCommentOptions (line 955) | interface PullRequestReviewCommentOptions {
type PullRequestTargetOptions (line 967) | interface PullRequestTargetOptions extends PushOptions {
type PushOptions (line 994) | interface PushOptions {
type RegistryPackageOptions (line 1031) | interface RegistryPackageOptions {
type ReleaseOptions (line 1043) | interface ReleaseOptions {
type WatchOptions (line 1063) | interface WatchOptions {
type WorkflowRunOptions (line 1075) | interface WorkflowRunOptions {
type WorkflowDispatchOptions (line 1100) | interface WorkflowDispatchOptions {}
type WorkflowCallOptions (line 1105) | interface WorkflowCallOptions {}
type CreateOptions (line 1110) | interface CreateOptions {}
type DeleteOptions (line 1115) | interface DeleteOptions {}
type DeploymentOptions (line 1120) | interface DeploymentOptions {}
type DeploymentStatusOptions (line 1125) | interface DeploymentStatusOptions {}
type ForkOptions (line 1130) | interface ForkOptions {}
type GollumOptions (line 1135) | interface GollumOptions {}
type PageBuildOptions (line 1140) | interface PageBuildOptions {}
type PublicOptions (line 1145) | interface PublicOptions {}
type StatusOptions (line 1150) | interface StatusOptions {}
FILE: src/github/workflows.ts
type GithubWorkflowOptions (line 14) | interface GithubWorkflowOptions {
class GithubWorkflow (line 37) | class GithubWorkflow extends Component {
method constructor (line 67) | constructor(
method on (line 98) | public on(events: workflows.Triggers) {
method addJob (line 110) | public addJob(
method addJobs (line 122) | public addJobs(
method renderWorkflow (line 152) | private renderWorkflow() {
function snakeCaseKeys (line 162) | function snakeCaseKeys<T = unknown>(obj: T): T {
function renderJobs (line 181) | function renderJobs(
function arrayOrScalar (line 280) | function arrayOrScalar<T>(arr: T[] | undefined): T | T[] | undefined {
type IJobProvider (line 290) | interface IJobProvider {
function setupTools (line 297) | function setupTools(tools: workflows.Tools) {
FILE: src/gitlab/configuration-model.ts
type Cache (line 9) | interface Cache {
type CacheKeyFiles (line 30) | interface CacheKeyFiles {
type CachePolicy (line 41) | enum CachePolicy {
type CacheWhen (line 54) | enum CacheWhen {
type Default (line 67) | interface Default {
type Artifacts (line 95) | interface Artifacts {
type Reports (line 119) | interface Reports {
type Image (line 159) | interface Image {
type Retry (line 170) | interface Retry {
type Service (line 181) | interface Service {
type Include (line 196) | interface Include {
type IncludeRule (line 218) | interface IncludeRule {
type AllowFailure (line 241) | interface AllowFailure {
type JobWhen (line 249) | enum JobWhen {
type Job (line 262) | interface Job {
type Environment (line 328) | interface Environment {
type Action (line 350) | enum Action {
type DeploymentTier (line 360) | enum DeploymentTier {
type KubernetesConfig (line 372) | interface KubernetesConfig {
type Filter (line 380) | interface Filter {
type KubernetesEnum (line 394) | enum KubernetesEnum {
type Inherit (line 404) | interface Inherit {
type DefaultElement (line 411) | enum DefaultElement {
type Need (line 427) | interface Need {
type Parallel (line 439) | interface Parallel {
type Release (line 447) | interface Release {
type Assets (line 466) | interface Assets {
type Link (line 474) | interface Link {
type LinkType (line 488) | enum LinkType {
type Secret (line 498) | interface Secret {
type VaultConfig (line 507) | interface VaultConfig {
type Engine (line 519) | interface Engine {
type Trigger (line 531) | interface Trigger {
type TriggerInclude (line 547) | interface TriggerInclude {
type Strategy (line 569) | enum Strategy {
type VariableConfig (line 577) | interface VariableConfig {
type Workflow (line 588) | interface Workflow {
type WorkflowRule (line 597) | interface WorkflowRule {
type WorkflowWhen (line 615) | enum WorkflowWhen {
FILE: src/gitlab/configuration.ts
type CiConfigurationOptions (line 22) | interface CiConfigurationOptions {
class CiConfiguration (line 57) | class CiConfiguration extends Component {
method constructor (line 145) | constructor(
method addIncludes (line 193) | public addIncludes(...includes: Include[]) {
method assertIsValidInclude (line 212) | private assertIsValidInclude(include: Include) {
method areEqualIncludes (line 240) | private areEqualIncludes(x: Include, y: Include): boolean {
method addServices (line 260) | public addServices(...services: Service[]) {
method addGlobalVariables (line 280) | public addGlobalVariables(variables: Record<string, any>) {
method addStages (line 295) | public addStages(...stages: string[]) {
method addJobs (line 307) | public addJobs(jobs: Record<string, Job>) {
method renderCI (line 319) | private renderCI() {
method renderDefault (line 337) | private renderDefault() {
function snakeCaseKeys (line 363) | function snakeCaseKeys<T = unknown>(obj: T): T {
FILE: src/gitlab/gitlab-configuration.ts
class GitlabConfiguration (line 9) | class GitlabConfiguration extends CiConfiguration {
method constructor (line 11) | constructor(project: Project, options?: CiConfigurationOptions) {
method createNestedTemplates (line 22) | public createNestedTemplates(config: Record<string, CiConfigurationOpt...
FILE: src/gitlab/nested-configuration.ts
class NestedConfiguration (line 9) | class NestedConfiguration extends CiConfiguration {
method constructor (line 11) | constructor(
FILE: src/gitpod.ts
constant GITPOD_FILE (line 14) | const GITPOD_FILE = ".gitpod.yml";
type GitpodOpenMode (line 26) | enum GitpodOpenMode {
type GitpodOpenIn (line 56) | enum GitpodOpenIn {
type GitpodTask (line 85) | interface GitpodTask {
type GitpodOnOpen (line 135) | enum GitpodOnOpen {
type GitpodPortVisibility (line 160) | enum GitpodPortVisibility {
type GitpodPort (line 175) | interface GitpodPort {
type GitpodPrebuilds (line 203) | interface GitpodPrebuilds {
type GitpodOptions (line 262) | interface GitpodOptions extends DevEnvironmentOptions {
class Gitpod (line 275) | class Gitpod extends Component implements IDevEnvironment {
method constructor (line 287) | constructor(project: Project, options: GitpodOptions = {}) {
method addDockerImage (line 333) | public addDockerImage(image: DevEnvironmentDockerImage) {
method addTasks (line 348) | public addTasks(...tasks: Task[]) {
method addPrebuilds (line 361) | public addPrebuilds(config: GitpodPrebuilds) {
method addCustomTask (line 373) | public addCustomTask(options: GitpodTask) {
method addPorts (line 390) | public addPorts(...ports: string[]) {
method addVscodeExtensions (line 404) | public addVscodeExtensions(...extensions: GitpodCodeExtensionId[]) {
method renderDockerImage (line 408) | private renderDockerImage() {
method renderPrebuilds (line 420) | private renderPrebuilds() {
type GitpodCodeExtensionId (line 435) | type GitpodCodeExtensionId = string;
FILE: src/ignore-file.ts
class IgnoreFile (line 4) | class IgnoreFile extends FileBase {
method constructor (line 7) | constructor(project: Project, filePath: string) {
method addPatterns (line 20) | public addPatterns(...patterns: string[]) {
method normalizePatterns (line 33) | private normalizePatterns(pattern: string) {
method removePatterns (line 55) | public removePatterns(...patterns: string[]) {
method exclude (line 65) | public exclude(...patterns: string[]) {
method include (line 73) | public include(...patterns: string[]) {
method synthesizeContent (line 83) | protected synthesizeContent(resolver: IResolver): string | undefined {
function remove (line 94) | function remove<T>(arr: T[], value: any) {
FILE: src/ini.ts
type IniFileOptions (line 9) | interface IniFileOptions extends ObjectFileOptions {}
class IniFile (line 14) | class IniFile extends ObjectFile {
method constructor (line 15) | constructor(project: Project, filePath: string, options: IniFileOption...
method synthesizeContent (line 19) | protected synthesizeContent(resolver: IResolver): string | undefined {
FILE: src/inventory.ts
constant PROJEN_MODULE_ROOT (line 6) | const PROJEN_MODULE_ROOT = path.join(__dirname, "..");
constant PROJECT_BASE_FQN (line 7) | const PROJECT_BASE_FQN = "projen.Project";
type JsiiTypes (line 9) | type JsiiTypes = { [name: string]: JsiiType };
type ProjectOption (line 11) | interface ProjectOption {
type ProjectType (line 30) | interface ProjectType {
type JsiiType (line 40) | interface JsiiType {
type JsiiPropertyType (line 75) | interface JsiiPropertyType {
function discover (line 91) | function discover(...moduleDirs: string[]) {
function readManifest (line 106) | function readManifest(dir: string) {
function discoverJsiiTypes (line 143) | function discoverJsiiTypes(...moduleDirs: string[]) {
function resolveProjectType (line 199) | function resolveProjectType(projectFqn: string): ProjectType {
function toProjectType (line 216) | function toProjectType(jsii: JsiiTypes, fqn: string): ProjectType {
function readJsiiManifest (line 246) | function readJsiiManifest(jsiiFqn: string): any {
function discoverOptions (line 256) | function discoverOptions(jsii: JsiiTypes, fqn: string): ProjectOption[] {
function getSimpleTypeName (line 356) | function getSimpleTypeName(type: JsiiPropertyType): string {
function isJsonLike (line 370) | function isJsonLike(jsii: JsiiTypes, type: JsiiPropertyType): boolean {
function filterUndefined (line 386) | function filterUndefined(obj: any) {
function isProjectType (line 396) | function isProjectType(jsii: JsiiTypes, fqn: string) {
function checkDefaultIsParsable (line 433) | function checkDefaultIsParsable(prop: string, value: string, type: strin...
FILE: src/java/java-project.ts
type JavaProjectCommonOptions (line 13) | interface JavaProjectCommonOptions
type JavaProjectOptions (line 95) | interface JavaProjectOptions extends JavaProjectCommonOptions {
class JavaProject (line 114) | class JavaProject extends GitHubProject {
method constructor (line 145) | constructor(options: JavaProjectOptions) {
method addDependency (line 217) | public addDependency(spec: string) {
method addTestDependency (line 226) | public addTestDependency(spec: string) {
method addPlugin (line 238) | public addPlugin(spec: string, options: PluginOptions = {}) {
FILE: src/java/junit.ts
constant TESTDIR (line 7) | const TESTDIR = join("src", "test", "java");
type JunitOptions (line 12) | interface JunitOptions {
class Junit (line 35) | class Junit extends Component {
method constructor (line 36) | constructor(project: Project, options: JunitOptions) {
FILE: src/java/maven-compile.ts
type MavenCompileOptions (line 8) | interface MavenCompileOptions {
class MavenCompile (line 27) | class MavenCompile extends Component {
method constructor (line 28) | constructor(project: Project, pom: Pom, options: MavenCompileOptions =...
FILE: src/java/maven-packaging.ts
type MavenPackagingOptions (line 8) | interface MavenPackagingOptions {
class MavenPackaging (line 37) | class MavenPackaging extends Component {
method constructor (line 38) | constructor(project: Project, pom: Pom, options: MavenPackagingOptions...
FILE: src/java/maven-sample.ts
type MavenSampleOptions (line 6) | interface MavenSampleOptions {
class MavenSample (line 16) | class MavenSample extends Component {
method constructor (line 17) | constructor(project: Project, options: MavenSampleOptions) {
FILE: src/java/pom.ts
constant POM_XML_ATTRS (line 12) | const POM_XML_ATTRS = {
type PomOptions (line 22) | interface PomOptions {
type MavenRepository (line 100) | interface MavenRepository {
class Pom (line 124) | class Pom extends Component {
method constructor (line 169) | constructor(project: Project, options: PomOptions) {
method addProperty (line 189) | public addProperty(key: string, value: string) {
method addDependency (line 198) | public addDependency(spec: string) {
method addTestDependency (line 207) | public addTestDependency(spec: string) {
method addPlugin (line 219) | public addPlugin(spec: string, options: PluginOptions = {}) {
method addRepository (line 230) | public addRepository(repository: MavenRepository) {
method synthPom (line 234) | private synthPom() {
method synthDependencies (line 256) | private synthDependencies() {
method synthRepositories (line 298) | private synthRepositories() {
type PluginOptions (line 312) | interface PluginOptions {
type PluginExecution (line 338) | interface PluginExecution {
function mavenCoords (line 361) | function mavenCoords(dep: DependencyCoordinates) {
function pluginConfig (line 377) | function pluginConfig(options: PluginOptions = {}) {
FILE: src/java/projenrc.ts
type ProjenrcOptions (line 13) | interface ProjenrcOptions {
class Projenrc (line 48) | class Projenrc extends Component {
method constructor (line 59) | constructor(project: Project, pom: Pom, options: ProjenrcOptions = {}) {
method generateProjenrc (line 90) | private generateProjenrc() {
function generateJavaOptionNames (line 192) | function generateJavaOptionNames(
function renderJavaOptions (line 208) | function renderJavaOptions(
function toJavaProperty (line 233) | function toJavaProperty(prop: string) {
function toJavaValue (line 237) | function toJavaValue(
function toJavaFullTypeName (line 252) | function toJavaFullTypeName(jsiiType: any) {
function getJavaImport (line 256) | function getJavaImport(jsiiType: any, jsiiManifest: any) {
FILE: src/javascript/bundler.ts
type BundlerOptions (line 11) | interface BundlerOptions {
class Bundler (line 37) | class Bundler extends Component {
method of (line 44) | public static of(project: Project): Bundler | undefined {
method constructor (line 65) | constructor(project: Project, options: BundlerOptions = {}) {
method bundleTask (line 79) | public get bundleTask(): Task {
method addBundle (line 102) | public addBundle(entrypoint: string, options: AddBundleOptions): Bundle {
method addBundlingSupport (line 158) | private addBundlingSupport() {
type Bundle (line 169) | interface Bundle {
type BundlingOptions (line 194) | interface BundlingOptions {
type AddBundleOptions (line 233) | interface AddBundleOptions extends BundlingOptions {
FILE: src/javascript/eslint.ts
type EslintOptions (line 9) | interface EslintOptions {
type EslintOverride (line 90) | interface EslintOverride {
class Eslint (line 110) | class Eslint extends Component {
method of (line 114) | public static of(project: Project): Eslint | undefined {
method constructor (line 145) | constructor(project: NodeProject, options: EslintOptions) {
method addRules (line 401) | public addRules(rules: { [rule: string]: any }) {
method addPlugins (line 411) | public addPlugins(...plugins: string[]) {
method addOverride (line 418) | public addOverride(override: EslintOverride) {
method addIgnorePattern (line 425) | public addIgnorePattern(pattern: string) {
method addExtends (line 433) | public addExtends(...extendList: string[]) {
method allowDevDeps (line 441) | public allowDevDeps(pattern: string) {
method enablePrettier (line 448) | private enablePrettier() {
method renderDevDepsAllowList (line 464) | private renderDevDepsAllowList() {
FILE: src/javascript/jest.ts
constant DEFAULT_TEST_REPORTS_DIR (line 6) | const DEFAULT_TEST_REPORTS_DIR = "test-reports";
type JestConfigOptions (line 9) | interface JestConfigOptions {
type JestOptions (line 480) | interface JestOptions {
type CoverageThreshold (line 548) | interface CoverageThreshold {
type HasteConfig (line 555) | interface HasteConfig {
type JestReporter (line 563) | type JestReporter = [string, { [key: string]: any }] | string;
class Jest (line 573) | class Jest {
method constructor (line 591) | constructor(project: NodeProject, options: JestOptions = {}) {
method addTestMatch (line 703) | public addTestMatch(pattern: string) {
method addWatchIgnorePattern (line 711) | public addWatchIgnorePattern(pattern: string) {
method addIgnorePattern (line 715) | public addIgnorePattern(pattern: string) {
method addReporter (line 719) | public addReporter(reporter: JestReporter) {
method addSnapshotResolver (line 723) | public addSnapshotResolver(file: string) {
method configureTestCommand (line 727) | private configureTestCommand() {
FILE: src/javascript/node-package.ts
constant UNLICENSED (line 25) | const UNLICENSED = "UNLICENSED";
constant DEFAULT_NPM_REGISTRY_URL (line 26) | const DEFAULT_NPM_REGISTRY_URL = "https://registry.npmjs.org/";
constant GITHUB_PACKAGES_REGISTRY (line 27) | const GITHUB_PACKAGES_REGISTRY = "npm.pkg.github.com";
constant DEFAULT_NPM_TOKEN_SECRET (line 28) | const DEFAULT_NPM_TOKEN_SECRET = "NPM_TOKEN";
constant DEFAULT_GITHUB_TOKEN_SECRET (line 29) | const DEFAULT_GITHUB_TOKEN_SECRET = "GITHUB_TOKEN";
type NodePackageOptions (line 31) | interface NodePackageOptions {
type CodeArtifactOptions (line 303) | interface CodeArtifactOptions {
type ScopedPackagesOptions (line 332) | interface ScopedPackagesOptions {
class NodePackage (line 349) | class NodePackage extends Component {
method constructor (line 439) | constructor(project: Project, options: NodePackageOptions = {}) {
method addDeps (line 552) | public addDeps(...deps: string[]) {
method addDevDeps (line 567) | public addDevDeps(...deps: string[]) {
method addPeerDeps (line 586) | public addPeerDeps(...deps: string[]) {
method addBundledDeps (line 612) | public addBundledDeps(...deps: string[]) {
method addEngine (line 629) | public addEngine(engine: string, version: string) {
method addKeywords (line 637) | public addKeywords(...keywords: string[]) {
method addBin (line 643) | public addBin(bins: Record<string, string>) {
method setScript (line 655) | public setScript(name: string, command: string) {
method removeScript (line 663) | public removeScript(name: string) {
method hasScript (line 672) | public hasScript(name: string) {
method addField (line 682) | public addField(name: string, value: any) {
method addVersion (line 690) | public addVersion(version: string) {
method addPackageResolutions (line 702) | public addPackageResolutions(...resolutions: string[]) {
method installCommand (line 714) | public get installCommand() {
method installAndUpdateLockfileCommand (line 721) | public get installAndUpdateLockfileCommand() {
method renderUpgradePackagesCommand (line 728) | public renderUpgradePackagesCommand(
method preSynthesize (line 772) | public preSynthesize() {
method postSynthesize (line 777) | public postSynthesize() {
method projenCommand (line 799) | public get projenCommand() {
method isAutomatedBuild (line 806) | private get isAutomatedBuild(): boolean {
method determineVersion (line 810) | private determineVersion(currVersion?: string) {
method isReleaseBuild (line 821) | private get isReleaseBuild(): boolean {
method parseNpmOptions (line 827) | private parseNpmOptions(options: NodePackageOptions) {
method parseScopedPackagesOptions (line 902) | private parseScopedPackagesOptions(
method addCodeArtifactLoginScript (line 931) | private addCodeArtifactLoginScript() {
method addNodeEngine (line 962) | private addNodeEngine() {
method renderNpmRegistryPath (line 977) | private renderNpmRegistryPath(path: string | undefined): string {
method renderInstallCommand (line 985) | private renderInstallCommand(frozen: boolean) {
method processDeps (line 1007) | private processDeps(options: NodePackageOptions) {
method renderDependencies (line 1014) | private renderDependencies(): NpmDependencies {
method resolveDepsAndWritePackageJson (line 1152) | private resolveDepsAndWritePackageJson(): boolean {
method renderPublishConfig (line 1259) | private renderPublishConfig() {
method renderKeywords (line 1276) | private renderKeywords() {
method renderEngines (line 1281) | private renderEngines() {
method autoDiscoverBinaries (line 1285) | private autoDiscoverBinaries() {
method renderAuthor (line 1300) | private renderAuthor(options: NodePackageOptions) {
method renderBin (line 1323) | private renderBin() {
method renderScripts (line 1327) | private renderScripts() {
method npmScriptForTask (line 1338) | private npmScriptForTask(task: Task) {
method readPackageJson (line 1342) | private readPackageJson() {
method installDependencies (line 1351) | private installDependencies() {
type PeerDependencyOptions (line 1358) | interface PeerDependencyOptions {
type NodePackageManager (line 1369) | enum NodePackageManager {
type NpmAccess (line 1389) | enum NpmAccess {
type NpmDependencies (line 1401) | interface NpmDependencies {
function isScoped (line 1410) | function isScoped(packageName: string) {
function defaultNpmAccess (line 1414) | function defaultNpmAccess(packageName: string) {
function defaultNpmToken (line 1418) | function defaultNpmToken(
function determineLockfile (line 1435) | function determineLockfile(packageManager: NodePackageManager) {
FILE: src/javascript/node-project.ts
constant PROJEN_SCRIPT (line 41) | const PROJEN_SCRIPT = "projen";
type NodeProjectOptions (line 43) | interface NodeProjectOptions
type AutoRelease (line 298) | enum AutoRelease {
class NodeProject (line 315) | class NodeProject extends GitHubProject {
method allowLibraryDependencies (line 329) | public get allowLibraryDependencies(): boolean {
method entrypoint (line 336) | public get entrypoint(): string {
method minNodeVersion (line 366) | public get minNodeVersion(): string | undefined {
method maxNodeVersion (line 373) | public get maxNodeVersion(): string | undefined {
method packageManager (line 384) | public get packageManager(): NodePackageManager {
method manifest (line 401) | public get manifest() {
method constructor (line 428) | constructor(options: NodeProjectOptions) {
method renderUploadCoverageJobStep (line 691) | private renderUploadCoverageJobStep(options: NodeProjectOptions): JobS...
method addBins (line 714) | public addBins(bins: Record<string, string>) {
method setScript (line 724) | public setScript(name: string, command: string) {
method removeScript (line 732) | public removeScript(name: string) {
method hasScript (line 740) | public hasScript(name: string) {
method addCompileCommand (line 748) | public addCompileCommand(...commands: string[]) {
method addTestCommand (line 758) | public addTestCommand(...commands: string[]) {
method addFields (line 768) | public addFields(fields: { [name: string]: any }) {
method addKeywords (line 778) | public addKeywords(...keywords: string[]) {
method getScopedPackageSteps (line 788) | private getScopedPackageSteps(
method renderWorkflowSetup (line 846) | public renderWorkflowSetup(
method addDeps (line 897) | public addDeps(...deps: string[]) {
method addDevDeps (line 910) | public addDevDeps(...deps: string[]) {
method addPeerDeps (line 927) | public addPeerDeps(...deps: string[]) {
method addBundledDeps (line 943) | public addBundledDeps(...deps: string[]) {
method addPackageIgnore (line 947) | public addPackageIgnore(pattern: string) {
method addLicense (line 951) | private addLicense(options: NodeProjectOptions) {
method addDefaultGitIgnore (line 961) | private addDefaultGitIgnore() {
method runTaskCommand (line 1020) | public runTaskCommand(task: Task) {
method buildWorkflowJobId (line 1027) | public get buildWorkflowJobId() {
type RenderWorkflowSetupOptions (line 1035) | interface RenderWorkflowSetupOptions {
FILE: src/javascript/npm-config.ts
type NpmConfigOptions (line 8) | interface NpmConfigOptions {
class NpmConfig (line 22) | class NpmConfig extends Component {
method constructor (line 29) | constructor(project: NodeProject, options: NpmConfigOptions = {}) {
method addRegistry (line 45) | public addRegistry(url: string, scope?: string) {
method addConfig (line 55) | public addConfig(name: string, value: string) {
FILE: src/javascript/prettier.ts
type PrettierOptions (line 11) | interface PrettierOptions {
type PrettierSettings (line 38) | interface PrettierSettings {
type ArrowParens (line 201) | enum ArrowParens {
type EmbeddedLanguageFormatting (line 213) | enum EmbeddedLanguageFormatting {
type EndOfLine (line 225) | enum EndOfLine {
type HTMLWhitespaceSensitivity (line 248) | enum HTMLWhitespaceSensitivity {
type PrettierOverride (line 265) | interface PrettierOverride {
type Files (line 285) | type Files = string[] | string;
type ProseWrap (line 287) | enum ProseWrap {
type QuoteProps (line 304) | enum QuoteProps {
type TrailingComma (line 321) | enum TrailingComma {
class Prettier (line 341) | class Prettier extends Component {
method of (line 342) | public static of(project: Project): Prettier | undefined {
method constructor (line 363) | constructor(project: NodeProject, options: PrettierOptions) {
method addOverride (line 389) | public addOverride(override: PrettierOverride) {
method addIgnorePattern (line 399) | public addIgnorePattern(pattern: string) {
method overrides (line 406) | public get overrides() {
method preSynthesize (line 410) | public preSynthesize() {
FILE: src/javascript/projenrc.ts
type ProjenrcOptions (line 6) | interface ProjenrcOptions {
class Projenrc (line 17) | class Projenrc extends Component {
method constructor (line 20) | constructor(project: Project, options: ProjenrcOptions = {}) {
method generateProjenrc (line 31) | private generateProjenrc() {
FILE: src/javascript/render-options.ts
constant PROJEN_NEW (line 4) | const PROJEN_NEW = "__new__";
constant TAB (line 5) | const TAB = makePadding(2);
type RenderProjectOptions (line 10) | interface RenderProjectOptions {
type ProjenInit (line 48) | interface ProjenInit {
function renderProjenInitOptions (line 68) | function renderProjenInitOptions(
function resolveInitProject (line 79) | function resolveInitProject(opts: any) {
function renderJavaScriptOptions (line 106) | function renderJavaScriptOptions(opts: RenderProjectOptions) {
function renderCommentedOptionsByModule (line 183) | function renderCommentedOptionsByModule(
function renderCommentedOptionsInOrder (line 223) | function renderCommentedOptionsInOrder(
function renderArgAsJavaScript (line 251) | function renderArgAsJavaScript(arg: any, option: inventory.ProjectOption) {
function makePadding (line 270) | function makePadding(paddingLength: number): string {
FILE: src/javascript/typescript-config.ts
type TypescriptConfigOptions (line 4) | interface TypescriptConfigOptions {
type TypeScriptModuleResolution (line 34) | enum TypeScriptModuleResolution {
type TypeScriptJsxMode (line 55) | enum TypeScriptJsxMode {
type TypeScriptCompilerOptions (line 84) | interface TypeScriptCompilerOptions {
class TypescriptConfig (line 364) | class TypescriptConfig {
method constructor (line 371) | constructor(project: NodeProject, options: TypescriptConfigOptions) {
method addInclude (line 391) | public addInclude(pattern: string) {
method addExclude (line 395) | public addExclude(pattern: string) {
FILE: src/javascript/upgrade-dependencies.ts
function context (line 17) | function context(value: string) {
constant REPO (line 21) | const REPO = context("github.repository");
constant RUN_ID (line 22) | const RUN_ID = context("github.run_id");
constant RUN_URL (line 23) | const RUN_URL = `https://github.com/${REPO}/actions/runs/${RUN_ID}`;
constant CREATE_PATCH_STEP_ID (line 24) | const CREATE_PATCH_STEP_ID = "create_patch";
constant PATCH_CREATED_OUTPUT (line 25) | const PATCH_CREATED_OUTPUT = "patch_created";
type UpgradeDependenciesOptions (line 30) | interface UpgradeDependenciesOptions {
class UpgradeDependencies (line 89) | class UpgradeDependencies extends Component {
method constructor (line 117) | constructor(project: NodeProject, options: UpgradeDependenciesOptions ...
method addPostBuildSteps (line 173) | public addPostBuildSteps(...steps: JobStep[]) {
method renderTaskSteps (line 177) | private renderTaskSteps(): TaskStep[] {
method createWorkflow (line 253) | private createWorkflow(
method createUpgrade (line 286) | private createUpgrade(task: Task, branch?: string): Upgrade {
method createPr (line 336) | private createPr(workflow: GithubWorkflow, upgrade: Upgrade): PR {
type Upgrade (line 407) | interface Upgrade {
type PR (line 413) | interface PR {
type UpgradeDependenciesWorkflowOptions (line 421) | interface UpgradeDependenciesWorkflowOptions {
class UpgradeDependenciesSchedule (line 486) | class UpgradeDependenciesSchedule {
method expressions (line 521) | public static expressions(cron: string[]) {
method constructor (line 525) | private constructor(public readonly cron: string[]) {}
FILE: src/javascript/util.ts
function renderBundleName (line 5) | function renderBundleName(entrypoint: string) {
function extractCodeArtifactDetails (line 29) | function extractCodeArtifactDetails(registryUrl: string) {
function minVersion (line 38) | function minVersion(version: string): string | undefined {
function packageResolutionsFieldName (line 46) | function packageResolutionsFieldName(
FILE: src/json-patch.ts
class JsonPatch (line 22) | class JsonPatch {
method apply (line 29) | public static apply(document: any, ...ops: JsonPatch[]): any {
method add (line 44) | public static add(path: string, value: any) {
method remove (line 54) | public static remove(path: string) {
method replace (line 63) | public static replace(path: string, value: any) {
method copy (line 73) | public static copy(from: string, path: string) {
method move (line 82) | public static move(from: string, path: string) {
method test (line 92) | public static test(path: string, value: any) {
method constructor (line 96) | private constructor(private readonly operation: Operation) {}
method _toJson (line 103) | public _toJson(): any {
FILE: src/json.ts
type JsonFileOptions (line 8) | interface JsonFileOptions extends ObjectFileOptions {
class JsonFile (line 25) | class JsonFile extends ObjectFile {
method constructor (line 29) | constructor(project: Project, filePath: string, options: JsonFileOptio...
method synthesizeContent (line 43) | protected synthesizeContent(resolver: IResolver): string | undefined {
FILE: src/license.ts
type LicenseOptions (line 5) | interface LicenseOptions {
class License (line 32) | class License extends FileBase {
method constructor (line 35) | constructor(project: Project, options: LicenseOptions) {
method synthesizeContent (line 71) | protected synthesizeContent(_: IResolver): string | undefined {
FILE: src/logger.ts
type LoggerOptions (line 11) | interface LoggerOptions {
class Logger (line 31) | class Logger extends Component {
method constructor (line 35) | constructor(project: Project, options: LoggerOptions = {}) {
method log (line 52) | public log(level: LogLevel, ...text: any[]) {
method verbose (line 77) | public verbose(...text: any[]) {
method debug (line 85) | public debug(...text: any[]) {
method info (line 93) | public info(...text: any[]) {
method warn (line 101) | public warn(...text: any[]) {
method error (line 109) | public error(...text: any[]) {
method colorForLogLevel (line 113) | private colorForLogLevel(level: LogLevel): chalk.ChalkFunction {
type LogLevel (line 134) | enum LogLevel {
FILE: src/logging.ts
constant ICON (line 4) | const ICON = "👾";
function log (line 9) | function log(isError: boolean, color: chalk.ChalkFunction, ...text: any[...
function debug (line 17) | function debug(...text: any[]) {
function verbose (line 23) | function verbose(...text: any[]) {
function info (line 27) | function info(...text: any[]) {
function error (line 31) | function error(...text: any[]) {
function warn (line 35) | function warn(...text: any[]) {
function disable (line 39) | function disable() {
function isEnabled (line 43) | function isEnabled() {
FILE: src/makefile.ts
type Rule (line 7) | interface Rule {
type AllRule (line 37) | interface AllRule extends Rule {
type MakefileOptions (line 44) | interface MakefileOptions extends FileBaseOptions {
class Makefile (line 63) | class Makefile extends FileBase {
method constructor (line 71) | constructor(
method addAll (line 94) | public addAll(target: string): Makefile {
method addAlls (line 102) | public addAlls(...targets: string[]): Makefile {
method addRule (line 110) | public addRule(rule: Rule): Makefile {
method addRules (line 119) | public addRules(...rules: Rule[]): Makefile {
method validateRule (line 124) | private validateRule(rule: Rule) {
method synthesizeContent (line 132) | protected synthesizeContent(resolver: IResolver): string | undefined {
FILE: src/object-file.ts
type ObjectFileOptions (line 9) | interface ObjectFileOptions extends FileBaseOptions {
method constructor (line 50) | constructor(project: Project, filePath: string, options: ObjectFileOptio...
method addOverride (line 93) | public addOverride(path: string, value: any) {
method addToArray (line 156) | public addToArray(path: string, ...values: any) {
method patch (line 214) | public patch(...patches: JsonPatch[]) {
method addDeletionOverride (line 222) | public addDeletionOverride(path: string) {
method synthesizeContent (line 226) | protected synthesizeContent(resolver: IResolver): string | undefined {
function splitOnPeriods (line 245) | function splitOnPeriods(x: string): string[] {
FILE: src/option-hints.ts
type InitProjectOptionHints (line 5) | enum InitProjectOptionHints {
FILE: src/project-build.ts
class ProjectBuild (line 16) | class ProjectBuild extends Component {
method constructor (line 47) | constructor(project: Project) {
FILE: src/project.ts
type ProjectOptions (line 28) | interface ProjectOptions {
class Project (line 109) | class Project {
method constructor (line 203) | constructor(options: ProjectOptions) {
method components (line 287) | public get components() {
method files (line 294) | public get files(): FileBase[] {
method addTask (line 308) | public addTask(name: string, props: TaskOptions = {}) {
method removeTask (line 319) | public removeTask(name: string) {
method buildTask (line 323) | public get buildTask() {
method compileTask (line 326) | public get compileTask() {
method testTask (line 329) | public get testTask() {
method preCompileTask (line 332) | public get preCompileTask() {
method postCompileTask (line 335) | public get postCompileTask() {
method packageTask (line 338) | public get packageTask() {
method tryFindFile (line 350) | public tryFindFile(filePath: string): FileBase | undefined {
method tryFindJsonFile (line 375) | public tryFindJsonFile(filePath: string): JsonFile | undefined {
method tryFindObjectFile (line 394) | public tryFindObjectFile(filePath: string): ObjectFile | undefined {
method tryRemoveFile (line 418) | public tryRemoveFile(filePath: string): FileBase | undefined {
method addTip (line 446) | public addTip(message: string) {
method addExcludeFromCleanup (line 456) | public addExcludeFromCleanup(...globs: string[]) {
method runTaskCommand (line 467) | public runTaskCommand(task: Task) {
method addPackageIgnore (line 477) | public addPackageIgnore(_pattern: string) {
method addGitIgnore (line 485) | public addGitIgnore(pattern: string) {
method annotateGenerated (line 496) | public annotateGenerated(_glob: string): void {
method synth (line 510) | public synth(): void {
method ejected (line 572) | public get ejected(): boolean {
method preSynthesize (line 579) | public preSynthesize() {}
method postSynthesize (line 584) | public postSynthesize() {}
method _addComponent (line 590) | public _addComponent(component: Component) {
method _addSubProject (line 603) | _addSubProject(subproject: Project) {
method determineOutdir (line 623) | private determineOutdir(outdirOption?: string) {
type ProjectType (line 659) | enum ProjectType {
type InitProject (line 682) | interface InitProject {
FILE: src/projects.ts
type CreateProjectOptions (line 7) | interface CreateProjectOptions {
class Projects (line 57) | class Projects {
method createProject (line 68) | public static createProject(options: CreateProjectOptions) {
method constructor (line 72) | private constructor() {}
function createProject (line 75) | function createProject(opts: CreateProjectOptions) {
FILE: src/projenrc-json.ts
type ProjenrcOptions (line 6) | interface ProjenrcOptions {
class Projenrc (line 17) | class Projenrc extends Component {
method constructor (line 20) | constructor(project: Project, options: ProjenrcOptions = {}) {
method generateProjenrc (line 32) | private generateProjenrc() {
FILE: src/python/pip.ts
type PipOptions (line 12) | interface PipOptions {}
class Pip (line 17) | class Pip extends Component implements IPythonDeps {
method constructor (line 20) | constructor(project: Project, _options: PipOptions = {}) {
method addDependency (line 43) | public addDependency(spec: string) {
method addDevDependency (line 52) | public addDevDependency(spec: string) {
method installDependencies (line 59) | public installDependencies() {
class RuntimeDependencyProvider (line 67) | class RuntimeDependencyProvider implements IPackageProvider {
method constructor (line 68) | constructor(private readonly project: Project) {}
method packages (line 69) | public get packages(): Dependency[] {
class DevDependencyProvider (line 76) | class DevDependencyProvider implements IPackageProvider {
method constructor (line 77) | constructor(private readonly project: Project) {}
method packages (line 78) | public get packages(): Dependency[] {
FILE: src/python/poetry.ts
class Poetry (line 16) | class Poetry
method constructor (line 28) | constructor(project: Project, options: PythonPackagingOptions) {
method synthDependencies (line 79) | private synthDependencies() {
method synthDevDependencies (line 97) | private synthDevDependencies() {
method addDependency (line 112) | public addDependency(spec: string) {
method addDevDependency (line 121) | public addDevDependency(spec: string) {
method setupEnvironment (line 128) | public setupEnvironment() {
method installDependencies (line 156) | public installDependencies() {
type PoetryPyprojectOptionsWithoutDeps (line 167) | interface PoetryPyprojectOptionsWithoutDeps {
type PoetryPyprojectOptions (line 283) | interface PoetryPyprojectOptions
class PoetryPyproject (line 307) | class PoetryPyproject extends Component {
method constructor (line 310) | constructor(project: Project, options: PoetryPyprojectOptions) {
FILE: src/python/projenrc.ts
type ProjenrcOptions (line 13) | interface ProjenrcOptions {
class Projenrc (line 33) | class Projenrc extends Component {
method constructor (line 39) | constructor(project: Project, options: ProjenrcOptions = {}) {
method generateProjenrc (line 57) | private generateProjenrc() {
function resolvePythonImportName (line 121) | function resolvePythonImportName(jsiiFqn: string, jsiiManifest: any) {
function renderPythonOptions (line 130) | function renderPythonOptions(
function toPythonProperty (line 155) | function toPythonProperty(prop: string) {
function toPythonValue (line 159) | function toPythonValue(
function toPythonImport (line 184) | function toPythonImport(fqn: string) {
FILE: src/python/pytest-sample.ts
type PytestSampleOptions (line 7) | interface PytestSampleOptions {
class PytestSample (line 22) | class PytestSample extends Component {
method constructor (line 23) | constructor(project: Project, options: PytestSampleOptions) {
FILE: src/python/pytest.ts
type PytestOptions (line 5) | interface PytestOptions {
class Pytest (line 26) | class Pytest extends Component {
method constructor (line 29) | constructor(project: Project, options: PytestOptions = {}) {
FILE: src/python/python-deps.ts
type IPythonDeps (line 4) | interface IPythonDeps {
type IPackageProvider (line 30) | interface IPackageProvider {
FILE: src/python/python-env.ts
type IPythonEnv (line 1) | interface IPythonEnv {
FILE: src/python/python-packaging.ts
type IPythonPackaging (line 4) | interface IPythonPackaging {
type PythonPackagingOptions (line 11) | interface PythonPackagingOptions {
FILE: src/python/python-project.ts
constant PYTHON_PROJECT_NAME_REGEX (line 24) | const PYTHON_PROJECT_NAME_REGEX = /^[A-Za-z0-9-_\.]+$/;
type PythonProjectOptions (line 29) | interface PythonProjectOptions
class PythonProject (line 169) | class PythonProject extends GitHubProject {
method constructor (line 201) | constructor(options: PythonProjectOptions) {
method addDefaultGitIgnore (line 352) | private addDefaultGitIgnore() {
method addDependency (line 488) | public addDependency(spec: string) {
method addDevDependency (line 497) | public addDevDependency(spec: string) {
method postSynthesize (line 501) | public postSynthesize() {
FILE: src/python/python-sample.ts
type PythonSampleOptions (line 8) | interface PythonSampleOptions {
class PythonSample (line 18) | class PythonSample extends Component {
method constructor (line 19) | constructor(project: Project, options: PythonSampleOptions) {
FILE: src/python/requirements-file.ts
type RequirementsFileOptions (line 7) | interface RequirementsFileOptions {
class RequirementsFile (line 19) | class RequirementsFile extends FileBase {
method constructor (line 23) | constructor(
method addPackages (line 40) | public addPackages(...packages: string[]) {
method formatDependency (line 55) | private formatDependency(dep: DependencyCoordinates) {
method synthesizeContent (line 63) | protected synthesizeContent(resolver: IResolver): string | undefined {
FILE: src/python/setuppy.ts
type SetupPyOptions (line 9) | interface SetupPyOptions {
class SetupPy (line 66) | class SetupPy extends FileBase {
method constructor (line 69) | constructor(project: Project, options: SetupPyOptions) {
method synthesizeContent (line 88) | protected synthesizeContent(resolver: IResolver): string | undefined {
method renameFields (line 108) | private renameFields(options: SetupPyOptions): any {
FILE: src/python/setuptools.ts
class Setuptools (line 11) | class Setuptools extends Component implements IPythonPackaging {
method constructor (line 19) | constructor(
FILE: src/python/venv.ts
type VenvOptions (line 11) | interface VenvOptions {
class Venv (line 23) | class Venv extends Component implements IPythonEnv {
method constructor (line 29) | constructor(project: Project, options: VenvOptions = {}) {
method setupEnvironment (line 48) | public setupEnvironment() {
FILE: src/readme.ts
type SampleReadmeProps (line 7) | interface SampleReadmeProps {
class SampleReadme (line 29) | class SampleReadme extends SampleFile {
method constructor (line 30) | constructor(project: Project, props?: SampleReadmeProps) {
FILE: src/release/bump-version.ts
type BumpOptions (line 7) | interface BumpOptions {
function bump (line 86) | async function bump(cwd: string, options: BumpOptions) {
function tryReadVersionFile (line 194) | async function tryReadVersionFile(versionFile: string) {
type LatestTagOptions (line 202) | interface LatestTagOptions {
function generateVersionrcFile (line 221) | function generateVersionrcFile(
function determineLatestTag (line 270) | function determineLatestTag(options: LatestTagOptions): {
FILE: src/release/publisher.ts
constant PUBLIB_VERSION (line 17) | const PUBLIB_VERSION = "latest";
constant GITHUB_PACKAGES_REGISTRY (line 18) | const GITHUB_PACKAGES_REGISTRY = "npm.pkg.github.com";
constant ARTIFACTS_DOWNLOAD_DIR (line 19) | const ARTIFACTS_DOWNLOAD_DIR = "dist";
constant GITHUB_PACKAGES_MAVEN_REPOSITORY (line 20) | const GITHUB_PACKAGES_MAVEN_REPOSITORY = "https://maven.pkg.github.com";
constant GITHUB_PACKAGES_NUGET_REPOSITORY (line 21) | const GITHUB_PACKAGES_NUGET_REPOSITORY = "https://nuget.pkg.github.com";
constant AWS_CODEARTIFACT_REGISTRY_REGEX (line 22) | const AWS_CODEARTIFACT_REGISTRY_REGEX = /.codeartifact.*.amazonaws.com/;
constant PUBLIB_TOOLCHAIN (line 23) | const PUBLIB_TOOLCHAIN = {
type PublisherOptions (line 34) | interface PublisherOptions {
class Publisher (line 123) | class Publisher extends Component {
method constructor (line 148) | constructor(project: Project, options: PublisherOptions) {
method _renderJobsForBranch (line 174) | public _renderJobsForBranch(
method addGitHubPrePublishingSteps (line 195) | public addGitHubPrePublishingSteps(...steps: JobStep[]) {
method publishToGit (line 206) | public publishToGit(options: GitPublishOptions) {
method publishToGitHubReleases (line 247) | public publishToGitHubReleases(options: GitHubReleasesPublishOptions) {
method publishToNpm (line 296) | public publishToNpm(options: NpmPublishOptions = {}) {
method publishToNuget (line 357) | public publishToNuget(options: NugetPublishOptions = {}) {
method publishToMaven (line 388) | public publishToMaven(options: MavenPublishOptions = {}) {
method publishToPyPi (line 452) | public publishToPyPi(options: PyPiPublishOptions = {}) {
method publishToGo (line 479) | public publishToGo(options: GoPublishOptions = {}) {
method addPublishJob (line 522) | private addPublishJob(
method publibCommand (line 635) | private publibCommand(command: string) {
function secret (line 640) | function secret(secretName: string) {
type PublishJobOptions (line 644) | interface PublishJobOptions {
type CommonPublishOptions (line 690) | interface CommonPublishOptions {
type JsiiReleaseNpm (line 712) | interface JsiiReleaseNpm extends NpmPublishOptions {}
type NpmPublishOptions (line 717) | interface NpmPublishOptions extends CommonPublishOptions {
type CodeArtifactOptions (line 765) | interface CodeArtifactOptions {
type JsiiReleasePyPi (line 794) | interface JsiiReleasePyPi extends PyPiPublishOptions {}
type PyPiPublishOptions (line 799) | interface PyPiPublishOptions extends CommonPublishOptions {
type JsiiReleaseNuget (line 823) | interface JsiiReleaseNuget extends NugetPublishOptions {}
type NugetPublishOptions (line 828) | interface NugetPublishOptions extends CommonPublishOptions {
type JsiiReleaseMaven (line 845) | interface JsiiReleaseMaven extends MavenPublishOptions {}
type MavenPublishOptions (line 850) | interface MavenPublishOptions extends CommonPublishOptions {
type JsiiReleaseGo (line 932) | interface JsiiReleaseGo extends GoPublishOptions {}
type GoPublishOptions (line 937) | interface GoPublishOptions extends CommonPublishOptions {
type VersionArtifactOptions (line 999) | interface VersionArtifactOptions {
function isAwsCodeArtifactRegistry (line 1027) | function isAwsCodeArtifactRegistry(registryUrl: string | undefined) {
type GitHubReleasesPublishOptions (line 1034) | interface GitHubReleasesPublishOptions
type GitPublishOptions (line 1041) | interface GitPublishOptions extends VersionArtifactOptions {
type PublishJobFactory (line 1062) | type PublishJobFactory = (
FILE: src/release/release-trigger.ts
type ScheduledReleaseOptions (line 1) | interface ScheduledReleaseOptions {
type ManualReleaseOptions (line 12) | interface ManualReleaseOptions {
type ReleaseTriggerOptions (line 37) | interface ReleaseTriggerOptions {
class ReleaseTrigger (line 73) | class ReleaseTrigger {
method manual (line 91) | public static manual(options: ManualReleaseOptions = {}) {
method scheduled (line 111) | public static scheduled(options: ScheduledReleaseOptions) {
method continuous (line 122) | public static continuous() {
method constructor (line 154) | private constructor(options: ReleaseTriggerOptions = {}) {
method isManual (line 164) | public get isManual() {
FILE: src/release/release.ts
constant BUILD_JOBID (line 11) | const BUILD_JOBID = "release";
constant GIT_REMOTE_STEPID (line 12) | const GIT_REMOTE_STEPID = "git_remote";
constant LATEST_COMMIT_OUTPUT (line 13) | const LATEST_COMMIT_OUTPUT = "latest_commit";
type BranchHook (line 15) | type BranchHook = (branch: string) => void;
type ReleaseProjectOptions (line 20) | interface ReleaseProjectOptions {
type ReleaseOptions (line 196) | interface ReleaseOptions extends ReleaseProjectOptions {
class Release (line 250) | class Release extends Component {
method of (line 257) | public static of(project: GitHubProject): Release | undefined {
method constructor (line 287) | constructor(project: GitHubProject, options: ReleaseOptions) {
method _forEachBranch (line 387) | public _forEachBranch(hook: BranchHook) {
method addBranch (line 404) | public addBranch(branch: string, options: BranchOptions) {
method _addBranch (line 423) | private _addBranch(
method preSynthesize (line 454) | public preSynthesize() {
method addJobs (line 471) | public addJobs(jobs: Record<string, Job>) {
method branches (line 480) | public get branches(): string[] {
method createWorkflow (line 487) | private createWorkflow(
type BranchOptions (line 629) | interface BranchOptions {
type ReleaseBranch (line 675) | interface ReleaseBranch extends Partial<BranchOptions> {
FILE: src/release/tag-version.ts
type TagOptions (line 5) | interface TagOptions {
function tag (line 37) | async function tag(cwd: string, options: TagOptions) {
FILE: src/release/update-changelog.ts
type UpdateChangelogOptions (line 6) | interface UpdateChangelogOptions {
function updateChangelog (line 44) | async function updateChangelog(
FILE: src/renovatebot.ts
type RenovatebotOptions (line 8) | interface RenovatebotOptions {
type RenovatebotScheduleInterval (line 54) | enum RenovatebotScheduleInterval {
class Renovatebot (line 101) | class Renovatebot extends Component {
method constructor (line 110) | constructor(project: Project, options: RenovatebotOptions = {}) {
method preSynthesize (line 123) | public preSynthesize() {
method createRenovateConfiguration (line 127) | private createRenovateConfiguration() {
FILE: src/sample-file.ts
type SampleFileOptions (line 11) | interface SampleFileOptions {
class SampleFile (line 35) | class SampleFile extends Component {
method constructor (line 45) | constructor(project: Project, filePath: string, options: SampleFileOpt...
method synthesize (line 58) | public synthesize() {
method writeOnceFileContents (line 80) | private writeOnceFileContents(dir: string, filename: string, contents:...
type SampleDirOptions (line 92) | interface SampleDirOptions {
class SampleDir (line 117) | class SampleDir extends Component {
method constructor (line 127) | constructor(project: Project, dir: string, options: SampleDirOptions) {
method synthesize (line 137) | public synthesize() {
FILE: src/semver.ts
class Semver (line 8) | class Semver {
method of (line 9) | public static of(spec: string) {
method latest (line 16) | public static latest() {
method pinned (line 23) | public static pinned(version: string) {
method caret (line 33) | public static caret(version: string) {
method tilde (line 43) | public static tilde(version: string) {
method constructor (line 49) | private constructor(public readonly spec: string) {}
method version (line 51) | public get version() {
FILE: src/smithy/smithy-build.ts
type Transform (line 5) | type Transform = {
type SmithyCommon (line 9) | type SmithyCommon = {
type PluginValue (line 13) | type PluginValue = {
type ProjectionValue (line 17) | type ProjectionValue = SmithyCommon & {
type ProjectionKey (line 21) | type ProjectionKey = string;
type ProjectionsType (line 22) | type ProjectionsType = Record<ProjectionKey, ProjectionValue>;
type PluginKey (line 23) | type PluginKey = string;
type PluginsType (line 24) | type PluginsType = Record<PluginKey, PluginValue>;
type SmithyBuildOptions (line 29) | interface SmithyBuildOptions extends SmithyCommon {
class SmithyBuild (line 59) | class SmithyBuild extends Component {
method constructor (line 102) | constructor(project: Project, options: SmithyBuildOptions = {}) {
method projections (line 131) | public get projections() {
method imports (line 138) | public get imports() {
method plugins (line 145) | public get plugins() {
method addImport (line 152) | public addImport(imp: string) {
method addProjections (line 159) | public addProjections(projections: ProjectionsType) {
method addPlugins (line 170) | public addPlugins(plugins: PluginsType) {
FILE: src/source-code.ts
type SourceCodeOptions (line 8) | interface SourceCodeOptions {
class SourceCode (line 26) | class SourceCode extends Component {
method constructor (line 31) | constructor(
method marker (line 43) | public get marker(): string | undefined {
method line (line 51) | public line(code?: string) {
method open (line 62) | public open(code?: string) {
method close (line 75) | public close(code?: string) {
FILE: src/task-model.ts
type TasksManifest (line 4) | interface TasksManifest {
type TaskCommonOptions (line 16) | interface TaskCommonOptions {
type TaskSpec (line 55) | interface TaskSpec extends TaskCommonOptions {
type TaskStepOptions (line 70) | interface TaskStepOptions {
type TaskStep (line 90) | interface TaskStep extends TaskStepOptions {
FILE: src/task-runtime.ts
constant ENV_TRIM_LEN (line 12) | const ENV_TRIM_LEN = 20;
class TaskRuntime (line 17) | class TaskRuntime {
method constructor (line 36) | constructor(workdir: string) {
method tasks (line 47) | public get tasks(): TaskSpec[] {
method tryFindTask (line 54) | public tryFindTask(name: string): TaskSpec | undefined {
method runTask (line 65) | public runTask(name: string, parents: string[] = []) {
class RunTask (line 75) | class RunTask {
method constructor (line 81) | constructor(
method evalCondition (line 195) | private evalCondition(task: TaskSpec) {
method resolveEnvironment (line 219) | private resolveEnvironment(parents: string[]) {
method fullname (line 262) | private get fullname() {
method log (line 266) | private log(...args: any[]) {
method logDebug (line 270) | private logDebug(...args: any[]) {
method fmtLog (line 274) | private fmtLog(...args: any[]) {
method shell (line 278) | private shell(options: ShellOptions) {
method shellEval (line 316) | private shellEval(options: ShellOptions) {
method renderBuiltin (line 326) | private renderBuiltin(builtin: string) {
type ShellOptions (line 335) | interface ShellOptions {
FILE: src/task.ts
type TaskOptions (line 8) | interface TaskOptions extends TaskCommonOptions {
class Task (line 25) | class Task {
method constructor (line 44) | constructor(name: string, props: TaskOptions = {}) {
method lock (line 67) | public lock() {
method description (line 74) | public get description(): string | undefined {
method description (line 81) | public set description(desc: string | undefined) {
method reset (line 89) | public reset(command?: string, options: TaskStepOptions = {}) {
method exec (line 106) | public exec(command: string, options: TaskStepOptions = {}) {
method builtin (line 122) | public builtin(name: string) {
method say (line 132) | public say(message: string, options: TaskStepOptions = {}) {
method prepend (line 143) | public prepend(shell: string, options: TaskStepOptions = {}) {
method spawn (line 152) | public spawn(subtask: Task, options: TaskStepOptions = {}) {
method prependExec (line 161) | public prependExec(shell: string, options: TaskStepOptions = {}) {
method prependSpawn (line 173) | public prependSpawn(subtask: Task, options: TaskStepOptions = {}) {
method prependSay (line 185) | public prependSay(message: string, options: TaskStepOptions = {}) {
method env (line 200) | public env(name: string, value: string) {
method steps (line 208) | public get steps() {
method _renderSpec (line 222) | public _renderSpec(): TaskSpec {
method assertUnlocked (line 234) | private assertUnlocked() {
FILE: src/tasks.ts
class Tasks (line 16) | class Tasks extends Component {
method constructor (line 20) | constructor(project: Project) {
method all (line 38) | public get all() {
method addTask (line 47) | public addTask(name: string, options: TaskOptions = {}) {
method removeTask (line 65) | public removeTask(name: string): undefined | Task {
method addEnvironment (line 90) | public addEnvironment(name: string, value: string) {
method env (line 97) | public get env(): { [key: string]: string } {
method tryFind (line 107) | public tryFind(name: string): undefined | Task {
method synthesize (line 111) | public synthesize(): void {
method renderTasks (line 126) | private renderTasks() {
FILE: src/testing.ts
class Testing (line 10) | class Testing {
method synth (line 16) | public static synth(
method constructor (line 23) | private constructor() {} // utility
FILE: src/textfile.ts
type TextFileOptions (line 7) | interface TextFileOptions extends FileBaseOptions {
class TextFile (line 19) | class TextFile extends FileBase {
method constructor (line 29) | constructor(
method addLine (line 43) | public addLine(line: string) {
method synthesizeContent (line 47) | protected synthesizeContent(_: IResolver): string | undefined {
FILE: src/toml.ts
type TomlFileOptions (line 9) | interface TomlFileOptions extends ObjectFileOptions {}
class TomlFile (line 14) | class TomlFile extends ObjectFile {
method constructor (line 15) | constructor(project: Project, filePath: string, options: TomlFileOptio...
method synthesizeContent (line 19) | protected synthesizeContent(resolver: IResolver): string | undefined {
FILE: src/typescript/projenrc.ts
type ProjenrcOptions (line 7) | interface ProjenrcOptions {
class Projenrc (line 26) | class Projenrc extends Component {
method constructor (line 29) | constructor(project: TypeScriptProject, options: ProjenrcOptions = {}) {
method generateProjenrc (line 59) | private generateProjenrc() {
FILE: src/typescript/typescript-typedoc.ts
class TypedocDocgen (line 6) | class TypedocDocgen {
method constructor (line 7) | constructor(project: TypeScriptProject) {
FILE: src/typescript/typescript.ts
type TypeScriptProjectOptions (line 24) | interface TypeScriptProjectOptions extends NodeProjectOptions {
class TypeScriptProject (line 144) | class TypeScriptProject extends NodeProject {
method constructor (line 176) | constructor(options: TypeScriptProjectOptions) {
method addJestCompiled (line 382) | private addJestCompiled(jest: Jest) {
method addJestNoCompile (line 431) | private addJestNoCompile(jest: Jest) {
class SampleCode (line 452) | class SampleCode extends Component {
method constructor (line 453) | constructor(project: TypeScriptProject) {
class TypeScriptAppProject (line 492) | class TypeScriptAppProject extends TypeScriptProject {
method constructor (line 493) | constructor(options: TypeScriptProjectOptions) {
class TypeScriptLibraryProject (line 507) | class TypeScriptLibraryProject extends TypeScriptProject {}
type TypeScriptLibraryProjectOptions (line 512) | interface TypeScriptLibraryProjectOptions
function mergeTsconfigOptions (line 518) | function mergeTsconfigOptions(
FILE: src/util.ts
constant MAX_BUFFER (line 7) | const MAX_BUFFER = 10 * 1024 * 1024;
function exec (line 12) | function exec(command: string, options: { cwd: string }): void {
function execCapture (line 24) | function execCapture(command: string, options: { cwd: string }) {
function execOrUndefined (line 36) | function execOrUndefined(
type WriteFileOptions (line 59) | interface WriteFileOptions {
function getFilePermissions (line 75) | function getFilePermissions(options: WriteFileOptions): string {
function writeFile (line 89) | function writeFile(
type DecamelizeRecursivelyOptions (line 108) | interface DecamelizeRecursivelyOptions {
function decamelizeKeysRecursively (line 134) | function decamelizeKeysRecursively(
function isTruthy (line 182) | function isTruthy(value: string | undefined): boolean {
type Obj (line 192) | type Obj<T> = { [key: string]: T };
function isObject (line 200) | function isObject(x: any): x is Obj<any> {
function deepMerge (line 219) | function deepMerge(
function dedupArray (line 278) | function dedupArray<T>(array: T[]): T[] {
function sorted (line 285) | function sorted<T>(x: T) {
function formatAsPythonModule (line 310) | function formatAsPythonModule(name: string) {
function getGitVersion (line 320) | function getGitVersion(gitVersionOutput: string) {
function kebabCaseKeys (line 329) | function kebabCaseKeys<T = unknown>(obj: T, recursive = true): T {
function snakeCaseKeys (line 351) | function snakeCaseKeys<T = unknown>(
function tryReadFile (line 383) | async function tryReadFile(file: string) {
function tryReadFileSync (line 391) | function tryReadFileSync(file: string) {
function isWritable (line 399) | function isWritable(file: string) {
function isExecutable (line 408) | function isExecutable(file: string) {
function decamelize (line 417) | function decamelize(s: string, sep: string = "_") {
function getNodeMajorVersion (line 425) | function getNodeMajorVersion(): number | undefined {
function anySelected (line 434) | function anySelected(options: (boolean | undefined)[]): boolean {
function multipleSelected (line 438) | function multipleSelected(options: (boolean | undefined)[]): boolean {
FILE: src/util/semver.ts
type TargetName (line 6) | enum TargetName {
function toMavenVersionRange (line 22) | function toMavenVersionRange(
function toNuGetVersionRange (line 39) | function toNuGetVersionRange(semverRange: string): string {
function toPythonVersionRange (line 52) | function toPythonVersionRange(semverRange: string): string {
function toReleaseVersion (line 89) | function toReleaseVersion(
function toBracketNotation (line 161) | function toBracketNotation(
FILE: src/util/synth.ts
type SnapshotOptions (line 10) | interface SnapshotOptions {
type SynthOutput (line 20) | interface SynthOutput {
function synthSnapshot (line 28) | function synthSnapshot(
type DirectorySnapshotOptions (line 70) | interface DirectorySnapshotOptions extends SnapshotOptions {
function directorySnapshot (line 86) | function directorySnapshot(
FILE: src/version.ts
type VersionOptions (line 9) | interface VersionOptions {
class Version (line 34) | class Version extends Component {
method constructor (line 55) | constructor(project: Project, options: VersionOptions) {
FILE: src/vscode/devcontainer.ts
constant DEVCONTAINER_FILE (line 14) | const DEVCONTAINER_FILE = ".devcontainer.json";
type DevContainerOptions (line 22) | interface DevContainerOptions extends DevEnvironmentOptions {}
class DevContainer (line 28) | class DevContainer extends Component implements IDevEnvironment {
method constructor (line 39) | constructor(project: Project, options: DevContainerOptions = {}) {
method addDockerImage (line 76) | public addDockerImage(image: DevEnvironmentDockerImage) {
method addTasks (line 88) | public addTasks(...tasks: Task[]) {
method addPorts (line 97) | public addPorts(...ports: string[]) {
method addVscodeExtensions (line 107) | public addVscodeExtensions(...extensions: string[]) {
method renderTasks (line 111) | private renderTasks() {
FILE: src/vscode/extensions.ts
class VsCodeRecommendedExtensions (line 9) | class VsCodeRecommendedExtensions extends Component {
method constructor (line 26) | constructor(vscode: VsCode) {
method addRecommendations (line 44) | public addRecommendations(...extensions: string[]) {
method addUnwantedRecommendations (line 54) | public addUnwantedRecommendations(...extensions: string[]) {
FILE: src/vscode/launch-config.ts
type Console (line 9) | enum Console {
type InternalConsoleOptions (line 19) | enum InternalConsoleOptions {
type Presentation (line 32) | interface Presentation {
type ServerReadyAction (line 43) | interface ServerReadyAction {
type VsCodeLaunchConfigurationEntry (line 53) | interface VsCodeLaunchConfigurationEntry {
class VsCodeLaunchConfig (line 85) | class VsCodeLaunchConfig extends Component {
method renderLaunchConfig (line 86) | private static renderLaunchConfig(cfg: VsCodeLaunchConfigurationEntry) {
method constructor (line 104) | constructor(vscode: VsCode) {
method addConfiguration (line 128) | public addConfiguration(cfg: VsCodeLaunchConfigurationEntry) {
type VsCodeLaunchConfiguration (line 133) | interface VsCodeLaunchConfiguration {
FILE: src/vscode/settings.ts
class VsCodeSettings (line 9) | class VsCodeSettings extends Component {
method constructor (line 12) | constructor(vscode: VsCode) {
method addSetting (line 30) | public addSetting(setting: string, value: unknown, language?: string) {
method addSettings (line 44) | public addSettings(
FILE: src/vscode/vscode.ts
class VsCode (line 7) | class VsCode extends Component {
method constructor (line 12) | constructor(project: Project) {
method launchConfiguration (line 16) | public get launchConfiguration() {
method settings (line 24) | public get settings() {
method extensions (line 32) | public get extensions() {
FILE: src/web/next.ts
type NextJsCommonProjectOptions (line 13) | interface NextJsCommonProjectOptions {
type NextJsTypeScriptProjectOptions (line 32) | interface NextJsTypeScriptProjectOptions
type NextJsProjectOptions (line 36) | interface NextJsProjectOptions
class NextJsProject (line 58) | class NextJsProject extends NodeProject {
method constructor (line 76) | constructor(options: NextJsProjectOptions) {
class NextJsTypeScriptProject (line 107) | class NextJsTypeScriptProject extends TypeScriptAppProject {
method constructor (line 125) | constructor(options: NextJsTypeScriptProjectOptions) {
type NextComponentOptions (line 188) | interface NextComponentOptions {
class NextComponent (line 206) | class NextComponent extends Component {
method constructor (line 210) | constructor(project: NodeProject, options: NextComponentOptions) {
type NextSampleCodeOptions (line 252) | interface NextSampleCodeOptions {
class NextSampleCode (line 276) | class NextSampleCode extends Component {
method constructor (line 282) | constructor(project: NodeProject, options: NextSampleCodeOptions) {
FILE: src/web/postcss.ts
type PostCssOptions (line 5) | interface PostCssOptions {
class PostCss (line 27) | class PostCss {
method constructor (line 32) | constructor(project: NodeProject, options?: PostCssOptions) {
FILE: src/web/react.ts
type ReactRewireOptions (line 15) | interface ReactRewireOptions {
type ReactTypeScriptProjectOptions (line 51) | interface ReactTypeScriptProjectOptions
type ReactProjectOptions (line 55) | interface ReactProjectOptions
class ReactProject (line 76) | class ReactProject extends NodeProject {
method constructor (line 83) | constructor(options: ReactProjectOptions) {
class ReactTypeScriptProject (line 111) | class ReactTypeScriptProject extends TypeScriptAppProject {
method constructor (line 117) | constructor(options: ReactTypeScriptProjectOptions) {
type ReactComponentOptions (line 182) | interface ReactComponentOptions extends ReactRewireOptions {
class ReactComponent (line 191) | class ReactComponent extends Component {
method constructor (line 194) | constructor(project: NodeProject, options: ReactComponentOptions) {
type ReactSampleCodeOptions (line 273) | interface ReactSampleCodeOptions {
class ReactSampleCode (line 287) | class ReactSampleCode extends Component {
method constructor (line 291) | constructor(project: NodeProject, options: ReactSampleCodeOptions) {
type ReactTypeDefOptions (line 482) | interface ReactTypeDefOptions extends FileBaseOptions {}
class ReactTypeDef (line 487) | class ReactTypeDef extends FileBase {
method constructor (line 488) | constructor(
method synthesizeContent (line 496) | protected synthesizeContent(_: IResolver): string | undefined {
FILE: src/web/tailwind.ts
type TailwindConfigOptions (line 4) | interface TailwindConfigOptions {
class TailwindConfig (line 19) | class TailwindConfig {
method constructor (line 23) | constructor(project: NodeProject, options?: TailwindConfigOptions) {
FILE: src/xmlfile.ts
type XmlFileOptions (line 9) | interface XmlFileOptions extends ObjectFileOptions {}
class XmlFile (line 17) | class XmlFile extends ObjectFile {
method constructor (line 18) | constructor(
method synthesizeContent (line 26) | protected synthesizeContent(resolver: IResolver): string | undefined {
FILE: src/yaml.ts
type YamlFileOptions (line 9) | interface YamlFileOptions extends ObjectFileOptions {
class YamlFile (line 21) | class YamlFile extends ObjectFile {
method constructor (line 27) | constructor(project: Project, filePath: string, options: YamlFileOptio...
method synthesizeContent (line 32) | protected synthesizeContent(resolver: IResolver): string | undefined {
FILE: test/awscdk/awscdk-construct.test.ts
class TestProject (line 289) | class TestProject extends AwsCdkConstructLibrary {
method constructor (line 290) | constructor(
FILE: test/awscdk/lambda-extension.test.ts
function cdkDepsForProject (line 201) | function cdkDepsForProject(
FILE: test/awscdk/lambda-function.test.ts
function cdkDepsForProject (line 330) | function cdkDepsForProject(
FILE: test/cdk/auto-discover-base.test.ts
class TestAutoDiscover (line 18) | class TestAutoDiscover extends AutoDiscoverBase {
method constructor (line 19) | constructor(project: Project) {
FILE: test/cdktf/cdktf-construct.test.ts
class TestProject (line 54) | class TestProject extends ConstructLibraryCdktf {
method constructor (line 55) | constructor(
FILE: test/cli.test.ts
constant MOCK_PROJENRC (line 6) | const MOCK_PROJENRC =
FILE: test/deps.test.ts
function depsManifest (line 307) | function depsManifest(p: Project) {
FILE: test/docker-compose.test.ts
function assertDockerComposeFileValidates (line 747) | function assertDockerComposeFileValidates(dir: string) {
FILE: test/github/auto-approve.test.ts
type ProjectOptions (line 60) | type ProjectOptions = Omit<
function createProject (line 64) | function createProject(options: ProjectOptions = {}): NodeProject {
FILE: test/github/dependabot.test.ts
type ProjectOptions (line 111) | type ProjectOptions = Omit<
function createProject (line 115) | function createProject(options: ProjectOptions = {}): NodeProject {
FILE: test/github/mergify.test.ts
type ProjectOptions (line 69) | type ProjectOptions = Omit<
function createProject (line 73) | function createProject(options: ProjectOptions = {}): NodeProject {
FILE: test/github/pull-request-lint.test.ts
type ProjectOptions (line 74) | type ProjectOptions = Omit<
function createProject (line 78) | function createProject(options: ProjectOptions = {}): NodeProject {
FILE: test/github/workflows.test.ts
function synthWorkflows (line 74) | function synthWorkflows(p: Project): any {
FILE: test/ignore-file.test.ts
function splitAndIgnoreMarker (line 150) | function splitAndIgnoreMarker(fileContents: string) {
FILE: test/inventory.test.ts
function throwIfNotRenderable (line 107) | function throwIfNotRenderable(option: inventory.ProjectOption) {
FILE: test/java/java-project.test.ts
function snapPom (line 64) | function snapPom(p: JavaProject) {
class TestJavaProject (line 68) | class TestJavaProject extends JavaProject {
method constructor (line 69) | constructor(options: Partial<JavaProjectOptions> = {}) {
FILE: test/java/pom.test.ts
function actualPom (line 114) | function actualPom(p: Pom) {
class TestPom (line 119) | class TestPom extends Pom {
method constructor (line 120) | constructor(options?: PomOptions) {
FILE: test/javascript/node-package.test.ts
function mockYarnInstall (line 23) | function mockYarnInstall(
FILE: test/javascript/node-project.test.ts
function packageJson (line 747) | function packageJson(project: Project) {
class TestNodeProject (line 1188) | class TestNodeProject extends NodeProject {
method constructor (line 1189) | constructor(options: Partial<NodeProjectOptions> = {}) {
FILE: test/javascript/npm-config.test.ts
class TestNodeProject (line 62) | class TestNodeProject extends NodeProject {
method constructor (line 63) | constructor(options: Partial<NodeProjectOptions> = {}) {
FILE: test/javascript/upgrade-dependencies.test.ts
function createProject (line 258) | function createProject(
FILE: test/object-file.test.ts
class ChildObjectFile (line 6) | class ChildObjectFile extends ObjectFile {}
FILE: test/pr-template.test.ts
constant PULL_REQUEST_TEMPLATE_FILE (line 4) | const PULL_REQUEST_TEMPLATE_FILE = ".github/pull_request_template.md";
FILE: test/python/poetry.test.ts
class TestPythonProject (line 95) | class TestPythonProject extends python.PythonProject {
method constructor (line 96) | constructor(options: Partial<python.PythonProjectOptions> = {}) {
FILE: test/python/python-project.test.ts
class TestPythonProject (line 57) | class TestPythonProject extends python.PythonProject {
method constructor (line 58) | constructor(options: Partial<python.PythonProjectOptions> = {}) {
FILE: test/python/setuptools.test.ts
class TestPythonProject (line 22) | class TestPythonProject extends python.PythonProject {
method constructor (line 23) | constructor(options: Partial<python.PythonProjectOptions> = {}) {
FILE: test/release/bump.test.ts
function testBump (line 239) | async function testBump(
FILE: test/release/tag.test.ts
constant DEFAULT_RELEASE_TAG (line 13) | const DEFAULT_RELEASE_TAG = "v0.1.1";
constant DEFAULT_RELEASE_TAG_FILE (line 14) | const DEFAULT_RELEASE_TAG_FILE = "releasetag.txt";
constant DEFAULT_CHANGELOG_CONTENT (line 15) | const DEFAULT_CHANGELOG_CONTENT = "foo bar baz";
constant DEFAULT_CHANGELOG (line 16) | const DEFAULT_CHANGELOG = "changelog.md";
type TestTagOpts (line 40) | interface TestTagOpts {
function testTag (line 50) | async function testTag(opts: TestTagOpts = {}) {
FILE: test/release/update-changelog.test.ts
constant DEFAULT_VERSION (line 16) | const DEFAULT_VERSION = "0.1.1";
constant DEFAULT_VERSION_FILE (line 17) | const DEFAULT_VERSION_FILE = "dist/version.txt";
constant DEFAULT_INPUT_CHANGELOG (line 18) | const DEFAULT_INPUT_CHANGELOG = "dist/changelog.md";
constant DEFAULT_INPUT_CHANGELOG_CONTENT (line 19) | const DEFAULT_INPUT_CHANGELOG_CONTENT = `### [${DEFAULT_VERSION}](https:...
constant DEFAULT_OUTPUT_CHANGELOG (line 20) | const DEFAULT_OUTPUT_CHANGELOG = "CHANGELOG.md";
constant DEFAULT_OUTPUT_CHANGELOG_CONTENT (line 21) | const DEFAULT_OUTPUT_CHANGELOG_CONTENT =
type TestUpdateChangelogOpts (line 99) | interface TestUpdateChangelogOpts {
function testUpdateChangelog (line 111) | async function testUpdateChangelog(opts: TestUpdateChangelogOpts = {}) {
FILE: test/resolve.test.ts
type Calculator (line 77) | type Calculator = {
FILE: test/sample-file.test.ts
class TestProject (line 91) | class TestProject extends Project {
method constructor (line 92) | constructor(options: Omit<ProjectOptions, "name"> = {}) {
FILE: test/subproject.test.ts
class PreSynthProject (line 127) | class PreSynthProject extends Project {
method constructor (line 130) | constructor(options: Omit<ProjectOptions, "name"> = {}) {
method preSynthesize (line 137) | preSynthesize() {
FILE: test/tasks/runtime.test.ts
function executeTask (line 235) | function executeTask(
FILE: test/tasks/tasks.test.ts
function expectManifest (line 358) | function expectManifest(p: Project, toStrictEqual: TasksManifest) {
function synthTasksManifest (line 375) | function synthTasksManifest(p: Project) {
FILE: test/util.test.ts
method shouldDecamelize (line 72) | shouldDecamelize(path, _value) {
FILE: test/util.ts
constant PROJEN_CLI (line 12) | const PROJEN_CLI = require.resolve("../lib/cli/index.js");
class TestProject (line 16) | class TestProject extends GitHubProject {
method constructor (line 17) | constructor(options: Omit<GitHubProjectOptions, "name"> = {}) {
method runTaskCommand (line 27) | public runTaskCommand(task: Task) {
method postSynthesize (line 31) | postSynthesize() {
function execProjenCLI (line 36) | function execProjenCLI(workdir: string, args: string[] = []) {
function mkdtemp (line 61) | function mkdtemp(opts: { cleanup?: boolean } = {}) {
function synthSnapshotWithPost (line 69) | function synthSnapshotWithPost(project: Project) {
function withProjectDir (line 78) | function withProjectDir(
function sanitizeOutput (line 124) | function sanitizeOutput(dir: string) {
FILE: test/vscode/dev-env.test.ts
constant GITPOD_FILE (line 9) | const GITPOD_FILE = ".gitpod.yml";
constant DEVCONTAINER_FILE (line 10) | const DEVCONTAINER_FILE = ".devcontainer.json";
FILE: test/vscode/extensions.test.ts
constant VSCODE_EXTENSIONS_FILE (line 5) | const VSCODE_EXTENSIONS_FILE = ".vscode/extensions.json";
FILE: test/vscode/settings.test.ts
constant VSCODE_SETTINGS_FILE (line 3) | const VSCODE_SETTINGS_FILE = ".vscode/settings.json";
FILE: test/vscode/vscode-launch-config.test.ts
constant VSCODE_DEBUGGER_FILE (line 4) | const VSCODE_DEBUGGER_FILE = ".vscode/launch.json";
FILE: test/web/nextjs-project.test.ts
class TestNextJsProject (line 16) | class TestNextJsProject extends NextJsProject {
method constructor (line 17) | constructor(options: Partial<NextJsProjectOptions> = {}) {
FILE: test/web/nextjs-ts-project.test.ts
class TestNextJsTypeScriptProject (line 27) | class TestNextJsTypeScriptProject extends NextJsTypeScriptProject {
method constructor (line 28) | constructor(options: Partial<NextJsTypeScriptProjectOptions> = {}) {
FILE: test/web/react-project.test.ts
function assertExec (line 28) | function assertExec(taskName: string, script: string) {
class TestReactProject (line 49) | class TestReactProject extends ReactProject {
method constructor (line 50) | constructor(options: Partial<ReactProjectOptions> = {}) {
FILE: test/web/react-ts-project.test.ts
class TestReactTypeScriptProject (line 61) | class TestReactTypeScriptProject extends ReactTypeScriptProject {
method constructor (line 62) | constructor(options: Partial<ReactTypeScriptProjectOptions> = {}) {
Condensed preview — 407 files, each showing path, character count, and a content snippet. Download the .json file or copy for the full structured content (5,178K chars).
[
{
"path": ".all-contributorsrc",
"chars": 16608,
"preview": "{\n \"projectName\": \"projen\",\n \"projectOwner\": \"projen\",\n \"repoType\": \"github\",\n \"repoHost\": \"https://github.com\",\n \""
},
{
"path": ".devcontainer.json",
"chars": 145,
"preview": "{\n \"postCreateCommand\": \"( npx projen devenv:setup )\",\n \"//\": \"~~ Generated by projen. To modify, edit .projenrc.js an"
},
{
"path": ".eslintrc.json",
"chars": 2626,
"preview": "{\n \"env\": {\n \"jest\": true,\n \"node\": true\n },\n \"root\": true,\n \"plugins\": [\n \"@typescript-eslint\",\n \"impor"
},
{
"path": ".gitattributes",
"chars": 1156,
"preview": "# ~~ Generated by projen. To modify, edit .projenrc.js and run \"npx projen\".\n\n*.snap linguist-generated\n/.devcontainer.j"
},
{
"path": ".github/pull_request_template.md",
"chars": 118,
"preview": "---\nBy submitting this pull request, I confirm that my contribution is made under the terms of the Apache 2.0 license."
},
{
"path": ".github/workflows/auto-approve.yml",
"chars": 580,
"preview": "# ~~ Generated by projen. To modify, edit .projenrc.js and run \"npx projen\".\n\nname: auto-approve\non:\n pull_request_targ"
},
{
"path": ".github/workflows/build.yml",
"chars": 6794,
"preview": "# ~~ Generated by projen. To modify, edit .projenrc.js and run \"npx projen\".\n\nname: build\non:\n pull_request: {}\n workf"
},
{
"path": ".github/workflows/pull-request-lint.yml",
"chars": 613,
"preview": "# ~~ Generated by projen. To modify, edit .projenrc.js and run \"npx projen\".\n\nname: pull-request-lint\non:\n pull_request"
},
{
"path": ".github/workflows/release.yml",
"chars": 9713,
"preview": "# ~~ Generated by projen. To modify, edit .projenrc.js and run \"npx projen\".\n\nname: release\non:\n push:\n branches:\n "
},
{
"path": ".github/workflows/upgrade-main.yml",
"chars": 3035,
"preview": "# ~~ Generated by projen. To modify, edit .projenrc.js and run \"npx projen\".\n\nname: upgrade-main\non:\n workflow_dispatch"
},
{
"path": ".gitignore",
"chars": 1060,
"preview": "# ~~ Generated by projen. To modify, edit .projenrc.js and run \"npx projen\".\n!/.gitattributes\n!/.projen/tasks.json\n!/.pr"
},
{
"path": ".gitpod.yml",
"chars": 187,
"preview": "# ~~ Generated by projen. To modify, edit .projenrc.js and run \"npx projen\".\n\ntasks:\n - name: Setup\n command: npx pr"
},
{
"path": ".markdownlint.json",
"chars": 190,
"preview": "{\n \"default\": true,\n \"commands-show-output\": false,\n \"line-length\": {\n \"line_length\": 200\n },\n \"//\": \"~~ Generat"
},
{
"path": ".mergify.yml",
"chars": 1156,
"preview": "# ~~ Generated by projen. To modify, edit .projenrc.js and run \"npx projen\".\n\nqueue_rules:\n - name: default\n conditi"
},
{
"path": ".npmignore",
"chars": 540,
"preview": "# ~~ Generated by projen. To modify, edit .projenrc.js and run \"npx projen\".\n/.projen/\n/test-reports/\njunit.xml\n/coverag"
},
{
"path": ".prettierignore",
"chars": 77,
"preview": "# ~~ Generated by projen. To modify, edit .projenrc.js and run \"npx projen\".\n"
},
{
"path": ".prettierrc.json",
"chars": 22,
"preview": "{\n \"overrides\": []\n}\n"
},
{
"path": ".projen/deps.json",
"chars": 3474,
"preview": "{\n \"dependencies\": [\n {\n \"name\": \"@types/conventional-changelog-config-spec\",\n \"type\": \"build\"\n },\n "
},
{
"path": ".projen/files.json",
"chars": 714,
"preview": "{\n \"files\": [\n \".devcontainer.json\",\n \".eslintrc.json\",\n \".gitattributes\",\n \".github/pull_request_template."
},
{
"path": ".projen/tasks.json",
"chars": 11162,
"preview": "{\n \"tasks\": {\n \"build\": {\n \"name\": \"build\",\n \"description\": \"Full release build\",\n \"steps\": [\n "
},
{
"path": ".projenrc.js",
"chars": 7187,
"preview": "const { cdk, JsonFile, TextFile } = require(\"./lib\");\nconst { PROJEN_MARKER } = require(\"./lib/common\");\n\nconst project "
},
{
"path": ".vscode/launch.json",
"chars": 418,
"preview": "{\n \"version\": \"0.2.0\",\n \"configurations\": [\n {\n \"type\": \"pwa-node\",\n \"request\": \"launch\",\n \"name\": \""
},
{
"path": "ARCHITECTURE.md",
"chars": 4933,
"preview": "# Architecture\n\nThis document attempts to document the high-level architecture of projen. This\ncould be useful if you're"
},
{
"path": "CODE_OF_CONDUCT.md",
"chars": 5229,
"preview": "\n# Contributor Covenant Code of Conduct\n\n## Our Pledge\n\nWe as members, contributors, and leaders pledge to make particip"
},
{
"path": "CONTRIBUTING.md",
"chars": 4957,
"preview": "# Contributing to projen\n\nThanks for your interest in contributing to projen! :heart:\n\nThis document describes how to se"
},
{
"path": "LICENSE",
"chars": 11358,
"preview": "\n Apache License\n Version 2.0, January 2004\n "
},
{
"path": "README.md",
"chars": 33211,
"preview": "<p align=\"center\">\n <a href=\"https://projen.io\">\n <img src=\"https://raw.githubusercontent.com/projen/projen/main/log"
},
{
"path": "SECURITY.md",
"chars": 520,
"preview": "# Security Policy\n\n## Supported Versions\n\nUse this section to tell people about which versions of your project are\ncurre"
},
{
"path": "VISION.md",
"chars": 3918,
"preview": "# The vision of projen\n\nThis is basically a paper napkin for ideas for the roadmap for the project. Comments/PRs are mor"
},
{
"path": "assets/web/react/index.html",
"chars": 1721,
"preview": "<!DOCTYPE html>\n<html lang=\"en\">\n <head>\n <meta charset=\"utf-8\" />\n <link rel=\"icon\" href=\"%PUBLIC_URL%/favicon.i"
},
{
"path": "assets/web/react/manifest.json",
"chars": 492,
"preview": "{\n \"short_name\": \"React App\",\n \"name\": \"Create React App Sample\",\n \"icons\": [\n {\n \"src\": \"favicon.ico\",\n "
},
{
"path": "assets/web/react/robots.txt",
"chars": 67,
"preview": "# https://www.robotstxt.org/robotstxt.html\nUser-agent: *\nDisallow:\n"
},
{
"path": "bin/projen",
"chars": 118,
"preview": "#!/usr/bin/env node\n// eslint-disable-next-line @typescript-eslint/no-require-imports\nrequire('../lib/cli/index.js');\n"
},
{
"path": "docs/CNAME",
"chars": 9,
"preview": "projen.io"
},
{
"path": "docs/README.md",
"chars": 740,
"preview": "# Documentation\n\n* [AWS CDK Applications](awscdk-apps.md)\n* [AWS CDK Construct Library](awscdk-construct.md)\n* [AWS Clou"
},
{
"path": "docs/api/API.md",
"chars": 1274059,
"preview": "# API Reference\n\n**Classes**\n\nName|Description\n----|-----------\n[Component](#projen-component)|Represents a project comp"
},
{
"path": "docs/awscdk-apps.md",
"chars": 547,
"preview": "# AWS CDK Applications\n\nProject types: `awscdk-app-java`, `awscdk-app-py`, `awscdk-app-ts`.\n\n## Deployment (NOT IMPLEMEN"
},
{
"path": "docs/awscdk-construct.md",
"chars": 7986,
"preview": "# AWS CDK Construct Library\n\nAWS CDK library projects produce artifacts with reusable constructs which can be\nconsumed b"
},
{
"path": "docs/awscdk.md",
"chars": 11686,
"preview": "# AWS Cloud Projects\n\nWe support two types of projects for cloud development powered by the AWS Cloud\nDevelopment Kit (A"
},
{
"path": "docs/build.md",
"chars": 2567,
"preview": "# Build\n\nProjen defines a standard way for building software through a fixed set of\n*build phases*. This is implemented "
},
{
"path": "docs/bundling.md",
"chars": 765,
"preview": "# Bundling\n\nThe `Bundler` component (for Node.js projects) can be used to produce JavaScript\nbundles from source files.\n"
},
{
"path": "docs/cdk8s.md",
"chars": 1951,
"preview": "# CDK8s Projects\n\nWe support two types of projects for Kubernetes powered by the CDK8s:\n**apps** and **libraries**. Apps"
},
{
"path": "docs/circleci.md",
"chars": 2268,
"preview": "# CircleCi\n\nCircleCi uses `.circleci/config.yml` to specify the configuration of a pipeline. \nConfiguration reference ca"
},
{
"path": "docs/components.md",
"chars": 463,
"preview": "# Components\n\nComponents are building blocks that can be composed together into projects. They\nrepresent a self-containe"
},
{
"path": "docs/deps.md",
"chars": 2457,
"preview": "# Dependencies\n\nDependencies are an intrinsic part of every software project.\n\nThe `Dependencies` component is responsib"
},
{
"path": "docs/eject.md",
"chars": 1311,
"preview": "# Ejecting\n\nTo stop from using projen to manage your project configuration,\nyou can `eject` at any time and continue to "
},
{
"path": "docs/escape-hatches.md",
"chars": 1874,
"preview": "# Escape hatches\n\nIt's possible projen doesn't have the right high-level or low-level APIs that\nyou need for managing yo"
},
{
"path": "docs/github.md",
"chars": 2871,
"preview": "# GitHub\n\nBy default, many projects are initialized with `GitHub` component to enabled GitHub as the default provider fo"
},
{
"path": "docs/gitlab.md",
"chars": 2165,
"preview": "# GitLab\n\n[GitLab CI/CD](https://docs.gitlab.com/ee/ci/yaml/gitlab_ci_yaml.html) uses a `.gitlab-ci.yml` file located at"
},
{
"path": "docs/java.md",
"chars": 5627,
"preview": "# Java Projects\n\nTo create a new Java project, use `projen new java`:\n\n```shell\n$ projen new java --group-id org.acme --"
},
{
"path": "docs/node.md",
"chars": 4789,
"preview": "# Node.js Projects\n\nThis topic describes all the features of `NodeProject` projects and their\nderivatives.\n\n## Node vers"
},
{
"path": "docs/programmatic-api.md",
"chars": 1638,
"preview": "# Programmatic API\n\nProjen exposes a programmatic API that allows you to create new projects through\ncode instead of the"
},
{
"path": "docs/publisher.md",
"chars": 4478,
"preview": "# Publishing Modules\n\nThe `Publisher` component supports publishing modules to various package\nmanagers. It is designed "
},
{
"path": "docs/python.md",
"chars": 4677,
"preview": "# Python Projects\n\nBefore creating a new project, make sure you have the version of Python you want\nto use set up in you"
},
{
"path": "docs/releases.md",
"chars": 3616,
"preview": "# Releases and Versioning\n\nProjen takes care of managing versioning and releases of your project. A project starts with "
},
{
"path": "docs/subproject.md",
"chars": 776,
"preview": "# Subprojects\n\n* Pass a project to the `parent` prop\n* `outdir` must be specified in project props for a subproject\n\n## "
},
{
"path": "docs/tasks.md",
"chars": 3668,
"preview": "# Tasks\n\nTasks are a project-level feature to define a project command system backed by\nshell scripts. Tasks are used to"
},
{
"path": "docs/typescript.md",
"chars": 4302,
"preview": "# TypeScript Projects\n\nTo create a new TypeScript project, use `projen new typescript`:\n\n```shell\nnpx projen new typescr"
},
{
"path": "license-text/Apache-2.0.txt",
"chars": 11358,
"preview": "\n Apache License\n Version 2.0, January 2004\n "
},
{
"path": "license-text/Artistic-1.0.txt",
"chars": 5985,
"preview": "Artistic License 1.0\n\nPreamble\n\nThe intent of this document is to state the conditions under which a\nPackage may be copi"
},
{
"path": "license-text/Artistic-2.0.txt",
"chars": 8656,
"preview": "Artistic License 2.0\nCopyright (c) 2000-2006, The Perl Foundation.\n\nEveryone is permitted to copy and distribute verbati"
},
{
"path": "license-text/EUPL-1.2.txt",
"chars": 13745,
"preview": " EUROPEAN UNION PUBLIC LICENCE v. 1.2\n EUPL © the European Union 2007, 2016\n\nT"
},
{
"path": "license-text/GPL-2.0-or-later.txt",
"chars": 18092,
"preview": " GNU GENERAL PUBLIC LICENSE\n Version 2, June 1991\n\n Copyright (C) 1989, 1991 Fr"
},
{
"path": "license-text/GPL-3.0-WITH-GCC-exception-3.1.txt",
"chars": 3324,
"preview": "GCC RUNTIME LIBRARY EXCEPTION\n\nVersion 3.1, 31 March 2009\n\nCopyright (C) 2009 Free Software Foundation, Inc. <http://fsf"
},
{
"path": "license-text/GPL-3.0-or-later.txt",
"chars": 35147,
"preview": " GNU GENERAL PUBLIC LICENSE\n Version 3, 29 June 2007\n\n Copyright (C) 2007 Free "
},
{
"path": "license-text/LGPL-2.1-or-later.txt",
"chars": 26530,
"preview": " GNU LESSER GENERAL PUBLIC LICENSE\n Version 2.1, February 1999\n\n Copyright (C) 19"
},
{
"path": "license-text/LGPL-3.0-or-later.txt",
"chars": 7651,
"preview": " GNU LESSER GENERAL PUBLIC LICENSE\n Version 3, 29 June 2007\n\n Copyright (C) 2007"
},
{
"path": "license-text/MIT-0.txt",
"chars": 906,
"preview": "Copyright $copyright_period $copyright_owner\n\nPermission is hereby granted, free of charge, to any person obtaining a co"
},
{
"path": "license-text/MIT.txt",
"chars": 1073,
"preview": "Copyright (c) $copyright_period $copyright_owner\n\nPermission is hereby granted, free of charge, to any person obtaining "
},
{
"path": "license-text/MPL-2.0.txt",
"chars": 15884,
"preview": "Mozilla Public License, version 2.0\n\n1. Definitions\n\n1.1. “Contributor”\n\n means each individual or legal entity that"
},
{
"path": "license-text/OFL-1.1.txt",
"chars": 4302,
"preview": "This Font Software is licensed under the SIL Open Font License, Version 1.1.\nThis license is copied below, and is also a"
},
{
"path": "license-text/PHP-3.01.txt",
"chars": 3218,
"preview": "-------------------------------------------------------------------- \n The PHP License, version 3.01\nCo"
},
{
"path": "license-text/Ruby.txt",
"chars": 2298,
"preview": " 1. You may make and give away verbatim copies of the source form of the\n software without restriction, provided th"
},
{
"path": "license-text/Unlicense.txt",
"chars": 1211,
"preview": "This is free and unencumbered software released into the public domain.\n\nAnyone is free to copy, modify, publish, use, c"
},
{
"path": "license-text/WTFPL.txt",
"chars": 475,
"preview": " DO WHAT THE FUCK YOU WANT TO PUBLIC LICENSE\n Version 2, December 2004\n\nCopyright (C) 2004 S"
},
{
"path": "license-text/ZPL-2.1.txt",
"chars": 2055,
"preview": "Zope Public License (ZPL) Version 2.1\n\nA copyright notice accompanies this license document that identifies the\ncopyrigh"
},
{
"path": "package.json",
"chars": 5474,
"preview": "{\n \"name\": \"projen\",\n \"description\": \"CDK for software projects\",\n \"repository\": {\n \"type\": \"git\",\n \"url\": \"htt"
},
{
"path": "projen.bash",
"chars": 208,
"preview": "#!/bin/bash\n# ~~ Generated by projen\nset -euo pipefail\nif [ ! -f lib/cli/index.js ]; then\n echo \"bootstrapping...\"\n np"
},
{
"path": "rfcs/github-project-settings.md",
"chars": 3835,
"preview": "# External GitHub Repository Settings (RFC #1014)\n\n> **Author**: [@eladb](https://github.com/eladb), **Status**: Draft\n\n"
},
{
"path": "rfcs/project-creation-prompt.md",
"chars": 5255,
"preview": "# Project Creation Prompts (RFC #1365)\n\n> **Author**: [@MarkMcCulloh](https://github.com/MarkMcCulloh), **Status**: Draf"
},
{
"path": "scripts/python-compat.sh",
"chars": 743,
"preview": "#!/bin/bash\nset -euo pipefail\nscriptdir=$(cd $(dirname $0) && pwd)\ndistdir=${scriptdir}/../dist\npythonwheel=${distdir}/p"
},
{
"path": "scripts/readme-projects.js",
"chars": 147,
"preview": "const inventory = require('../lib/inventory');\n\nfor (const p of inventory.discover()) {\n console.log(`* [${p.pjid}](${p"
},
{
"path": "src/_resolve.ts",
"chars": 1544,
"preview": "import { ResolveOptions, IResolvable } from \"./file\";\n\nfunction isResolvable(obj: any): obj is IResolvable {\n return (o"
},
{
"path": "src/awscdk/auto-discover.ts",
"chars": 6543,
"preview": "import {\n AutoDiscoverBase,\n IntegrationTestAutoDiscoverBase,\n IntegrationTestAutoDiscoverBaseOptions,\n} from \"../cdk"
},
{
"path": "src/awscdk/awscdk-app-java.ts",
"chars": 3710,
"preview": "import { join } from \"path\";\nimport { DependencyType, SampleDir } from \"..\";\nimport { JavaProject, JavaProjectOptions } "
},
{
"path": "src/awscdk/awscdk-app-py.ts",
"chars": 4561,
"preview": "import {\n AwsCdkDeps,\n AwsCdkDepsCommonOptions,\n CdkConfig,\n CdkConfigCommonOptions,\n CdkTasks,\n} from \".\";\nimport "
},
{
"path": "src/awscdk/awscdk-app-ts.ts",
"chars": 8008,
"preview": "import * as path from \"path\";\nimport * as fs from \"fs-extra\";\nimport { Component } from \"../component\";\nimport { Depende"
},
{
"path": "src/awscdk/awscdk-construct.ts",
"chars": 5404,
"preview": "import * as semver from \"semver\";\nimport { ConstructLibrary, ConstructLibraryOptions } from \"../cdk\";\nimport { Dependenc"
},
{
"path": "src/awscdk/awscdk-deps-java.ts",
"chars": 459,
"preview": "import { AwsCdkDeps, AwsCdkPackageNames } from \"./awscdk-deps\";\n\n/**\n * Manages dependencies on the AWS CDK for Java pro"
},
{
"path": "src/awscdk/awscdk-deps-js.ts",
"chars": 422,
"preview": "import { AwsCdkDeps, AwsCdkPackageNames } from \"./awscdk-deps\";\n\n/**\n * Manages dependencies on the AWS CDK for Node.js "
},
{
"path": "src/awscdk/awscdk-deps-py.ts",
"chars": 418,
"preview": "import { AwsCdkDeps, AwsCdkPackageNames } from \"./awscdk-deps\";\n\n/**\n * Manages dependencies on the AWS CDK for Python p"
},
{
"path": "src/awscdk/awscdk-deps.ts",
"chars": 12774,
"preview": "import * as semver from \"semver\";\nimport { Component } from \"../component\";\nimport { DependencyType } from \"../dependenc"
},
{
"path": "src/awscdk/awscdk-pytest-sample.ts",
"chars": 965,
"preview": "import { Component, SampleDir } from \"..\";\nimport { AwsCdkPythonApp } from \"./awscdk-app-py\";\n\nexport class AwsCdkPytest"
},
{
"path": "src/awscdk/cdk-config.ts",
"chars": 4043,
"preview": "import { Component } from \"../component\";\nimport { JsonFile } from \"../json\";\nimport { Project } from \"../project\";\nimpo"
},
{
"path": "src/awscdk/cdk-tasks.ts",
"chars": 2064,
"preview": "import { Component } from \"../component\";\nimport { Project } from \"../project\";\nimport { Task } from \"../task\";\n\n/**\n * "
},
{
"path": "src/awscdk/index.ts",
"chars": 437,
"preview": "export * from \"./auto-discover\";\nexport * from \"./awscdk-app-java\";\nexport * from \"./awscdk-app-py\";\nexport * from \"./aw"
},
{
"path": "src/awscdk/integration-test.ts",
"chars": 4441,
"preview": "import { join } from \"path\";\nimport { IntegrationTestBase, IntegrationTestBaseOptions } from \"../cdk\";\nimport { Dependen"
},
{
"path": "src/awscdk/internal.ts",
"chars": 1213,
"preview": "import { sep, posix } from \"path\";\n\n/**\n * Feature flags as of v1.130.0\n */\nexport const FEATURE_FLAGS = [\n \"aws-cdk:en"
},
{
"path": "src/awscdk/lambda-extension.ts",
"chars": 6820,
"preview": "import { basename, dirname, join, relative } from \"path\";\nimport { pascal } from \"case\";\nimport { Component } from \"../c"
},
{
"path": "src/awscdk/lambda-function.ts",
"chars": 9615,
"preview": "import { basename, dirname, extname, join, relative } from \"path\";\nimport { pascal } from \"case\";\nimport { Component } f"
},
{
"path": "src/build/build-workflow.ts",
"chars": 11662,
"preview": "import { Task } from \"..\";\nimport { Component } from \"../component\";\nimport { GitHub, GithubWorkflow, GitIdentity } from"
},
{
"path": "src/build/index.ts",
"chars": 34,
"preview": "export * from \"./build-workflow\";\n"
},
{
"path": "src/builtin-example.task.ts",
"chars": 71,
"preview": "console.log(\"hello, I am a builtin task\");\nconsole.log(\"second line\");\n"
},
{
"path": "src/cdk/auto-discover-base.ts",
"chars": 1622,
"preview": "import { join } from \"path\";\nimport * as glob from \"glob\";\nimport { Component } from \"../component\";\nimport { Project } "
},
{
"path": "src/cdk/construct-lib.ts",
"chars": 1463,
"preview": "import { JsiiProject, JsiiProjectOptions } from \"./jsii-project\";\n\nexport interface ConstructLibraryOptions extends Jsii"
},
{
"path": "src/cdk/consts.ts",
"chars": 464,
"preview": "import { Tools } from \"../github/workflows-model\";\n\nexport type JsiiPacmakTarget = \"js\" | \"go\" | \"java\" | \"python\" | \"do"
},
{
"path": "src/cdk/index.ts",
"chars": 175,
"preview": "export * from \"./construct-lib\";\nexport * from \"./jsii-docgen\";\nexport * from \"./jsii-project\";\nexport * from \"./integra"
},
{
"path": "src/cdk/integration-test-base.ts",
"chars": 3183,
"preview": "import { basename, dirname, join } from \"path\";\nimport { Component } from \"../component\";\nimport { Project } from \"../pr"
},
{
"path": "src/cdk/internal.ts",
"chars": 90,
"preview": "/**\n * Suffix for integration tests.\n */\nexport const TYPESCRIPT_INTEG_EXT = \".integ.ts\";\n"
},
{
"path": "src/cdk/jsii-docgen.ts",
"chars": 976,
"preview": "import { JsiiProject } from \"./jsii-project\";\n\n/**\n * Options for `JsiiDocgen`\n */\nexport interface JsiiDocgenOptions {\n"
},
{
"path": "src/cdk/jsii-project.ts",
"chars": 14471,
"preview": "import { Task } from \"..\";\nimport { Job } from \"../github/workflows-model\";\nimport { Eslint } from \"../javascript\";\nimpo"
},
{
"path": "src/cdk8s/auto-discover.ts",
"chars": 1529,
"preview": "import {\n IntegrationTestAutoDiscoverBase,\n IntegrationTestAutoDiscoverBaseOptions,\n} from \"../cdk\";\nimport { Componen"
},
{
"path": "src/cdk8s/cdk8s-app-py.ts",
"chars": 2705,
"preview": "import { Component, DependencyType, YamlFile, SampleFile } from \"..\";\nimport { PythonProject, PythonProjectOptions } fro"
},
{
"path": "src/cdk8s/cdk8s-app-ts.ts",
"chars": 4904,
"preview": "import * as path from \"path\";\nimport * as fs from \"fs-extra\";\nimport { Component } from \"../component\";\nimport { Depende"
},
{
"path": "src/cdk8s/cdk8s-construct.ts",
"chars": 4198,
"preview": "import * as semver from \"semver\";\nimport { ConstructLibrary, ConstructLibraryOptions } from \"../cdk\";\nimport { AutoDisco"
},
{
"path": "src/cdk8s/cdk8s-deps-js.ts",
"chars": 298,
"preview": "import { Cdk8sDeps, Cdk8sPackageNames } from \"./cdk8s-deps\";\n\nexport class Cdk8sDepsJs extends Cdk8sDeps {\n protected p"
},
{
"path": "src/cdk8s/cdk8s-deps-py.ts",
"chars": 266,
"preview": "import { Cdk8sDeps, Cdk8sPackageNames } from \"./cdk8s-deps\";\n\nexport class Cdk8sDepsPy extends Cdk8sDeps {\n protected p"
},
{
"path": "src/cdk8s/cdk8s-deps.ts",
"chars": 9310,
"preview": "import * as semver from \"semver\";\nimport { Component } from \"../component\";\nimport { DependencyType } from \"../dependenc"
},
{
"path": "src/cdk8s/index.ts",
"chars": 231,
"preview": "export * from \"./auto-discover\";\nexport * from \"./cdk8s-app-py\";\nexport * from \"./cdk8s-app-ts\";\nexport * from \"./cdk8s-"
},
{
"path": "src/cdk8s/integration-test.ts",
"chars": 1780,
"preview": "import { join } from \"path\";\nimport { IntegrationTestBaseOptions, IntegrationTestBase } from \"../cdk\";\nimport { Dependen"
},
{
"path": "src/cdktf/cdktf-construct.ts",
"chars": 1461,
"preview": "import * as semver from \"semver\";\nimport { ConstructLibrary, ConstructLibraryOptions } from \"../cdk\";\n\nexport interface "
},
{
"path": "src/cdktf/index.ts",
"chars": 35,
"preview": "export * from \"./cdktf-construct\";\n"
},
{
"path": "src/circleci/circleci.ts",
"chars": 5862,
"preview": "import { Component } from \"../component\";\nimport { Project } from \"../project\";\nimport { snakeCaseKeys } from \"../util\";"
},
{
"path": "src/circleci/constant.ts",
"chars": 210,
"preview": "import { Filter } from \"./model\";\n\n/**\n * constant to create a filter to make a job or workflow only run on master\n */\ne"
},
{
"path": "src/circleci/index.ts",
"chars": 81,
"preview": "export * from \"./circleci\";\nexport * from \"./constant\";\nexport * from \"./model\";\n"
},
{
"path": "src/circleci/model.ts",
"chars": 11032,
"preview": "// @see https://circleci.com/docs/2.0/configuration-reference\n\n/**\n * Used to represent objects with a dynamic key.\n * D"
},
{
"path": "src/cleanup.ts",
"chars": 2583,
"preview": "import * as path from \"path\";\nimport * as fs from \"fs-extra\";\nimport { existsSync, readFileSync } from \"fs-extra\";\nimpor"
},
{
"path": "src/cli/cmds/new.ts",
"chars": 10814,
"preview": "import * as path from \"path\";\nimport * as fs from \"fs-extra\";\nimport * as semver from \"semver\";\nimport * as yargs from \""
},
{
"path": "src/cli/index.ts",
"chars": 2223,
"preview": "import { resolve } from \"path\";\nimport * as yargs from \"yargs\";\nimport { PROJEN_RC, PROJEN_VERSION } from \"../common\";\ni"
},
{
"path": "src/cli/macros.ts",
"chars": 1347,
"preview": "import * as path from \"path\";\nimport { execOrUndefined, formatAsPythonModule } from \"../util\";\n\nexport function tryProce"
},
{
"path": "src/cli/synth.ts",
"chars": 4428,
"preview": "import { spawnSync } from \"child_process\";\nimport * as os from \"os\";\nimport * as path from \"path\";\nimport * as fs from \""
},
{
"path": "src/cli/tasks.ts",
"chars": 1823,
"preview": "import * as chalk from \"chalk\";\nimport * as yargs from \"yargs\";\nimport * as logging from \"../logging\";\nimport { TaskRunt"
},
{
"path": "src/cli/util.ts",
"chars": 2052,
"preview": "import * as path from \"path\";\nimport * as fs from \"fs-extra\";\nimport * as logging from \"../logging\";\nimport { exec } fro"
},
{
"path": "src/clobber.ts",
"chars": 934,
"preview": "import { Component } from \"./component\";\nimport { Project } from \"./project\";\n\nexport class Clobber extends Component {\n"
},
{
"path": "src/common.ts",
"chars": 524,
"preview": "export const PROJEN_RC = \".projenrc.js\";\nexport const PROJEN_DIR = \".projen\";\nexport const PROJEN_MARKER = \"~~ Generated"
},
{
"path": "src/component.ts",
"chars": 458,
"preview": "import { Project } from \"./project\";\n\n/**\n * Represents a project component.\n */\nexport class Component {\n constructor("
},
{
"path": "src/dependencies.ts",
"chars": 8318,
"preview": "import * as path from \"path\";\nimport { PROJEN_DIR } from \"./common\";\nimport { Component } from \"./component\";\nimport { J"
},
{
"path": "src/dev-env.ts",
"chars": 2343,
"preview": "import { Task } from \"./task\";\n\n/**\n * Base options for configuring a container-based development environment.\n */\nexpor"
},
{
"path": "src/docker-compose.ts",
"chars": 16325,
"preview": "import { Component } from \"./component\";\nimport { Project } from \"./project\";\nimport { decamelizeKeysRecursively } from "
},
{
"path": "src/file.ts",
"chars": 6611,
"preview": "import * as path from \"path\";\nimport { removeSync } from \"fs-extra\";\nimport { resolve } from \"./_resolve\";\nimport { PROJ"
},
{
"path": "src/gitattributes.ts",
"chars": 1384,
"preview": "import { IResolver, FileBase } from \"./file\";\nimport { Project } from \"./project\";\n\n/**\n * Assign attributes to file nam"
},
{
"path": "src/github/auto-approve.ts",
"chars": 3458,
"preview": "import { Component } from \"../component\";\nimport { GitHub } from \"./github\";\nimport { Job, JobPermission } from \"./workf"
},
{
"path": "src/github/auto-merge.ts",
"chars": 2890,
"preview": "import { Component } from \"../component\";\nimport { GitHub } from \"./github\";\n\nexport interface AutoMergeOptions {\n /**\n"
},
{
"path": "src/github/constants.ts",
"chars": 440,
"preview": "import { GitIdentity } from \".\";\n\n/**\n * Name of the artifact produced by the build job. Its contains the entire\n * work"
},
{
"path": "src/github/dependabot.ts",
"chars": 11060,
"preview": "import { Component } from \"../component\";\nimport { kebabCaseKeys } from \"../util\";\nimport { YamlFile } from \"../yaml\";\ni"
},
{
"path": "src/github/github-credentials.ts",
"chars": 2805,
"preview": "import { JobStep } from \"./workflows-model\";\n\n/**\n * Options for `GithubCredentials.fromPersonalAccessToken`\n */\nexport "
},
{
"path": "src/github/github-project.ts",
"chars": 6825,
"preview": "import { Clobber } from \"../clobber\";\nimport { Gitpod } from \"../gitpod\";\nimport { Project, ProjectOptions, ProjectType "
},
{
"path": "src/github/github.ts",
"chars": 4567,
"preview": "import { Component } from \"../component\";\nimport { Project } from \"../project\";\nimport { Dependabot, DependabotOptions }"
},
{
"path": "src/github/index.ts",
"chars": 451,
"preview": "export * from \"./github\";\n\nexport * from \"./dependabot\";\nexport * from \"./workflows\";\nexport * from \"./mergify\";\nexport "
},
{
"path": "src/github/mergify.ts",
"chars": 2662,
"preview": "import { Component } from \"../component\";\nimport { YamlFile } from \"../yaml\";\nimport { GitHub } from \"./github\";\n\n/**\n *"
},
{
"path": "src/github/pr-template.ts",
"chars": 848,
"preview": "import { TextFile } from \"../textfile\";\nimport { GitHub } from \"./github\";\n\n/**\n * Options for `PullRequestTemplate`.\n *"
},
{
"path": "src/github/pull-request-lint.ts",
"chars": 2591,
"preview": "import { GitHub } from \".\";\nimport { Component } from \"../component\";\nimport { Job, JobPermission } from \"./workflows-mo"
},
{
"path": "src/github/stale-util.ts",
"chars": 1243,
"preview": "import { StaleBehavior } from \"./stale\";\n\ninterface Options {\n readonly stale: number;\n readonly close: number;\n read"
},
{
"path": "src/github/stale.ts",
"chars": 4649,
"preview": "import { Component } from \"../component\";\nimport { GitHub } from \"./github\";\nimport { renderBehavior } from \"./stale-uti"
},
{
"path": "src/github/task-workflow.ts",
"chars": 5140,
"preview": "import { Task } from \"../task\";\nimport { DEFAULT_GITHUB_ACTIONS_USER } from \"./constants\";\nimport { GitHub } from \"./git"
},
{
"path": "src/github/util.ts",
"chars": 105,
"preview": "export function secretToString(secretName: string): string {\n return `\\${{ secrets.${secretName} }}`;\n}\n"
},
{
"path": "src/github/workflow-actions.ts",
"chars": 3892,
"preview": "import { GitIdentity } from \".\";\nimport { JobStep } from \"./workflows-model\";\n\nconst GIT_PATCH_FILE = \".repo.patch\";\ncon"
},
{
"path": "src/github/workflows-model.ts",
"chars": 29955,
"preview": "// @see https://docs.github.com/en/actions/reference/workflow-syntax-for-github-actions\n\nexport interface CommonJobDefin"
},
{
"path": "src/github/workflows.ts",
"chars": 8779,
"preview": "import { snake } from \"case\";\nimport { resolve } from \"../_resolve\";\nimport { Component } from \"../component\";\nimport { "
},
{
"path": "src/gitlab/configuration-model.ts",
"chars": 27288,
"preview": "// @see https://docs.gitlab.com/ee/ci/yaml/\n// Schema from: https://gitlab.com/gitlab-org/gitlab/-/raw/master/app/assets"
},
{
"path": "src/gitlab/configuration.ts",
"chars": 11983,
"preview": "import * as path from \"path\";\nimport { snake } from \"case\";\nimport { Component } from \"../component\";\nimport { Project }"
},
{
"path": "src/gitlab/gitlab-configuration.ts",
"chars": 1507,
"preview": "import { CiConfigurationOptions } from \".\";\nimport { Project } from \"../project\";\nimport { CiConfiguration } from \"./con"
},
{
"path": "src/gitlab/index.ts",
"chars": 152,
"preview": "export * from \"./configuration\";\nexport * from \"./configuration-model\";\nexport * from \"./gitlab-configuration\";\nexport *"
},
{
"path": "src/gitlab/nested-configuration.ts",
"chars": 597,
"preview": "import { CiConfigurationOptions } from \".\";\nimport { Project } from \"../project\";\nimport { CiConfiguration } from \"./con"
},
{
"path": "src/gitpod.ts",
"chars": 10540,
"preview": "import { Component } from \"./component\";\nimport {\n IDevEnvironment,\n DevEnvironmentOptions,\n DevEnvironmentDockerImag"
},
{
"path": "src/ignore-file.ts",
"chars": 2508,
"preview": "import { FileBase, IResolver } from \"./file\";\nimport { Project } from \"./project\";\n\nexport class IgnoreFile extends File"
},
{
"path": "src/index.ts",
"chars": 1553,
"preview": "export * from \"./component\";\nexport * from \"./dev-env\";\nexport * from \"./dependencies\";\nexport * from \"./docker-compose\""
},
{
"path": "src/ini.ts",
"chars": 770,
"preview": "import * as INI from \"ini\";\nimport { IResolver } from \"./file\";\nimport { ObjectFile, ObjectFileOptions } from \"./object-"
},
{
"path": "src/inventory.ts",
"chars": 11798,
"preview": "import * as path from \"path\";\nimport { unzipSync } from \"zlib\";\nimport { snake } from \"case\";\nimport * as fs from \"fs-ex"
},
{
"path": "src/java/index.ts",
"chars": 208,
"preview": "export * from \"./pom\";\nexport * from \"./java-project\";\nexport * from \"./maven-sample\";\nexport * from \"./maven-compile\";\n"
},
{
"path": "src/java/java-project.ts",
"chars": 5641,
"preview": "import { GitHubProject, GitHubProjectOptions } from \"../github\";\nimport { anySelected, multipleSelected } from \"../util\""
},
{
"path": "src/java/junit.ts",
"chars": 1542,
"preview": "import { join } from \"path\";\nimport { Component } from \"../component\";\nimport { Project } from \"../project\";\nimport { Sa"
},
{
"path": "src/java/maven-compile.ts",
"chars": 904,
"preview": "import { Component } from \"../component\";\nimport { Project } from \"../project\";\nimport { Pom } from \"./pom\";\n\n/**\n * Opt"
},
{
"path": "src/java/maven-packaging.ts",
"chars": 2428,
"preview": "import { Component } from \"../component\";\nimport { Project } from \"../project\";\nimport { Pom } from \"./pom\";\n\n/**\n * Opt"
},
{
"path": "src/java/maven-sample.ts",
"chars": 884,
"preview": "import { join } from \"path\";\nimport { Component } from \"../component\";\nimport { Project } from \"../project\";\nimport { Sa"
},
{
"path": "src/java/pom.ts",
"chars": 10338,
"preview": "import { resolve } from \"../_resolve\";\nimport { Component } from \"../component\";\nimport {\n Dependencies,\n DependencyCo"
},
{
"path": "src/java/projenrc.ts",
"chars": 7591,
"preview": "import { dirname, join } from \"path\";\nimport { existsSync, mkdirpSync, writeFileSync } from \"fs-extra\";\nimport { PROJEN_"
},
{
"path": "src/javascript/bundler.ts",
"chars": 6834,
"preview": "import { join } from \"path\";\nimport { Component } from \"../component\";\nimport { DependencyType } from \"../dependencies\";"
},
{
"path": "src/javascript/eslint.ts",
"chars": 13329,
"preview": "import { Project } from \"..\";\nimport { PROJEN_RC } from \"../common\";\nimport { Component } from \"../component\";\nimport { "
},
{
"path": "src/javascript/index.ts",
"chars": 304,
"preview": "export * from \"./bundler\";\nexport * from \"./eslint\";\nexport * from \"./jest\";\nexport * from \"./node-package\";\nexport * fr"
},
{
"path": "src/javascript/jest.ts",
"chars": 25350,
"preview": "import * as path from \"path\";\nimport * as semver from \"semver\";\nimport { NodeProject } from \"../javascript\";\nimport { Js"
},
{
"path": "src/javascript/node-package.ts",
"chars": 42267,
"preview": "import { readFileSync } from \"fs\";\nimport { join, resolve } from \"path\";\nimport { parse as urlparse } from \"url\";\nimport"
},
{
"path": "src/javascript/node-project.ts",
"chars": 27734,
"preview": "import { join } from \"path\";\nimport { BuildWorkflow } from \"../build\";\nimport { PROJEN_DIR, PROJEN_RC } from \"../common\""
},
{
"path": "src/javascript/npm-config.ts",
"chars": 1437,
"preview": "import { Component } from \"../component\";\nimport { IniFile } from \"../ini\";\nimport { NodeProject } from \"../javascript\";"
},
{
"path": "src/javascript/prettier.ts",
"chars": 9441,
"preview": "import { Component } from \"../component\";\nimport { IgnoreFile } from \"../ignore-file\";\nimport { NodeProject } from \"../j"
},
{
"path": "src/javascript/projenrc.ts",
"chars": 1850,
"preview": "import { existsSync, writeFileSync } from \"fs\";\nimport { resolve } from \"path\";\nimport { Component } from \"../component\""
},
{
"path": "src/javascript/render-options.ts",
"chars": 7843,
"preview": "import * as inventory from \"../inventory\";\nimport { InitProjectOptionHints } from \"../option-hints\";\n\nconst PROJEN_NEW ="
},
{
"path": "src/javascript/typescript-config.ts",
"chars": 10921,
"preview": "import { NodeProject } from \".\";\nimport { JsonFile } from \"../json\";\n\nexport interface TypescriptConfigOptions {\n /**\n "
},
{
"path": "src/javascript/upgrade-dependencies.ts",
"chars": 15106,
"preview": "import { Component } from \"../component\";\nimport {\n GithubCredentials,\n GitHub,\n GithubWorkflow,\n GitIdentity,\n wor"
},
{
"path": "src/javascript/util.ts",
"chars": 1813,
"preview": "import { basename, dirname, extname, join, sep } from \"path\";\nimport * as semver from \"semver\";\nimport { NodePackageMana"
},
{
"path": "src/json-patch.ts",
"chars": 3197,
"preview": "// copied fro https://github.com/cdk8s-team/cdk8s-core/blob/6b317a7a6a2504e228bc56bf96fc98829f88c2be/src/json-patch.ts\n/"
},
{
"path": "src/json.ts",
"chars": 1644,
"preview": "import { IResolver } from \"./file\";\nimport { ObjectFile, ObjectFileOptions } from \"./object-file\";\nimport { Project } fr"
},
{
"path": "src/license.ts",
"chars": 1886,
"preview": "import * as fs from \"fs-extra\";\nimport { FileBase, IResolver } from \"./file\";\nimport { Project } from \"./project\";\n\nexpo"
},
{
"path": "src/logger.ts",
"chars": 3547,
"preview": "import * as chalk from \"chalk\";\nimport { IS_TEST_RUN } from \"./common\";\nimport { Component } from \"./component\";\nimport "
},
{
"path": "src/logging.ts",
"chars": 944,
"preview": "import * as chalk from \"chalk\";\nimport { IS_TEST_RUN } from \"./common\";\n\nexport const ICON = \"👾\"; //'✨';\n\n// disable log"
},
{
"path": "src/makefile.ts",
"chars": 3235,
"preview": "import { FileBase, FileBaseOptions, IResolver } from \"./file\";\nimport { Project } from \"./project\";\n\n/**\n * A Make rule."
},
{
"path": "src/object-file.ts",
"chars": 7351,
"preview": "import { FileBase, FileBaseOptions, IResolver } from \"./file\";\nimport { JsonPatch } from \"./json-patch\";\nimport { Projec"
},
{
"path": "src/option-hints.ts",
"chars": 424,
"preview": "/**\n * Choices for how to display commented out options in projenrc files.\n * Does not apply to projenrc.json files.\n */"
},
{
"path": "src/project-build.ts",
"chars": 2140,
"preview": "import { Component } from \"./component\";\nimport { Project } from \"./project\";\nimport { Task } from \"./task\";\n\n/**\n * Man"
},
{
"path": "src/project.ts",
"chars": 18625,
"preview": "import { mkdtempSync, realpathSync, renameSync } from \"fs\";\nimport { tmpdir } from \"os\";\nimport * as path from \"path\";\ni"
}
]
// ... and 207 more files (download for full content)
About this extraction
This page contains the full source code of the eladb/projen GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 407 files (4.6 MB), approximately 1.2M tokens, and a symbol index with 1415 extracted functions, classes, methods, constants, and types. Use this with OpenClaw, Claude, ChatGPT, Cursor, Windsurf, or any other AI tool that accepts text input. You can copy the full output to your clipboard or download it as a .txt file.
Extracted by GitExtract — free GitHub repo to text converter for AI. Built by Nikandr Surkov.