projen 0.79.4__py3-none-any.whl → 0.98.25__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
projen/__init__.py CHANGED
@@ -1,4 +1,4 @@
1
- '''
1
+ r'''
2
2
  <p align="center">
3
3
  <a href="https://projen.io">
4
4
  <img src="https://raw.githubusercontent.com/projen/projen/main/logo/projen.svg">
@@ -286,14 +286,6 @@ projen has an unofficial [VS Code extension](https://marketplace.visualstudio.co
286
286
  The projen community can be found within the #projen channel in the [cdk.dev](https://cdk.dev/)
287
287
  community Slack workspace.
288
288
 
289
- ### Virtual Meetup
290
-
291
- * Thursday June 30, 2022
292
- * 1-2pm America/New_York (EDT)
293
- * [CFP](https://bit.ly/3NEc0UQ) a Google Form
294
- * CFP Closes Saturday April 30, 2022
295
- * Hosted on [Zoom](https://zoom.us/j/92399854777?pwd=OUZybHlobHNoZUs1VVordWhaRTVGdz09#success)
296
-
297
289
  ## Contributions
298
290
 
299
291
  Contributions of all kinds are welcome! Check out our [contributor's
@@ -304,15 +296,15 @@ For a quick start, check out a development environment:
304
296
  ```bash
305
297
  $ git clone git@github.com:projen/projen
306
298
  $ cd projen
307
- $ yarn
308
- $ yarn watch # compile in the background
299
+ $ npm ci
300
+ $ npm run watch # compile in the background
309
301
  ```
310
302
 
311
303
  Thanks goes to these wonderful people ([emoji key](https://allcontributors.org/docs/en/emoji-key)):
312
304
 
313
305
  <!-- ALL-CONTRIBUTORS-BADGE:START - Do not remove or modify this section -->
314
306
 
315
- [![All Contributors](https://img.shields.io/badge/all_contributors-185-orange.svg?style=flat-square)](#contributors-)
307
+ [![All Contributors](https://img.shields.io/badge/all_contributors-193-orange.svg?style=flat-square)](#contributors-)
316
308
 
317
309
  <!-- ALL-CONTRIBUTORS-BADGE:END --><!-- ALL-CONTRIBUTORS-LIST:START - Do not remove or modify this section --><!-- prettier-ignore-start --><!-- markdownlint-disable --><table>
318
310
  <tbody>
@@ -320,167 +312,176 @@ Thanks goes to these wonderful people ([emoji key](https://allcontributors.org/d
320
312
  <td align="center" valign="top" width="14.28%"><a href="https://github.com/Hunter-Thompson"><img src="https://avatars.githubusercontent.com/u/20844961?v=4?s=100" width="100px;" alt=" Aatman "/><br /><sub><b> Aatman </b></sub></a><br /><a href="https://github.com/projen/projen/commits?author=Hunter-Thompson" title="Code">💻</a></td>
321
313
  <td align="center" valign="top" width="14.28%"><a href="https://accenture.github.io/"><img src="https://avatars.githubusercontent.com/u/43275295?v=4?s=100" width="100px;" alt="Abdullah Sahin"/><br /><sub><b>Abdullah Sahin</b></sub></a><br /><a href="https://github.com/projen/projen/commits?author=abdsahin" title="Code">💻</a></td>
322
314
  <td align="center" valign="top" width="14.28%"><a href="https://adam.dev/"><img src="https://avatars.githubusercontent.com/u/2363879?v=4?s=100" width="100px;" alt="Adam"/><br /><sub><b>Adam</b></sub></a><br /><a href="https://github.com/projen/projen/commits?author=adamdottv" title="Code">💻</a></td>
315
+ <td align="center" valign="top" width="14.28%"><a href="https://adamelkhayyat.github.io/"><img src="https://avatars.githubusercontent.com/u/19326038?v=4?s=100" width="100px;" alt="Adam ElKhayyat"/><br /><sub><b>Adam ElKhayyat</b></sub></a><br /><a href="https://github.com/projen/projen/commits?author=adamelkhayyat" title="Code">💻</a></td>
323
316
  <td align="center" valign="top" width="14.28%"><a href="https://github.com/adamelmore"><img src="https://avatars2.githubusercontent.com/u/2363879?v=4?s=100" width="100px;" alt="Adam Elmore"/><br /><sub><b>Adam Elmore</b></sub></a><br /><a href="https://github.com/projen/projen/commits?author=adamelmore" title="Code">💻</a></td>
324
317
  <td align="center" valign="top" width="14.28%"><a href="https://github.com/agdimech"><img src="https://avatars.githubusercontent.com/u/51220968?v=4?s=100" width="100px;" alt="Adrian Dimech"/><br /><sub><b>Adrian Dimech</b></sub></a><br /><a href="https://github.com/projen/projen/commits?author=agdimech" title="Code">💻</a></td>
325
318
  <td align="center" valign="top" width="14.28%"><a href="https://github.com/adrianmace"><img src="https://avatars.githubusercontent.com/u/5071859?v=4?s=100" width="100px;" alt="Adrian Mace"/><br /><sub><b>Adrian Mace</b></sub></a><br /><a href="https://github.com/projen/projen/commits?author=adrianmace" title="Code">💻</a></td>
326
- <td align="center" valign="top" width="14.28%"><a href="https://github.com/alejandrolorefice"><img src="https://avatars.githubusercontent.com/u/24880460?v=4?s=100" width="100px;" alt="Alejandro Lorefice"/><br /><sub><b>Alejandro Lorefice</b></sub></a><br /><a href="https://github.com/projen/projen/commits?author=alejandrolorefice" title="Code">💻</a></td>
327
319
  </tr>
328
320
  <tr>
321
+ <td align="center" valign="top" width="14.28%"><a href="https://github.com/alejandrolorefice"><img src="https://avatars.githubusercontent.com/u/24880460?v=4?s=100" width="100px;" alt="Alejandro Lorefice"/><br /><sub><b>Alejandro Lorefice</b></sub></a><br /><a href="https://github.com/projen/projen/commits?author=alejandrolorefice" title="Code">💻</a></td>
329
322
  <td align="center" valign="top" width="14.28%"><a href="https://github.com/alexforsyth"><img src="https://avatars.githubusercontent.com/u/8712303?v=4?s=100" width="100px;" alt="Alexander Forsyth"/><br /><sub><b>Alexander Forsyth</b></sub></a><br /><a href="https://github.com/projen/projen/commits?author=alexforsyth" title="Code">💻</a></td>
330
323
  <td align="center" valign="top" width="14.28%"><a href="https://unsubstantiated.blog/"><img src="https://avatars.githubusercontent.com/u/1308885?v=4?s=100" width="100px;" alt="Alexander Steppke"/><br /><sub><b>Alexander Steppke</b></sub></a><br /><a href="https://github.com/projen/projen/commits?author=Miradorn" title="Code">💻</a></td>
331
324
  <td align="center" valign="top" width="14.28%"><a href="https://amani.kilumanga.com/"><img src="https://avatars.githubusercontent.com/u/8690282?v=4?s=100" width="100px;" alt="Amani Kilumanga"/><br /><sub><b>Amani Kilumanga</b></sub></a><br /><a href="https://github.com/projen/projen/commits?author=dkaksl" title="Code">💻</a></td>
332
325
  <td align="center" valign="top" width="14.28%"><a href="https://amin.fazl.me/"><img src="https://avatars.githubusercontent.com/u/62678026?v=4?s=100" width="100px;" alt="Amin Fazl"/><br /><sub><b>Amin Fazl</b></sub></a><br /><a href="https://github.com/projen/projen/commits?author=AminFazlMondo" title="Code">💻</a></td>
333
326
  <td align="center" valign="top" width="14.28%"><a href="https://kichik.com/"><img src="https://avatars.githubusercontent.com/u/1156773?v=4?s=100" width="100px;" alt="Amir Szekely"/><br /><sub><b>Amir Szekely</b></sub></a><br /><a href="https://github.com/projen/projen/commits?author=kichik" title="Code">💻</a></td>
334
327
  <td align="center" valign="top" width="14.28%"><a href="https://www.linkedin.com/in/amartinsg/"><img src="https://avatars.githubusercontent.com/u/54241354?v=4?s=100" width="100px;" alt="Anderson Gomes"/><br /><sub><b>Anderson Gomes</b></sub></a><br /><a href="https://github.com/projen/projen/commits?author=andersonmgomes" title="Code">💻</a></td>
335
- <td align="center" valign="top" width="14.28%"><a href="https://github.com/asdcamargo"><img src="https://avatars.githubusercontent.com/u/4683431?v=4?s=100" width="100px;" alt="Andre de Camargo"/><br /><sub><b>Andre de Camargo</b></sub></a><br /><a href="https://github.com/projen/projen/commits?author=asdcamargo" title="Code">💻</a></td>
336
328
  </tr>
337
329
  <tr>
330
+ <td align="center" valign="top" width="14.28%"><a href="https://github.com/asdcamargo"><img src="https://avatars.githubusercontent.com/u/4683431?v=4?s=100" width="100px;" alt="Andre de Camargo"/><br /><sub><b>Andre de Camargo</b></sub></a><br /><a href="https://github.com/projen/projen/commits?author=asdcamargo" title="Code">💻</a></td>
338
331
  <td align="center" valign="top" width="14.28%"><a href="http://comfortabledelusions.blogspot.com/"><img src="https://avatars.githubusercontent.com/u/445764?v=4?s=100" width="100px;" alt="Andrew Hammond"/><br /><sub><b>Andrew Hammond</b></sub></a><br /><a href="https://github.com/projen/projen/commits?author=ahammond" title="Code">💻</a></td>
332
+ <td align="center" valign="top" width="14.28%"><a href="http://apkostka.com/"><img src="https://avatars.githubusercontent.com/u/788482?v=4?s=100" width="100px;" alt="Andrew Kostka"/><br /><sub><b>Andrew Kostka</b></sub></a><br /><a href="https://github.com/projen/projen/commits?author=apkostka" title="Code">💻</a></td>
339
333
  <td align="center" valign="top" width="14.28%"><a href="https://github.com/dippi"><img src="https://avatars.githubusercontent.com/u/3977098?v=4?s=100" width="100px;" alt="Angelo Di Pilla"/><br /><sub><b>Angelo Di Pilla</b></sub></a><br /><a href="https://github.com/projen/projen/commits?author=dippi" title="Code">💻</a></td>
340
334
  <td align="center" valign="top" width="14.28%"><a href="https://ansgar.dev/"><img src="https://avatars.githubusercontent.com/u/1112056?v=4?s=100" width="100px;" alt="Ansgar Mertens"/><br /><sub><b>Ansgar Mertens</b></sub></a><br /><a href="https://github.com/projen/projen/commits?author=ansgarm" title="Code">💻</a></td>
341
335
  <td align="center" valign="top" width="14.28%"><a href="https://github.com/yoyomo"><img src="https://avatars.githubusercontent.com/u/12818568?v=4?s=100" width="100px;" alt="Armando J. Ortiz Garcia"/><br /><sub><b>Armando J. Ortiz Garcia</b></sub></a><br /><a href="https://github.com/projen/projen/commits?author=yoyomo" title="Code">💻</a></td>
342
336
  <td align="center" valign="top" width="14.28%"><a href="https://github.com/dontirun"><img src="https://avatars.githubusercontent.com/u/4570879?v=4?s=100" width="100px;" alt="Arun Donti"/><br /><sub><b>Arun Donti</b></sub></a><br /><a href="https://github.com/projen/projen/commits?author=dontirun" title="Code">💻</a></td>
343
- <td align="center" valign="top" width="14.28%"><a href="https://github.com/abelmokadem"><img src="https://avatars0.githubusercontent.com/u/9717944?v=4?s=100" width="100px;" alt="Ash"/><br /><sub><b>Ash</b></sub></a><br /><a href="https://github.com/projen/projen/commits?author=abelmokadem" title="Code">💻</a></td>
344
- <td align="center" valign="top" width="14.28%"><a href="https://github.com/kanatti"><img src="https://avatars.githubusercontent.com/u/8623654?v=4?s=100" width="100px;" alt="Balagopal Kanattil"/><br /><sub><b>Balagopal Kanattil</b></sub></a><br /><a href="https://github.com/projen/projen/commits?author=kanatti" title="Code">💻</a></td>
345
337
  </tr>
346
338
  <tr>
339
+ <td align="center" valign="top" width="14.28%"><a href="https://github.com/abelmokadem"><img src="https://avatars0.githubusercontent.com/u/9717944?v=4?s=100" width="100px;" alt="Ash"/><br /><sub><b>Ash</b></sub></a><br /><a href="https://github.com/projen/projen/commits?author=abelmokadem" title="Code">💻</a></td>
340
+ <td align="center" valign="top" width="14.28%"><a href="https://austinbriggs.dev/"><img src="https://avatars.githubusercontent.com/u/7308231?v=4?s=100" width="100px;" alt="Austin"/><br /><sub><b>Austin</b></sub></a><br /><a href="https://github.com/projen/projen/commits?author=awbdallas" title="Code">💻</a></td>
341
+ <td align="center" valign="top" width="14.28%"><a href="https://github.com/kanatti"><img src="https://avatars.githubusercontent.com/u/8623654?v=4?s=100" width="100px;" alt="Balagopal Kanattil"/><br /><sub><b>Balagopal Kanattil</b></sub></a><br /><a href="https://github.com/projen/projen/commits?author=kanatti" title="Code">💻</a></td>
347
342
  <td align="center" valign="top" width="14.28%"><a href="http://www.callant.net/"><img src="https://avatars1.githubusercontent.com/u/5915843?v=4?s=100" width="100px;" alt="Bart Callant"/><br /><sub><b>Bart Callant</b></sub></a><br /><a href="https://github.com/projen/projen/commits?author=bartcallant" title="Code">💻</a></td>
348
343
  <td align="center" valign="top" width="14.28%"><a href="https://beau.sh/"><img src="https://avatars.githubusercontent.com/u/127320?v=4?s=100" width="100px;" alt="Beau Bouchard"/><br /><sub><b>Beau Bouchard</b></sub></a><br /><a href="https://github.com/projen/projen/commits?author=BeauBouchard" title="Code">💻</a></td>
349
344
  <td align="center" valign="top" width="14.28%"><a href="https://benlimmer.com/"><img src="https://avatars.githubusercontent.com/u/630449?v=4?s=100" width="100px;" alt="Ben Limmer"/><br /><sub><b>Ben Limmer</b></sub></a><br /><a href="https://github.com/projen/projen/commits?author=blimmer" title="Code">💻</a></td>
350
345
  <td align="center" valign="top" width="14.28%"><a href="https://bilalquadri.com/"><img src="https://avatars.githubusercontent.com/u/707147?v=4?s=100" width="100px;" alt="Bilal Quadri"/><br /><sub><b>Bilal Quadri</b></sub></a><br /><a href="https://github.com/projen/projen/commits?author=bilalq" title="Code">💻</a></td>
346
+ </tr>
347
+ <tr>
351
348
  <td align="center" valign="top" width="14.28%"><a href="https://transacid.de/"><img src="https://avatars.githubusercontent.com/u/113231?v=4?s=100" width="100px;" alt="Boris Petersen"/><br /><sub><b>Boris Petersen</b></sub></a><br /><a href="https://github.com/projen/projen/commits?author=transacid" title="Code">💻</a></td>
352
349
  <td align="center" valign="top" width="14.28%"><a href="https://github.com/BradenM"><img src="https://avatars.githubusercontent.com/u/5913808?v=4?s=100" width="100px;" alt="Braden Mars"/><br /><sub><b>Braden Mars</b></sub></a><br /><a href="https://github.com/projen/projen/commits?author=BradenM" title="Code">💻</a></td>
353
350
  <td align="center" valign="top" width="14.28%"><a href="https://github.com/bmiller08"><img src="https://avatars.githubusercontent.com/u/13002874?v=4?s=100" width="100px;" alt="Brandon Miller"/><br /><sub><b>Brandon Miller</b></sub></a><br /><a href="https://github.com/projen/projen/commits?author=bmiller08" title="Code">💻</a></td>
354
- </tr>
355
- <tr>
356
351
  <td align="center" valign="top" width="14.28%"><a href="https://github.com/bhleonard"><img src="https://avatars.githubusercontent.com/u/1961679?v=4?s=100" width="100px;" alt="Brian Leonard"/><br /><sub><b>Brian Leonard</b></sub></a><br /><a href="https://github.com/projen/projen/commits?author=bhleonard" title="Code">💻</a></td>
357
352
  <td align="center" valign="top" width="14.28%"><a href="https://github.com/comcalvi"><img src="https://avatars.githubusercontent.com/u/66279577?v=4?s=100" width="100px;" alt="Calvin Combs"/><br /><sub><b>Calvin Combs</b></sub></a><br /><a href="https://github.com/projen/projen/commits?author=comcalvi" title="Code">💻</a></td>
358
353
  <td align="center" valign="top" width="14.28%"><a href="https://github.com/cameroncf"><img src="https://avatars.githubusercontent.com/u/789760?v=4?s=100" width="100px;" alt="Cameron Childress"/><br /><sub><b>Cameron Childress</b></sub></a><br /><a href="https://github.com/projen/projen/commits?author=cameroncf" title="Code">💻</a></td>
359
354
  <td align="center" valign="top" width="14.28%"><a href="https://github.com/campionfellin"><img src="https://avatars3.githubusercontent.com/u/11984923?v=4?s=100" width="100px;" alt="Campion Fellin"/><br /><sub><b>Campion Fellin</b></sub></a><br /><a href="https://github.com/projen/projen/commits?author=campionfellin" title="Code">💻</a></td>
355
+ </tr>
356
+ <tr>
357
+ <td align="center" valign="top" width="14.28%"><a href="https://medium.com/@caodanju"><img src="https://avatars.githubusercontent.com/u/18650321?v=4?s=100" width="100px;" alt="Cao Peng"/><br /><sub><b>Cao Peng</b></sub></a><br /><a href="https://github.com/projen/projen/commits?author=caopengau" title="Code">💻</a></td>
360
358
  <td align="center" valign="top" width="14.28%"><a href="https://github.com/ctasada"><img src="https://avatars.githubusercontent.com/u/1381772?v=4?s=100" width="100px;" alt="Carlos Tasada"/><br /><sub><b>Carlos Tasada</b></sub></a><br /><a href="https://github.com/projen/projen/commits?author=ctasada" title="Code">💻</a></td>
359
+ <td align="center" valign="top" width="14.28%"><a href="https://chrisb.cloud/"><img src="https://avatars.githubusercontent.com/u/12206103?v=4?s=100" width="100px;" alt="Chris Bateman"/><br /><sub><b>Chris Bateman</b></sub></a><br /><a href="https://github.com/projen/projen/commits?author=chris-bateman" title="Code">💻</a></td>
361
360
  <td align="center" valign="top" width="14.28%"><a href="https://github.com/cgatt"><img src="https://avatars.githubusercontent.com/u/45865322?v=4?s=100" width="100px;" alt="Chris Gatt"/><br /><sub><b>Chris Gatt</b></sub></a><br /><a href="https://github.com/projen/projen/commits?author=cgatt" title="Code">💻</a></td>
362
361
  <td align="center" valign="top" width="14.28%"><a href="https://rybicki.io/"><img src="https://avatars2.githubusercontent.com/u/5008987?v=4?s=100" width="100px;" alt="Christopher Rybicki"/><br /><sub><b>Christopher Rybicki</b></sub></a><br /><a href="https://github.com/projen/projen/commits?author=Chriscbr" title="Code">💻</a></td>
363
- </tr>
364
- <tr>
365
362
  <td align="center" valign="top" width="14.28%"><a href="https://github.com/corymhall"><img src="https://avatars.githubusercontent.com/u/43035978?v=4?s=100" width="100px;" alt="Cory Hall"/><br /><sub><b>Cory Hall</b></sub></a><br /><a href="https://github.com/projen/projen/commits?author=corymhall" title="Code">💻</a></td>
366
363
  <td align="center" valign="top" width="14.28%"><a href="https://aws.amazon.com/chime/chime-sdk/"><img src="https://avatars.githubusercontent.com/u/71404236?v=4?s=100" width="100px;" alt="Court Schuett"/><br /><sub><b>Court Schuett</b></sub></a><br /><a href="https://github.com/projen/projen/commits?author=schuettc" title="Code">💻</a></td>
364
+ </tr>
365
+ <tr>
367
366
  <td align="center" valign="top" width="14.28%"><a href="https://medium.com/@craig.burdulis"><img src="https://avatars.githubusercontent.com/u/12520946?v=4?s=100" width="100px;" alt="Craig Burdulis"/><br /><sub><b>Craig Burdulis</b></sub></a><br /><a href="https://github.com/projen/projen/commits?author=icj217" title="Code">💻</a></td>
368
367
  <td align="center" valign="top" width="14.28%"><a href="https://pallares.io/"><img src="https://avatars3.githubusercontent.com/u/1077520?v=4?s=100" width="100px;" alt="Cristian Pallarés"/><br /><sub><b>Cristian Pallarés</b></sub></a><br /><a href="https://github.com/projen/projen/commits?author=skyrpex" title="Code">💻</a></td>
369
368
  <td align="center" valign="top" width="14.28%"><a href="http://danielmschmidt.de/"><img src="https://avatars.githubusercontent.com/u/1337046?v=4?s=100" width="100px;" alt="Daniel Schmidt"/><br /><sub><b>Daniel Schmidt</b></sub></a><br /><a href="https://github.com/projen/projen/commits?author=DanielMSchmidt" title="Code">💻</a></td>
370
369
  <td align="center" valign="top" width="14.28%"><a href="https://typefully.com/dannysteenman"><img src="https://avatars.githubusercontent.com/u/15192660?v=4?s=100" width="100px;" alt="Danny Steenman"/><br /><sub><b>Danny Steenman</b></sub></a><br /><a href="https://github.com/projen/projen/commits?author=dannysteenman" title="Code">💻</a></td>
371
370
  <td align="center" valign="top" width="14.28%"><a href="https://github.com/dkershner6"><img src="https://avatars.githubusercontent.com/u/25798427?v=4?s=100" width="100px;" alt="Derek Kershner"/><br /><sub><b>Derek Kershner</b></sub></a><br /><a href="https://github.com/projen/projen/commits?author=dkershner6" title="Code">💻</a></td>
372
- </tr>
373
- <tr>
374
371
  <td align="center" valign="top" width="14.28%"><a href="https://github.com/eduardomourar"><img src="https://avatars.githubusercontent.com/u/16357187?v=4?s=100" width="100px;" alt="Eduardo Rodrigues"/><br /><sub><b>Eduardo Rodrigues</b></sub></a><br /><a href="https://github.com/projen/projen/commits?author=eduardomourar" title="Code">💻</a></td>
375
372
  <td align="center" valign="top" width="14.28%"><a href="http://eladb.github.com/"><img src="https://avatars3.githubusercontent.com/u/598796?v=4?s=100" width="100px;" alt="Elad Ben-Israel"/><br /><sub><b>Elad Ben-Israel</b></sub></a><br /><a href="https://github.com/projen/projen/commits?author=eladb" title="Code">💻</a></td>
373
+ </tr>
374
+ <tr>
376
375
  <td align="center" valign="top" width="14.28%"><a href="https://github.com/iliapolo"><img src="https://avatars.githubusercontent.com/u/1428812?v=4?s=100" width="100px;" alt="Eli Polonsky"/><br /><sub><b>Eli Polonsky</b></sub></a><br /><a href="https://github.com/projen/projen/commits?author=iliapolo" title="Code">💻</a></td>
377
376
  <td align="center" valign="top" width="14.28%"><a href="https://elig.io/"><img src="https://avatars.githubusercontent.com/u/22875166?v=4?s=100" width="100px;" alt="Eligio Mariño"/><br /><sub><b>Eligio Mariño</b></sub></a><br /><a href="https://github.com/projen/projen/commits?author=gmeligio" title="Code">💻</a></td>
378
377
  <td align="center" valign="top" width="14.28%"><a href="https://github.com/Tucker-Eric"><img src="https://avatars.githubusercontent.com/u/6483755?v=4?s=100" width="100px;" alt="Eric Tucker"/><br /><sub><b>Eric Tucker</b></sub></a><br /><a href="https://github.com/projen/projen/commits?author=Tucker-Eric" title="Code">💻</a></td>
379
378
  <td align="center" valign="top" width="14.28%"><a href="https://github.com/echeung-amzn"><img src="https://avatars.githubusercontent.com/u/81188333?v=4?s=100" width="100px;" alt="Eugene Cheung"/><br /><sub><b>Eugene Cheung</b></sub></a><br /><a href="https://github.com/projen/projen/commits?author=echeung-amzn" title="Code">💻</a></td>
380
379
  <td align="center" valign="top" width="14.28%"><a href="https://github.com/FonsBiemans"><img src="https://avatars.githubusercontent.com/u/34266227?v=4?s=100" width="100px;" alt="Fons Biemans"/><br /><sub><b>Fons Biemans</b></sub></a><br /><a href="https://github.com/projen/projen/commits?author=FonsBiemans" title="Code">💻</a></td>
380
+ <td align="center" valign="top" width="14.28%"><a href="https://github.com/froblesmartin"><img src="https://avatars.githubusercontent.com/u/18084174?v=4?s=100" width="100px;" alt="Francisco Robles Martín"/><br /><sub><b>Francisco Robles Martín</b></sub></a><br /><a href="https://github.com/projen/projen/commits?author=froblesmartin" title="Documentation">📖</a></td>
381
+ <td align="center" valign="top" width="14.28%"><a href="https://github.com/fynnfluegge"><img src="https://avatars.githubusercontent.com/u/16321871?v=4?s=100" width="100px;" alt="Fynn Flügge"/><br /><sub><b>Fynn Flügge</b></sub></a><br /><a href="https://github.com/projen/projen/commits?author=fynnfluegge" title="Code">💻</a></td>
381
382
  </tr>
382
383
  <tr>
383
- <td align="center" valign="top" width="14.28%"><a href="https://github.com/fynnfluegge"><img src="https://avatars.githubusercontent.com/u/16321871?v=4?s=100" width="100px;" alt="Fynn Flügge"/><br /><sub><b>Fynn Flügge</b></sub></a><br /><a href="https://github.com/projen/projen/commits?author=fynnfluegge" title="Code">💻</a></td>
384
384
  <td align="center" valign="top" width="14.28%"><a href="https://github.com/garysassano"><img src="https://avatars.githubusercontent.com/u/10464497?v=4?s=100" width="100px;" alt="Gary Sassano"/><br /><sub><b>Gary Sassano</b></sub></a><br /><a href="https://github.com/projen/projen/commits?author=garysassano" title="Code">💻</a></td>
385
385
  <td align="center" valign="top" width="14.28%"><a href="https://github.com/gradybarrett"><img src="https://avatars1.githubusercontent.com/u/1140074?v=4?s=100" width="100px;" alt="Grady Barrett"/><br /><sub><b>Grady Barrett</b></sub></a><br /><a href="https://github.com/projen/projen/commits?author=gradybarrett" title="Code">💻</a></td>
386
386
  <td align="center" valign="top" width="14.28%"><a href="http://blog.herlein.com/"><img src="https://avatars.githubusercontent.com/u/173428?v=4?s=100" width="100px;" alt="Greg Herlein"/><br /><sub><b>Greg Herlein</b></sub></a><br /><a href="https://github.com/projen/projen/commits?author=gherlein" title="Code">💻</a></td>
387
387
  <td align="center" valign="top" width="14.28%"><a href="https://github.com/GreggSetzer"><img src="https://avatars.githubusercontent.com/u/1624443?v=4?s=100" width="100px;" alt="Gregg"/><br /><sub><b>Gregg</b></sub></a><br /><a href="https://github.com/projen/projen/commits?author=GreggSetzer" title="Code">💻</a></td>
388
388
  <td align="center" valign="top" width="14.28%"><a href="https://github.com/hasanaburayyan"><img src="https://avatars.githubusercontent.com/u/45375125?v=4?s=100" width="100px;" alt="Hasan"/><br /><sub><b>Hasan</b></sub></a><br /><a href="https://github.com/projen/projen/commits?author=hasanaburayyan" title="Code">💻</a></td>
389
389
  <td align="center" valign="top" width="14.28%"><a href="https://github.com/hassanazharkhan"><img src="https://avatars.githubusercontent.com/u/57677979?v=4?s=100" width="100px;" alt="Hassan Azhar"/><br /><sub><b>Hassan Azhar</b></sub></a><br /><a href="https://github.com/projen/projen/commits?author=hassanazharkhan" title="Code">💻</a></td>
390
+ <td align="center" valign="top" width="14.28%"><a href="https://github.com/HassanMahmud"><img src="https://avatars3.githubusercontent.com/u/58504381?v=4?s=100" width="100px;" alt="Hassan Mahmud"/><br /><sub><b>Hassan Mahmud</b></sub></a><br /><a href="https://github.com/projen/projen/commits?author=HassanMahmud" title="Code">💻</a></td>
390
391
  </tr>
391
392
  <tr>
392
- <td align="center" valign="top" width="14.28%"><a href="https://github.com/HassanMahmud"><img src="https://avatars3.githubusercontent.com/u/58504381?v=4?s=100" width="100px;" alt="Hassan Mahmud"/><br /><sub><b>Hassan Mahmud</b></sub></a><br /><a href="https://github.com/projen/projen/commits?author=HassanMahmud" title="Code">💻</a></td>
393
393
  <td align="center" valign="top" width="14.28%"><a href="https://dk.linkedin.com/in/hassanmahmud93"><img src="https://avatars1.githubusercontent.com/u/7426703?v=4?s=100" width="100px;" alt="Hassan Mahmud"/><br /><sub><b>Hassan Mahmud</b></sub></a><br /><a href="https://github.com/projen/projen/commits?author=hass123uk" title="Code">💻</a></td>
394
394
  <td align="center" valign="top" width="14.28%"><a href="https://github.com/mKeRix"><img src="https://avatars.githubusercontent.com/u/770596?v=4?s=100" width="100px;" alt="Heiko Rothe"/><br /><sub><b>Heiko Rothe</b></sub></a><br /><a href="https://github.com/projen/projen/commits?author=mKeRix" title="Code">💻</a></td>
395
395
  <td align="center" valign="top" width="14.28%"><a href="https://github.com/hyandell"><img src="https://avatars.githubusercontent.com/u/477715?v=4?s=100" width="100px;" alt="Henri Yandell"/><br /><sub><b>Henri Yandell</b></sub></a><br /><a href="https://github.com/projen/projen/commits?author=hyandell" title="Code">💻</a></td>
396
396
  <td align="center" valign="top" width="14.28%"><a href="https://github.com/henrysachs"><img src="https://avatars0.githubusercontent.com/u/17173951?v=4?s=100" width="100px;" alt="Henry Sachs"/><br /><sub><b>Henry Sachs</b></sub></a><br /><a href="https://github.com/projen/projen/commits?author=henrysachs" title="Code">💻</a></td>
397
397
  <td align="center" valign="top" width="14.28%"><a href="https://blog.hoseung.me/"><img src="https://avatars.githubusercontent.com/u/39669819?v=4?s=100" width="100px;" alt="Hoseung"/><br /><sub><b>Hoseung</b></sub></a><br /><a href="https://github.com/projen/projen/commits?author=HoseungJang" title="Code">💻</a></td>
398
398
  <td align="center" valign="top" width="14.28%"><a href="https://bandism.net/"><img src="https://avatars.githubusercontent.com/u/22633385?v=4?s=100" width="100px;" alt="Ikko Ashimine"/><br /><sub><b>Ikko Ashimine</b></sub></a><br /><a href="https://github.com/projen/projen/commits?author=eltociear" title="Code">💻</a></td>
399
+ <td align="center" valign="top" width="14.28%"><a href="https://github.com/jackleslie"><img src="https://avatars.githubusercontent.com/u/52004409?v=4?s=100" width="100px;" alt="Jack Leslie"/><br /><sub><b>Jack Leslie</b></sub></a><br /><a href="https://github.com/projen/projen/commits?author=jackleslie" title="Code">💻</a></td>
399
400
  </tr>
400
401
  <tr>
401
- <td align="center" valign="top" width="14.28%"><a href="https://github.com/jackleslie"><img src="https://avatars.githubusercontent.com/u/52004409?v=4?s=100" width="100px;" alt="Jack Leslie"/><br /><sub><b>Jack Leslie</b></sub></a><br /><a href="https://github.com/projen/projen/commits?author=jackleslie" title="Code">💻</a></td>
402
402
  <td align="center" valign="top" width="14.28%"><a href="https://github.com/JackMoseley2001"><img src="https://avatars.githubusercontent.com/u/10659397?v=4?s=100" width="100px;" alt="Jack Moseley"/><br /><sub><b>Jack Moseley</b></sub></a><br /><a href="https://github.com/projen/projen/commits?author=JackMoseley2001" title="Code">💻</a></td>
403
403
  <td align="center" valign="top" width="14.28%"><a href="https://github.com/cogwirrel"><img src="https://avatars.githubusercontent.com/u/1848603?v=4?s=100" width="100px;" alt="Jack Stevenson"/><br /><sub><b>Jack Stevenson</b></sub></a><br /><a href="https://github.com/projen/projen/commits?author=cogwirrel" title="Code">💻</a></td>
404
404
  <td align="center" valign="top" width="14.28%"><a href="https://github.com/jmourelos"><img src="https://avatars3.githubusercontent.com/u/3878434?v=4?s=100" width="100px;" alt="Jacob"/><br /><sub><b>Jacob</b></sub></a><br /><a href="https://github.com/projen/projen/commits?author=jmourelos" title="Code">💻</a></td>
405
405
  <td align="center" valign="top" width="14.28%"><a href="http://joapy.com/"><img src="https://avatars3.githubusercontent.com/u/325306?v=4?s=100" width="100px;" alt="Jake Pearson"/><br /><sub><b>Jake Pearson</b></sub></a><br /><a href="https://github.com/projen/projen/commits?author=jakepearson" title="Code">💻</a></td>
406
406
  <td align="center" valign="top" width="14.28%"><a href="http://twitter.com/bracki"><img src="https://avatars.githubusercontent.com/u/49786?v=4?s=100" width="100px;" alt="Jan Brauer"/><br /><sub><b>Jan Brauer</b></sub></a><br /><a href="https://github.com/projen/projen/commits?author=bracki" title="Code">💻</a></td>
407
407
  <td align="center" valign="top" width="14.28%"><a href="https://github.com/jmalins"><img src="https://avatars.githubusercontent.com/u/2001356?v=4?s=100" width="100px;" alt="Jeff Malins"/><br /><sub><b>Jeff Malins</b></sub></a><br /><a href="https://github.com/projen/projen/commits?author=jmalins" title="Code">💻</a></td>
408
+ <td align="center" valign="top" width="14.28%"><a href="https://github.com/JeremyJonas"><img src="https://avatars1.githubusercontent.com/u/464119?v=4?s=100" width="100px;" alt="Jeremy Jonas"/><br /><sub><b>Jeremy Jonas</b></sub></a><br /><a href="https://github.com/projen/projen/commits?author=JeremyJonas" title="Code">💻</a></td>
408
409
  </tr>
409
410
  <tr>
410
- <td align="center" valign="top" width="14.28%"><a href="https://github.com/JeremyJonas"><img src="https://avatars1.githubusercontent.com/u/464119?v=4?s=100" width="100px;" alt="Jeremy Jonas"/><br /><sub><b>Jeremy Jonas</b></sub></a><br /><a href="https://github.com/projen/projen/commits?author=JeremyJonas" title="Code">💻</a></td>
411
411
  <td align="center" valign="top" width="14.28%"><a href="https://github.com/jesse-grabowski"><img src="https://avatars.githubusercontent.com/u/2453853?v=4?s=100" width="100px;" alt="Jesse Grabowski"/><br /><sub><b>Jesse Grabowski</b></sub></a><br /><a href="https://github.com/projen/projen/commits?author=jesse-grabowski" title="Code">💻</a></td>
412
412
  <td align="center" valign="top" width="14.28%"><a href="https://github.com/jolo-dev"><img src="https://avatars.githubusercontent.com/u/54506108?v=4?s=100" width="100px;" alt="JoLo"/><br /><sub><b>JoLo</b></sub></a><br /><a href="https://github.com/projen/projen/commits?author=jolo-dev" title="Code">💻</a></td>
413
413
  <td align="center" valign="top" width="14.28%"><a href="https://github.com/devnoo"><img src="https://avatars.githubusercontent.com/u/94448?v=4?s=100" width="100px;" alt="Job de Noo"/><br /><sub><b>Job de Noo</b></sub></a><br /><a href="https://github.com/projen/projen/commits?author=devnoo" title="Code">💻</a></td>
414
414
  <td align="center" valign="top" width="14.28%"><a href="https://github.com/jogold"><img src="https://avatars2.githubusercontent.com/u/12623249?v=4?s=100" width="100px;" alt="Jonathan Goldwasser"/><br /><sub><b>Jonathan Goldwasser</b></sub></a><br /><a href="https://github.com/projen/projen/commits?author=jogold" title="Code">💻</a></td>
415
415
  <td align="center" valign="top" width="14.28%"><a href="https://github.com/joostvdwsd"><img src="https://avatars.githubusercontent.com/u/25637088?v=4?s=100" width="100px;" alt="Joost van der Waal"/><br /><sub><b>Joost van der Waal</b></sub></a><br /><a href="https://github.com/projen/projen/commits?author=joostvdwsd" title="Code">💻</a></td>
416
416
  <td align="center" valign="top" width="14.28%"><a href="https://github.com/JordanSinko"><img src="https://avatars2.githubusercontent.com/u/10212966?v=4?s=100" width="100px;" alt="Jordan Sinko"/><br /><sub><b>Jordan Sinko</b></sub></a><br /><a href="https://github.com/projen/projen/commits?author=JordanSinko" title="Code">💻</a></td>
417
+ <td align="center" valign="top" width="14.28%"><a href="https://github.com/eganjs"><img src="https://avatars3.githubusercontent.com/u/6639482?v=4?s=100" width="100px;" alt="Joseph Egan"/><br /><sub><b>Joseph Egan</b></sub></a><br /><a href="https://github.com/projen/projen/commits?author=eganjs" title="Code">💻</a></td>
417
418
  </tr>
418
419
  <tr>
419
- <td align="center" valign="top" width="14.28%"><a href="https://github.com/eganjs"><img src="https://avatars3.githubusercontent.com/u/6639482?v=4?s=100" width="100px;" alt="Joseph Egan"/><br /><sub><b>Joseph Egan</b></sub></a><br /><a href="https://github.com/projen/projen/commits?author=eganjs" title="Code">💻</a></td>
420
420
  <td align="center" valign="top" width="14.28%"><a href="https://github.com/misterjoshua"><img src="https://avatars2.githubusercontent.com/u/644092?v=4?s=100" width="100px;" alt="Josh Kellendonk"/><br /><sub><b>Josh Kellendonk</b></sub></a><br /><a href="https://github.com/projen/projen/commits?author=misterjoshua" title="Code">💻</a></td>
421
421
  <td align="center" valign="top" width="14.28%"><a href="https://github.com/juho9000"><img src="https://avatars.githubusercontent.com/u/13867853?v=4?s=100" width="100px;" alt="Juho Majasaari"/><br /><sub><b>Juho Majasaari</b></sub></a><br /><a href="https://github.com/projen/projen/commits?author=juho9000" title="Code">💻</a></td>
422
422
  <td align="center" valign="top" width="14.28%"><a href="https://github.com/Hi-Fi"><img src="https://avatars.githubusercontent.com/u/1499780?v=4?s=100" width="100px;" alt="Juho Saarinen"/><br /><sub><b>Juho Saarinen</b></sub></a><br /><a href="https://github.com/projen/projen/commits?author=Hi-Fi" title="Code">💻</a></td>
423
423
  <td align="center" valign="top" width="14.28%"><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="Julian Michel"/><br /><sub><b>Julian Michel</b></sub></a><br /><a href="https://github.com/projen/projen/commits?author=jumic" title="Code">💻</a></td>
424
424
  <td align="center" valign="top" width="14.28%"><a href="https://github.com/kaizencc"><img src="https://avatars.githubusercontent.com/u/36202692?v=4?s=100" width="100px;" alt="Kaizen Conroy"/><br /><sub><b>Kaizen Conroy</b></sub></a><br /><a href="https://github.com/projen/projen/commits?author=kaizencc" title="Code">💻</a></td>
425
425
  <td align="center" valign="top" width="14.28%"><a href="https://github.com/kcwinner"><img src="https://avatars3.githubusercontent.com/u/2728868?v=4?s=100" width="100px;" alt="Kenneth Winner"/><br /><sub><b>Kenneth Winner</b></sub></a><br /><a href="https://github.com/projen/projen/commits?author=kcwinner" title="Code">💻</a></td>
426
+ <td align="center" valign="top" width="14.28%"><a href="https://kenneth.wussmann.net/"><img src="https://avatars.githubusercontent.com/u/11491506?v=4?s=100" width="100px;" alt="Kenneth Wußmann"/><br /><sub><b>Kenneth Wußmann</b></sub></a><br /><a href="https://github.com/projen/projen/commits?author=KennethWussmann" title="Code">💻</a></td>
426
427
  </tr>
427
428
  <tr>
428
- <td align="center" valign="top" width="14.28%"><a href="https://kenneth.wussmann.net/"><img src="https://avatars.githubusercontent.com/u/11491506?v=4?s=100" width="100px;" alt="Kenneth Wußmann"/><br /><sub><b>Kenneth Wußmann</b></sub></a><br /><a href="https://github.com/projen/projen/commits?author=KennethWussmann" title="Code">💻</a></td>
429
429
  <td align="center" valign="top" width="14.28%"><a href="https://github.com/kennyg"><img src="https://avatars.githubusercontent.com/u/98244?v=4?s=100" width="100px;" alt="Kenny Gatdula"/><br /><sub><b>Kenny Gatdula</b></sub></a><br /><a href="https://github.com/projen/projen/commits?author=kennyg" title="Code">💻</a></td>
430
430
  <td align="center" valign="top" width="14.28%"><a href="https://github.com/tinovyatkin"><img src="https://avatars.githubusercontent.com/u/5350898?v=4?s=100" width="100px;" alt="Konstantin Vyatkin"/><br /><sub><b>Konstantin Vyatkin</b></sub></a><br /><a href="https://github.com/projen/projen/commits?author=tinovyatkin" title="Code">💻</a></td>
431
431
  <td align="center" valign="top" width="14.28%"><a href="https://github.com/bigkraig"><img src="https://avatars1.githubusercontent.com/u/508403?v=4?s=100" width="100px;" alt="Kraig Amador"/><br /><sub><b>Kraig Amador</b></sub></a><br /><a href="https://github.com/projen/projen/commits?author=bigkraig" title="Code">💻</a></td>
432
432
  <td align="center" valign="top" width="14.28%"><a href="https://kdabir.com/"><img src="https://avatars.githubusercontent.com/u/735240?v=4?s=100" width="100px;" alt="Kunal Dabir"/><br /><sub><b>Kunal Dabir</b></sub></a><br /><a href="https://github.com/projen/projen/commits?author=kdabir" title="Code">💻</a></td>
433
433
  <td align="center" valign="top" width="14.28%"><a href="https://kylelaker.com/"><img src="https://avatars.githubusercontent.com/u/850893?v=4?s=100" width="100px;" alt="Kyle Laker"/><br /><sub><b>Kyle Laker</b></sub></a><br /><a href="https://github.com/projen/projen/commits?author=kylelaker" title="Code">💻</a></td>
434
434
  <td align="center" valign="top" width="14.28%"><a href="https://github.com/lexfelixpost"><img src="https://avatars.githubusercontent.com/u/112618115?v=4?s=100" width="100px;" alt="Lex Felix"/><br /><sub><b>Lex Felix</b></sub></a><br /><a href="https://github.com/projen/projen/commits?author=lexfelixpost" title="Code">💻</a></td>
435
+ <td align="center" valign="top" width="14.28%"><a href="https://github.com/lexGPT"><img src="https://avatars.githubusercontent.com/u/112618115?v=4?s=100" width="100px;" alt="Lex Felix"/><br /><sub><b>Lex Felix</b></sub></a><br /><a href="https://github.com/projen/projen/commits?author=lexGPT" title="Code">💻</a></td>
435
436
  </tr>
436
437
  <tr>
437
- <td align="center" valign="top" width="14.28%"><a href="https://github.com/lexGPT"><img src="https://avatars.githubusercontent.com/u/112618115?v=4?s=100" width="100px;" alt="Lex Felix"/><br /><sub><b>Lex Felix</b></sub></a><br /><a href="https://github.com/projen/projen/commits?author=lexGPT" title="Code">💻</a></td>
438
438
  <td align="center" valign="top" width="14.28%"><a href="https://github.com/Liam-Johnston"><img src="https://avatars.githubusercontent.com/u/30859946?v=4?s=100" width="100px;" alt="Liam Johnston"/><br /><sub><b>Liam Johnston</b></sub></a><br /><a href="https://github.com/projen/projen/commits?author=Liam-Johnston" title="Code">💻</a></td>
439
439
  <td align="center" valign="top" width="14.28%"><a href="https://github.com/WtfJoke"><img src="https://avatars.githubusercontent.com/u/7139697?v=4?s=100" width="100px;" alt="Manuel"/><br /><sub><b>Manuel</b></sub></a><br /><a href="https://github.com/projen/projen/commits?author=WtfJoke" title="Code">💻</a></td>
440
440
  <td align="center" valign="top" width="14.28%"><a href="https://github.com/marciocadev"><img src="https://avatars.githubusercontent.com/u/67694075?v=4?s=100" width="100px;" alt="Marcio Cruz de Almeida"/><br /><sub><b>Marcio Cruz de Almeida</b></sub></a><br /><a href="https://github.com/projen/projen/commits?author=marciocadev" title="Code">💻</a></td>
441
441
  <td align="center" valign="top" width="14.28%"><a href="https://github.com/mmcculloh-dms"><img src="https://avatars.githubusercontent.com/u/68597641?v=4?s=100" width="100px;" alt="Mark McCulloh"/><br /><sub><b>Mark McCulloh</b></sub></a><br /><a href="https://github.com/projen/projen/commits?author=mmcculloh-dms" title="Code">💻</a></td>
442
442
  <td align="center" valign="top" width="14.28%"><a href="https://www.linkedin.com/in/mark-mcculloh/"><img src="https://avatars.githubusercontent.com/u/1237390?v=4?s=100" width="100px;" alt="Mark McCulloh"/><br /><sub><b>Mark McCulloh</b></sub></a><br /><a href="https://github.com/projen/projen/commits?author=MarkMcCulloh" title="Code">💻</a></td>
443
443
  <td align="center" valign="top" width="14.28%"><a href="https://polothy.github.io/"><img src="https://avatars.githubusercontent.com/u/634657?v=4?s=100" width="100px;" alt="Mark Nielsen"/><br /><sub><b>Mark Nielsen</b></sub></a><br /><a href="https://github.com/projen/projen/commits?author=polothy" title="Code">💻</a></td>
444
+ <td align="center" valign="top" width="14.28%"><a href="https://github.com/schuch"><img src="https://avatars.githubusercontent.com/u/6401299?v=4?s=100" width="100px;" alt="Markus Schuch"/><br /><sub><b>Markus Schuch</b></sub></a><br /><a href="https://github.com/projen/projen/commits?author=schuch" title="Code">💻</a></td>
444
445
  </tr>
445
446
  <tr>
446
- <td align="center" valign="top" width="14.28%"><a href="https://github.com/schuch"><img src="https://avatars.githubusercontent.com/u/6401299?v=4?s=100" width="100px;" alt="Markus Schuch"/><br /><sub><b>Markus Schuch</b></sub></a><br /><a href="https://github.com/projen/projen/commits?author=schuch" title="Code">💻</a></td>
447
447
  <td align="center" valign="top" width="14.28%"><a href="https://github.com/marnixdessing"><img src="https://avatars.githubusercontent.com/u/14939820?v=4?s=100" width="100px;" alt="Marnix Dessing"/><br /><sub><b>Marnix Dessing</b></sub></a><br /><a href="https://github.com/projen/projen/commits?author=marnixdessing" title="Code">💻</a></td>
448
448
  <td align="center" valign="top" width="14.28%"><a href="https://github.com/mmuller88"><img src="https://avatars0.githubusercontent.com/u/18393842?v=4?s=100" width="100px;" alt="Martin Muller"/><br /><sub><b>Martin Muller</b></sub></a><br /><a href="https://github.com/projen/projen/commits?author=mmuller88" title="Code">💻</a></td>
449
449
  <td align="center" valign="top" width="14.28%"><a href="https://github.com/mzuber"><img src="https://avatars.githubusercontent.com/u/948563?v=4?s=100" width="100px;" alt="Martin Zuber"/><br /><sub><b>Martin Zuber</b></sub></a><br /><a href="https://github.com/projen/projen/commits?author=mzuber" title="Code">💻</a></td>
450
450
  <td align="center" valign="top" width="14.28%"><a href="https://tmokmss.hatenablog.com/"><img src="https://avatars.githubusercontent.com/u/7490655?v=4?s=100" width="100px;" alt="Masashi Tomooka"/><br /><sub><b>Masashi Tomooka</b></sub></a><br /><a href="https://github.com/projen/projen/commits?author=tmokmss" title="Code">💻</a></td>
451
451
  <td align="center" valign="top" width="14.28%"><a href="https://github.com/matt9ucci"><img src="https://avatars.githubusercontent.com/u/8044346?v=4?s=100" width="100px;" alt="Matt Gucci"/><br /><sub><b>Matt Gucci</b></sub></a><br /><a href="https://github.com/projen/projen/commits?author=matt9ucci" title="Code">💻</a></td>
452
452
  <td align="center" valign="top" width="14.28%"><a href="https://dev.to/martzcodes"><img src="https://avatars1.githubusercontent.com/u/978362?v=4?s=100" width="100px;" alt="Matt Martz"/><br /><sub><b>Matt Martz</b></sub></a><br /><a href="https://github.com/projen/projen/commits?author=martzcodes" title="Code">💻</a></td>
453
+ <td align="center" valign="top" width="14.28%"><a href="https://github.com/diranged"><img src="https://avatars.githubusercontent.com/u/768067?v=4?s=100" width="100px;" alt="Matt Wise"/><br /><sub><b>Matt Wise</b></sub></a><br /><a href="https://github.com/projen/projen/commits?author=diranged" title="Code">💻</a></td>
453
454
  </tr>
454
455
  <tr>
455
- <td align="center" valign="top" width="14.28%"><a href="https://github.com/diranged"><img src="https://avatars.githubusercontent.com/u/768067?v=4?s=100" width="100px;" alt="Matt Wise"/><br /><sub><b>Matt Wise</b></sub></a><br /><a href="https://github.com/projen/projen/commits?author=diranged" title="Code">💻</a></td>
456
456
  <td align="center" valign="top" width="14.28%"><a href="https://github.com/msessa"><img src="https://avatars.githubusercontent.com/u/1912143?v=4?s=100" width="100px;" alt="Matteo Sessa"/><br /><sub><b>Matteo Sessa</b></sub></a><br /><a href="https://github.com/projen/projen/commits?author=msessa" title="Code">💻</a></td>
457
457
  <td align="center" valign="top" width="14.28%"><a href="http://www.matthewbonig.com/"><img src="https://avatars2.githubusercontent.com/u/1559437?v=4?s=100" width="100px;" alt="Matthew Bonig"/><br /><sub><b>Matthew Bonig</b></sub></a><br /><a href="https://github.com/projen/projen/commits?author=mbonig" title="Code">💻</a></td>
458
458
  <td align="center" valign="top" width="14.28%"><a href="https://github.com/mwg-rea"><img src="https://avatars.githubusercontent.com/u/82480228?v=4?s=100" width="100px;" alt="Matthew Gamble"/><br /><sub><b>Matthew Gamble</b></sub></a><br /><a href="https://github.com/projen/projen/commits?author=mwg-rea" title="Code">💻</a></td>
459
459
  <td align="center" valign="top" width="14.28%"><a href="https://github.com/fongie"><img src="https://avatars1.githubusercontent.com/u/19932622?v=4?s=100" width="100px;" alt="Max Körlinge"/><br /><sub><b>Max Körlinge</b></sub></a><br /><a href="https://github.com/projen/projen/commits?author=fongie" title="Code">💻</a></td>
460
460
  <td align="center" valign="top" width="14.28%"><a href="https://github.com/mayurm88"><img src="https://avatars.githubusercontent.com/u/75965317?v=4?s=100" width="100px;" alt="Mayur Mahrotri"/><br /><sub><b>Mayur Mahrotri</b></sub></a><br /><a href="https://github.com/projen/projen/commits?author=mayurm88" title="Code">💻</a></td>
461
461
  <td align="center" valign="top" width="14.28%"><a href="https://github.com/Mayureshd-18"><img src="https://avatars.githubusercontent.com/u/98738585?v=4?s=100" width="100px;" alt="Mayuresh Dharwadkar"/><br /><sub><b>Mayuresh Dharwadkar</b></sub></a><br /><a href="https://github.com/projen/projen/commits?author=Mayureshd-18" title="Code">💻</a></td>
462
+ <td align="center" valign="top" width="14.28%"><a href="https://github.com/mikejgray"><img src="https://avatars.githubusercontent.com/u/30268971?v=4?s=100" width="100px;" alt="Mike"/><br /><sub><b>Mike</b></sub></a><br /><a href="https://github.com/projen/projen/commits?author=mikejgray" title="Code">💻</a></td>
462
463
  </tr>
463
464
  <tr>
464
- <td align="center" valign="top" width="14.28%"><a href="https://github.com/mikejgray"><img src="https://avatars.githubusercontent.com/u/30268971?v=4?s=100" width="100px;" alt="Mike"/><br /><sub><b>Mike</b></sub></a><br /><a href="https://github.com/projen/projen/commits?author=mikejgray" title="Code">💻</a></td>
465
465
  <td align="center" valign="top" width="14.28%"><a href="https://github.com/MrArnoldPalmer"><img src="https://avatars.githubusercontent.com/u/7221111?v=4?s=100" width="100px;" alt="Mitchell Valine"/><br /><sub><b>Mitchell Valine</b></sub></a><br /><a href="https://github.com/projen/projen/commits?author=MrArnoldPalmer" title="Code">💻</a></td>
466
466
  <td align="center" valign="top" width="14.28%"><a href="https://moritzkornher.de/"><img src="https://avatars.githubusercontent.com/u/379814?v=4?s=100" width="100px;" alt="Momo Kornher"/><br /><sub><b>Momo Kornher</b></sub></a><br /><a href="https://github.com/projen/projen/commits?author=mrgrain" title="Code">💻</a></td>
467
467
  <td align="center" valign="top" width="14.28%"><a href="https://github.com/gmukul01"><img src="https://avatars.githubusercontent.com/u/3636885?v=4?s=100" width="100px;" alt="Mukul Bansal"/><br /><sub><b>Mukul Bansal</b></sub></a><br /><a href="https://github.com/projen/projen/commits?author=gmukul01" title="Code">💻</a></td>
468
468
  <td align="center" valign="top" width="14.28%"><a href="https://blog.neilkuan.net/"><img src="https://avatars.githubusercontent.com/u/46012524?v=4?s=100" width="100px;" alt="Neil Kuan"/><br /><sub><b>Neil Kuan</b></sub></a><br /><a href="https://github.com/projen/projen/commits?author=neilkuan" title="Code">💻</a></td>
469
469
  <td align="center" valign="top" width="14.28%"><a href="https://github.com/nicholas-keers"><img src="https://avatars.githubusercontent.com/u/94363953?v=4?s=100" width="100px;" alt="Nick Keers"/><br /><sub><b>Nick Keers</b></sub></a><br /><a href="https://github.com/projen/projen/commits?author=nicholas-keers" title="Code">💻</a></td>
470
470
  <td align="center" valign="top" width="14.28%"><a href="https://github.com/njlynch"><img src="https://avatars.githubusercontent.com/u/1376292?v=4?s=100" width="100px;" alt="Nick Lynch"/><br /><sub><b>Nick Lynch</b></sub></a><br /><a href="https://github.com/projen/projen/commits?author=njlynch" title="Code">💻</a></td>
471
+ <td align="center" valign="top" width="14.28%"><a href="https://github.com/nbyl"><img src="https://avatars.githubusercontent.com/u/1185719?v=4?s=100" width="100px;" alt="Nicolas Byl"/><br /><sub><b>Nicolas Byl</b></sub></a><br /><a href="https://github.com/projen/projen/commits?author=nbyl" title="Code">💻</a></td>
471
472
  </tr>
472
473
  <tr>
473
- <td align="center" valign="top" width="14.28%"><a href="https://github.com/nbyl"><img src="https://avatars.githubusercontent.com/u/1185719?v=4?s=100" width="100px;" alt="Nicolas Byl"/><br /><sub><b>Nicolas Byl</b></sub></a><br /><a href="https://github.com/projen/projen/commits?author=nbyl" title="Code">💻</a></td>
474
474
  <td align="center" valign="top" width="14.28%"><a href="https://github.com/nikhil-zadoo"><img src="https://avatars.githubusercontent.com/u/29751551?v=4?s=100" width="100px;" alt="Nikhil Zadoo"/><br /><sub><b>Nikhil Zadoo</b></sub></a><br /><a href="https://github.com/projen/projen/commits?author=nikhil-zadoo" title="Code">💻</a></td>
475
475
  <td align="center" valign="top" width="14.28%"><a href="https://nikovirtala.io/"><img src="https://avatars.githubusercontent.com/u/6813506?v=4?s=100" width="100px;" alt="Niko Virtala"/><br /><sub><b>Niko Virtala</b></sub></a><br /><a href="https://github.com/projen/projen/commits?author=nikovirtala" title="Code">💻</a></td>
476
476
  <td align="center" valign="top" width="14.28%"><a href="https://github.com/niraj8"><img src="https://avatars.githubusercontent.com/u/8666468?v=4?s=100" width="100px;" alt="Niraj Palecha"/><br /><sub><b>Niraj Palecha</b></sub></a><br /><a href="https://github.com/projen/projen/commits?author=niraj8" title="Code">💻</a></td>
477
477
  <td align="center" valign="top" width="14.28%"><a href="https://github.com/dandelionur"><img src="https://avatars.githubusercontent.com/u/89805919?v=4?s=100" width="100px;" alt="Nurbanu"/><br /><sub><b>Nurbanu</b></sub></a><br /><a href="https://github.com/projen/projen/commits?author=dandelionur" title="Code">💻</a></td>
478
478
  <td align="center" valign="top" width="14.28%"><a href="https://github.com/pahud"><img src="https://avatars3.githubusercontent.com/u/278432?v=4?s=100" width="100px;" alt="Pahud Hsieh"/><br /><sub><b>Pahud Hsieh</b></sub></a><br /><a href="https://github.com/projen/projen/commits?author=pahud" title="Code">💻</a></td>
479
479
  <td align="center" valign="top" width="14.28%"><a href="https://github.com/patrickdean"><img src="https://avatars.githubusercontent.com/u/1610088?v=4?s=100" width="100px;" alt="Patrick"/><br /><sub><b>Patrick</b></sub></a><br /><a href="https://github.com/projen/projen/commits?author=patrickdean" title="Code">💻</a></td>
480
+ <td align="center" valign="top" width="14.28%"><a href="https://github.com/duckpuppy"><img src="https://avatars.githubusercontent.com/u/19253?v=4?s=100" width="100px;" alt="Patrick Aikens"/><br /><sub><b>Patrick Aikens</b></sub></a><br /><a href="https://github.com/projen/projen/commits?author=duckpuppy" title="Code">💻</a></td>
480
481
  </tr>
481
482
  <tr>
482
- <td align="center" valign="top" width="14.28%"><a href="https://github.com/duckpuppy"><img src="https://avatars.githubusercontent.com/u/19253?v=4?s=100" width="100px;" alt="Patrick Aikens"/><br /><sub><b>Patrick Aikens</b></sub></a><br /><a href="https://github.com/projen/projen/commits?author=duckpuppy" title="Code">💻</a></td>
483
483
  <td align="center" valign="top" width="14.28%"><a href="https://pepperize.com/"><img src="https://avatars.githubusercontent.com/u/13916107?v=4?s=100" width="100px;" alt="Patrick Florek"/><br /><sub><b>Patrick Florek</b></sub></a><br /><a href="https://github.com/projen/projen/commits?author=pflorek" title="Code">💻</a></td>
484
+ <td align="center" valign="top" width="14.28%"><a href="https://github.com/oconpa"><img src="https://avatars.githubusercontent.com/u/35761519?v=4?s=100" width="100px;" alt="Patrick O'Connor"/><br /><sub><b>Patrick O'Connor</b></sub></a><br /><a href="https://github.com/projen/projen/commits?author=oconpa" title="Code">💻</a></td>
484
485
  <td align="center" valign="top" width="14.28%"><a href="http://p6m7g8.github.io/"><img src="https://avatars0.githubusercontent.com/u/34295?v=4?s=100" width="100px;" alt="Philip M. Gollucci"/><br /><sub><b>Philip M. Gollucci</b></sub></a><br /><a href="https://github.com/projen/projen/commits?author=pgollucci" title="Code">💻</a></td>
485
486
  <td align="center" valign="top" width="14.28%"><a href="https://github.com/philipmw"><img src="https://avatars.githubusercontent.com/u/1379645?v=4?s=100" width="100px;" alt="Philip White"/><br /><sub><b>Philip White</b></sub></a><br /><a href="https://github.com/projen/projen/commits?author=philipmw" title="Code">💻</a></td>
486
487
  <td align="center" valign="top" width="14.28%"><a href="https://garbe.io/"><img src="https://avatars.githubusercontent.com/u/721899?v=4?s=100" width="100px;" alt="Philipp Garbe"/><br /><sub><b>Philipp Garbe</b></sub></a><br /><a href="https://github.com/projen/projen/commits?author=pgarbe" title="Code">💻</a></td>
@@ -524,33 +525,34 @@ Thanks goes to these wonderful people ([emoji key](https://allcontributors.org/d
524
525
  <td align="center" valign="top" width="14.28%"><a href="https://github.com/VinayKokate22"><img src="https://avatars.githubusercontent.com/u/114766745?v=4?s=100" width="100px;" alt="VinayKokate22"/><br /><sub><b>VinayKokate22</b></sub></a><br /><a href="https://github.com/projen/projen/commits?author=VinayKokate22" title="Code">💻</a></td>
525
526
  </tr>
526
527
  <tr>
528
+ <td align="center" valign="top" width="14.28%"><a href="https://github.com/vinayak-kukreja"><img src="https://avatars.githubusercontent.com/u/78971045?v=4?s=100" width="100px;" alt="Vinayak Kukreja"/><br /><sub><b>Vinayak Kukreja</b></sub></a><br /><a href="https://github.com/projen/projen/commits?author=vinayak-kukreja" title="Code">💻</a></td>
527
529
  <td align="center" valign="top" width="14.28%"><a href="https://github.com/vladcos"><img src="https://avatars.githubusercontent.com/u/135833592?v=4?s=100" width="100px;" alt="Vlad Cos"/><br /><sub><b>Vlad Cos</b></sub></a><br /><a href="https://github.com/projen/projen/commits?author=vladcos" title="Code">💻</a></td>
528
530
  <td align="center" valign="top" width="14.28%"><a href="https://willdady.com/"><img src="https://avatars.githubusercontent.com/u/204259?v=4?s=100" width="100px;" alt="Will Dady"/><br /><sub><b>Will Dady</b></sub></a><br /><a href="https://github.com/projen/projen/commits?author=willdady" title="Code">💻</a></td>
529
531
  <td align="center" valign="top" width="14.28%"><a href="https://github.com/yglcode"><img src="https://avatars.githubusercontent.com/u/11893614?v=4?s=100" width="100px;" alt="Yigong Liu"/><br /><sub><b>Yigong Liu</b></sub></a><br /><a href="https://github.com/projen/projen/commits?author=yglcode" title="Code">💻</a></td>
530
532
  <td align="center" valign="top" width="14.28%"><a href="https://github.com/rajyan"><img src="https://avatars.githubusercontent.com/u/38206553?v=4?s=100" width="100px;" alt="Yohta Kimura"/><br /><sub><b>Yohta Kimura</b></sub></a><br /><a href="https://github.com/projen/projen/commits?author=rajyan" title="Code">💻</a></td>
531
533
  <td align="center" valign="top" width="14.28%"><a href="https://github.com/ykageyama-mondo"><img src="https://avatars.githubusercontent.com/u/91044220?v=4?s=100" width="100px;" alt="Yuichi Kageyama"/><br /><sub><b>Yuichi Kageyama</b></sub></a><br /><a href="https://github.com/projen/projen/commits?author=ykageyama-mondo" title="Code">💻</a></td>
532
534
  <td align="center" valign="top" width="14.28%"><a href="https://yuval.io/"><img src="https://avatars.githubusercontent.com/u/5735586?v=4?s=100" width="100px;" alt="Yuval"/><br /><sub><b>Yuval</b></sub></a><br /><a href="https://github.com/projen/projen/commits?author=yuvalherziger" title="Code">💻</a></td>
533
- <td align="center" valign="top" width="14.28%"><a href="https://github.com/andrestone"><img src="https://avatars1.githubusercontent.com/u/7958086?v=4?s=100" width="100px;" alt="andrestone"/><br /><sub><b>andrestone</b></sub></a><br /><a href="https://github.com/projen/projen/commits?author=andrestone" title="Code">💻</a></td>
534
535
  </tr>
535
536
  <tr>
537
+ <td align="center" valign="top" width="14.28%"><a href="https://github.com/andrestone"><img src="https://avatars1.githubusercontent.com/u/7958086?v=4?s=100" width="100px;" alt="andrestone"/><br /><sub><b>andrestone</b></sub></a><br /><a href="https://github.com/projen/projen/commits?author=andrestone" title="Code">💻</a></td>
536
538
  <td align="center" valign="top" width="14.28%"><a href="https://github.com/codeLeeek"><img src="https://avatars.githubusercontent.com/u/49740620?v=4?s=100" width="100px;" alt="codeLeeek"/><br /><sub><b>codeLeeek</b></sub></a><br /><a href="https://github.com/projen/projen/commits?author=codeLeeek" title="Code">💻</a></td>
537
539
  <td align="center" valign="top" width="14.28%"><a href="https://github.com/flyingImer"><img src="https://avatars0.githubusercontent.com/u/1973868?v=4?s=100" width="100px;" alt="flyingImer"/><br /><sub><b>flyingImer</b></sub></a><br /><a href="https://github.com/projen/projen/commits?author=flyingImer" title="Code">💻</a></td>
538
540
  <td align="center" valign="top" width="14.28%"><a href="https://github.com/huaxk"><img src="https://avatars.githubusercontent.com/u/9971591?v=4?s=100" width="100px;" alt="huaxk"/><br /><sub><b>huaxk</b></sub></a><br /><a href="https://github.com/projen/projen/commits?author=huaxk" title="Code">💻</a></td>
539
541
  <td align="center" valign="top" width="14.28%"><a href="https://github.com/john-tipper"><img src="https://avatars2.githubusercontent.com/u/9730398?v=4?s=100" width="100px;" alt="john-tipper"/><br /><sub><b>john-tipper</b></sub></a><br /><a href="https://github.com/projen/projen/commits?author=john-tipper" title="Code">💻</a></td>
540
542
  <td align="center" valign="top" width="14.28%"><a href="https://github.com/karlderkaefer"><img src="https://avatars.githubusercontent.com/u/9578480?v=4?s=100" width="100px;" alt="karlderkaefer"/><br /><sub><b>karlderkaefer</b></sub></a><br /><a href="https://github.com/projen/projen/commits?author=karlderkaefer" title="Code">💻</a></td>
541
543
  <td align="center" valign="top" width="14.28%"><a href="https://github.com/kmkhr"><img src="https://avatars.githubusercontent.com/u/25603933?v=4?s=100" width="100px;" alt="kmkhr"/><br /><sub><b>kmkhr</b></sub></a><br /><a href="https://github.com/projen/projen/commits?author=kmkhr" title="Code">💻</a></td>
542
- <td align="center" valign="top" width="14.28%"><a href="https://github.com/kt-hr"><img src="https://avatars.githubusercontent.com/u/25603933?v=4?s=100" width="100px;" alt="kt-hr"/><br /><sub><b>kt-hr</b></sub></a><br /><a href="https://github.com/projen/projen/commits?author=kt-hr" title="Code">💻</a></td>
543
544
  </tr>
544
545
  <tr>
546
+ <td align="center" valign="top" width="14.28%"><a href="https://github.com/kt-hr"><img src="https://avatars.githubusercontent.com/u/25603933?v=4?s=100" width="100px;" alt="kt-hr"/><br /><sub><b>kt-hr</b></sub></a><br /><a href="https://github.com/projen/projen/commits?author=kt-hr" title="Code">💻</a></td>
545
547
  <td align="center" valign="top" width="14.28%"><a href="https://github.com/lmarsden"><img src="https://avatars.githubusercontent.com/u/51232932?v=4?s=100" width="100px;" alt="lmarsden"/><br /><sub><b>lmarsden</b></sub></a><br /><a href="https://github.com/projen/projen/commits?author=lmarsden" title="Code">💻</a></td>
546
548
  <td align="center" valign="top" width="14.28%"><a href="https://github.com/mtimbs"><img src="https://avatars.githubusercontent.com/u/12463905?v=4?s=100" width="100px;" alt="michaeltimbs"/><br /><sub><b>michaeltimbs</b></sub></a><br /><a href="https://github.com/projen/projen/commits?author=mtimbs" title="Code">💻</a></td>
547
549
  <td align="center" valign="top" width="14.28%"><a href="https://github.com/orlandronen1"><img src="https://avatars.githubusercontent.com/u/25987273?v=4?s=100" width="100px;" alt="orlandronen1"/><br /><sub><b>orlandronen1</b></sub></a><br /><a href="https://github.com/projen/projen/commits?author=orlandronen1" title="Code">💻</a></td>
548
550
  <td align="center" valign="top" width="14.28%"><a href="https://github.com/pvbouwel"><img src="https://avatars.githubusercontent.com/u/463976?v=4?s=100" width="100px;" alt="pvbouwel"/><br /><sub><b>pvbouwel</b></sub></a><br /><a href="https://github.com/projen/projen/commits?author=pvbouwel" title="Code">💻</a></td>
549
551
  <td align="center" valign="top" width="14.28%"><a href="https://github.com/suhussai"><img src="https://avatars.githubusercontent.com/u/6500837?v=4?s=100" width="100px;" alt="suhussai"/><br /><sub><b>suhussai</b></sub></a><br /><a href="https://github.com/projen/projen/commits?author=suhussai" title="Code">💻</a></td>
550
552
  <td align="center" valign="top" width="14.28%"><a href="https://github.com/t0bst4r"><img src="https://avatars.githubusercontent.com/u/82281152?v=4?s=100" width="100px;" alt="t0bst4r"/><br /><sub><b>t0bst4r</b></sub></a><br /><a href="https://github.com/projen/projen/commits?author=t0bst4r" title="Code">💻</a></td>
551
- <td align="center" valign="top" width="14.28%"><a href="https://github.com/tHyt-lab"><img src="https://avatars.githubusercontent.com/u/11361677?v=4?s=100" width="100px;" alt="tHyt-lab"/><br /><sub><b>tHyt-lab</b></sub></a><br /><a href="https://github.com/projen/projen/commits?author=tHyt-lab" title="Code">💻</a></td>
552
553
  </tr>
553
554
  <tr>
555
+ <td align="center" valign="top" width="14.28%"><a href="https://github.com/tHyt-lab"><img src="https://avatars.githubusercontent.com/u/11361677?v=4?s=100" width="100px;" alt="tHyt-lab"/><br /><sub><b>tHyt-lab</b></sub></a><br /><a href="https://github.com/projen/projen/commits?author=tHyt-lab" title="Code">💻</a></td>
554
556
  <td align="center" valign="top" width="14.28%"><a href="https://github.com/Warkanlock"><img src="https://avatars.githubusercontent.com/u/13340320?v=4?s=100" width="100px;" alt="txxnano"/><br /><sub><b>txxnano</b></sub></a><br /><a href="https://github.com/projen/projen/commits?author=Warkanlock" title="Code">💻</a></td>
555
557
  <td align="center" valign="top" width="14.28%"><a href="https://github.com/vVahe"><img src="https://avatars.githubusercontent.com/u/17318901?v=4?s=100" width="100px;" alt="vVahe"/><br /><sub><b>vVahe</b></sub></a><br /><a href="https://github.com/projen/projen/commits?author=vVahe" title="Code">💻</a></td>
556
558
  <td align="center" valign="top" width="14.28%"><a href="https://github.com/zetashift"><img src="https://avatars.githubusercontent.com/u/1857826?v=4?s=100" width="100px;" alt="zetashift"/><br /><sub><b>zetashift</b></sub></a><br /><a href="https://github.com/projen/projen/commits?author=zetashift" title="Code">💻</a></td>
@@ -562,6 +564,9 @@ Thanks goes to these wonderful people ([emoji key](https://allcontributors.org/d
562
564
 
563
565
  Distributed under the [Apache-2.0](./LICENSE) license.
564
566
  '''
567
+ from pkgutil import extend_path
568
+ __path__ = extend_path(__path__, __name__)
569
+
565
570
  import abc
566
571
  import builtins
567
572
  import datetime
@@ -572,13 +577,185 @@ import jsii
572
577
  import publication
573
578
  import typing_extensions
574
579
 
575
- from typeguard import check_type
580
+ import typeguard
581
+ from importlib.metadata import version as _metadata_package_version
582
+ TYPEGUARD_MAJOR_VERSION = int(_metadata_package_version('typeguard').split('.')[0])
583
+
584
+ def check_type(argname: str, value: object, expected_type: typing.Any) -> typing.Any:
585
+ if TYPEGUARD_MAJOR_VERSION <= 2:
586
+ return typeguard.check_type(argname=argname, value=value, expected_type=expected_type) # type:ignore
587
+ else:
588
+ if isinstance(value, jsii._reference_map.InterfaceDynamicProxy): # pyright: ignore [reportAttributeAccessIssue]
589
+ pass
590
+ else:
591
+ if TYPEGUARD_MAJOR_VERSION == 3:
592
+ typeguard.config.collection_check_strategy = typeguard.CollectionCheckStrategy.ALL_ITEMS # type:ignore
593
+ typeguard.check_type(value=value, expected_type=expected_type) # type:ignore
594
+ else:
595
+ typeguard.check_type(value=value, expected_type=expected_type, collection_check_strategy=typeguard.CollectionCheckStrategy.ALL_ITEMS) # type:ignore
576
596
 
577
597
  from ._jsii import *
578
598
 
579
599
  import constructs as _constructs_77d1e7e8
580
600
 
581
601
 
602
+ @jsii.enum(jsii_type="projen.AiAgent")
603
+ class AiAgent(enum.Enum):
604
+ '''(experimental) Supported AI coding assistants and their instruction file locations.
605
+
606
+ :stability: experimental
607
+ '''
608
+
609
+ GITHUB_COPILOT = "GITHUB_COPILOT"
610
+ '''(experimental) GitHub Copilot - .github/copilot-instructions.md.
611
+
612
+ :stability: experimental
613
+ '''
614
+ CURSOR = "CURSOR"
615
+ '''(experimental) Cursor IDE - .cursor/rules/project.md.
616
+
617
+ :stability: experimental
618
+ '''
619
+ CLAUDE = "CLAUDE"
620
+ '''(experimental) Claude Code - CLAUDE.md.
621
+
622
+ :stability: experimental
623
+ '''
624
+ AMAZON_Q = "AMAZON_Q"
625
+ '''(experimental) Amazon Q - .amazonq/rules/project.md.
626
+
627
+ :stability: experimental
628
+ '''
629
+ KIRO = "KIRO"
630
+ '''(experimental) Kiro - .kiro/steering/project.md.
631
+
632
+ :stability: experimental
633
+ '''
634
+ CODEX = "CODEX"
635
+ '''(experimental) OpenAI Codex - AGENTS.md.
636
+
637
+ :stability: experimental
638
+ '''
639
+
640
+
641
+ @jsii.data_type(
642
+ jsii_type="projen.AiInstructionsOptions",
643
+ jsii_struct_bases=[],
644
+ name_mapping={
645
+ "agents": "agents",
646
+ "agent_specific_instructions": "agentSpecificInstructions",
647
+ "include_default_instructions": "includeDefaultInstructions",
648
+ "instructions": "instructions",
649
+ },
650
+ )
651
+ class AiInstructionsOptions:
652
+ def __init__(
653
+ self,
654
+ *,
655
+ agents: typing.Optional[typing.Sequence[AiAgent]] = None,
656
+ agent_specific_instructions: typing.Optional[typing.Mapping[builtins.str, typing.Sequence[builtins.str]]] = None,
657
+ include_default_instructions: typing.Optional[builtins.bool] = None,
658
+ instructions: typing.Optional[typing.Sequence[builtins.str]] = None,
659
+ ) -> None:
660
+ '''(experimental) Options for configuring AI tool instruction files.
661
+
662
+ :param agents: (experimental) Which AI agents to generate instruction files for. Default: - All agents: [AiAgent.GITHUB_COPILOT, AiAgent.CURSOR, AiAgent.CLAUDE, AiAgent.AMAZON_Q, AiAgent.KIRO, AiAgent.CODEX]
663
+ :param agent_specific_instructions: (experimental) Per-agent custom instructions. Allows different instructions for different AI tools. Default: - no agent specific instructions
664
+ :param include_default_instructions: (experimental) Include default instructions for projen and general best practices. Default instructions will only be included for agents provided in the ``agents`` option. If ``agents`` is not provided, default instructions will be included for all agents. Default: true
665
+ :param instructions: (experimental) General instructions applicable to all agents. Default: - no agent specific instructions
666
+
667
+ :stability: experimental
668
+ '''
669
+ if __debug__:
670
+ type_hints = typing.get_type_hints(_typecheckingstub__5bf7714efdf83cf2031e4ef3aa1d0cb9511cb921777751c76a0f501c0c56e247)
671
+ check_type(argname="argument agents", value=agents, expected_type=type_hints["agents"])
672
+ check_type(argname="argument agent_specific_instructions", value=agent_specific_instructions, expected_type=type_hints["agent_specific_instructions"])
673
+ check_type(argname="argument include_default_instructions", value=include_default_instructions, expected_type=type_hints["include_default_instructions"])
674
+ check_type(argname="argument instructions", value=instructions, expected_type=type_hints["instructions"])
675
+ self._values: typing.Dict[builtins.str, typing.Any] = {}
676
+ if agents is not None:
677
+ self._values["agents"] = agents
678
+ if agent_specific_instructions is not None:
679
+ self._values["agent_specific_instructions"] = agent_specific_instructions
680
+ if include_default_instructions is not None:
681
+ self._values["include_default_instructions"] = include_default_instructions
682
+ if instructions is not None:
683
+ self._values["instructions"] = instructions
684
+
685
+ @builtins.property
686
+ def agents(self) -> typing.Optional[typing.List[AiAgent]]:
687
+ '''(experimental) Which AI agents to generate instruction files for.
688
+
689
+ :default: - All agents: [AiAgent.GITHUB_COPILOT, AiAgent.CURSOR, AiAgent.CLAUDE, AiAgent.AMAZON_Q, AiAgent.KIRO, AiAgent.CODEX]
690
+
691
+ :stability: experimental
692
+ '''
693
+ result = self._values.get("agents")
694
+ return typing.cast(typing.Optional[typing.List[AiAgent]], result)
695
+
696
+ @builtins.property
697
+ def agent_specific_instructions(
698
+ self,
699
+ ) -> typing.Optional[typing.Mapping[builtins.str, typing.List[builtins.str]]]:
700
+ '''(experimental) Per-agent custom instructions.
701
+
702
+ Allows different instructions for different AI tools.
703
+
704
+ :default: - no agent specific instructions
705
+
706
+ :stability: experimental
707
+
708
+ Example::
709
+
710
+ {
711
+ [AiAgent.GITHUB_COPILOT]: {
712
+ instructions: ["Use descriptive commit messages."]
713
+ },
714
+ [AiAgent.CURSOR]: {
715
+ instructions: ["Prefer functional patterns.", "Always add tests."]
716
+ }
717
+ }
718
+ '''
719
+ result = self._values.get("agent_specific_instructions")
720
+ return typing.cast(typing.Optional[typing.Mapping[builtins.str, typing.List[builtins.str]]], result)
721
+
722
+ @builtins.property
723
+ def include_default_instructions(self) -> typing.Optional[builtins.bool]:
724
+ '''(experimental) Include default instructions for projen and general best practices.
725
+
726
+ Default instructions will only be included for agents provided in the ``agents`` option.
727
+ If ``agents`` is not provided, default instructions will be included for all agents.
728
+
729
+ :default: true
730
+
731
+ :stability: experimental
732
+ '''
733
+ result = self._values.get("include_default_instructions")
734
+ return typing.cast(typing.Optional[builtins.bool], result)
735
+
736
+ @builtins.property
737
+ def instructions(self) -> typing.Optional[typing.List[builtins.str]]:
738
+ '''(experimental) General instructions applicable to all agents.
739
+
740
+ :default: - no agent specific instructions
741
+
742
+ :stability: experimental
743
+ '''
744
+ result = self._values.get("instructions")
745
+ return typing.cast(typing.Optional[typing.List[builtins.str]], result)
746
+
747
+ def __eq__(self, rhs: typing.Any) -> builtins.bool:
748
+ return isinstance(rhs, self.__class__) and rhs._values == self._values
749
+
750
+ def __ne__(self, rhs: typing.Any) -> builtins.bool:
751
+ return not (rhs == self)
752
+
753
+ def __repr__(self) -> str:
754
+ return "AiInstructionsOptions(%s)" % ", ".join(
755
+ k + "=" + repr(v) for k, v in self._values.items()
756
+ )
757
+
758
+
582
759
  class Component(
583
760
  _constructs_77d1e7e8.Construct,
584
761
  metaclass=jsii.JSIIMeta,
@@ -882,6 +1059,33 @@ class Dependencies(Component, metaclass=jsii.JSIIMeta, jsii_type="projen.Depende
882
1059
  check_type(argname="argument type", value=type, expected_type=type_hints["type"])
883
1060
  return typing.cast("Dependency", jsii.invoke(self, "getDependency", [name, type]))
884
1061
 
1062
+ @jsii.member(jsii_name="isDependencySatisfied")
1063
+ def is_dependency_satisfied(
1064
+ self,
1065
+ name: builtins.str,
1066
+ type: "DependencyType",
1067
+ expected_range: builtins.str,
1068
+ ) -> builtins.bool:
1069
+ '''(experimental) Checks if an existing dependency satisfies a dependency requirement.
1070
+
1071
+ :param name: The name of the dependency to check (without the version).
1072
+ :param type: The dependency type.
1073
+ :param expected_range: The version constraint to check (e.g. ``^3.4.0``). The constraint of the dependency must be a subset of the expected range to satisfy the requirements.
1074
+
1075
+ :return:
1076
+
1077
+ ``true`` if the dependency exists and its version satisfies the provided constraint. ``false`` otherwise.
1078
+ Notably returns ``false`` if a dependency exists, but has no version.
1079
+
1080
+ :stability: experimental
1081
+ '''
1082
+ if __debug__:
1083
+ type_hints = typing.get_type_hints(_typecheckingstub__628e50591481575ad249671e7cf61edd1bb37d5aeab5e143a0783051e3167dcc)
1084
+ check_type(argname="argument name", value=name, expected_type=type_hints["name"])
1085
+ check_type(argname="argument type", value=type, expected_type=type_hints["type"])
1086
+ check_type(argname="argument expected_range", value=expected_range, expected_type=type_hints["expected_range"])
1087
+ return typing.cast(builtins.bool, jsii.invoke(self, "isDependencySatisfied", [name, type, expected_range]))
1088
+
885
1089
  @jsii.member(jsii_name="removeDependency")
886
1090
  def remove_dependency(
887
1091
  self,
@@ -1287,7 +1491,7 @@ class DockerCompose(
1287
1491
  '''
1288
1492
  :param project: -
1289
1493
  :param name_suffix: (experimental) A name to add to the docker-compose.yml filename. Default: - no name is added
1290
- :param schema_version: (experimental) Docker Compose schema version do be used. Default: 3.3
1494
+ :param schema_version: (deprecated) Docker Compose schema version do be used. Default: - no version is provided
1291
1495
  :param services: (experimental) Service descriptions.
1292
1496
 
1293
1497
  :stability: experimental
@@ -1467,6 +1671,7 @@ class DockerCompose(
1467
1671
  networks: typing.Optional[typing.Sequence["IDockerComposeNetworkBinding"]] = None,
1468
1672
  platform: typing.Optional[builtins.str] = None,
1469
1673
  ports: typing.Optional[typing.Sequence[typing.Union["DockerComposeServicePort", typing.Dict[builtins.str, typing.Any]]]] = None,
1674
+ privileged: typing.Optional[builtins.bool] = None,
1470
1675
  volumes: typing.Optional[typing.Sequence["IDockerComposeVolumeBinding"]] = None,
1471
1676
  ) -> "DockerComposeService":
1472
1677
  '''(experimental) Add a service to the docker-compose file.
@@ -1482,6 +1687,7 @@ class DockerCompose(
1482
1687
  :param networks: (experimental) Add some networks to the service.
1483
1688
  :param platform: (experimental) Add platform. Default: - no platform is provided
1484
1689
  :param ports: (experimental) Map some ports. Default: - no ports are mapped
1690
+ :param privileged: (experimental) Run in privileged mode. Default: - no privileged mode flag is provided
1485
1691
  :param volumes: (experimental) Mount some volumes into the service. Use one of the following to create volumes:
1486
1692
 
1487
1693
  :stability: experimental
@@ -1500,6 +1706,7 @@ class DockerCompose(
1500
1706
  networks=networks,
1501
1707
  platform=platform,
1502
1708
  ports=ports,
1709
+ privileged=privileged,
1503
1710
  volumes=volumes,
1504
1711
  )
1505
1712
 
@@ -1974,7 +2181,7 @@ class DockerComposeProps:
1974
2181
  '''(experimental) Props for DockerCompose.
1975
2182
 
1976
2183
  :param name_suffix: (experimental) A name to add to the docker-compose.yml filename. Default: - no name is added
1977
- :param schema_version: (experimental) Docker Compose schema version do be used. Default: 3.3
2184
+ :param schema_version: (deprecated) Docker Compose schema version do be used. Default: - no version is provided
1978
2185
  :param services: (experimental) Service descriptions.
1979
2186
 
1980
2187
  :stability: experimental
@@ -2009,11 +2216,16 @@ class DockerComposeProps:
2009
2216
 
2010
2217
  @builtins.property
2011
2218
  def schema_version(self) -> typing.Optional[builtins.str]:
2012
- '''(experimental) Docker Compose schema version do be used.
2219
+ '''(deprecated) Docker Compose schema version do be used.
2013
2220
 
2014
- :default: 3.3
2221
+ :default: - no version is provided
2015
2222
 
2016
- :stability: experimental
2223
+ :deprecated:
2224
+
2225
+ - The top level ``version`` field is obsolete per the Compose Specification.
2226
+ {@link https://github.com/compose-spec/compose-spec/blob/master/spec.md#version-and-name-top-level-elements Compose Specification}
2227
+
2228
+ :stability: deprecated
2017
2229
  '''
2018
2230
  result = self._values.get("schema_version")
2019
2231
  return typing.cast(typing.Optional[builtins.str], result)
@@ -2074,6 +2286,7 @@ class DockerComposeProtocol(enum.Enum):
2074
2286
  "networks": "networks",
2075
2287
  "platform": "platform",
2076
2288
  "ports": "ports",
2289
+ "privileged": "privileged",
2077
2290
  "volumes": "volumes",
2078
2291
  },
2079
2292
  )
@@ -2091,6 +2304,7 @@ class DockerComposeServiceDescription:
2091
2304
  networks: typing.Optional[typing.Sequence["IDockerComposeNetworkBinding"]] = None,
2092
2305
  platform: typing.Optional[builtins.str] = None,
2093
2306
  ports: typing.Optional[typing.Sequence[typing.Union["DockerComposeServicePort", typing.Dict[builtins.str, typing.Any]]]] = None,
2307
+ privileged: typing.Optional[builtins.bool] = None,
2094
2308
  volumes: typing.Optional[typing.Sequence["IDockerComposeVolumeBinding"]] = None,
2095
2309
  ) -> None:
2096
2310
  '''(experimental) Description of a docker-compose.yml service.
@@ -2105,6 +2319,7 @@ class DockerComposeServiceDescription:
2105
2319
  :param networks: (experimental) Add some networks to the service.
2106
2320
  :param platform: (experimental) Add platform. Default: - no platform is provided
2107
2321
  :param ports: (experimental) Map some ports. Default: - no ports are mapped
2322
+ :param privileged: (experimental) Run in privileged mode. Default: - no privileged mode flag is provided
2108
2323
  :param volumes: (experimental) Mount some volumes into the service. Use one of the following to create volumes:
2109
2324
 
2110
2325
  :stability: experimental
@@ -2123,6 +2338,7 @@ class DockerComposeServiceDescription:
2123
2338
  check_type(argname="argument networks", value=networks, expected_type=type_hints["networks"])
2124
2339
  check_type(argname="argument platform", value=platform, expected_type=type_hints["platform"])
2125
2340
  check_type(argname="argument ports", value=ports, expected_type=type_hints["ports"])
2341
+ check_type(argname="argument privileged", value=privileged, expected_type=type_hints["privileged"])
2126
2342
  check_type(argname="argument volumes", value=volumes, expected_type=type_hints["volumes"])
2127
2343
  self._values: typing.Dict[builtins.str, typing.Any] = {}
2128
2344
  if command is not None:
@@ -2145,6 +2361,8 @@ class DockerComposeServiceDescription:
2145
2361
  self._values["platform"] = platform
2146
2362
  if ports is not None:
2147
2363
  self._values["ports"] = ports
2364
+ if privileged is not None:
2365
+ self._values["privileged"] = privileged
2148
2366
  if volumes is not None:
2149
2367
  self._values["volumes"] = volumes
2150
2368
 
@@ -2259,6 +2477,17 @@ class DockerComposeServiceDescription:
2259
2477
  result = self._values.get("ports")
2260
2478
  return typing.cast(typing.Optional[typing.List["DockerComposeServicePort"]], result)
2261
2479
 
2480
+ @builtins.property
2481
+ def privileged(self) -> typing.Optional[builtins.bool]:
2482
+ '''(experimental) Run in privileged mode.
2483
+
2484
+ :default: - no privileged mode flag is provided
2485
+
2486
+ :stability: experimental
2487
+ '''
2488
+ result = self._values.get("privileged")
2489
+ return typing.cast(typing.Optional[builtins.bool], result)
2490
+
2262
2491
  @builtins.property
2263
2492
  def volumes(self) -> typing.Optional[typing.List["IDockerComposeVolumeBinding"]]:
2264
2493
  '''(experimental) Mount some volumes into the service.
@@ -2550,6 +2779,35 @@ class DockerComposeVolumeMount:
2550
2779
  )
2551
2780
 
2552
2781
 
2782
+ @jsii.enum(jsii_type="projen.EndOfLine")
2783
+ class EndOfLine(enum.Enum):
2784
+ '''(experimental) The end of line characters supported by git.
2785
+
2786
+ :stability: experimental
2787
+ '''
2788
+
2789
+ AUTO = "AUTO"
2790
+ '''(experimental) Maintain existing (mixed values within one file are normalised by looking at what's used after the first line).
2791
+
2792
+ :stability: experimental
2793
+ '''
2794
+ CRLF = "CRLF"
2795
+ '''(experimental) Carriage Return + Line Feed characters (\\r\\n), common on Windows.
2796
+
2797
+ :stability: experimental
2798
+ '''
2799
+ LF = "LF"
2800
+ '''(experimental) Line Feed only (\\n), common on Linux and macOS as well as inside git repos.
2801
+
2802
+ :stability: experimental
2803
+ '''
2804
+ NONE = "NONE"
2805
+ '''(experimental) Disable and do not configure the end of line character.
2806
+
2807
+ :stability: experimental
2808
+ '''
2809
+
2810
+
2553
2811
  class FileBase(
2554
2812
  Component,
2555
2813
  metaclass=jsii.JSIIAbstractClass,
@@ -2675,7 +2933,7 @@ class FileBase(
2675
2933
  if __debug__:
2676
2934
  type_hints = typing.get_type_hints(_typecheckingstub__3fed3e4c76496e254ef32ce4556e7e1b3b0cef6929de044486dda20248a06c4d)
2677
2935
  check_type(argname="argument value", value=value, expected_type=type_hints["value"])
2678
- jsii.set(self, "executable", value)
2936
+ jsii.set(self, "executable", value) # pyright: ignore[reportArgumentType]
2679
2937
 
2680
2938
  @builtins.property
2681
2939
  @jsii.member(jsii_name="readonly")
@@ -2691,7 +2949,7 @@ class FileBase(
2691
2949
  if __debug__:
2692
2950
  type_hints = typing.get_type_hints(_typecheckingstub__c20fcd33148f053d9de2f2152439cc9f0687a0e328bf05cb8b38721095832ea5)
2693
2951
  check_type(argname="argument value", value=value, expected_type=type_hints["value"])
2694
- jsii.set(self, "readonly", value)
2952
+ jsii.set(self, "readonly", value) # pyright: ignore[reportArgumentType]
2695
2953
 
2696
2954
 
2697
2955
  class _FileBaseProxy(FileBase):
@@ -2848,16 +3106,24 @@ class GitAttributesFile(
2848
3106
  :stability: experimental
2849
3107
  '''
2850
3108
 
2851
- def __init__(self, scope: _constructs_77d1e7e8.IConstruct) -> None:
3109
+ def __init__(
3110
+ self,
3111
+ scope: _constructs_77d1e7e8.IConstruct,
3112
+ *,
3113
+ end_of_line: typing.Optional[EndOfLine] = None,
3114
+ ) -> None:
2852
3115
  '''
2853
3116
  :param scope: -
3117
+ :param end_of_line: (experimental) The default end of line character for text files. endOfLine it's useful to keep the same end of line between Windows and Unix operative systems for git checking/checkout operations. Hence, it can avoid simple repository mutations consisting only of changes in the end of line characters. It will be set in the first line of the .gitattributes file to make it the first match with high priority but it can be overriden in a later line. Can be disabled by setting explicitly: ``{ endOfLine: EndOfLine.NONE }``. Default: EndOfLine.LF
2854
3118
 
2855
3119
  :stability: experimental
2856
3120
  '''
2857
3121
  if __debug__:
2858
3122
  type_hints = typing.get_type_hints(_typecheckingstub__a914753a9db7cc6bfa6a166cf7ee02794375210a09b1d8e2c62496abf14b4d21)
2859
3123
  check_type(argname="argument scope", value=scope, expected_type=type_hints["scope"])
2860
- jsii.create(self.__class__, self, [scope])
3124
+ options = GitAttributesFileOptions(end_of_line=end_of_line)
3125
+
3126
+ jsii.create(self.__class__, self, [scope, options])
2861
3127
 
2862
3128
  @jsii.member(jsii_name="addAttributes")
2863
3129
  def add_attributes(self, glob: builtins.str, *attributes: builtins.str) -> None:
@@ -2895,6 +3161,23 @@ class GitAttributesFile(
2895
3161
  '''
2896
3162
  return typing.cast(None, jsii.invoke(self, "preSynthesize", []))
2897
3163
 
3164
+ @jsii.member(jsii_name="removeAttributes")
3165
+ def remove_attributes(self, glob: builtins.str, *attributes: builtins.str) -> None:
3166
+ '''(experimental) Removes attributes from a set of files.
3167
+
3168
+ If no attributes are provided, the glob pattern will be removed completely.
3169
+
3170
+ :param glob: Glob pattern to modify.
3171
+ :param attributes: Attributes to remove from matched files.
3172
+
3173
+ :stability: experimental
3174
+ '''
3175
+ if __debug__:
3176
+ type_hints = typing.get_type_hints(_typecheckingstub__573b65747d3cd070f990730baa2e2b06016818d32122c7fbc2696b8513582a7d)
3177
+ check_type(argname="argument glob", value=glob, expected_type=type_hints["glob"])
3178
+ check_type(argname="argument attributes", value=attributes, expected_type=typing.Tuple[type_hints["attributes"], ...]) # pyright: ignore [reportGeneralTypeIssues]
3179
+ return typing.cast(None, jsii.invoke(self, "removeAttributes", [glob, *attributes]))
3180
+
2898
3181
  @jsii.member(jsii_name="synthesizeContent")
2899
3182
  def _synthesize_content(self, _: "IResolver") -> typing.Optional[builtins.str]:
2900
3183
  '''(experimental) Implemented by derived classes and returns the contents of the file to emit.
@@ -2908,6 +3191,15 @@ class GitAttributesFile(
2908
3191
  check_type(argname="argument _", value=_, expected_type=type_hints["_"])
2909
3192
  return typing.cast(typing.Optional[builtins.str], jsii.invoke(self, "synthesizeContent", [_]))
2910
3193
 
3194
+ @builtins.property
3195
+ @jsii.member(jsii_name="endOfLine")
3196
+ def end_of_line(self) -> EndOfLine:
3197
+ '''(experimental) The default end of line character for text files.
3198
+
3199
+ :stability: experimental
3200
+ '''
3201
+ return typing.cast(EndOfLine, jsii.get(self, "endOfLine"))
3202
+
2911
3203
  @builtins.property
2912
3204
  @jsii.member(jsii_name="hasLfsPatterns")
2913
3205
  def has_lfs_patterns(self) -> builtins.bool:
@@ -2918,30 +3210,96 @@ class GitAttributesFile(
2918
3210
  return typing.cast(builtins.bool, jsii.get(self, "hasLfsPatterns"))
2919
3211
 
2920
3212
 
3213
+ @jsii.data_type(
3214
+ jsii_type="projen.GitAttributesFileOptions",
3215
+ jsii_struct_bases=[],
3216
+ name_mapping={"end_of_line": "endOfLine"},
3217
+ )
3218
+ class GitAttributesFileOptions:
3219
+ def __init__(self, *, end_of_line: typing.Optional[EndOfLine] = None) -> None:
3220
+ '''(experimental) Options for ``GitAttributesFile``.
3221
+
3222
+ :param end_of_line: (experimental) The default end of line character for text files. endOfLine it's useful to keep the same end of line between Windows and Unix operative systems for git checking/checkout operations. Hence, it can avoid simple repository mutations consisting only of changes in the end of line characters. It will be set in the first line of the .gitattributes file to make it the first match with high priority but it can be overriden in a later line. Can be disabled by setting explicitly: ``{ endOfLine: EndOfLine.NONE }``. Default: EndOfLine.LF
3223
+
3224
+ :stability: experimental
3225
+ '''
3226
+ if __debug__:
3227
+ type_hints = typing.get_type_hints(_typecheckingstub__82a54cc3274f754056a1301deb3e7902a7a31057da6ade20b64dae8487831db5)
3228
+ check_type(argname="argument end_of_line", value=end_of_line, expected_type=type_hints["end_of_line"])
3229
+ self._values: typing.Dict[builtins.str, typing.Any] = {}
3230
+ if end_of_line is not None:
3231
+ self._values["end_of_line"] = end_of_line
3232
+
3233
+ @builtins.property
3234
+ def end_of_line(self) -> typing.Optional[EndOfLine]:
3235
+ '''(experimental) The default end of line character for text files.
3236
+
3237
+ endOfLine it's useful to keep the same end of line between Windows and Unix operative systems for git checking/checkout operations. Hence, it can avoid simple repository mutations consisting only of changes in the end of line characters. It will be set in the first line of the .gitattributes file to make it the first match with high priority but it can be overriden in a later line. Can be disabled by setting explicitly: ``{ endOfLine: EndOfLine.NONE }``.
3238
+
3239
+ :default: EndOfLine.LF
3240
+
3241
+ :stability: experimental
3242
+ '''
3243
+ result = self._values.get("end_of_line")
3244
+ return typing.cast(typing.Optional[EndOfLine], result)
3245
+
3246
+ def __eq__(self, rhs: typing.Any) -> builtins.bool:
3247
+ return isinstance(rhs, self.__class__) and rhs._values == self._values
3248
+
3249
+ def __ne__(self, rhs: typing.Any) -> builtins.bool:
3250
+ return not (rhs == self)
3251
+
3252
+ def __repr__(self) -> str:
3253
+ return "GitAttributesFileOptions(%s)" % ", ".join(
3254
+ k + "=" + repr(v) for k, v in self._values.items()
3255
+ )
3256
+
3257
+
2921
3258
  @jsii.data_type(
2922
3259
  jsii_type="projen.GitOptions",
2923
3260
  jsii_struct_bases=[],
2924
- name_mapping={"lfs_patterns": "lfsPatterns"},
3261
+ name_mapping={"end_of_line": "endOfLine", "lfs_patterns": "lfsPatterns"},
2925
3262
  )
2926
3263
  class GitOptions:
2927
3264
  def __init__(
2928
3265
  self,
2929
3266
  *,
3267
+ end_of_line: typing.Optional[EndOfLine] = None,
2930
3268
  lfs_patterns: typing.Optional[typing.Sequence[builtins.str]] = None,
2931
3269
  ) -> None:
2932
3270
  '''(experimental) Git configuration options.
2933
3271
 
3272
+ :param end_of_line: (experimental) The default end of line character for text files. endOfLine it's useful to keep the same end of line between Windows and Unix operative systems for git checking/checkout operations. Hence, it can avoid simple repository mutations consisting only of changes in the end of line characters. It will be set in the first line of the .gitattributes file to make it the first match with high priority but it can be overriden in a later line. Can be disabled by setting: ``endOfLine: EndOfLine.NONE``. Default: EndOfLine.LF
2934
3273
  :param lfs_patterns: (experimental) File patterns to mark as stored in Git LFS. Default: - No files stored in LFS
2935
3274
 
2936
3275
  :stability: experimental
2937
3276
  '''
2938
3277
  if __debug__:
2939
3278
  type_hints = typing.get_type_hints(_typecheckingstub__ee7f1b3b819a95ebdb112752cdc122d5362da95c419decd69ec24018f344bace)
3279
+ check_type(argname="argument end_of_line", value=end_of_line, expected_type=type_hints["end_of_line"])
2940
3280
  check_type(argname="argument lfs_patterns", value=lfs_patterns, expected_type=type_hints["lfs_patterns"])
2941
3281
  self._values: typing.Dict[builtins.str, typing.Any] = {}
3282
+ if end_of_line is not None:
3283
+ self._values["end_of_line"] = end_of_line
2942
3284
  if lfs_patterns is not None:
2943
3285
  self._values["lfs_patterns"] = lfs_patterns
2944
3286
 
3287
+ @builtins.property
3288
+ def end_of_line(self) -> typing.Optional[EndOfLine]:
3289
+ '''(experimental) The default end of line character for text files.
3290
+
3291
+ endOfLine it's useful to keep the same end of line between Windows and Unix operative systems for git checking/checkout operations.
3292
+ Hence, it can avoid simple repository mutations consisting only of changes in the end of line characters.
3293
+ It will be set in the first line of the .gitattributes file to make it the first match with high priority but it can be overriden in a later line.
3294
+ Can be disabled by setting: ``endOfLine: EndOfLine.NONE``.
3295
+
3296
+ :default: EndOfLine.LF
3297
+
3298
+ :stability: experimental
3299
+ '''
3300
+ result = self._values.get("end_of_line")
3301
+ return typing.cast(typing.Optional[EndOfLine], result)
3302
+
2945
3303
  @builtins.property
2946
3304
  def lfs_patterns(self) -> typing.Optional[typing.List[builtins.str]]:
2947
3305
  '''(experimental) File patterns to mark as stored in Git LFS.
@@ -3667,6 +4025,52 @@ class GroupRunnerOptions:
3667
4025
  )
3668
4026
 
3669
4027
 
4028
+ @jsii.interface(jsii_type="projen.ICompareString")
4029
+ class ICompareString(typing_extensions.Protocol):
4030
+ '''
4031
+ :stability: experimental
4032
+ '''
4033
+
4034
+ @jsii.member(jsii_name="compare")
4035
+ def compare(self, a: builtins.str, b: builtins.str) -> jsii.Number:
4036
+ '''
4037
+ :param a: The first string.
4038
+ :param b: The second string.
4039
+
4040
+ :return: It is expected to return a negative value if the first argument is less than the second argument, zero if they're equal, and a positive value otherwise.
4041
+
4042
+ :stability: experimental
4043
+ '''
4044
+ ...
4045
+
4046
+
4047
+ class _ICompareStringProxy:
4048
+ '''
4049
+ :stability: experimental
4050
+ '''
4051
+
4052
+ __jsii_type__: typing.ClassVar[str] = "projen.ICompareString"
4053
+
4054
+ @jsii.member(jsii_name="compare")
4055
+ def compare(self, a: builtins.str, b: builtins.str) -> jsii.Number:
4056
+ '''
4057
+ :param a: The first string.
4058
+ :param b: The second string.
4059
+
4060
+ :return: It is expected to return a negative value if the first argument is less than the second argument, zero if they're equal, and a positive value otherwise.
4061
+
4062
+ :stability: experimental
4063
+ '''
4064
+ if __debug__:
4065
+ type_hints = typing.get_type_hints(_typecheckingstub__63d4f6e150362668f5e26d2f58f8b0a32cff82cf2eb8cb736d2c4333d0b01d09)
4066
+ check_type(argname="argument a", value=a, expected_type=type_hints["a"])
4067
+ check_type(argname="argument b", value=b, expected_type=type_hints["b"])
4068
+ return typing.cast(jsii.Number, jsii.invoke(self, "compare", [a, b]))
4069
+
4070
+ # Adding a "__jsii_proxy_class__(): typing.Type" function to the interface
4071
+ typing.cast(typing.Any, ICompareString).__jsii_proxy_class__ = lambda : _ICompareStringProxy
4072
+
4073
+
3670
4074
  @jsii.interface(jsii_type="projen.IDevEnvironment")
3671
4075
  class IDevEnvironment(typing_extensions.Protocol):
3672
4076
  '''(experimental) Abstract interface for container-based development environments, such as Gitpod and GitHub Codespaces.
@@ -4201,12 +4605,14 @@ class IgnoreFile(FileBase, metaclass=jsii.JSIIMeta, jsii_type="projen.IgnoreFile
4201
4605
  *,
4202
4606
  filter_comment_lines: typing.Optional[builtins.bool] = None,
4203
4607
  filter_empty_lines: typing.Optional[builtins.bool] = None,
4608
+ ignore_patterns: typing.Optional[typing.Sequence[builtins.str]] = None,
4204
4609
  ) -> None:
4205
4610
  '''
4206
4611
  :param project: The project to tie this file to.
4207
4612
  :param file_path: - the relative path in the project to put the file.
4208
4613
  :param filter_comment_lines: (experimental) Filter out comment lines? Default: true
4209
4614
  :param filter_empty_lines: (experimental) Filter out blank/empty lines? Default: true
4615
+ :param ignore_patterns: (experimental) Patterns to add to the ignore file. Default: []
4210
4616
 
4211
4617
  :stability: experimental
4212
4618
  '''
@@ -4217,6 +4623,7 @@ class IgnoreFile(FileBase, metaclass=jsii.JSIIMeta, jsii_type="projen.IgnoreFile
4217
4623
  options = IgnoreFileOptions(
4218
4624
  filter_comment_lines=filter_comment_lines,
4219
4625
  filter_empty_lines=filter_empty_lines,
4626
+ ignore_patterns=ignore_patterns,
4220
4627
  )
4221
4628
 
4222
4629
  jsii.create(self.__class__, self, [project, file_path, options])
@@ -4318,6 +4725,7 @@ class IgnoreFile(FileBase, metaclass=jsii.JSIIMeta, jsii_type="projen.IgnoreFile
4318
4725
  name_mapping={
4319
4726
  "filter_comment_lines": "filterCommentLines",
4320
4727
  "filter_empty_lines": "filterEmptyLines",
4728
+ "ignore_patterns": "ignorePatterns",
4321
4729
  },
4322
4730
  )
4323
4731
  class IgnoreFileOptions:
@@ -4326,10 +4734,12 @@ class IgnoreFileOptions:
4326
4734
  *,
4327
4735
  filter_comment_lines: typing.Optional[builtins.bool] = None,
4328
4736
  filter_empty_lines: typing.Optional[builtins.bool] = None,
4737
+ ignore_patterns: typing.Optional[typing.Sequence[builtins.str]] = None,
4329
4738
  ) -> None:
4330
4739
  '''
4331
4740
  :param filter_comment_lines: (experimental) Filter out comment lines? Default: true
4332
4741
  :param filter_empty_lines: (experimental) Filter out blank/empty lines? Default: true
4742
+ :param ignore_patterns: (experimental) Patterns to add to the ignore file. Default: []
4333
4743
 
4334
4744
  :stability: experimental
4335
4745
  '''
@@ -4337,11 +4747,14 @@ class IgnoreFileOptions:
4337
4747
  type_hints = typing.get_type_hints(_typecheckingstub__7852fd5d8f0daa6070394e45fe4fcb7845e6838dc40a3e3475c057712f4209b9)
4338
4748
  check_type(argname="argument filter_comment_lines", value=filter_comment_lines, expected_type=type_hints["filter_comment_lines"])
4339
4749
  check_type(argname="argument filter_empty_lines", value=filter_empty_lines, expected_type=type_hints["filter_empty_lines"])
4750
+ check_type(argname="argument ignore_patterns", value=ignore_patterns, expected_type=type_hints["ignore_patterns"])
4340
4751
  self._values: typing.Dict[builtins.str, typing.Any] = {}
4341
4752
  if filter_comment_lines is not None:
4342
4753
  self._values["filter_comment_lines"] = filter_comment_lines
4343
4754
  if filter_empty_lines is not None:
4344
4755
  self._values["filter_empty_lines"] = filter_empty_lines
4756
+ if ignore_patterns is not None:
4757
+ self._values["ignore_patterns"] = ignore_patterns
4345
4758
 
4346
4759
  @builtins.property
4347
4760
  def filter_comment_lines(self) -> typing.Optional[builtins.bool]:
@@ -4365,6 +4778,17 @@ class IgnoreFileOptions:
4365
4778
  result = self._values.get("filter_empty_lines")
4366
4779
  return typing.cast(typing.Optional[builtins.bool], result)
4367
4780
 
4781
+ @builtins.property
4782
+ def ignore_patterns(self) -> typing.Optional[typing.List[builtins.str]]:
4783
+ '''(experimental) Patterns to add to the ignore file.
4784
+
4785
+ :default: []
4786
+
4787
+ :stability: experimental
4788
+ '''
4789
+ result = self._values.get("ignore_patterns")
4790
+ return typing.cast(typing.Optional[typing.List[builtins.str]], result)
4791
+
4368
4792
  def __eq__(self, rhs: typing.Any) -> builtins.bool:
4369
4793
  return isinstance(rhs, self.__class__) and rhs._values == self._values
4370
4794
 
@@ -5446,7 +5870,7 @@ class ObjectFile(
5446
5870
 
5447
5871
  "compilerOptions": {
5448
5872
  "exclude": ["node_modules"],
5449
- "lib": ["es2019"]
5873
+ "lib": ["es2020"]
5450
5874
  ...
5451
5875
  }
5452
5876
  ...
@@ -5460,7 +5884,7 @@ class ObjectFile(
5460
5884
 
5461
5885
  "compilerOptions": {
5462
5886
  "exclude": ["node_modules", "coverage"],
5463
- "lib": ["es2019", "dom", "dom.iterable", "esnext"]
5887
+ "lib": ["es2020", "dom", "dom.iterable", "esnext"]
5464
5888
  ...
5465
5889
  }
5466
5890
  ...
@@ -5484,7 +5908,7 @@ class ObjectFile(
5484
5908
 
5485
5909
  "compilerOptions": {
5486
5910
  "exclude": ["node_modules"],
5487
- "lib": ["es2019"]
5911
+ "lib": ["es2020"]
5488
5912
  ...
5489
5913
  }
5490
5914
  ...
@@ -6648,7 +7072,7 @@ class ProjectTree(Component, metaclass=jsii.JSIIMeta, jsii_type="projen.ProjectT
6648
7072
  if __debug__:
6649
7073
  type_hints = typing.get_type_hints(_typecheckingstub__dd1d331084783b1e11404a33c550a54f472b9e2d656ca02bdc7287828f96e2fb)
6650
7074
  check_type(argname="argument value", value=value, expected_type=type_hints["value"])
6651
- jsii.set(self, "file", value)
7075
+ jsii.set(self, "file", value) # pyright: ignore[reportArgumentType]
6652
7076
 
6653
7077
 
6654
7078
  @jsii.enum(jsii_type="projen.ProjectType")
@@ -6936,6 +7360,10 @@ class ProjenrcOptions(ProjenrcJsonOptions):
6936
7360
  class ReleasableCommits(metaclass=jsii.JSIIMeta, jsii_type="projen.ReleasableCommits"):
6937
7361
  '''(experimental) Find commits that should be considered releasable to decide if a release is required.
6938
7362
 
7363
+ This setting only controls whether a release is triggered, yes or no. The
7364
+ paths used here are independent of the code that controls what commits are inspected
7365
+ to determine the version number.
7366
+
6939
7367
  :stability: experimental
6940
7368
  '''
6941
7369
 
@@ -7035,7 +7463,7 @@ class ReleasableCommits(metaclass=jsii.JSIIMeta, jsii_type="projen.ReleasableCom
7035
7463
  if __debug__:
7036
7464
  type_hints = typing.get_type_hints(_typecheckingstub__e1c46f6c8bc57788436baf6da521f9e5812106db6aa16bda9534549c8cbb078d)
7037
7465
  check_type(argname="argument value", value=value, expected_type=type_hints["value"])
7038
- jsii.set(self, "cmd", value)
7466
+ jsii.set(self, "cmd", value) # pyright: ignore[reportArgumentType]
7039
7467
 
7040
7468
 
7041
7469
  class Renovatebot(Component, metaclass=jsii.JSIIMeta, jsii_type="projen.Renovatebot"):
@@ -7573,7 +8001,7 @@ class SampleFile(Component, metaclass=jsii.JSIIMeta, jsii_type="projen.SampleFil
7573
8001
  :param project: - the project to tie this file to.
7574
8002
  :param file_path: - the relative path in the project to put the file.
7575
8003
  :param contents: (experimental) The contents of the file to write.
7576
- :param source_path: (experimental) Absolute path to a file to copy the contents from (does not need to be a text file). If your project is Typescript-based and has configured ``testdir`` to be a subdirectory of ``src``, sample files should outside of the ``src`` directory, otherwise they may not be copied. For example:: new SampleFile(this, 'assets/icon.png', { source: path.join(__dirname, '..', 'sample-assets', 'icon.png') });
8004
+ :param source_path: (experimental) Absolute path to a file to copy the contents from (does not need to be a text file). If your project is Typescript-based and has configured ``testdir`` to be a subdirectory of ``src``, sample files should outside of the ``src`` directory, otherwise they may not be copied. For example:: new SampleFile(this, 'assets/icon.png', { sourcePath: path.join(__dirname, '..', 'sample-assets', 'icon.png') });
7577
8005
 
7578
8006
  :stability: experimental
7579
8007
  '''
@@ -7609,7 +8037,7 @@ class SampleFileOptions:
7609
8037
  '''(experimental) Options for the SampleFile object.
7610
8038
 
7611
8039
  :param contents: (experimental) The contents of the file to write.
7612
- :param source_path: (experimental) Absolute path to a file to copy the contents from (does not need to be a text file). If your project is Typescript-based and has configured ``testdir`` to be a subdirectory of ``src``, sample files should outside of the ``src`` directory, otherwise they may not be copied. For example:: new SampleFile(this, 'assets/icon.png', { source: path.join(__dirname, '..', 'sample-assets', 'icon.png') });
8040
+ :param source_path: (experimental) Absolute path to a file to copy the contents from (does not need to be a text file). If your project is Typescript-based and has configured ``testdir`` to be a subdirectory of ``src``, sample files should outside of the ``src`` directory, otherwise they may not be copied. For example:: new SampleFile(this, 'assets/icon.png', { sourcePath: path.join(__dirname, '..', 'sample-assets', 'icon.png') });
7613
8041
 
7614
8042
  :stability: experimental
7615
8043
  '''
@@ -7640,7 +8068,7 @@ class SampleFileOptions:
7640
8068
  subdirectory of ``src``, sample files should outside of the ``src`` directory,
7641
8069
  otherwise they may not be copied. For example::
7642
8070
 
7643
- new SampleFile(this, 'assets/icon.png', { source: path.join(__dirname, '..', 'sample-assets', 'icon.png') });
8071
+ new SampleFile(this, 'assets/icon.png', { sourcePath: path.join(__dirname, '..', 'sample-assets', 'icon.png') });
7644
8072
 
7645
8073
  :stability: experimental
7646
8074
  '''
@@ -8183,7 +8611,7 @@ class Task(metaclass=jsii.JSIIMeta, jsii_type="projen.Task"):
8183
8611
  :param cwd: (experimental) The working directory for this step. Default: - determined by the task
8184
8612
  :param env: (experimental) Defines environment variables for the execution of this step (``exec`` and ``builtin`` only). Values in this map can be simple, literal values or shell expressions that will be evaluated at runtime e.g. ``$(echo "foo")``. Default: - no environment variables defined in step
8185
8613
  :param name: (experimental) Step name. Default: - no name
8186
- :param receive_args: (experimental) Should this step receive args passed to the task. If ``true``, args are passed through at the end of the ``exec`` shell command. The position of the args can be changed by including the marker ``$@`` inside the command string. If the step spawns a subtask, args are passed to the subtask. The subtask must define steps receiving args for this to have any effect. Default: false
8614
+ :param receive_args: (experimental) Should this step receive args passed to the task. If ``true``, args are passed through at the end of the ``exec`` shell command. The position of the args can be changed by including the marker ``$@`` inside the command string. If the marker is explicitly double-quoted ("$@") arguments will be wrapped in single quotes, approximating the whitespace preserving behavior of bash variable expansion. If the step spawns a subtask, args are passed to the subtask. The subtask must define steps receiving args for this to have any effect. Default: false
8187
8615
 
8188
8616
  :stability: experimental
8189
8617
  '''
@@ -8201,6 +8629,21 @@ class Task(metaclass=jsii.JSIIMeta, jsii_type="projen.Task"):
8201
8629
 
8202
8630
  return typing.cast(None, jsii.invoke(self, "exec", [command, options]))
8203
8631
 
8632
+ @jsii.member(jsii_name="insertStep")
8633
+ def insert_step(self, index: jsii.Number, *steps: "TaskStep") -> None:
8634
+ '''(experimental) Insert one or more steps at a given index.
8635
+
8636
+ :param index: Steps will be inserted before this index. May be negative to count backwards from the end, or may be ``== steps().length`` to insert at the end.
8637
+ :param steps: The steps to insert.
8638
+
8639
+ :stability: experimental
8640
+ '''
8641
+ if __debug__:
8642
+ type_hints = typing.get_type_hints(_typecheckingstub__f45a21d1f9e615dd1b225d6cafbe381a43b42811d1d21efd5a3f6630613e94af)
8643
+ check_type(argname="argument index", value=index, expected_type=type_hints["index"])
8644
+ check_type(argname="argument steps", value=steps, expected_type=typing.Tuple[type_hints["steps"], ...]) # pyright: ignore [reportGeneralTypeIssues]
8645
+ return typing.cast(None, jsii.invoke(self, "insertStep", [index, *steps]))
8646
+
8204
8647
  @jsii.member(jsii_name="lock")
8205
8648
  def lock(self) -> None:
8206
8649
  '''(experimental) Forbid additional changes to this task.
@@ -8229,7 +8672,7 @@ class Task(metaclass=jsii.JSIIMeta, jsii_type="projen.Task"):
8229
8672
  :param cwd: (experimental) The working directory for this step. Default: - determined by the task
8230
8673
  :param env: (experimental) Defines environment variables for the execution of this step (``exec`` and ``builtin`` only). Values in this map can be simple, literal values or shell expressions that will be evaluated at runtime e.g. ``$(echo "foo")``. Default: - no environment variables defined in step
8231
8674
  :param name: (experimental) Step name. Default: - no name
8232
- :param receive_args: (experimental) Should this step receive args passed to the task. If ``true``, args are passed through at the end of the ``exec`` shell command. The position of the args can be changed by including the marker ``$@`` inside the command string. If the step spawns a subtask, args are passed to the subtask. The subtask must define steps receiving args for this to have any effect. Default: false
8675
+ :param receive_args: (experimental) Should this step receive args passed to the task. If ``true``, args are passed through at the end of the ``exec`` shell command. The position of the args can be changed by including the marker ``$@`` inside the command string. If the marker is explicitly double-quoted ("$@") arguments will be wrapped in single quotes, approximating the whitespace preserving behavior of bash variable expansion. If the step spawns a subtask, args are passed to the subtask. The subtask must define steps receiving args for this to have any effect. Default: false
8233
8676
 
8234
8677
  :deprecated: use ``prependExec()``
8235
8678
 
@@ -8269,7 +8712,7 @@ class Task(metaclass=jsii.JSIIMeta, jsii_type="projen.Task"):
8269
8712
  :param cwd: (experimental) The working directory for this step. Default: - determined by the task
8270
8713
  :param env: (experimental) Defines environment variables for the execution of this step (``exec`` and ``builtin`` only). Values in this map can be simple, literal values or shell expressions that will be evaluated at runtime e.g. ``$(echo "foo")``. Default: - no environment variables defined in step
8271
8714
  :param name: (experimental) Step name. Default: - no name
8272
- :param receive_args: (experimental) Should this step receive args passed to the task. If ``true``, args are passed through at the end of the ``exec`` shell command. The position of the args can be changed by including the marker ``$@`` inside the command string. If the step spawns a subtask, args are passed to the subtask. The subtask must define steps receiving args for this to have any effect. Default: false
8715
+ :param receive_args: (experimental) Should this step receive args passed to the task. If ``true``, args are passed through at the end of the ``exec`` shell command. The position of the args can be changed by including the marker ``$@`` inside the command string. If the marker is explicitly double-quoted ("$@") arguments will be wrapped in single quotes, approximating the whitespace preserving behavior of bash variable expansion. If the step spawns a subtask, args are passed to the subtask. The subtask must define steps receiving args for this to have any effect. Default: false
8273
8716
 
8274
8717
  :stability: experimental
8275
8718
  '''
@@ -8307,7 +8750,7 @@ class Task(metaclass=jsii.JSIIMeta, jsii_type="projen.Task"):
8307
8750
  :param cwd: (experimental) The working directory for this step. Default: - determined by the task
8308
8751
  :param env: (experimental) Defines environment variables for the execution of this step (``exec`` and ``builtin`` only). Values in this map can be simple, literal values or shell expressions that will be evaluated at runtime e.g. ``$(echo "foo")``. Default: - no environment variables defined in step
8309
8752
  :param name: (experimental) Step name. Default: - no name
8310
- :param receive_args: (experimental) Should this step receive args passed to the task. If ``true``, args are passed through at the end of the ``exec`` shell command. The position of the args can be changed by including the marker ``$@`` inside the command string. If the step spawns a subtask, args are passed to the subtask. The subtask must define steps receiving args for this to have any effect. Default: false
8753
+ :param receive_args: (experimental) Should this step receive args passed to the task. If ``true``, args are passed through at the end of the ``exec`` shell command. The position of the args can be changed by including the marker ``$@`` inside the command string. If the marker is explicitly double-quoted ("$@") arguments will be wrapped in single quotes, approximating the whitespace preserving behavior of bash variable expansion. If the step spawns a subtask, args are passed to the subtask. The subtask must define steps receiving args for this to have any effect. Default: false
8311
8754
 
8312
8755
  :stability: experimental
8313
8756
  '''
@@ -8345,7 +8788,7 @@ class Task(metaclass=jsii.JSIIMeta, jsii_type="projen.Task"):
8345
8788
  :param cwd: (experimental) The working directory for this step. Default: - determined by the task
8346
8789
  :param env: (experimental) Defines environment variables for the execution of this step (``exec`` and ``builtin`` only). Values in this map can be simple, literal values or shell expressions that will be evaluated at runtime e.g. ``$(echo "foo")``. Default: - no environment variables defined in step
8347
8790
  :param name: (experimental) Step name. Default: - no name
8348
- :param receive_args: (experimental) Should this step receive args passed to the task. If ``true``, args are passed through at the end of the ``exec`` shell command. The position of the args can be changed by including the marker ``$@`` inside the command string. If the step spawns a subtask, args are passed to the subtask. The subtask must define steps receiving args for this to have any effect. Default: false
8791
+ :param receive_args: (experimental) Should this step receive args passed to the task. If ``true``, args are passed through at the end of the ``exec`` shell command. The position of the args can be changed by including the marker ``$@`` inside the command string. If the marker is explicitly double-quoted ("$@") arguments will be wrapped in single quotes, approximating the whitespace preserving behavior of bash variable expansion. If the step spawns a subtask, args are passed to the subtask. The subtask must define steps receiving args for this to have any effect. Default: false
8349
8792
 
8350
8793
  :stability: experimental
8351
8794
  '''
@@ -8363,6 +8806,18 @@ class Task(metaclass=jsii.JSIIMeta, jsii_type="projen.Task"):
8363
8806
 
8364
8807
  return typing.cast(None, jsii.invoke(self, "prependSpawn", [subtask, options]))
8365
8808
 
8809
+ @jsii.member(jsii_name="removeStep")
8810
+ def remove_step(self, index: jsii.Number) -> None:
8811
+ '''
8812
+ :param index: The index of the step to remove.
8813
+
8814
+ :stability: experimental
8815
+ '''
8816
+ if __debug__:
8817
+ type_hints = typing.get_type_hints(_typecheckingstub__c493ae53dba9513da0ecb434448ff6e7d3050c90456d373f1135a865eedb69c3)
8818
+ check_type(argname="argument index", value=index, expected_type=type_hints["index"])
8819
+ return typing.cast(None, jsii.invoke(self, "removeStep", [index]))
8820
+
8366
8821
  @jsii.member(jsii_name="reset")
8367
8822
  def reset(
8368
8823
  self,
@@ -8383,7 +8838,7 @@ class Task(metaclass=jsii.JSIIMeta, jsii_type="projen.Task"):
8383
8838
  :param cwd: (experimental) The working directory for this step. Default: - determined by the task
8384
8839
  :param env: (experimental) Defines environment variables for the execution of this step (``exec`` and ``builtin`` only). Values in this map can be simple, literal values or shell expressions that will be evaluated at runtime e.g. ``$(echo "foo")``. Default: - no environment variables defined in step
8385
8840
  :param name: (experimental) Step name. Default: - no name
8386
- :param receive_args: (experimental) Should this step receive args passed to the task. If ``true``, args are passed through at the end of the ``exec`` shell command. The position of the args can be changed by including the marker ``$@`` inside the command string. If the step spawns a subtask, args are passed to the subtask. The subtask must define steps receiving args for this to have any effect. Default: false
8841
+ :param receive_args: (experimental) Should this step receive args passed to the task. If ``true``, args are passed through at the end of the ``exec`` shell command. The position of the args can be changed by including the marker ``$@`` inside the command string. If the marker is explicitly double-quoted ("$@") arguments will be wrapped in single quotes, approximating the whitespace preserving behavior of bash variable expansion. If the step spawns a subtask, args are passed to the subtask. The subtask must define steps receiving args for this to have any effect. Default: false
8387
8842
 
8388
8843
  :stability: experimental
8389
8844
  '''
@@ -8421,7 +8876,7 @@ class Task(metaclass=jsii.JSIIMeta, jsii_type="projen.Task"):
8421
8876
  :param cwd: (experimental) The working directory for this step. Default: - determined by the task
8422
8877
  :param env: (experimental) Defines environment variables for the execution of this step (``exec`` and ``builtin`` only). Values in this map can be simple, literal values or shell expressions that will be evaluated at runtime e.g. ``$(echo "foo")``. Default: - no environment variables defined in step
8423
8878
  :param name: (experimental) Step name. Default: - no name
8424
- :param receive_args: (experimental) Should this step receive args passed to the task. If ``true``, args are passed through at the end of the ``exec`` shell command. The position of the args can be changed by including the marker ``$@`` inside the command string. If the step spawns a subtask, args are passed to the subtask. The subtask must define steps receiving args for this to have any effect. Default: false
8879
+ :param receive_args: (experimental) Should this step receive args passed to the task. If ``true``, args are passed through at the end of the ``exec`` shell command. The position of the args can be changed by including the marker ``$@`` inside the command string. If the marker is explicitly double-quoted ("$@") arguments will be wrapped in single quotes, approximating the whitespace preserving behavior of bash variable expansion. If the step spawns a subtask, args are passed to the subtask. The subtask must define steps receiving args for this to have any effect. Default: false
8425
8880
 
8426
8881
  :stability: experimental
8427
8882
  '''
@@ -8459,7 +8914,7 @@ class Task(metaclass=jsii.JSIIMeta, jsii_type="projen.Task"):
8459
8914
  :param cwd: (experimental) The working directory for this step. Default: - determined by the task
8460
8915
  :param env: (experimental) Defines environment variables for the execution of this step (``exec`` and ``builtin`` only). Values in this map can be simple, literal values or shell expressions that will be evaluated at runtime e.g. ``$(echo "foo")``. Default: - no environment variables defined in step
8461
8916
  :param name: (experimental) Step name. Default: - no name
8462
- :param receive_args: (experimental) Should this step receive args passed to the task. If ``true``, args are passed through at the end of the ``exec`` shell command. The position of the args can be changed by including the marker ``$@`` inside the command string. If the step spawns a subtask, args are passed to the subtask. The subtask must define steps receiving args for this to have any effect. Default: false
8917
+ :param receive_args: (experimental) Should this step receive args passed to the task. If ``true``, args are passed through at the end of the ``exec`` shell command. The position of the args can be changed by including the marker ``$@`` inside the command string. If the marker is explicitly double-quoted ("$@") arguments will be wrapped in single quotes, approximating the whitespace preserving behavior of bash variable expansion. If the step spawns a subtask, args are passed to the subtask. The subtask must define steps receiving args for this to have any effect. Default: false
8463
8918
 
8464
8919
  :stability: experimental
8465
8920
  '''
@@ -8477,6 +8932,55 @@ class Task(metaclass=jsii.JSIIMeta, jsii_type="projen.Task"):
8477
8932
 
8478
8933
  return typing.cast(None, jsii.invoke(self, "spawn", [subtask, options]))
8479
8934
 
8935
+ @jsii.member(jsii_name="updateStep")
8936
+ def update_step(
8937
+ self,
8938
+ index: jsii.Number,
8939
+ *,
8940
+ builtin: typing.Optional[builtins.str] = None,
8941
+ exec: typing.Optional[builtins.str] = None,
8942
+ say: typing.Optional[builtins.str] = None,
8943
+ spawn: typing.Optional[builtins.str] = None,
8944
+ args: typing.Optional[typing.Sequence[builtins.str]] = None,
8945
+ condition: typing.Optional[builtins.str] = None,
8946
+ cwd: typing.Optional[builtins.str] = None,
8947
+ env: typing.Optional[typing.Mapping[builtins.str, builtins.str]] = None,
8948
+ name: typing.Optional[builtins.str] = None,
8949
+ receive_args: typing.Optional[builtins.bool] = None,
8950
+ ) -> None:
8951
+ '''
8952
+ :param index: The index of the step to edit.
8953
+ :param builtin: (experimental) The name of a built-in task to execute. Built-in tasks are node.js programs baked into the projen module and as component runtime helpers. The name is a path relative to the projen lib/ directory (without the .task.js extension). For example, if your built in builtin task is under ``src/release/resolve-version.task.ts``, then this would be ``release/resolve-version``. Default: - do not execute a builtin task
8954
+ :param exec: (experimental) Shell command to execute. Default: - don't execute a shell command
8955
+ :param say: (experimental) Print a message. Default: - don't say anything
8956
+ :param spawn: (experimental) Subtask to execute. Default: - don't spawn a subtask
8957
+ :param args: (experimental) A list of fixed arguments always passed to the step. Useful to re-use existing tasks without having to re-define the whole task. Fixed args are always passed to the step, even if ``receiveArgs`` is ``false`` and are always passed before any args the task is called with. If the step executes a shell commands, args are passed through at the end of the ``exec`` shell command. The position of the args can be changed by including the marker ``$@`` inside the command string. If the step spawns a subtask, args are passed to the subtask. The subtask must define steps receiving args for this to have any effect. If the step calls a builtin script, args are passed to the script. It is up to the script to use or discard the arguments. Default: - no arguments are passed to the step
8958
+ :param condition: (experimental) A shell command which determines if the this step should be executed. If the program exits with a zero exit code, the step will be executed. A non-zero code means the step will be skipped (subsequent task steps will still be evaluated/executed).
8959
+ :param cwd: (experimental) The working directory for this step. Default: - determined by the task
8960
+ :param env: (experimental) Defines environment variables for the execution of this step (``exec`` and ``builtin`` only). Values in this map can be simple, literal values or shell expressions that will be evaluated at runtime e.g. ``$(echo "foo")``. Default: - no environment variables defined in step
8961
+ :param name: (experimental) Step name. Default: - no name
8962
+ :param receive_args: (experimental) Should this step receive args passed to the task. If ``true``, args are passed through at the end of the ``exec`` shell command. The position of the args can be changed by including the marker ``$@`` inside the command string. If the marker is explicitly double-quoted ("$@") arguments will be wrapped in single quotes, approximating the whitespace preserving behavior of bash variable expansion. If the step spawns a subtask, args are passed to the subtask. The subtask must define steps receiving args for this to have any effect. Default: false
8963
+
8964
+ :stability: experimental
8965
+ '''
8966
+ if __debug__:
8967
+ type_hints = typing.get_type_hints(_typecheckingstub__3e6471d9b24a42d1138efa839e893cd7685a703235152ad4f0c3aae00e2e12f8)
8968
+ check_type(argname="argument index", value=index, expected_type=type_hints["index"])
8969
+ step = TaskStep(
8970
+ builtin=builtin,
8971
+ exec=exec,
8972
+ say=say,
8973
+ spawn=spawn,
8974
+ args=args,
8975
+ condition=condition,
8976
+ cwd=cwd,
8977
+ env=env,
8978
+ name=name,
8979
+ receive_args=receive_args,
8980
+ )
8981
+
8982
+ return typing.cast(None, jsii.invoke(self, "updateStep", [index, step]))
8983
+
8480
8984
  @builtins.property
8481
8985
  @jsii.member(jsii_name="envVars")
8482
8986
  def env_vars(self) -> typing.Mapping[builtins.str, builtins.str]:
@@ -8516,6 +9020,24 @@ class Task(metaclass=jsii.JSIIMeta, jsii_type="projen.Task"):
8516
9020
  '''
8517
9021
  return typing.cast(typing.Optional[builtins.str], jsii.get(self, "condition"))
8518
9022
 
9023
+ @builtins.property
9024
+ @jsii.member(jsii_name="cwd")
9025
+ def cwd(self) -> typing.Optional[builtins.str]:
9026
+ '''(experimental) Returns the working directory for this task.
9027
+
9028
+ Sets the working directory for this task.
9029
+
9030
+ :stability: experimental
9031
+ '''
9032
+ return typing.cast(typing.Optional[builtins.str], jsii.get(self, "cwd"))
9033
+
9034
+ @cwd.setter
9035
+ def cwd(self, value: typing.Optional[builtins.str]) -> None:
9036
+ if __debug__:
9037
+ type_hints = typing.get_type_hints(_typecheckingstub__063f23ecf0aa952acdfe114ecbbc1ac116753acf58aa564cd47b3ea5fbd99ad8)
9038
+ check_type(argname="argument value", value=value, expected_type=type_hints["value"])
9039
+ jsii.set(self, "cwd", value) # pyright: ignore[reportArgumentType]
9040
+
8519
9041
  @builtins.property
8520
9042
  @jsii.member(jsii_name="description")
8521
9043
  def description(self) -> typing.Optional[builtins.str]:
@@ -8532,7 +9054,7 @@ class Task(metaclass=jsii.JSIIMeta, jsii_type="projen.Task"):
8532
9054
  if __debug__:
8533
9055
  type_hints = typing.get_type_hints(_typecheckingstub__740ba1ef0d399dc76efb91309b9d1c8426213faa31da03d8c0abbc94a3d02e03)
8534
9056
  check_type(argname="argument value", value=value, expected_type=type_hints["value"])
8535
- jsii.set(self, "description", value)
9057
+ jsii.set(self, "description", value) # pyright: ignore[reportArgumentType]
8536
9058
 
8537
9059
 
8538
9060
  @jsii.data_type(
@@ -8866,12 +9388,14 @@ class TaskRuntime(metaclass=jsii.JSIIMeta, jsii_type="projen.TaskRuntime"):
8866
9388
  name: builtins.str,
8867
9389
  parents: typing.Optional[typing.Sequence[builtins.str]] = None,
8868
9390
  args: typing.Optional[typing.Sequence[typing.Union[builtins.str, jsii.Number]]] = None,
9391
+ env: typing.Optional[typing.Mapping[builtins.str, builtins.str]] = None,
8869
9392
  ) -> None:
8870
9393
  '''(experimental) Runs the task.
8871
9394
 
8872
9395
  :param name: The task name.
8873
9396
  :param parents: -
8874
9397
  :param args: -
9398
+ :param env: -
8875
9399
 
8876
9400
  :stability: experimental
8877
9401
  '''
@@ -8880,7 +9404,8 @@ class TaskRuntime(metaclass=jsii.JSIIMeta, jsii_type="projen.TaskRuntime"):
8880
9404
  check_type(argname="argument name", value=name, expected_type=type_hints["name"])
8881
9405
  check_type(argname="argument parents", value=parents, expected_type=type_hints["parents"])
8882
9406
  check_type(argname="argument args", value=args, expected_type=type_hints["args"])
8883
- return typing.cast(None, jsii.invoke(self, "runTask", [name, parents, args]))
9407
+ check_type(argname="argument env", value=env, expected_type=type_hints["env"])
9408
+ return typing.cast(None, jsii.invoke(self, "runTask", [name, parents, args, env]))
8884
9409
 
8885
9410
  @jsii.member(jsii_name="tryFindTask")
8886
9411
  def try_find_task(self, name: builtins.str) -> typing.Optional["TaskSpec"]:
@@ -9114,7 +9639,7 @@ class TaskStepOptions:
9114
9639
  :param cwd: (experimental) The working directory for this step. Default: - determined by the task
9115
9640
  :param env: (experimental) Defines environment variables for the execution of this step (``exec`` and ``builtin`` only). Values in this map can be simple, literal values or shell expressions that will be evaluated at runtime e.g. ``$(echo "foo")``. Default: - no environment variables defined in step
9116
9641
  :param name: (experimental) Step name. Default: - no name
9117
- :param receive_args: (experimental) Should this step receive args passed to the task. If ``true``, args are passed through at the end of the ``exec`` shell command. The position of the args can be changed by including the marker ``$@`` inside the command string. If the step spawns a subtask, args are passed to the subtask. The subtask must define steps receiving args for this to have any effect. Default: false
9642
+ :param receive_args: (experimental) Should this step receive args passed to the task. If ``true``, args are passed through at the end of the ``exec`` shell command. The position of the args can be changed by including the marker ``$@`` inside the command string. If the marker is explicitly double-quoted ("$@") arguments will be wrapped in single quotes, approximating the whitespace preserving behavior of bash variable expansion. If the step spawns a subtask, args are passed to the subtask. The subtask must define steps receiving args for this to have any effect. Default: false
9118
9643
 
9119
9644
  :stability: experimental
9120
9645
  '''
@@ -9227,6 +9752,9 @@ class TaskStepOptions:
9227
9752
  If ``true``, args are passed through at the end of the ``exec`` shell command.
9228
9753
  The position of the args can be changed by including the marker ``$@`` inside the command string.
9229
9754
 
9755
+ If the marker is explicitly double-quoted ("$@") arguments will be wrapped in single quotes, approximating
9756
+ the whitespace preserving behavior of bash variable expansion.
9757
+
9230
9758
  If the step spawns a subtask, args are passed to the subtask.
9231
9759
  The subtask must define steps receiving args for this to have any effect.
9232
9760
 
@@ -9725,7 +10253,7 @@ class TomlFile(ObjectFile, metaclass=jsii.JSIIMeta, jsii_type="projen.TomlFile")
9725
10253
 
9726
10254
  def __init__(
9727
10255
  self,
9728
- project: Project,
10256
+ scope: _constructs_77d1e7e8.IConstruct,
9729
10257
  file_path: builtins.str,
9730
10258
  *,
9731
10259
  obj: typing.Any = None,
@@ -9737,7 +10265,7 @@ class TomlFile(ObjectFile, metaclass=jsii.JSIIMeta, jsii_type="projen.TomlFile")
9737
10265
  readonly: typing.Optional[builtins.bool] = None,
9738
10266
  ) -> None:
9739
10267
  '''
9740
- :param project: -
10268
+ :param scope: -
9741
10269
  :param file_path: -
9742
10270
  :param obj: (experimental) The object that will be serialized. You can modify the object's contents before synthesis. Serialization of the object is similar to JSON.stringify with few enhancements: - values that are functions will be called during synthesis and the result will be serialized - this allow to have lazy values. - ``Set`` will be converted to array - ``Map`` will be converted to a plain object ({ key: value, ... }}) - ``RegExp`` without flags will be converted to string representation of the source Default: {} an empty object (use ``file.obj`` to mutate).
9743
10271
  :param omit_empty: (experimental) Omits empty objects and arrays. Default: false
@@ -9751,7 +10279,7 @@ class TomlFile(ObjectFile, metaclass=jsii.JSIIMeta, jsii_type="projen.TomlFile")
9751
10279
  '''
9752
10280
  if __debug__:
9753
10281
  type_hints = typing.get_type_hints(_typecheckingstub__de7c08620aabeb578ce8c0c54b1073a9df1f34c7815d8ae6fdebff7eb411c3d8)
9754
- check_type(argname="argument project", value=project, expected_type=type_hints["project"])
10282
+ check_type(argname="argument scope", value=scope, expected_type=type_hints["scope"])
9755
10283
  check_type(argname="argument file_path", value=file_path, expected_type=type_hints["file_path"])
9756
10284
  options = TomlFileOptions(
9757
10285
  obj=obj,
@@ -9763,7 +10291,7 @@ class TomlFile(ObjectFile, metaclass=jsii.JSIIMeta, jsii_type="projen.TomlFile")
9763
10291
  readonly=readonly,
9764
10292
  )
9765
10293
 
9766
- jsii.create(self.__class__, self, [project, file_path, options])
10294
+ jsii.create(self.__class__, self, [scope, file_path, options])
9767
10295
 
9768
10296
  @jsii.member(jsii_name="synthesizeContent")
9769
10297
  def _synthesize_content(self, resolver: IResolver) -> typing.Optional[builtins.str]:
@@ -9948,18 +10476,22 @@ class Version(Component, metaclass=jsii.JSIIMeta, jsii_type="projen.Version"):
9948
10476
 
9949
10477
  def __init__(
9950
10478
  self,
9951
- project: Project,
10479
+ scope: _constructs_77d1e7e8.IConstruct,
9952
10480
  *,
9953
10481
  artifacts_directory: builtins.str,
9954
10482
  version_input_file: builtins.str,
10483
+ bump_package: typing.Optional[builtins.str] = None,
10484
+ next_version_command: typing.Optional[builtins.str] = None,
9955
10485
  releasable_commits: typing.Optional[ReleasableCommits] = None,
9956
10486
  tag_prefix: typing.Optional[builtins.str] = None,
9957
10487
  versionrc_options: typing.Optional[typing.Mapping[builtins.str, typing.Any]] = None,
9958
10488
  ) -> None:
9959
10489
  '''
9960
- :param project: -
10490
+ :param scope: -
9961
10491
  :param artifacts_directory: (experimental) The name of the directory into which ``changelog.md`` and ``version.txt`` files are emitted.
9962
10492
  :param version_input_file: (experimental) A name of a .json file to set the ``version`` field in after a bump.
10493
+ :param bump_package: (experimental) The ``commit-and-tag-version`` compatible package used to bump the package version, as a dependency string. This can be any compatible package version, including the deprecated ``standard-version@9``. Default: "commit-and-tag-version@12"
10494
+ :param next_version_command: (experimental) A shell command to control the next version to release. If present, this shell command will be run before the bump is executed, and it determines what version to release. It will be executed in the following environment: - Working directory: the project directory. - ``$VERSION``: the current version. Looks like ``1.2.3``. - ``$LATEST_TAG``: the most recent tag. Looks like ``prefix-v1.2.3``, or may be unset. - ``$SUGGESTED_BUMP``: the suggested bump action based on commits. One of ``major|minor|patch|none``. The command should print one of the following to ``stdout``: - Nothing: the next version number will be determined based on commit history. - ``x.y.z``: the next version number will be ``x.y.z``. - ``major|minor|patch``: the next version number will be the current version number with the indicated component bumped. Default: - The next version will be determined based on the commit history and project settings.
9963
10495
  :param releasable_commits: (experimental) Find commits that should be considered releasable Used to decide if a release is required. Default: ReleasableCommits.everyCommit()
9964
10496
  :param tag_prefix: (experimental) The tag prefix corresponding to this version.
9965
10497
  :param versionrc_options: (experimental) Custom configuration for versionrc file used by standard-release.
@@ -9968,25 +10500,76 @@ class Version(Component, metaclass=jsii.JSIIMeta, jsii_type="projen.Version"):
9968
10500
  '''
9969
10501
  if __debug__:
9970
10502
  type_hints = typing.get_type_hints(_typecheckingstub__9cf64d1b29258435f8a7749178e947fcedd27d55f323782081a21714be909595)
9971
- check_type(argname="argument project", value=project, expected_type=type_hints["project"])
10503
+ check_type(argname="argument scope", value=scope, expected_type=type_hints["scope"])
9972
10504
  options = VersionOptions(
9973
10505
  artifacts_directory=artifacts_directory,
9974
10506
  version_input_file=version_input_file,
10507
+ bump_package=bump_package,
10508
+ next_version_command=next_version_command,
9975
10509
  releasable_commits=releasable_commits,
9976
10510
  tag_prefix=tag_prefix,
9977
10511
  versionrc_options=versionrc_options,
9978
10512
  )
9979
10513
 
9980
- jsii.create(self.__class__, self, [project, options])
10514
+ jsii.create(self.__class__, self, [scope, options])
10515
+
10516
+ @jsii.member(jsii_name="envForBranch")
10517
+ def env_for_branch(
10518
+ self,
10519
+ *,
10520
+ major_version: typing.Optional[jsii.Number] = None,
10521
+ min_major_version: typing.Optional[jsii.Number] = None,
10522
+ minor_version: typing.Optional[jsii.Number] = None,
10523
+ prerelease: typing.Optional[builtins.str] = None,
10524
+ tag_prefix: typing.Optional[builtins.str] = None,
10525
+ ) -> typing.Mapping[builtins.str, builtins.str]:
10526
+ '''(experimental) Return the environment variables to modify the bump command for release branches.
10527
+
10528
+ These options are used to modify the behavior of the version bumping script
10529
+ for additional branches, by setting environment variables.
10530
+
10531
+ No settings are inherited from the base ``Version`` object (but any parameters that
10532
+ control versions do conflict with the use of a ``nextVersionCommand``).
10533
+
10534
+ :param major_version: (experimental) The major versions released from this branch.
10535
+ :param min_major_version: (experimental) The minimum major version to release.
10536
+ :param minor_version: (experimental) The minor versions released from this branch.
10537
+ :param prerelease: (experimental) Bump the version as a pre-release tag. Default: - normal releases
10538
+ :param tag_prefix: (experimental) Automatically add the given prefix to release tags. Useful if you are releasing on multiple branches with overlapping version numbers. Note: this prefix is used to detect the latest tagged version when bumping, so if you change this on a project with an existing version history, you may need to manually tag your latest release with the new prefix. Default: - no prefix
10539
+
10540
+ :stability: experimental
10541
+ '''
10542
+ branch_options = VersionBranchOptions(
10543
+ major_version=major_version,
10544
+ min_major_version=min_major_version,
10545
+ minor_version=minor_version,
10546
+ prerelease=prerelease,
10547
+ tag_prefix=tag_prefix,
10548
+ )
10549
+
10550
+ return typing.cast(typing.Mapping[builtins.str, builtins.str], jsii.invoke(self, "envForBranch", [branch_options]))
9981
10551
 
9982
10552
  @jsii.python.classproperty
9983
10553
  @jsii.member(jsii_name="STANDARD_VERSION")
9984
10554
  def STANDARD_VERSION(cls) -> builtins.str:
9985
10555
  '''
9986
- :stability: experimental
10556
+ :deprecated: use ``version.bumpPackage`` on the component instance instead
10557
+
10558
+ :stability: deprecated
9987
10559
  '''
9988
10560
  return typing.cast(builtins.str, jsii.sget(cls, "STANDARD_VERSION"))
9989
10561
 
10562
+ @builtins.property
10563
+ @jsii.member(jsii_name="bumpPackage")
10564
+ def bump_package(self) -> builtins.str:
10565
+ '''(experimental) The package used to bump package versions, as a dependency string.
10566
+
10567
+ This is a ``commit-and-tag-version`` compatible package.
10568
+
10569
+ :stability: experimental
10570
+ '''
10571
+ return typing.cast(builtins.str, jsii.get(self, "bumpPackage"))
10572
+
9990
10573
  @builtins.property
9991
10574
  @jsii.member(jsii_name="bumpTask")
9992
10575
  def bump_task(self) -> Task:
@@ -10031,12 +10614,130 @@ class Version(Component, metaclass=jsii.JSIIMeta, jsii_type="projen.Version"):
10031
10614
  return typing.cast(builtins.str, jsii.get(self, "versionFileName"))
10032
10615
 
10033
10616
 
10617
+ @jsii.data_type(
10618
+ jsii_type="projen.VersionBranchOptions",
10619
+ jsii_struct_bases=[],
10620
+ name_mapping={
10621
+ "major_version": "majorVersion",
10622
+ "min_major_version": "minMajorVersion",
10623
+ "minor_version": "minorVersion",
10624
+ "prerelease": "prerelease",
10625
+ "tag_prefix": "tagPrefix",
10626
+ },
10627
+ )
10628
+ class VersionBranchOptions:
10629
+ def __init__(
10630
+ self,
10631
+ *,
10632
+ major_version: typing.Optional[jsii.Number] = None,
10633
+ min_major_version: typing.Optional[jsii.Number] = None,
10634
+ minor_version: typing.Optional[jsii.Number] = None,
10635
+ prerelease: typing.Optional[builtins.str] = None,
10636
+ tag_prefix: typing.Optional[builtins.str] = None,
10637
+ ) -> None:
10638
+ '''(experimental) Options to pass to ``modifyBranchEnvironment``.
10639
+
10640
+ :param major_version: (experimental) The major versions released from this branch.
10641
+ :param min_major_version: (experimental) The minimum major version to release.
10642
+ :param minor_version: (experimental) The minor versions released from this branch.
10643
+ :param prerelease: (experimental) Bump the version as a pre-release tag. Default: - normal releases
10644
+ :param tag_prefix: (experimental) Automatically add the given prefix to release tags. Useful if you are releasing on multiple branches with overlapping version numbers. Note: this prefix is used to detect the latest tagged version when bumping, so if you change this on a project with an existing version history, you may need to manually tag your latest release with the new prefix. Default: - no prefix
10645
+
10646
+ :stability: experimental
10647
+ '''
10648
+ if __debug__:
10649
+ type_hints = typing.get_type_hints(_typecheckingstub__62987907aa24cc1b84e9b6e9b755bd286708fa4a219baa7b979fb3ea61401603)
10650
+ check_type(argname="argument major_version", value=major_version, expected_type=type_hints["major_version"])
10651
+ check_type(argname="argument min_major_version", value=min_major_version, expected_type=type_hints["min_major_version"])
10652
+ check_type(argname="argument minor_version", value=minor_version, expected_type=type_hints["minor_version"])
10653
+ check_type(argname="argument prerelease", value=prerelease, expected_type=type_hints["prerelease"])
10654
+ check_type(argname="argument tag_prefix", value=tag_prefix, expected_type=type_hints["tag_prefix"])
10655
+ self._values: typing.Dict[builtins.str, typing.Any] = {}
10656
+ if major_version is not None:
10657
+ self._values["major_version"] = major_version
10658
+ if min_major_version is not None:
10659
+ self._values["min_major_version"] = min_major_version
10660
+ if minor_version is not None:
10661
+ self._values["minor_version"] = minor_version
10662
+ if prerelease is not None:
10663
+ self._values["prerelease"] = prerelease
10664
+ if tag_prefix is not None:
10665
+ self._values["tag_prefix"] = tag_prefix
10666
+
10667
+ @builtins.property
10668
+ def major_version(self) -> typing.Optional[jsii.Number]:
10669
+ '''(experimental) The major versions released from this branch.
10670
+
10671
+ :stability: experimental
10672
+ '''
10673
+ result = self._values.get("major_version")
10674
+ return typing.cast(typing.Optional[jsii.Number], result)
10675
+
10676
+ @builtins.property
10677
+ def min_major_version(self) -> typing.Optional[jsii.Number]:
10678
+ '''(experimental) The minimum major version to release.
10679
+
10680
+ :stability: experimental
10681
+ '''
10682
+ result = self._values.get("min_major_version")
10683
+ return typing.cast(typing.Optional[jsii.Number], result)
10684
+
10685
+ @builtins.property
10686
+ def minor_version(self) -> typing.Optional[jsii.Number]:
10687
+ '''(experimental) The minor versions released from this branch.
10688
+
10689
+ :stability: experimental
10690
+ '''
10691
+ result = self._values.get("minor_version")
10692
+ return typing.cast(typing.Optional[jsii.Number], result)
10693
+
10694
+ @builtins.property
10695
+ def prerelease(self) -> typing.Optional[builtins.str]:
10696
+ '''(experimental) Bump the version as a pre-release tag.
10697
+
10698
+ :default: - normal releases
10699
+
10700
+ :stability: experimental
10701
+ '''
10702
+ result = self._values.get("prerelease")
10703
+ return typing.cast(typing.Optional[builtins.str], result)
10704
+
10705
+ @builtins.property
10706
+ def tag_prefix(self) -> typing.Optional[builtins.str]:
10707
+ '''(experimental) Automatically add the given prefix to release tags. Useful if you are releasing on multiple branches with overlapping version numbers.
10708
+
10709
+ Note: this prefix is used to detect the latest tagged version
10710
+ when bumping, so if you change this on a project with an existing version
10711
+ history, you may need to manually tag your latest release
10712
+ with the new prefix.
10713
+
10714
+ :default: - no prefix
10715
+
10716
+ :stability: experimental
10717
+ '''
10718
+ result = self._values.get("tag_prefix")
10719
+ return typing.cast(typing.Optional[builtins.str], result)
10720
+
10721
+ def __eq__(self, rhs: typing.Any) -> builtins.bool:
10722
+ return isinstance(rhs, self.__class__) and rhs._values == self._values
10723
+
10724
+ def __ne__(self, rhs: typing.Any) -> builtins.bool:
10725
+ return not (rhs == self)
10726
+
10727
+ def __repr__(self) -> str:
10728
+ return "VersionBranchOptions(%s)" % ", ".join(
10729
+ k + "=" + repr(v) for k, v in self._values.items()
10730
+ )
10731
+
10732
+
10034
10733
  @jsii.data_type(
10035
10734
  jsii_type="projen.VersionOptions",
10036
10735
  jsii_struct_bases=[],
10037
10736
  name_mapping={
10038
10737
  "artifacts_directory": "artifactsDirectory",
10039
10738
  "version_input_file": "versionInputFile",
10739
+ "bump_package": "bumpPackage",
10740
+ "next_version_command": "nextVersionCommand",
10040
10741
  "releasable_commits": "releasableCommits",
10041
10742
  "tag_prefix": "tagPrefix",
10042
10743
  "versionrc_options": "versionrcOptions",
@@ -10048,6 +10749,8 @@ class VersionOptions:
10048
10749
  *,
10049
10750
  artifacts_directory: builtins.str,
10050
10751
  version_input_file: builtins.str,
10752
+ bump_package: typing.Optional[builtins.str] = None,
10753
+ next_version_command: typing.Optional[builtins.str] = None,
10051
10754
  releasable_commits: typing.Optional[ReleasableCommits] = None,
10052
10755
  tag_prefix: typing.Optional[builtins.str] = None,
10053
10756
  versionrc_options: typing.Optional[typing.Mapping[builtins.str, typing.Any]] = None,
@@ -10056,6 +10759,8 @@ class VersionOptions:
10056
10759
 
10057
10760
  :param artifacts_directory: (experimental) The name of the directory into which ``changelog.md`` and ``version.txt`` files are emitted.
10058
10761
  :param version_input_file: (experimental) A name of a .json file to set the ``version`` field in after a bump.
10762
+ :param bump_package: (experimental) The ``commit-and-tag-version`` compatible package used to bump the package version, as a dependency string. This can be any compatible package version, including the deprecated ``standard-version@9``. Default: "commit-and-tag-version@12"
10763
+ :param next_version_command: (experimental) A shell command to control the next version to release. If present, this shell command will be run before the bump is executed, and it determines what version to release. It will be executed in the following environment: - Working directory: the project directory. - ``$VERSION``: the current version. Looks like ``1.2.3``. - ``$LATEST_TAG``: the most recent tag. Looks like ``prefix-v1.2.3``, or may be unset. - ``$SUGGESTED_BUMP``: the suggested bump action based on commits. One of ``major|minor|patch|none``. The command should print one of the following to ``stdout``: - Nothing: the next version number will be determined based on commit history. - ``x.y.z``: the next version number will be ``x.y.z``. - ``major|minor|patch``: the next version number will be the current version number with the indicated component bumped. Default: - The next version will be determined based on the commit history and project settings.
10059
10764
  :param releasable_commits: (experimental) Find commits that should be considered releasable Used to decide if a release is required. Default: ReleasableCommits.everyCommit()
10060
10765
  :param tag_prefix: (experimental) The tag prefix corresponding to this version.
10061
10766
  :param versionrc_options: (experimental) Custom configuration for versionrc file used by standard-release.
@@ -10066,6 +10771,8 @@ class VersionOptions:
10066
10771
  type_hints = typing.get_type_hints(_typecheckingstub__fb94d39bdc04d188bb2447acba8747de3d6ec275231c8a512d647916d69a54f5)
10067
10772
  check_type(argname="argument artifacts_directory", value=artifacts_directory, expected_type=type_hints["artifacts_directory"])
10068
10773
  check_type(argname="argument version_input_file", value=version_input_file, expected_type=type_hints["version_input_file"])
10774
+ check_type(argname="argument bump_package", value=bump_package, expected_type=type_hints["bump_package"])
10775
+ check_type(argname="argument next_version_command", value=next_version_command, expected_type=type_hints["next_version_command"])
10069
10776
  check_type(argname="argument releasable_commits", value=releasable_commits, expected_type=type_hints["releasable_commits"])
10070
10777
  check_type(argname="argument tag_prefix", value=tag_prefix, expected_type=type_hints["tag_prefix"])
10071
10778
  check_type(argname="argument versionrc_options", value=versionrc_options, expected_type=type_hints["versionrc_options"])
@@ -10073,6 +10780,10 @@ class VersionOptions:
10073
10780
  "artifacts_directory": artifacts_directory,
10074
10781
  "version_input_file": version_input_file,
10075
10782
  }
10783
+ if bump_package is not None:
10784
+ self._values["bump_package"] = bump_package
10785
+ if next_version_command is not None:
10786
+ self._values["next_version_command"] = next_version_command
10076
10787
  if releasable_commits is not None:
10077
10788
  self._values["releasable_commits"] = releasable_commits
10078
10789
  if tag_prefix is not None:
@@ -10094,15 +10805,55 @@ class VersionOptions:
10094
10805
  def version_input_file(self) -> builtins.str:
10095
10806
  '''(experimental) A name of a .json file to set the ``version`` field in after a bump.
10096
10807
 
10097
- :stability: experimental
10808
+ :stability: experimental
10809
+
10810
+ Example::
10811
+
10812
+ "package.json"
10813
+ '''
10814
+ result = self._values.get("version_input_file")
10815
+ assert result is not None, "Required property 'version_input_file' is missing"
10816
+ return typing.cast(builtins.str, result)
10817
+
10818
+ @builtins.property
10819
+ def bump_package(self) -> typing.Optional[builtins.str]:
10820
+ '''(experimental) The ``commit-and-tag-version`` compatible package used to bump the package version, as a dependency string.
10821
+
10822
+ This can be any compatible package version, including the deprecated ``standard-version@9``.
10823
+
10824
+ :default: "commit-and-tag-version@12"
10825
+
10826
+ :stability: experimental
10827
+ '''
10828
+ result = self._values.get("bump_package")
10829
+ return typing.cast(typing.Optional[builtins.str], result)
10830
+
10831
+ @builtins.property
10832
+ def next_version_command(self) -> typing.Optional[builtins.str]:
10833
+ '''(experimental) A shell command to control the next version to release.
10834
+
10835
+ If present, this shell command will be run before the bump is executed, and
10836
+ it determines what version to release. It will be executed in the following
10837
+ environment:
10838
+
10839
+ - Working directory: the project directory.
10840
+ - ``$VERSION``: the current version. Looks like ``1.2.3``.
10841
+ - ``$LATEST_TAG``: the most recent tag. Looks like ``prefix-v1.2.3``, or may be unset.
10842
+ - ``$SUGGESTED_BUMP``: the suggested bump action based on commits. One of ``major|minor|patch|none``.
10098
10843
 
10099
- Example::
10844
+ The command should print one of the following to ``stdout``:
10100
10845
 
10101
- "package.json"
10846
+ - Nothing: the next version number will be determined based on commit history.
10847
+ - ``x.y.z``: the next version number will be ``x.y.z``.
10848
+ - ``major|minor|patch``: the next version number will be the current version number
10849
+ with the indicated component bumped.
10850
+
10851
+ :default: - The next version will be determined based on the commit history and project settings.
10852
+
10853
+ :stability: experimental
10102
10854
  '''
10103
- result = self._values.get("version_input_file")
10104
- assert result is not None, "Required property 'version_input_file' is missing"
10105
- return typing.cast(builtins.str, result)
10855
+ result = self._values.get("next_version_command")
10856
+ return typing.cast(typing.Optional[builtins.str], result)
10106
10857
 
10107
10858
  @builtins.property
10108
10859
  def releasable_commits(self) -> typing.Optional[ReleasableCommits]:
@@ -10452,7 +11203,7 @@ class YamlFile(ObjectFile, metaclass=jsii.JSIIMeta, jsii_type="projen.YamlFile")
10452
11203
  if __debug__:
10453
11204
  type_hints = typing.get_type_hints(_typecheckingstub__e48f409d84ffd5e2a23ba998b62ea6bdf1343878ddf6bbdba39669e9e45b8464)
10454
11205
  check_type(argname="argument value", value=value, expected_type=type_hints["value"])
10455
- jsii.set(self, "lineWidth", value)
11206
+ jsii.set(self, "lineWidth", value) # pyright: ignore[reportArgumentType]
10456
11207
 
10457
11208
 
10458
11209
  @jsii.data_type(
@@ -10634,6 +11385,217 @@ class YamlFileOptions(ObjectFileOptions):
10634
11385
  )
10635
11386
 
10636
11387
 
11388
+ class AiInstructions(
11389
+ Component,
11390
+ metaclass=jsii.JSIIMeta,
11391
+ jsii_type="projen.AiInstructions",
11392
+ ):
11393
+ '''(experimental) Generates instruction files for AI coding assistants with projen-specific guidance.
11394
+
11395
+ This component creates configuration files that help AI tools like GitHub Copilot,
11396
+ Cursor IDE, Claude Code, and Amazon Q understand that the project is managed by projen
11397
+ and should follow projen conventions.
11398
+
11399
+ :stability: experimental
11400
+
11401
+ Example::
11402
+
11403
+ const project = new TypeScriptProject({
11404
+ name: "my-project",
11405
+ defaultReleaseBranch: "main",
11406
+ });
11407
+
11408
+ // Basic usage - generates files for all supported AI agents
11409
+ new AiInstructions(project);
11410
+
11411
+ // Custom usage - specify which agents and add custom instructions
11412
+ new AiInstructions(project, {
11413
+ agents: [AiAgent.GITHUB_COPILOT, AiAgent.CURSOR],
11414
+ agentSpecificInstructions: {
11415
+ [AiAgent.GITHUB_COPILOT]: ["Always use descriptive commit messages."],
11416
+ },
11417
+ });
11418
+
11419
+ // Add more instructions after instantiation
11420
+ const ai = new AiInstructions(project);
11421
+ ai.addInstructions("Use functional programming patterns.");
11422
+ ai.addInstructions("Always write comprehensive tests.");
11423
+ '''
11424
+
11425
+ def __init__(
11426
+ self,
11427
+ project: Project,
11428
+ *,
11429
+ agents: typing.Optional[typing.Sequence[AiAgent]] = None,
11430
+ agent_specific_instructions: typing.Optional[typing.Mapping[builtins.str, typing.Sequence[builtins.str]]] = None,
11431
+ include_default_instructions: typing.Optional[builtins.bool] = None,
11432
+ instructions: typing.Optional[typing.Sequence[builtins.str]] = None,
11433
+ ) -> None:
11434
+ '''
11435
+ :param project: -
11436
+ :param agents: (experimental) Which AI agents to generate instruction files for. Default: - All agents: [AiAgent.GITHUB_COPILOT, AiAgent.CURSOR, AiAgent.CLAUDE, AiAgent.AMAZON_Q, AiAgent.KIRO, AiAgent.CODEX]
11437
+ :param agent_specific_instructions: (experimental) Per-agent custom instructions. Allows different instructions for different AI tools. Default: - no agent specific instructions
11438
+ :param include_default_instructions: (experimental) Include default instructions for projen and general best practices. Default instructions will only be included for agents provided in the ``agents`` option. If ``agents`` is not provided, default instructions will be included for all agents. Default: true
11439
+ :param instructions: (experimental) General instructions applicable to all agents. Default: - no agent specific instructions
11440
+
11441
+ :stability: experimental
11442
+ '''
11443
+ if __debug__:
11444
+ type_hints = typing.get_type_hints(_typecheckingstub__6ade3e0209730c28511c6c65af7db0ef1d8f6d736618b1a95064af6bf4e829b8)
11445
+ check_type(argname="argument project", value=project, expected_type=type_hints["project"])
11446
+ options = AiInstructionsOptions(
11447
+ agents=agents,
11448
+ agent_specific_instructions=agent_specific_instructions,
11449
+ include_default_instructions=include_default_instructions,
11450
+ instructions=instructions,
11451
+ )
11452
+
11453
+ jsii.create(self.__class__, self, [project, options])
11454
+
11455
+ @jsii.member(jsii_name="bestPractices")
11456
+ @builtins.classmethod
11457
+ def best_practices(cls, project: Project) -> builtins.str:
11458
+ '''(experimental) Returns development best practices instructions for AI agents.
11459
+
11460
+ :param project: -
11461
+
11462
+ :stability: experimental
11463
+ '''
11464
+ if __debug__:
11465
+ type_hints = typing.get_type_hints(_typecheckingstub__9b3a19a4e1f7d40bf00205a6394247af85d2428c672a0ecb7904470daaabda2f)
11466
+ check_type(argname="argument project", value=project, expected_type=type_hints["project"])
11467
+ return typing.cast(builtins.str, jsii.sinvoke(cls, "bestPractices", [project]))
11468
+
11469
+ @jsii.member(jsii_name="projen")
11470
+ @builtins.classmethod
11471
+ def projen(cls, project: Project) -> builtins.str:
11472
+ '''(experimental) Returns projen-specific instructions for AI agents.
11473
+
11474
+ :param project: -
11475
+
11476
+ :stability: experimental
11477
+ '''
11478
+ if __debug__:
11479
+ type_hints = typing.get_type_hints(_typecheckingstub__065453e2727d00b362bd1cf1f58d194d6c355b2a9c2f575e92c43eb627f6eb89)
11480
+ check_type(argname="argument project", value=project, expected_type=type_hints["project"])
11481
+ return typing.cast(builtins.str, jsii.sinvoke(cls, "projen", [project]))
11482
+
11483
+ @jsii.member(jsii_name="addAgentSpecificInstructions")
11484
+ def add_agent_specific_instructions(
11485
+ self,
11486
+ agent: AiAgent,
11487
+ *instructions: builtins.str,
11488
+ ) -> None:
11489
+ '''(experimental) Add instructions for a specific AI agent.
11490
+
11491
+ This can also be used to add instructions for an AI agent that was previously not enabled.
11492
+
11493
+ :param agent: The AI agent to add instructions for.
11494
+ :param instructions: The instruction(s) to add.
11495
+
11496
+ :stability: experimental
11497
+
11498
+ Example::
11499
+
11500
+ aiInstructions.addAgentSpecificInstructions(AiAgent.GITHUB_COPILOT, "Use descriptive commit messages.");
11501
+ '''
11502
+ if __debug__:
11503
+ type_hints = typing.get_type_hints(_typecheckingstub__9ff14bf0a463b0f887b122f5949af2eedda259c6426a05e006686653e81b8fc8)
11504
+ check_type(argname="argument agent", value=agent, expected_type=type_hints["agent"])
11505
+ check_type(argname="argument instructions", value=instructions, expected_type=typing.Tuple[type_hints["instructions"], ...]) # pyright: ignore [reportGeneralTypeIssues]
11506
+ return typing.cast(None, jsii.invoke(self, "addAgentSpecificInstructions", [agent, *instructions]))
11507
+
11508
+ @jsii.member(jsii_name="addInstructions")
11509
+ def add_instructions(self, *instructions: builtins.str) -> None:
11510
+ '''(experimental) Adds instructions that will be included for all selected AI agents.
11511
+
11512
+ :param instructions: The instructions to add.
11513
+
11514
+ :stability: experimental
11515
+
11516
+ Example::
11517
+
11518
+ aiInstructions.addInstructions("Always use TypeScript strict mode.");
11519
+ aiInstructions.addInstructions("Prefer functional programming.", "Avoid mutations.");
11520
+ '''
11521
+ if __debug__:
11522
+ type_hints = typing.get_type_hints(_typecheckingstub__da44882109eef43fd7d698b3f301b9241d695eb97a717ffa73265862f39698ba)
11523
+ check_type(argname="argument instructions", value=instructions, expected_type=typing.Tuple[type_hints["instructions"], ...]) # pyright: ignore [reportGeneralTypeIssues]
11524
+ return typing.cast(None, jsii.invoke(self, "addInstructions", [*instructions]))
11525
+
11526
+
11527
+ class AiInstructionsFile(
11528
+ FileBase,
11529
+ metaclass=jsii.JSIIMeta,
11530
+ jsii_type="projen.AiInstructionsFile",
11531
+ ):
11532
+ '''
11533
+ :stability: experimental
11534
+ '''
11535
+
11536
+ def __init__(
11537
+ self,
11538
+ scope: _constructs_77d1e7e8.IConstruct,
11539
+ file_path: builtins.str,
11540
+ *,
11541
+ committed: typing.Optional[builtins.bool] = None,
11542
+ edit_gitignore: typing.Optional[builtins.bool] = None,
11543
+ executable: typing.Optional[builtins.bool] = None,
11544
+ marker: typing.Optional[builtins.bool] = None,
11545
+ readonly: typing.Optional[builtins.bool] = None,
11546
+ ) -> None:
11547
+ '''
11548
+ :param scope: -
11549
+ :param file_path: -
11550
+ :param committed: (experimental) Indicates whether this file should be committed to git or ignored. By default, all generated files are committed and anti-tamper is used to protect against manual modifications. Default: true
11551
+ :param edit_gitignore: (experimental) Update the project's .gitignore file. Default: true
11552
+ :param executable: (experimental) Whether the generated file should be marked as executable. Default: false
11553
+ :param marker: (experimental) Adds the projen marker to the file. Default: - marker will be included as long as the project is not ejected
11554
+ :param readonly: (experimental) Whether the generated file should be readonly. Default: true
11555
+
11556
+ :stability: experimental
11557
+ '''
11558
+ if __debug__:
11559
+ type_hints = typing.get_type_hints(_typecheckingstub__4b11da88a3895fa642ead3d82823bc49f77ad84be5d7816af5a52334434c5c79)
11560
+ check_type(argname="argument scope", value=scope, expected_type=type_hints["scope"])
11561
+ check_type(argname="argument file_path", value=file_path, expected_type=type_hints["file_path"])
11562
+ options = FileBaseOptions(
11563
+ committed=committed,
11564
+ edit_gitignore=edit_gitignore,
11565
+ executable=executable,
11566
+ marker=marker,
11567
+ readonly=readonly,
11568
+ )
11569
+
11570
+ jsii.create(self.__class__, self, [scope, file_path, options])
11571
+
11572
+ @jsii.member(jsii_name="addInstructions")
11573
+ def add_instructions(self, *instructions: builtins.str) -> None:
11574
+ '''(experimental) Adds instructions to the instruction file.
11575
+
11576
+ :param instructions: -
11577
+
11578
+ :stability: experimental
11579
+ '''
11580
+ if __debug__:
11581
+ type_hints = typing.get_type_hints(_typecheckingstub__da3f715a19bd0c18e2cc2d3bda06afae637174acbe15ef75ef39bb7c26f0ff90)
11582
+ check_type(argname="argument instructions", value=instructions, expected_type=typing.Tuple[type_hints["instructions"], ...]) # pyright: ignore [reportGeneralTypeIssues]
11583
+ return typing.cast(None, jsii.invoke(self, "addInstructions", [*instructions]))
11584
+
11585
+ @jsii.member(jsii_name="synthesizeContent")
11586
+ def _synthesize_content(self, resolver: IResolver) -> typing.Optional[builtins.str]:
11587
+ '''(experimental) Implemented by derived classes and returns the contents of the file to emit.
11588
+
11589
+ :param resolver: -
11590
+
11591
+ :stability: experimental
11592
+ '''
11593
+ if __debug__:
11594
+ type_hints = typing.get_type_hints(_typecheckingstub__af1c3edb2730dd42712c19d9f2ebd48921303c4efd980f8910326afc111d82cc)
11595
+ check_type(argname="argument resolver", value=resolver, expected_type=type_hints["resolver"])
11596
+ return typing.cast(typing.Optional[builtins.str], jsii.invoke(self, "synthesizeContent", [resolver]))
11597
+
11598
+
10637
11599
  @jsii.data_type(
10638
11600
  jsii_type="projen.Dependency",
10639
11601
  jsii_struct_bases=[DependencyCoordinates],
@@ -10758,6 +11720,7 @@ class DockerComposeService(
10758
11720
  networks: typing.Optional[typing.Sequence[IDockerComposeNetworkBinding]] = None,
10759
11721
  platform: typing.Optional[builtins.str] = None,
10760
11722
  ports: typing.Optional[typing.Sequence[typing.Union[DockerComposeServicePort, typing.Dict[builtins.str, typing.Any]]]] = None,
11723
+ privileged: typing.Optional[builtins.bool] = None,
10761
11724
  volumes: typing.Optional[typing.Sequence[IDockerComposeVolumeBinding]] = None,
10762
11725
  ) -> None:
10763
11726
  '''
@@ -10772,6 +11735,7 @@ class DockerComposeService(
10772
11735
  :param networks: (experimental) Add some networks to the service.
10773
11736
  :param platform: (experimental) Add platform. Default: - no platform is provided
10774
11737
  :param ports: (experimental) Map some ports. Default: - no ports are mapped
11738
+ :param privileged: (experimental) Run in privileged mode. Default: - no privileged mode flag is provided
10775
11739
  :param volumes: (experimental) Mount some volumes into the service. Use one of the following to create volumes:
10776
11740
 
10777
11741
  :stability: experimental
@@ -10790,6 +11754,7 @@ class DockerComposeService(
10790
11754
  networks=networks,
10791
11755
  platform=platform,
10792
11756
  ports=ports,
11757
+ privileged=privileged,
10793
11758
  volumes=volumes,
10794
11759
  )
10795
11760
 
@@ -10996,6 +11961,15 @@ class DockerComposeService(
10996
11961
  '''
10997
11962
  return typing.cast(typing.Optional[builtins.str], jsii.get(self, "platform"))
10998
11963
 
11964
+ @builtins.property
11965
+ @jsii.member(jsii_name="privileged")
11966
+ def privileged(self) -> typing.Optional[builtins.bool]:
11967
+ '''(experimental) Run in privileged mode.
11968
+
11969
+ :stability: experimental
11970
+ '''
11971
+ return typing.cast(typing.Optional[builtins.bool], jsii.get(self, "privileged"))
11972
+
10999
11973
 
11000
11974
  @jsii.implements(IDevEnvironment)
11001
11975
  class Gitpod(Component, metaclass=jsii.JSIIMeta, jsii_type="projen.Gitpod"):
@@ -11751,7 +12725,7 @@ class TaskStep(TaskStepOptions):
11751
12725
  :param cwd: (experimental) The working directory for this step. Default: - determined by the task
11752
12726
  :param env: (experimental) Defines environment variables for the execution of this step (``exec`` and ``builtin`` only). Values in this map can be simple, literal values or shell expressions that will be evaluated at runtime e.g. ``$(echo "foo")``. Default: - no environment variables defined in step
11753
12727
  :param name: (experimental) Step name. Default: - no name
11754
- :param receive_args: (experimental) Should this step receive args passed to the task. If ``true``, args are passed through at the end of the ``exec`` shell command. The position of the args can be changed by including the marker ``$@`` inside the command string. If the step spawns a subtask, args are passed to the subtask. The subtask must define steps receiving args for this to have any effect. Default: false
12728
+ :param receive_args: (experimental) Should this step receive args passed to the task. If ``true``, args are passed through at the end of the ``exec`` shell command. The position of the args can be changed by including the marker ``$@`` inside the command string. If the marker is explicitly double-quoted ("$@") arguments will be wrapped in single quotes, approximating the whitespace preserving behavior of bash variable expansion. If the step spawns a subtask, args are passed to the subtask. The subtask must define steps receiving args for this to have any effect. Default: false
11755
12729
  :param builtin: (experimental) The name of a built-in task to execute. Built-in tasks are node.js programs baked into the projen module and as component runtime helpers. The name is a path relative to the projen lib/ directory (without the .task.js extension). For example, if your built in builtin task is under ``src/release/resolve-version.task.ts``, then this would be ``release/resolve-version``. Default: - do not execute a builtin task
11756
12730
  :param exec: (experimental) Shell command to execute. Default: - don't execute a shell command
11757
12731
  :param say: (experimental) Print a message. Default: - don't say anything
@@ -11880,6 +12854,9 @@ class TaskStep(TaskStepOptions):
11880
12854
  If ``true``, args are passed through at the end of the ``exec`` shell command.
11881
12855
  The position of the args can be changed by including the marker ``$@`` inside the command string.
11882
12856
 
12857
+ If the marker is explicitly double-quoted ("$@") arguments will be wrapped in single quotes, approximating
12858
+ the whitespace preserving behavior of bash variable expansion.
12859
+
11883
12860
  If the step spawns a subtask, args are passed to the subtask.
11884
12861
  The subtask must define steps receiving args for this to have any effect.
11885
12862
 
@@ -11958,6 +12935,10 @@ class TaskStep(TaskStepOptions):
11958
12935
 
11959
12936
 
11960
12937
  __all__ = [
12938
+ "AiAgent",
12939
+ "AiInstructions",
12940
+ "AiInstructionsFile",
12941
+ "AiInstructionsOptions",
11961
12942
  "Component",
11962
12943
  "CreateProjectOptions",
11963
12944
  "Dependencies",
@@ -11980,9 +12961,11 @@ __all__ = [
11980
12961
  "DockerComposeServicePort",
11981
12962
  "DockerComposeVolumeConfig",
11982
12963
  "DockerComposeVolumeMount",
12964
+ "EndOfLine",
11983
12965
  "FileBase",
11984
12966
  "FileBaseOptions",
11985
12967
  "GitAttributesFile",
12968
+ "GitAttributesFileOptions",
11986
12969
  "GitOptions",
11987
12970
  "Gitpod",
11988
12971
  "GitpodOnOpen",
@@ -11994,6 +12977,7 @@ __all__ = [
11994
12977
  "GitpodPrebuilds",
11995
12978
  "GitpodTask",
11996
12979
  "GroupRunnerOptions",
12980
+ "ICompareString",
11997
12981
  "IDevEnvironment",
11998
12982
  "IDockerComposeNetworkBinding",
11999
12983
  "IDockerComposeNetworkConfig",
@@ -12063,6 +13047,7 @@ __all__ = [
12063
13047
  "TomlFile",
12064
13048
  "TomlFileOptions",
12065
13049
  "Version",
13050
+ "VersionBranchOptions",
12066
13051
  "VersionOptions",
12067
13052
  "XmlFile",
12068
13053
  "XmlFileOptions",
@@ -12104,6 +13089,16 @@ from . import typescript
12104
13089
  from . import vscode
12105
13090
  from . import web
12106
13091
 
13092
+ def _typecheckingstub__5bf7714efdf83cf2031e4ef3aa1d0cb9511cb921777751c76a0f501c0c56e247(
13093
+ *,
13094
+ agents: typing.Optional[typing.Sequence[AiAgent]] = None,
13095
+ agent_specific_instructions: typing.Optional[typing.Mapping[builtins.str, typing.Sequence[builtins.str]]] = None,
13096
+ include_default_instructions: typing.Optional[builtins.bool] = None,
13097
+ instructions: typing.Optional[typing.Sequence[builtins.str]] = None,
13098
+ ) -> None:
13099
+ """Type checking stubs"""
13100
+ pass
13101
+
12107
13102
  def _typecheckingstub__e4ee40327ed6d04e3e377e300d915d402c50029248a86452fd19fd6372386d4b(
12108
13103
  scope: _constructs_77d1e7e8.IConstruct,
12109
13104
  id: typing.Optional[builtins.str] = None,
@@ -12156,6 +13151,14 @@ def _typecheckingstub__3683be12709967dd63dafbe536558d7717d255f3a86dfad1e17c19c9d
12156
13151
  """Type checking stubs"""
12157
13152
  pass
12158
13153
 
13154
+ def _typecheckingstub__628e50591481575ad249671e7cf61edd1bb37d5aeab5e143a0783051e3167dcc(
13155
+ name: builtins.str,
13156
+ type: DependencyType,
13157
+ expected_range: builtins.str,
13158
+ ) -> None:
13159
+ """Type checking stubs"""
13160
+ pass
13161
+
12159
13162
  def _typecheckingstub__4260bbdc4d6b4d5249dbb539f6f4fe1f865c069d0179abe451af2807f194bf7d(
12160
13163
  name: builtins.str,
12161
13164
  type: typing.Optional[DependencyType] = None,
@@ -12281,6 +13284,7 @@ def _typecheckingstub__a03cd3d199bdbdda7ab3d37e736cec1900b73411477c6a08c6efe431a
12281
13284
  networks: typing.Optional[typing.Sequence[IDockerComposeNetworkBinding]] = None,
12282
13285
  platform: typing.Optional[builtins.str] = None,
12283
13286
  ports: typing.Optional[typing.Sequence[typing.Union[DockerComposeServicePort, typing.Dict[builtins.str, typing.Any]]]] = None,
13287
+ privileged: typing.Optional[builtins.bool] = None,
12284
13288
  volumes: typing.Optional[typing.Sequence[IDockerComposeVolumeBinding]] = None,
12285
13289
  ) -> None:
12286
13290
  """Type checking stubs"""
@@ -12354,6 +13358,7 @@ def _typecheckingstub__7374d6018aac8e9a9098b7b003039b5286a79bcf032fc0db6de3b0c56
12354
13358
  networks: typing.Optional[typing.Sequence[IDockerComposeNetworkBinding]] = None,
12355
13359
  platform: typing.Optional[builtins.str] = None,
12356
13360
  ports: typing.Optional[typing.Sequence[typing.Union[DockerComposeServicePort, typing.Dict[builtins.str, typing.Any]]]] = None,
13361
+ privileged: typing.Optional[builtins.bool] = None,
12357
13362
  volumes: typing.Optional[typing.Sequence[IDockerComposeVolumeBinding]] = None,
12358
13363
  ) -> None:
12359
13364
  """Type checking stubs"""
@@ -12432,6 +13437,8 @@ def _typecheckingstub__177d8a347651b29224d730dd6e1bbec48e6dd46e5dcfd4d25e3798e67
12432
13437
 
12433
13438
  def _typecheckingstub__a914753a9db7cc6bfa6a166cf7ee02794375210a09b1d8e2c62496abf14b4d21(
12434
13439
  scope: _constructs_77d1e7e8.IConstruct,
13440
+ *,
13441
+ end_of_line: typing.Optional[EndOfLine] = None,
12435
13442
  ) -> None:
12436
13443
  """Type checking stubs"""
12437
13444
  pass
@@ -12449,14 +13456,29 @@ def _typecheckingstub__ed3c05c2bc87434261501604cb4ca8386e08b16567b40f693170ab90f
12449
13456
  """Type checking stubs"""
12450
13457
  pass
12451
13458
 
13459
+ def _typecheckingstub__573b65747d3cd070f990730baa2e2b06016818d32122c7fbc2696b8513582a7d(
13460
+ glob: builtins.str,
13461
+ *attributes: builtins.str,
13462
+ ) -> None:
13463
+ """Type checking stubs"""
13464
+ pass
13465
+
12452
13466
  def _typecheckingstub__4d57ceb4d14bb3b3eac67478ac542d99ca5c6994286fdea034dacdf4b64fd14b(
12453
13467
  _: IResolver,
12454
13468
  ) -> None:
12455
13469
  """Type checking stubs"""
12456
13470
  pass
12457
13471
 
13472
+ def _typecheckingstub__82a54cc3274f754056a1301deb3e7902a7a31057da6ade20b64dae8487831db5(
13473
+ *,
13474
+ end_of_line: typing.Optional[EndOfLine] = None,
13475
+ ) -> None:
13476
+ """Type checking stubs"""
13477
+ pass
13478
+
12458
13479
  def _typecheckingstub__ee7f1b3b819a95ebdb112752cdc122d5362da95c419decd69ec24018f344bace(
12459
13480
  *,
13481
+ end_of_line: typing.Optional[EndOfLine] = None,
12460
13482
  lfs_patterns: typing.Optional[typing.Sequence[builtins.str]] = None,
12461
13483
  ) -> None:
12462
13484
  """Type checking stubs"""
@@ -12517,6 +13539,13 @@ def _typecheckingstub__a3547c7b706a8285f987ddb1847fd162ec961a77abbdd5059da647f1a
12517
13539
  """Type checking stubs"""
12518
13540
  pass
12519
13541
 
13542
+ def _typecheckingstub__63d4f6e150362668f5e26d2f58f8b0a32cff82cf2eb8cb736d2c4333d0b01d09(
13543
+ a: builtins.str,
13544
+ b: builtins.str,
13545
+ ) -> None:
13546
+ """Type checking stubs"""
13547
+ pass
13548
+
12520
13549
  def _typecheckingstub__c2360e8cae8e57d0e5268d03b1ee0bcf2a5d56c20a3ca26e5369ddc34c43f0ff(
12521
13550
  image: DevEnvironmentDockerImage,
12522
13551
  ) -> None:
@@ -12596,6 +13625,7 @@ def _typecheckingstub__b7b3d1a5dbba38c978da9c5c4f4aab9b9f4b93375021ee84f57a82309
12596
13625
  *,
12597
13626
  filter_comment_lines: typing.Optional[builtins.bool] = None,
12598
13627
  filter_empty_lines: typing.Optional[builtins.bool] = None,
13628
+ ignore_patterns: typing.Optional[typing.Sequence[builtins.str]] = None,
12599
13629
  ) -> None:
12600
13630
  """Type checking stubs"""
12601
13631
  pass
@@ -12634,6 +13664,7 @@ def _typecheckingstub__7852fd5d8f0daa6070394e45fe4fcb7845e6838dc40a3e3475c057712
12634
13664
  *,
12635
13665
  filter_comment_lines: typing.Optional[builtins.bool] = None,
12636
13666
  filter_empty_lines: typing.Optional[builtins.bool] = None,
13667
+ ignore_patterns: typing.Optional[typing.Sequence[builtins.str]] = None,
12637
13668
  ) -> None:
12638
13669
  """Type checking stubs"""
12639
13670
  pass
@@ -13301,6 +14332,13 @@ def _typecheckingstub__866645d9e72b430281a892f9aec648a8a4d11dfd83393ea8d1cf161c6
13301
14332
  """Type checking stubs"""
13302
14333
  pass
13303
14334
 
14335
+ def _typecheckingstub__f45a21d1f9e615dd1b225d6cafbe381a43b42811d1d21efd5a3f6630613e94af(
14336
+ index: jsii.Number,
14337
+ *steps: TaskStep,
14338
+ ) -> None:
14339
+ """Type checking stubs"""
14340
+ pass
14341
+
13304
14342
  def _typecheckingstub__72dcbc585fdab7a308274ba33cb7b5bcf9e106aaf01bef404fbb15b6c60db4c4(
13305
14343
  shell: builtins.str,
13306
14344
  *,
@@ -13353,6 +14391,12 @@ def _typecheckingstub__80be0ec2af5c5b034b9ad26a372663b2dede8547b402f7501bd174f17
13353
14391
  """Type checking stubs"""
13354
14392
  pass
13355
14393
 
14394
+ def _typecheckingstub__c493ae53dba9513da0ecb434448ff6e7d3050c90456d373f1135a865eedb69c3(
14395
+ index: jsii.Number,
14396
+ ) -> None:
14397
+ """Type checking stubs"""
14398
+ pass
14399
+
13356
14400
  def _typecheckingstub__bec2ab04da022f328e54a5747cb659465473a80e61ea4b23af06f41a51eaf8a8(
13357
14401
  command: typing.Optional[builtins.str] = None,
13358
14402
  *,
@@ -13392,6 +14436,29 @@ def _typecheckingstub__30afd72afdc7d9e0229d01ea2f502a330dca643bfa30b79876a78ec24
13392
14436
  """Type checking stubs"""
13393
14437
  pass
13394
14438
 
14439
+ def _typecheckingstub__3e6471d9b24a42d1138efa839e893cd7685a703235152ad4f0c3aae00e2e12f8(
14440
+ index: jsii.Number,
14441
+ *,
14442
+ builtin: typing.Optional[builtins.str] = None,
14443
+ exec: typing.Optional[builtins.str] = None,
14444
+ say: typing.Optional[builtins.str] = None,
14445
+ spawn: typing.Optional[builtins.str] = None,
14446
+ args: typing.Optional[typing.Sequence[builtins.str]] = None,
14447
+ condition: typing.Optional[builtins.str] = None,
14448
+ cwd: typing.Optional[builtins.str] = None,
14449
+ env: typing.Optional[typing.Mapping[builtins.str, builtins.str]] = None,
14450
+ name: typing.Optional[builtins.str] = None,
14451
+ receive_args: typing.Optional[builtins.bool] = None,
14452
+ ) -> None:
14453
+ """Type checking stubs"""
14454
+ pass
14455
+
14456
+ def _typecheckingstub__063f23ecf0aa952acdfe114ecbbc1ac116753acf58aa564cd47b3ea5fbd99ad8(
14457
+ value: typing.Optional[builtins.str],
14458
+ ) -> None:
14459
+ """Type checking stubs"""
14460
+ pass
14461
+
13395
14462
  def _typecheckingstub__740ba1ef0d399dc76efb91309b9d1c8426213faa31da03d8c0abbc94a3d02e03(
13396
14463
  value: typing.Optional[builtins.str],
13397
14464
  ) -> None:
@@ -13434,6 +14501,7 @@ def _typecheckingstub__9f502dc8ce342b578300faffc5bd3c8c920c8565849215d7cec099d78
13434
14501
  name: builtins.str,
13435
14502
  parents: typing.Optional[typing.Sequence[builtins.str]] = None,
13436
14503
  args: typing.Optional[typing.Sequence[typing.Union[builtins.str, jsii.Number]]] = None,
14504
+ env: typing.Optional[typing.Mapping[builtins.str, builtins.str]] = None,
13437
14505
  ) -> None:
13438
14506
  """Type checking stubs"""
13439
14507
  pass
@@ -13565,7 +14633,7 @@ def _typecheckingstub__ba0f4dd58b9e223b379bf709c046d112cede147b9481878f22a671a9d
13565
14633
  pass
13566
14634
 
13567
14635
  def _typecheckingstub__de7c08620aabeb578ce8c0c54b1073a9df1f34c7815d8ae6fdebff7eb411c3d8(
13568
- project: Project,
14636
+ scope: _constructs_77d1e7e8.IConstruct,
13569
14637
  file_path: builtins.str,
13570
14638
  *,
13571
14639
  obj: typing.Any = None,
@@ -13599,10 +14667,12 @@ def _typecheckingstub__eab22f277a63768ddf4f6605743ad2816e10bd46ac73de98867b0f280
13599
14667
  pass
13600
14668
 
13601
14669
  def _typecheckingstub__9cf64d1b29258435f8a7749178e947fcedd27d55f323782081a21714be909595(
13602
- project: Project,
14670
+ scope: _constructs_77d1e7e8.IConstruct,
13603
14671
  *,
13604
14672
  artifacts_directory: builtins.str,
13605
14673
  version_input_file: builtins.str,
14674
+ bump_package: typing.Optional[builtins.str] = None,
14675
+ next_version_command: typing.Optional[builtins.str] = None,
13606
14676
  releasable_commits: typing.Optional[ReleasableCommits] = None,
13607
14677
  tag_prefix: typing.Optional[builtins.str] = None,
13608
14678
  versionrc_options: typing.Optional[typing.Mapping[builtins.str, typing.Any]] = None,
@@ -13610,10 +14680,23 @@ def _typecheckingstub__9cf64d1b29258435f8a7749178e947fcedd27d55f323782081a21714b
13610
14680
  """Type checking stubs"""
13611
14681
  pass
13612
14682
 
14683
+ def _typecheckingstub__62987907aa24cc1b84e9b6e9b755bd286708fa4a219baa7b979fb3ea61401603(
14684
+ *,
14685
+ major_version: typing.Optional[jsii.Number] = None,
14686
+ min_major_version: typing.Optional[jsii.Number] = None,
14687
+ minor_version: typing.Optional[jsii.Number] = None,
14688
+ prerelease: typing.Optional[builtins.str] = None,
14689
+ tag_prefix: typing.Optional[builtins.str] = None,
14690
+ ) -> None:
14691
+ """Type checking stubs"""
14692
+ pass
14693
+
13613
14694
  def _typecheckingstub__fb94d39bdc04d188bb2447acba8747de3d6ec275231c8a512d647916d69a54f5(
13614
14695
  *,
13615
14696
  artifacts_directory: builtins.str,
13616
14697
  version_input_file: builtins.str,
14698
+ bump_package: typing.Optional[builtins.str] = None,
14699
+ next_version_command: typing.Optional[builtins.str] = None,
13617
14700
  releasable_commits: typing.Optional[ReleasableCommits] = None,
13618
14701
  tag_prefix: typing.Optional[builtins.str] = None,
13619
14702
  versionrc_options: typing.Optional[typing.Mapping[builtins.str, typing.Any]] = None,
@@ -13697,6 +14780,67 @@ def _typecheckingstub__ca9e5a70f67f8e3db454227249c58dd5464be1446a55fcf3be780621f
13697
14780
  """Type checking stubs"""
13698
14781
  pass
13699
14782
 
14783
+ def _typecheckingstub__6ade3e0209730c28511c6c65af7db0ef1d8f6d736618b1a95064af6bf4e829b8(
14784
+ project: Project,
14785
+ *,
14786
+ agents: typing.Optional[typing.Sequence[AiAgent]] = None,
14787
+ agent_specific_instructions: typing.Optional[typing.Mapping[builtins.str, typing.Sequence[builtins.str]]] = None,
14788
+ include_default_instructions: typing.Optional[builtins.bool] = None,
14789
+ instructions: typing.Optional[typing.Sequence[builtins.str]] = None,
14790
+ ) -> None:
14791
+ """Type checking stubs"""
14792
+ pass
14793
+
14794
+ def _typecheckingstub__9b3a19a4e1f7d40bf00205a6394247af85d2428c672a0ecb7904470daaabda2f(
14795
+ project: Project,
14796
+ ) -> None:
14797
+ """Type checking stubs"""
14798
+ pass
14799
+
14800
+ def _typecheckingstub__065453e2727d00b362bd1cf1f58d194d6c355b2a9c2f575e92c43eb627f6eb89(
14801
+ project: Project,
14802
+ ) -> None:
14803
+ """Type checking stubs"""
14804
+ pass
14805
+
14806
+ def _typecheckingstub__9ff14bf0a463b0f887b122f5949af2eedda259c6426a05e006686653e81b8fc8(
14807
+ agent: AiAgent,
14808
+ *instructions: builtins.str,
14809
+ ) -> None:
14810
+ """Type checking stubs"""
14811
+ pass
14812
+
14813
+ def _typecheckingstub__da44882109eef43fd7d698b3f301b9241d695eb97a717ffa73265862f39698ba(
14814
+ *instructions: builtins.str,
14815
+ ) -> None:
14816
+ """Type checking stubs"""
14817
+ pass
14818
+
14819
+ def _typecheckingstub__4b11da88a3895fa642ead3d82823bc49f77ad84be5d7816af5a52334434c5c79(
14820
+ scope: _constructs_77d1e7e8.IConstruct,
14821
+ file_path: builtins.str,
14822
+ *,
14823
+ committed: typing.Optional[builtins.bool] = None,
14824
+ edit_gitignore: typing.Optional[builtins.bool] = None,
14825
+ executable: typing.Optional[builtins.bool] = None,
14826
+ marker: typing.Optional[builtins.bool] = None,
14827
+ readonly: typing.Optional[builtins.bool] = None,
14828
+ ) -> None:
14829
+ """Type checking stubs"""
14830
+ pass
14831
+
14832
+ def _typecheckingstub__da3f715a19bd0c18e2cc2d3bda06afae637174acbe15ef75ef39bb7c26f0ff90(
14833
+ *instructions: builtins.str,
14834
+ ) -> None:
14835
+ """Type checking stubs"""
14836
+ pass
14837
+
14838
+ def _typecheckingstub__af1c3edb2730dd42712c19d9f2ebd48921303c4efd980f8910326afc111d82cc(
14839
+ resolver: IResolver,
14840
+ ) -> None:
14841
+ """Type checking stubs"""
14842
+ pass
14843
+
13700
14844
  def _typecheckingstub__d3a39137d5e4f9c51c84e6a659a0e0d16c23ba1927ed8fe7f3f96ecd5d0110dc(
13701
14845
  *,
13702
14846
  name: builtins.str,
@@ -13720,6 +14864,7 @@ def _typecheckingstub__30adb261bc3a7558152dddf9acb47c2b326de589312d32dcb84afc109
13720
14864
  networks: typing.Optional[typing.Sequence[IDockerComposeNetworkBinding]] = None,
13721
14865
  platform: typing.Optional[builtins.str] = None,
13722
14866
  ports: typing.Optional[typing.Sequence[typing.Union[DockerComposeServicePort, typing.Dict[builtins.str, typing.Any]]]] = None,
14867
+ privileged: typing.Optional[builtins.bool] = None,
13723
14868
  volumes: typing.Optional[typing.Sequence[IDockerComposeVolumeBinding]] = None,
13724
14869
  ) -> None:
13725
14870
  """Type checking stubs"""
@@ -13897,3 +15042,6 @@ def _typecheckingstub__6e32d65dbc737f8fd131c5593ecf206bcf2a76757ddb7c5f42945d730
13897
15042
  ) -> None:
13898
15043
  """Type checking stubs"""
13899
15044
  pass
15045
+
15046
+ for cls in [ICompareString, IDevEnvironment, IDockerComposeNetworkBinding, IDockerComposeNetworkConfig, IDockerComposeServiceName, IDockerComposeVolumeBinding, IDockerComposeVolumeConfig, IResolvable, IResolver]:
15047
+ typing.cast(typing.Any, cls).__protocol_attrs__ = typing.cast(typing.Any, cls).__protocol_attrs__ - set(['__jsii_proxy_class__', '__jsii_type__'])