@jttc/projen-project-types 1.0.0-beta.0 → 1.0.0-beta.10

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.
Files changed (113) hide show
  1. package/.cz-config.js +83 -43
  2. package/.czrc +1 -1
  3. package/.jsii +4637 -14
  4. package/AGENTS.md +132 -0
  5. package/API.md +31146 -7
  6. package/README.md +197 -29
  7. package/docs/components/cdk8s.md +724 -0
  8. package/docs/components/commitzent.md +261 -0
  9. package/docs/components/k3d.md +456 -0
  10. package/docs/default-configurations.md +267 -0
  11. package/docs/index.md +86 -1
  12. package/docs/project-types/cdk-app.md +481 -0
  13. package/docs/project-types/cdk-library.md +321 -0
  14. package/docs/project-types/cdk8s-app.md +353 -0
  15. package/docs/project-types/cdk8s-library.md +442 -0
  16. package/docs/project-types/nx-monorepo.md +382 -0
  17. package/lib/cdk/cdk-app-project.d.ts +12 -0
  18. package/lib/cdk/cdk-app-project.js +28 -0
  19. package/lib/cdk/cdk-library-project.d.ts +12 -0
  20. package/lib/cdk/cdk-library-project.js +28 -0
  21. package/lib/cdk/cdk8s-app-project.d.ts +14 -0
  22. package/lib/cdk/cdk8s-app-project.js +54 -0
  23. package/lib/cdk/cdk8s-library-project.d.ts +14 -0
  24. package/lib/cdk/cdk8s-library-project.js +50 -0
  25. package/lib/cdk/index.d.ts +5 -0
  26. package/lib/cdk/index.js +22 -0
  27. package/lib/cdk/interfaces/cdk-app-options.d.ts +7 -0
  28. package/lib/cdk/interfaces/cdk-app-options.js +3 -0
  29. package/lib/cdk/interfaces/cdk-library-options.d.ts +7 -0
  30. package/lib/cdk/interfaces/cdk-library-options.js +3 -0
  31. package/lib/cdk/interfaces/cdk8s-app-options.d.ts +18 -0
  32. package/lib/cdk/interfaces/cdk8s-app-options.js +3 -0
  33. package/lib/cdk/interfaces/cdk8s-library-options.d.ts +8 -0
  34. package/lib/cdk/interfaces/cdk8s-library-options.js +3 -0
  35. package/lib/cdk/interfaces/index.d.ts +5 -0
  36. package/lib/cdk/interfaces/index.js +22 -0
  37. package/lib/cdk/interfaces/jsii-options.d.ts +7 -0
  38. package/lib/cdk/interfaces/jsii-options.js +3 -0
  39. package/lib/cdk/interfaces/project-global-options.d.ts +15 -0
  40. package/lib/cdk/interfaces/project-global-options.js +3 -0
  41. package/lib/cdk/jsii-project.d.ts +12 -0
  42. package/lib/cdk/jsii-project.js +24 -0
  43. package/lib/common/common-options.d.ts +40 -0
  44. package/lib/common/common-options.js +110 -0
  45. package/lib/components/agents/agents.d.ts +21 -0
  46. package/lib/components/agents/agents.js +476 -0
  47. package/lib/components/agents/index.d.ts +1 -0
  48. package/lib/components/agents/index.js +18 -0
  49. package/lib/components/cdk8s/cdk8s.d.ts +11 -0
  50. package/lib/components/cdk8s/cdk8s.js +124 -0
  51. package/lib/components/cdk8s/index.d.ts +2 -0
  52. package/lib/components/cdk8s/index.js +19 -0
  53. package/lib/components/cdk8s/interfaces/Cdk8s.d.ts +34 -0
  54. package/lib/components/cdk8s/interfaces/Cdk8s.js +12 -0
  55. package/lib/components/cdk8s/main-library.ts.template +35 -0
  56. package/lib/components/cdk8s/main.test.ts.template +3 -0
  57. package/lib/components/cdk8s/main.ts.template +38 -0
  58. package/lib/components/commitzent/commitzent.d.ts +8 -0
  59. package/lib/components/commitzent/commitzent.js +100 -0
  60. package/lib/components/commitzent/index.d.ts +2 -0
  61. package/lib/components/commitzent/index.js +19 -0
  62. package/lib/components/commitzent/interfaces/Icommitzent.d.ts +34 -0
  63. package/lib/components/commitzent/interfaces/Icommitzent.js +3 -0
  64. package/lib/components/index.d.ts +4 -0
  65. package/lib/components/index.js +21 -0
  66. package/lib/components/k3d/index.d.ts +3 -0
  67. package/lib/components/k3d/index.js +20 -0
  68. package/lib/components/k3d/k3d.d.ts +33 -0
  69. package/lib/components/k3d/k3d.js +109 -0
  70. package/lib/components/k3d/k3dBase.d.ts +4 -0
  71. package/lib/components/k3d/k3dBase.js +23 -0
  72. package/lib/components/k3d/types.d.ts +64 -0
  73. package/lib/components/k3d/types.js +8 -0
  74. package/lib/index.d.ts +5 -3
  75. package/lib/index.js +20 -12
  76. package/lib/monorepo/components/NxConfiguration.d.ts +17 -0
  77. package/lib/monorepo/components/NxConfiguration.js +105 -0
  78. package/lib/monorepo/components/index.d.ts +2 -0
  79. package/lib/monorepo/components/index.js +19 -0
  80. package/lib/monorepo/components/publish-release.d.ts +5 -0
  81. package/lib/monorepo/components/publish-release.js +80 -0
  82. package/lib/monorepo/index.d.ts +3 -0
  83. package/lib/monorepo/index.js +20 -0
  84. package/lib/monorepo/interfaces/Nx.d.ts +130 -0
  85. package/lib/monorepo/interfaces/Nx.js +3 -0
  86. package/lib/monorepo/interfaces/NxMonorepo.d.ts +3 -0
  87. package/lib/monorepo/interfaces/NxMonorepo.js +3 -0
  88. package/lib/monorepo/interfaces/index.d.ts +2 -0
  89. package/lib/monorepo/interfaces/index.js +19 -0
  90. package/lib/monorepo/monorepo.d.ts +16 -0
  91. package/lib/monorepo/monorepo.js +131 -0
  92. package/lib/terraform/components/index.d.ts +2 -0
  93. package/lib/terraform/components/index.js +19 -0
  94. package/lib/terraform/components/terraform-deploy-github-workflow.d.ts +26 -0
  95. package/lib/terraform/components/terraform-deploy-github-workflow.js +92 -0
  96. package/lib/terraform/components/terraform-plan-github-workflow.d.ts +31 -0
  97. package/lib/terraform/components/terraform-plan-github-workflow.js +155 -0
  98. package/lib/terraform/index.d.ts +5 -0
  99. package/lib/terraform/index.js +22 -0
  100. package/lib/terraform/providers/hetzner-provider.d.ts +105 -0
  101. package/lib/terraform/providers/hetzner-provider.js +83 -0
  102. package/lib/terraform/providers/index.d.ts +2 -0
  103. package/lib/terraform/providers/index.js +19 -0
  104. package/lib/terraform/providers/provider-strategy.d.ts +44 -0
  105. package/lib/terraform/providers/provider-strategy.js +38 -0
  106. package/lib/terraform/terraform-base-project.d.ts +38 -0
  107. package/lib/terraform/terraform-base-project.js +97 -0
  108. package/lib/terraform/terraform-module-project.d.ts +24 -0
  109. package/lib/terraform/terraform-module-project.js +77 -0
  110. package/lib/terraform/terraform-stack-project.d.ts +28 -0
  111. package/lib/terraform/terraform-stack-project.js +83 -0
  112. package/mkdocs.yml +12 -0
  113. package/package.json +14 -7
@@ -0,0 +1,155 @@
1
+ "use strict";
2
+ var _a;
3
+ Object.defineProperty(exports, "__esModule", { value: true });
4
+ exports.TerraformPlanGithubWorkflow = void 0;
5
+ const JSII_RTTI_SYMBOL_1 = Symbol.for("jsii.rtti");
6
+ const projen_1 = require("projen");
7
+ const github_1 = require("projen/lib/github");
8
+ const workflows_model_1 = require("projen/lib/github/workflows-model");
9
+ /**
10
+ * GitHub workflow component for Terraform plan on Pull Requests.
11
+ * Creates a workflow that validates, plans Terraform changes and comments results on PRs.
12
+ *
13
+ * This component is designed for Terraform stack projects to show plan results
14
+ * in Pull Requests without actually applying changes.
15
+ */
16
+ class TerraformPlanGithubWorkflow extends projen_1.Component {
17
+ constructor(project, options = {}) {
18
+ super(project);
19
+ // Get or create GitHub component - use root project for subprojects, current project otherwise
20
+ const targetProject = project.parent ? project.root : project;
21
+ let github = targetProject.components.find((c) => c.constructor.name === 'GitHub');
22
+ if (!github) {
23
+ github = new github_1.GitHub(targetProject);
24
+ }
25
+ const workflowName = options.workflowName ?? 'terraform-plan';
26
+ const terraformVersion = options.terraformVersion ?? '1.6.0';
27
+ const workingDirectory = options.workingDirectory ?? (project.parent ? project.outdir : '.');
28
+ const workflow = github.addWorkflow(workflowName);
29
+ workflow.on({
30
+ pullRequest: {
31
+ branches: ['main'],
32
+ paths: ['**.tf', '**.tfvars'],
33
+ },
34
+ });
35
+ // Add environment variable for working directory
36
+ workflow.addJob('terraform-plan', {
37
+ name: 'Terraform Plan',
38
+ runsOn: ['ubuntu-latest'],
39
+ env: {
40
+ tf_actions_working_dir: workingDirectory,
41
+ },
42
+ defaults: {
43
+ run: {
44
+ workingDirectory: '${{ env.tf_actions_working_dir }}',
45
+ },
46
+ },
47
+ permissions: {
48
+ contents: workflows_model_1.JobPermission.READ,
49
+ pullRequests: workflows_model_1.JobPermission.WRITE,
50
+ },
51
+ steps: [
52
+ {
53
+ name: 'Checkout',
54
+ uses: 'actions/checkout@v4',
55
+ },
56
+ {
57
+ name: 'Setup Terraform',
58
+ uses: 'hashicorp/setup-terraform@v3',
59
+ with: {
60
+ terraformVersion: terraformVersion,
61
+ },
62
+ },
63
+ {
64
+ name: 'Terraform Format',
65
+ id: 'fmt',
66
+ run: 'terraform fmt -check',
67
+ continueOnError: true,
68
+ },
69
+ {
70
+ name: 'Terraform Init',
71
+ id: 'init',
72
+ run: 'terraform init -input=false',
73
+ },
74
+ {
75
+ name: 'Terraform Validate',
76
+ id: 'validate',
77
+ run: 'terraform validate -no-color',
78
+ },
79
+ {
80
+ name: 'Terraform Plan',
81
+ id: 'plan',
82
+ run: 'terraform plan -no-color -input=false',
83
+ continueOnError: true,
84
+ },
85
+ {
86
+ name: 'Comment PR',
87
+ uses: 'actions/github-script@v7',
88
+ if: "github.event_name == 'pull_request'",
89
+ env: {
90
+ PLAN: 'terraform\\n${{ steps.plan.outputs.stdout }}',
91
+ },
92
+ with: {
93
+ 'github-token': '${{ secrets.GITHUB_TOKEN }}',
94
+ script: `
95
+ // 1. Retrieve existing bot comments for the PR
96
+ const { data: comments } = await github.rest.issues.listComments({
97
+ owner: context.repo.owner,
98
+ repo: context.repo.repo,
99
+ issue_number: context.issue.number,
100
+ })
101
+ const botComment = comments.find(comment => {
102
+ return comment.user.type === 'Bot' && comment.body.includes('Terraform Format and Style')
103
+ })
104
+
105
+ // 2. Prepare format of the comment
106
+ const output = \`#### Terraform Format and Style 🖌\\\`\${{ steps.fmt.outcome }}\\\`
107
+ #### Terraform Initialization ⚙️\\\`\${{ steps.init.outcome }}\\\`
108
+ #### Terraform Validation 🤖\\\`\${{ steps.validate.outcome }}\\\`
109
+ <details><summary>Validation Output</summary>
110
+
111
+ \\\`\\\`\\\`
112
+ \${{ steps.validate.outputs.stdout }}
113
+ \\\`\\\`\\\`
114
+
115
+ </details>
116
+
117
+ #### Terraform Plan 📖\\\`\${{ steps.plan.outcome }}\\\`
118
+
119
+ <details><summary>Show Plan</summary>
120
+
121
+ \\\`\\\`\\\`
122
+ \${process.env.PLAN}
123
+ \\\`\\\`\\\`
124
+
125
+ </details>
126
+
127
+ *Pusher: @\${{ github.actor }}, Action: \\\`\${{ github.event_name }}\\\`, Working Directory: \\\`\${{ env.tf_actions_working_dir }}\\\`, Workflow: \\\`\${{ github.workflow }}\\\`*\`;
128
+
129
+ // 3. If we have a comment, update it, otherwise create a new one
130
+ if (botComment) {
131
+ github.rest.issues.updateComment({
132
+ owner: context.repo.owner,
133
+ repo: context.repo.repo,
134
+ comment_id: botComment.id,
135
+ body: output
136
+ })
137
+ } else {
138
+ github.rest.issues.createComment({
139
+ issue_number: context.issue.number,
140
+ owner: context.repo.owner,
141
+ repo: context.repo.repo,
142
+ body: output
143
+ })
144
+ }
145
+ `,
146
+ },
147
+ },
148
+ ],
149
+ });
150
+ }
151
+ }
152
+ exports.TerraformPlanGithubWorkflow = TerraformPlanGithubWorkflow;
153
+ _a = JSII_RTTI_SYMBOL_1;
154
+ TerraformPlanGithubWorkflow[_a] = { fqn: "@jttc/projen-project-types.TerraformPlanGithubWorkflow", version: "1.0.0-beta.10" };
155
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVycmFmb3JtLXBsYW4tZ2l0aHViLXdvcmtmbG93LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL3RlcnJhZm9ybS9jb21wb25lbnRzL3RlcnJhZm9ybS1wbGFuLWdpdGh1Yi13b3JrZmxvdy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUFBLG1DQUE0QztBQUM1Qyw4Q0FBMkM7QUFDM0MsdUVBQWtFO0FBeUJsRTs7Ozs7O0dBTUc7QUFDSCxNQUFhLDJCQUE0QixTQUFRLGtCQUFTO0lBQ3hELFlBQ0UsT0FBZ0IsRUFDaEIsVUFBOEMsRUFBRTtRQUVoRCxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUM7UUFFZiwrRkFBK0Y7UUFDL0YsTUFBTSxhQUFhLEdBQUcsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDO1FBQzlELElBQUksTUFBTSxHQUFHLGFBQWEsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUN4QyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxJQUFJLEtBQUssUUFBUSxDQUM3QixDQUFDO1FBQ1osSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO1lBQ1osTUFBTSxHQUFHLElBQUksZUFBTSxDQUFDLGFBQWEsQ0FBQyxDQUFDO1FBQ3JDLENBQUM7UUFFRCxNQUFNLFlBQVksR0FBRyxPQUFPLENBQUMsWUFBWSxJQUFJLGdCQUFnQixDQUFDO1FBQzlELE1BQU0sZ0JBQWdCLEdBQUcsT0FBTyxDQUFDLGdCQUFnQixJQUFJLE9BQU8sQ0FBQztRQUM3RCxNQUFNLGdCQUFnQixHQUNwQixPQUFPLENBQUMsZ0JBQWdCLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUV0RSxNQUFNLFFBQVEsR0FBRyxNQUFNLENBQUMsV0FBVyxDQUFDLFlBQVksQ0FBQyxDQUFDO1FBRWxELFFBQVEsQ0FBQyxFQUFFLENBQUM7WUFDVixXQUFXLEVBQUU7Z0JBQ1gsUUFBUSxFQUFFLENBQUMsTUFBTSxDQUFDO2dCQUNsQixLQUFLLEVBQUUsQ0FBQyxPQUFPLEVBQUUsV0FBVyxDQUFDO2FBQzlCO1NBQ0YsQ0FBQyxDQUFDO1FBRUgsaURBQWlEO1FBQ2pELFFBQVEsQ0FBQyxNQUFNLENBQUMsZ0JBQWdCLEVBQUU7WUFDaEMsSUFBSSxFQUFFLGdCQUFnQjtZQUN0QixNQUFNLEVBQUUsQ0FBQyxlQUFlLENBQUM7WUFDekIsR0FBRyxFQUFFO2dCQUNILHNCQUFzQixFQUFFLGdCQUFnQjthQUN6QztZQUNELFFBQVEsRUFBRTtnQkFDUixHQUFHLEVBQUU7b0JBQ0gsZ0JBQWdCLEVBQUUsbUNBQW1DO2lCQUN0RDthQUNGO1lBQ0QsV0FBVyxFQUFFO2dCQUNYLFFBQVEsRUFBRSwrQkFBYSxDQUFDLElBQUk7Z0JBQzVCLFlBQVksRUFBRSwrQkFBYSxDQUFDLEtBQUs7YUFDbEM7WUFDRCxLQUFLLEVBQUU7Z0JBQ0w7b0JBQ0UsSUFBSSxFQUFFLFVBQVU7b0JBQ2hCLElBQUksRUFBRSxxQkFBcUI7aUJBQzVCO2dCQUNEO29CQUNFLElBQUksRUFBRSxpQkFBaUI7b0JBQ3ZCLElBQUksRUFBRSw4QkFBOEI7b0JBQ3BDLElBQUksRUFBRTt3QkFDSixnQkFBZ0IsRUFBRSxnQkFBZ0I7cUJBQ25DO2lCQUNGO2dCQUNEO29CQUNFLElBQUksRUFBRSxrQkFBa0I7b0JBQ3hCLEVBQUUsRUFBRSxLQUFLO29CQUNULEdBQUcsRUFBRSxzQkFBc0I7b0JBQzNCLGVBQWUsRUFBRSxJQUFJO2lCQUN0QjtnQkFDRDtvQkFDRSxJQUFJLEVBQUUsZ0JBQWdCO29CQUN0QixFQUFFLEVBQUUsTUFBTTtvQkFDVixHQUFHLEVBQUUsNkJBQTZCO2lCQUNuQztnQkFDRDtvQkFDRSxJQUFJLEVBQUUsb0JBQW9CO29CQUMxQixFQUFFLEVBQUUsVUFBVTtvQkFDZCxHQUFHLEVBQUUsOEJBQThCO2lCQUNwQztnQkFDRDtvQkFDRSxJQUFJLEVBQUUsZ0JBQWdCO29CQUN0QixFQUFFLEVBQUUsTUFBTTtvQkFDVixHQUFHLEVBQUUsdUNBQXVDO29CQUM1QyxlQUFlLEVBQUUsSUFBSTtpQkFDdEI7Z0JBQ0Q7b0JBQ0UsSUFBSSxFQUFFLFlBQVk7b0JBQ2xCLElBQUksRUFBRSwwQkFBMEI7b0JBQ2hDLEVBQUUsRUFBRSxxQ0FBcUM7b0JBQ3pDLEdBQUcsRUFBRTt3QkFDSCxJQUFJLEVBQUUsOENBQThDO3FCQUNyRDtvQkFDRCxJQUFJLEVBQUU7d0JBQ0osY0FBYyxFQUFFLDZCQUE2Qjt3QkFDN0MsTUFBTSxFQUFFOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7YUFtRFA7cUJBQ0Y7aUJBQ0Y7YUFDRjtTQUNGLENBQUMsQ0FBQztJQUNMLENBQUM7O0FBakpILGtFQWtKQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgUHJvamVjdCB9IGZyb20gJ3Byb2plbic7XG5pbXBvcnQgeyBHaXRIdWIgfSBmcm9tICdwcm9qZW4vbGliL2dpdGh1Yic7XG5pbXBvcnQgeyBKb2JQZXJtaXNzaW9uIH0gZnJvbSAncHJvamVuL2xpYi9naXRodWIvd29ya2Zsb3dzLW1vZGVsJztcblxuLyoqXG4gKiBPcHRpb25zIGZvciBUZXJyYWZvcm1QbGFuR2l0aHViV29ya2Zsb3cgY29tcG9uZW50LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFRlcnJhZm9ybVBsYW5HaXRodWJXb3JrZmxvd09wdGlvbnMge1xuICAvKipcbiAgICogVGVycmFmb3JtIHZlcnNpb24gdG8gdXNlIGluIHRoZSB3b3JrZmxvdy5cbiAgICogQGRlZmF1bHQgXCIxLjYuMFwiXG4gICAqL1xuICByZWFkb25seSB0ZXJyYWZvcm1WZXJzaW9uPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBOYW1lIG9mIHRoZSB3b3JrZmxvdy5cbiAgICogQGRlZmF1bHQgXCJ0ZXJyYWZvcm0tcGxhblwiXG4gICAqL1xuICByZWFkb25seSB3b3JrZmxvd05hbWU/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFdvcmtpbmcgZGlyZWN0b3J5IGZvciBUZXJyYWZvcm0gY29tbWFuZHMuXG4gICAqIEBkZWZhdWx0IFwiLlwiXG4gICAqL1xuICByZWFkb25seSB3b3JraW5nRGlyZWN0b3J5Pzogc3RyaW5nO1xufVxuXG4vKipcbiAqIEdpdEh1YiB3b3JrZmxvdyBjb21wb25lbnQgZm9yIFRlcnJhZm9ybSBwbGFuIG9uIFB1bGwgUmVxdWVzdHMuXG4gKiBDcmVhdGVzIGEgd29ya2Zsb3cgdGhhdCB2YWxpZGF0ZXMsIHBsYW5zIFRlcnJhZm9ybSBjaGFuZ2VzIGFuZCBjb21tZW50cyByZXN1bHRzIG9uIFBScy5cbiAqXG4gKiBUaGlzIGNvbXBvbmVudCBpcyBkZXNpZ25lZCBmb3IgVGVycmFmb3JtIHN0YWNrIHByb2plY3RzIHRvIHNob3cgcGxhbiByZXN1bHRzXG4gKiBpbiBQdWxsIFJlcXVlc3RzIHdpdGhvdXQgYWN0dWFsbHkgYXBwbHlpbmcgY2hhbmdlcy5cbiAqL1xuZXhwb3J0IGNsYXNzIFRlcnJhZm9ybVBsYW5HaXRodWJXb3JrZmxvdyBleHRlbmRzIENvbXBvbmVudCB7XG4gIGNvbnN0cnVjdG9yKFxuICAgIHByb2plY3Q6IFByb2plY3QsXG4gICAgb3B0aW9uczogVGVycmFmb3JtUGxhbkdpdGh1YldvcmtmbG93T3B0aW9ucyA9IHt9LFxuICApIHtcbiAgICBzdXBlcihwcm9qZWN0KTtcblxuICAgIC8vIEdldCBvciBjcmVhdGUgR2l0SHViIGNvbXBvbmVudCAtIHVzZSByb290IHByb2plY3QgZm9yIHN1YnByb2plY3RzLCBjdXJyZW50IHByb2plY3Qgb3RoZXJ3aXNlXG4gICAgY29uc3QgdGFyZ2V0UHJvamVjdCA9IHByb2plY3QucGFyZW50ID8gcHJvamVjdC5yb290IDogcHJvamVjdDtcbiAgICBsZXQgZ2l0aHViID0gdGFyZ2V0UHJvamVjdC5jb21wb25lbnRzLmZpbmQoXG4gICAgICAoYykgPT4gYy5jb25zdHJ1Y3Rvci5uYW1lID09PSAnR2l0SHViJyxcbiAgICApIGFzIEdpdEh1YjtcbiAgICBpZiAoIWdpdGh1Yikge1xuICAgICAgZ2l0aHViID0gbmV3IEdpdEh1Yih0YXJnZXRQcm9qZWN0KTtcbiAgICB9XG5cbiAgICBjb25zdCB3b3JrZmxvd05hbWUgPSBvcHRpb25zLndvcmtmbG93TmFtZSA/PyAndGVycmFmb3JtLXBsYW4nO1xuICAgIGNvbnN0IHRlcnJhZm9ybVZlcnNpb24gPSBvcHRpb25zLnRlcnJhZm9ybVZlcnNpb24gPz8gJzEuNi4wJztcbiAgICBjb25zdCB3b3JraW5nRGlyZWN0b3J5ID1cbiAgICAgIG9wdGlvbnMud29ya2luZ0RpcmVjdG9yeSA/PyAocHJvamVjdC5wYXJlbnQgPyBwcm9qZWN0Lm91dGRpciA6ICcuJyk7XG5cbiAgICBjb25zdCB3b3JrZmxvdyA9IGdpdGh1Yi5hZGRXb3JrZmxvdyh3b3JrZmxvd05hbWUpO1xuXG4gICAgd29ya2Zsb3cub24oe1xuICAgICAgcHVsbFJlcXVlc3Q6IHtcbiAgICAgICAgYnJhbmNoZXM6IFsnbWFpbiddLFxuICAgICAgICBwYXRoczogWycqKi50ZicsICcqKi50ZnZhcnMnXSxcbiAgICAgIH0sXG4gICAgfSk7XG5cbiAgICAvLyBBZGQgZW52aXJvbm1lbnQgdmFyaWFibGUgZm9yIHdvcmtpbmcgZGlyZWN0b3J5XG4gICAgd29ya2Zsb3cuYWRkSm9iKCd0ZXJyYWZvcm0tcGxhbicsIHtcbiAgICAgIG5hbWU6ICdUZXJyYWZvcm0gUGxhbicsXG4gICAgICBydW5zT246IFsndWJ1bnR1LWxhdGVzdCddLFxuICAgICAgZW52OiB7XG4gICAgICAgIHRmX2FjdGlvbnNfd29ya2luZ19kaXI6IHdvcmtpbmdEaXJlY3RvcnksXG4gICAgICB9LFxuICAgICAgZGVmYXVsdHM6IHtcbiAgICAgICAgcnVuOiB7XG4gICAgICAgICAgd29ya2luZ0RpcmVjdG9yeTogJyR7eyBlbnYudGZfYWN0aW9uc193b3JraW5nX2RpciB9fScsXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgICAgcGVybWlzc2lvbnM6IHtcbiAgICAgICAgY29udGVudHM6IEpvYlBlcm1pc3Npb24uUkVBRCxcbiAgICAgICAgcHVsbFJlcXVlc3RzOiBKb2JQZXJtaXNzaW9uLldSSVRFLFxuICAgICAgfSxcbiAgICAgIHN0ZXBzOiBbXG4gICAgICAgIHtcbiAgICAgICAgICBuYW1lOiAnQ2hlY2tvdXQnLFxuICAgICAgICAgIHVzZXM6ICdhY3Rpb25zL2NoZWNrb3V0QHY0JyxcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIG5hbWU6ICdTZXR1cCBUZXJyYWZvcm0nLFxuICAgICAgICAgIHVzZXM6ICdoYXNoaWNvcnAvc2V0dXAtdGVycmFmb3JtQHYzJyxcbiAgICAgICAgICB3aXRoOiB7XG4gICAgICAgICAgICB0ZXJyYWZvcm1WZXJzaW9uOiB0ZXJyYWZvcm1WZXJzaW9uLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBuYW1lOiAnVGVycmFmb3JtIEZvcm1hdCcsXG4gICAgICAgICAgaWQ6ICdmbXQnLFxuICAgICAgICAgIHJ1bjogJ3RlcnJhZm9ybSBmbXQgLWNoZWNrJyxcbiAgICAgICAgICBjb250aW51ZU9uRXJyb3I6IHRydWUsXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBuYW1lOiAnVGVycmFmb3JtIEluaXQnLFxuICAgICAgICAgIGlkOiAnaW5pdCcsXG4gICAgICAgICAgcnVuOiAndGVycmFmb3JtIGluaXQgLWlucHV0PWZhbHNlJyxcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIG5hbWU6ICdUZXJyYWZvcm0gVmFsaWRhdGUnLFxuICAgICAgICAgIGlkOiAndmFsaWRhdGUnLFxuICAgICAgICAgIHJ1bjogJ3RlcnJhZm9ybSB2YWxpZGF0ZSAtbm8tY29sb3InLFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgbmFtZTogJ1RlcnJhZm9ybSBQbGFuJyxcbiAgICAgICAgICBpZDogJ3BsYW4nLFxuICAgICAgICAgIHJ1bjogJ3RlcnJhZm9ybSBwbGFuIC1uby1jb2xvciAtaW5wdXQ9ZmFsc2UnLFxuICAgICAgICAgIGNvbnRpbnVlT25FcnJvcjogdHJ1ZSxcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIG5hbWU6ICdDb21tZW50IFBSJyxcbiAgICAgICAgICB1c2VzOiAnYWN0aW9ucy9naXRodWItc2NyaXB0QHY3JyxcbiAgICAgICAgICBpZjogXCJnaXRodWIuZXZlbnRfbmFtZSA9PSAncHVsbF9yZXF1ZXN0J1wiLFxuICAgICAgICAgIGVudjoge1xuICAgICAgICAgICAgUExBTjogJ3RlcnJhZm9ybVxcXFxuJHt7IHN0ZXBzLnBsYW4ub3V0cHV0cy5zdGRvdXQgfX0nLFxuICAgICAgICAgIH0sXG4gICAgICAgICAgd2l0aDoge1xuICAgICAgICAgICAgJ2dpdGh1Yi10b2tlbic6ICcke3sgc2VjcmV0cy5HSVRIVUJfVE9LRU4gfX0nLFxuICAgICAgICAgICAgc2NyaXB0OiBgXG4gICAgICAgICAgICAgIC8vIDEuIFJldHJpZXZlIGV4aXN0aW5nIGJvdCBjb21tZW50cyBmb3IgdGhlIFBSXG4gICAgICAgICAgICAgIGNvbnN0IHsgZGF0YTogY29tbWVudHMgfSA9IGF3YWl0IGdpdGh1Yi5yZXN0Lmlzc3Vlcy5saXN0Q29tbWVudHMoe1xuICAgICAgICAgICAgICAgIG93bmVyOiBjb250ZXh0LnJlcG8ub3duZXIsXG4gICAgICAgICAgICAgICAgcmVwbzogY29udGV4dC5yZXBvLnJlcG8sXG4gICAgICAgICAgICAgICAgaXNzdWVfbnVtYmVyOiBjb250ZXh0Lmlzc3VlLm51bWJlcixcbiAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgY29uc3QgYm90Q29tbWVudCA9IGNvbW1lbnRzLmZpbmQoY29tbWVudCA9PiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGNvbW1lbnQudXNlci50eXBlID09PSAnQm90JyAmJiBjb21tZW50LmJvZHkuaW5jbHVkZXMoJ1RlcnJhZm9ybSBGb3JtYXQgYW5kIFN0eWxlJylcbiAgICAgICAgICAgICAgfSlcblxuICAgICAgICAgICAgICAvLyAyLiBQcmVwYXJlIGZvcm1hdCBvZiB0aGUgY29tbWVudFxuICAgICAgICAgICAgICBjb25zdCBvdXRwdXQgPSBcXGAjIyMjIFRlcnJhZm9ybSBGb3JtYXQgYW5kIFN0eWxlIPCfloxcXFxcXFxgXFwke3sgc3RlcHMuZm10Lm91dGNvbWUgfX1cXFxcXFxgXG4gICAgICAgICAgICAgICMjIyMgVGVycmFmb3JtIEluaXRpYWxpemF0aW9uIOKame+4j1xcXFxcXGBcXCR7eyBzdGVwcy5pbml0Lm91dGNvbWUgfX1cXFxcXFxgXG4gICAgICAgICAgICAgICMjIyMgVGVycmFmb3JtIFZhbGlkYXRpb24g8J+kllxcXFxcXGBcXCR7eyBzdGVwcy52YWxpZGF0ZS5vdXRjb21lIH19XFxcXFxcYFxuICAgICAgICAgICAgICA8ZGV0YWlscz48c3VtbWFyeT5WYWxpZGF0aW9uIE91dHB1dDwvc3VtbWFyeT5cblxuICAgICAgICAgICAgICBcXFxcXFxgXFxcXFxcYFxcXFxcXGBcbiAgICAgICAgICAgICAgXFwke3sgc3RlcHMudmFsaWRhdGUub3V0cHV0cy5zdGRvdXQgfX1cbiAgICAgICAgICAgICAgXFxcXFxcYFxcXFxcXGBcXFxcXFxgXG5cbiAgICAgICAgICAgICAgPC9kZXRhaWxzPlxuXG4gICAgICAgICAgICAgICMjIyMgVGVycmFmb3JtIFBsYW4g8J+TllxcXFxcXGBcXCR7eyBzdGVwcy5wbGFuLm91dGNvbWUgfX1cXFxcXFxgXG5cbiAgICAgICAgICAgICAgPGRldGFpbHM+PHN1bW1hcnk+U2hvdyBQbGFuPC9zdW1tYXJ5PlxuXG4gICAgICAgICAgICAgIFxcXFxcXGBcXFxcXFxgXFxcXFxcYFxuICAgICAgICAgICAgICBcXCR7cHJvY2Vzcy5lbnYuUExBTn1cbiAgICAgICAgICAgICAgXFxcXFxcYFxcXFxcXGBcXFxcXFxgXG5cbiAgICAgICAgICAgICAgPC9kZXRhaWxzPlxuXG4gICAgICAgICAgICAgICpQdXNoZXI6IEBcXCR7eyBnaXRodWIuYWN0b3IgfX0sIEFjdGlvbjogXFxcXFxcYFxcJHt7IGdpdGh1Yi5ldmVudF9uYW1lIH19XFxcXFxcYCwgV29ya2luZyBEaXJlY3Rvcnk6IFxcXFxcXGBcXCR7eyBlbnYudGZfYWN0aW9uc193b3JraW5nX2RpciB9fVxcXFxcXGAsIFdvcmtmbG93OiBcXFxcXFxgXFwke3sgZ2l0aHViLndvcmtmbG93IH19XFxcXFxcYCpcXGA7XG5cbiAgICAgICAgICAgICAgLy8gMy4gSWYgd2UgaGF2ZSBhIGNvbW1lbnQsIHVwZGF0ZSBpdCwgb3RoZXJ3aXNlIGNyZWF0ZSBhIG5ldyBvbmVcbiAgICAgICAgICAgICAgaWYgKGJvdENvbW1lbnQpIHtcbiAgICAgICAgICAgICAgICBnaXRodWIucmVzdC5pc3N1ZXMudXBkYXRlQ29tbWVudCh7XG4gICAgICAgICAgICAgICAgICBvd25lcjogY29udGV4dC5yZXBvLm93bmVyLFxuICAgICAgICAgICAgICAgICAgcmVwbzogY29udGV4dC5yZXBvLnJlcG8sXG4gICAgICAgICAgICAgICAgICBjb21tZW50X2lkOiBib3RDb21tZW50LmlkLFxuICAgICAgICAgICAgICAgICAgYm9keTogb3V0cHV0XG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBnaXRodWIucmVzdC5pc3N1ZXMuY3JlYXRlQ29tbWVudCh7XG4gICAgICAgICAgICAgICAgICBpc3N1ZV9udW1iZXI6IGNvbnRleHQuaXNzdWUubnVtYmVyLFxuICAgICAgICAgICAgICAgICAgb3duZXI6IGNvbnRleHQucmVwby5vd25lcixcbiAgICAgICAgICAgICAgICAgIHJlcG86IGNvbnRleHQucmVwby5yZXBvLFxuICAgICAgICAgICAgICAgICAgYm9keTogb3V0cHV0XG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgYCxcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgXSxcbiAgICB9KTtcbiAgfVxufVxuIl19
@@ -0,0 +1,5 @@
1
+ export * from './components';
2
+ export * from './terraform-base-project';
3
+ export * from './terraform-stack-project';
4
+ export * from './terraform-module-project';
5
+ export * from './providers';
@@ -0,0 +1,22 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
+ };
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ __exportStar(require("./components"), exports);
18
+ __exportStar(require("./terraform-base-project"), exports);
19
+ __exportStar(require("./terraform-stack-project"), exports);
20
+ __exportStar(require("./terraform-module-project"), exports);
21
+ __exportStar(require("./providers"), exports);
22
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdGVycmFmb3JtL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSwrQ0FBNkI7QUFDN0IsMkRBQXlDO0FBQ3pDLDREQUEwQztBQUMxQyw2REFBMkM7QUFDM0MsOENBQTRCIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0ICogZnJvbSAnLi9jb21wb25lbnRzJztcbmV4cG9ydCAqIGZyb20gJy4vdGVycmFmb3JtLWJhc2UtcHJvamVjdCc7XG5leHBvcnQgKiBmcm9tICcuL3RlcnJhZm9ybS1zdGFjay1wcm9qZWN0JztcbmV4cG9ydCAqIGZyb20gJy4vdGVycmFmb3JtLW1vZHVsZS1wcm9qZWN0JztcbmV4cG9ydCAqIGZyb20gJy4vcHJvdmlkZXJzJztcbiJdfQ==
@@ -0,0 +1,105 @@
1
+ import { TerraformProvider, TerraformProviderOptions } from './provider-strategy';
2
+ /**
3
+ * Poll function types for Hetzner Cloud provider.
4
+ */
5
+ export declare enum HetznerPollFunction {
6
+ /**
7
+ * Constant polling interval.
8
+ */
9
+ CONSTANT = "constant",
10
+ /**
11
+ * Exponential backoff polling.
12
+ */
13
+ EXPONENTIAL = "exponential"
14
+ }
15
+ /**
16
+ * Configuration for a specific Hetzner Cloud provider instance.
17
+ */
18
+ export interface HetznerProviderConfig {
19
+ /**
20
+ * Provider alias for multiple configurations.
21
+ */
22
+ readonly alias?: string;
23
+ /**
24
+ * Hetzner Cloud API token (can be set via HCLOUD_TOKEN env var).
25
+ * Required unless useEnvironmentToken is true or set via environment variable.
26
+ */
27
+ readonly token?: string;
28
+ /**
29
+ * Use HCLOUD_TOKEN environment variable for authentication.
30
+ * When true, the token will be read from HCLOUD_TOKEN environment variable
31
+ * and no explicit token configuration will be generated in the provider block.
32
+ * This is useful for CI/CD pipelines and different environments.
33
+ * @default true
34
+ */
35
+ readonly useEnvironmentToken?: boolean;
36
+ /**
37
+ * Hetzner Cloud API endpoint.
38
+ * @default "https://api.hetzner.cloud/v1"
39
+ */
40
+ readonly endpoint?: string;
41
+ /**
42
+ * Hetzner API endpoint (for Hetzner services, not Hetzner Cloud).
43
+ * @default "https://api.hetzner.com/v1"
44
+ */
45
+ readonly endpointHetzner?: string;
46
+ /**
47
+ * Configures the interval in which actions are polled by the client.
48
+ * @default "500ms"
49
+ * @example "1s", "2000ms"
50
+ */
51
+ readonly pollInterval?: string;
52
+ /**
53
+ * Configures the type of function to be used during polling.
54
+ * @default "exponential"
55
+ */
56
+ readonly pollFunction?: HetznerPollFunction;
57
+ }
58
+ /**
59
+ * Options for Hetzner Terraform provider.
60
+ */
61
+ export interface HetznerProviderOptions extends TerraformProviderOptions {
62
+ /**
63
+ * Array of provider configurations for multiple instances/projects.
64
+ * Each configuration can have its own alias, token, and settings.
65
+ *
66
+ * If empty or not provided, a default configuration will be created
67
+ * with useEnvironmentToken: true and no alias.
68
+ *
69
+ * @example
70
+ * // Simple case - uses default configuration with HCLOUD_TOKEN env var
71
+ * new HetznerProvider({
72
+ * version: '~> 1.45'
73
+ * })
74
+ *
75
+ * // Multiple configurations
76
+ * new HetznerProvider({
77
+ * version: '~> 1.45',
78
+ * providers: [
79
+ * {
80
+ * alias: 'dns',
81
+ * token: 'dns-project-token',
82
+ * useEnvironmentToken: false
83
+ * },
84
+ * {
85
+ * alias: 'staging',
86
+ * useEnvironmentToken: true
87
+ * }
88
+ * ]
89
+ * })
90
+ */
91
+ readonly providers?: HetznerProviderConfig[];
92
+ }
93
+ /**
94
+ * Hetzner Cloud Terraform provider configuration.
95
+ */
96
+ export declare class HetznerProvider extends TerraformProvider {
97
+ private readonly providerConfigs;
98
+ constructor(options: HetznerProviderOptions);
99
+ providerSource(): string;
100
+ generateProviderBlock(): string[];
101
+ /**
102
+ * Add a new provider configuration.
103
+ */
104
+ addProviderConfig(config: HetznerProviderConfig): void;
105
+ }
@@ -0,0 +1,83 @@
1
+ "use strict";
2
+ var _a;
3
+ Object.defineProperty(exports, "__esModule", { value: true });
4
+ exports.HetznerProvider = exports.HetznerPollFunction = void 0;
5
+ const JSII_RTTI_SYMBOL_1 = Symbol.for("jsii.rtti");
6
+ const provider_strategy_1 = require("./provider-strategy");
7
+ /**
8
+ * Poll function types for Hetzner Cloud provider.
9
+ */
10
+ var HetznerPollFunction;
11
+ (function (HetznerPollFunction) {
12
+ /**
13
+ * Constant polling interval.
14
+ */
15
+ HetznerPollFunction["CONSTANT"] = "constant";
16
+ /**
17
+ * Exponential backoff polling.
18
+ */
19
+ HetznerPollFunction["EXPONENTIAL"] = "exponential";
20
+ })(HetznerPollFunction || (exports.HetznerPollFunction = HetznerPollFunction = {}));
21
+ /**
22
+ * Hetzner Cloud Terraform provider configuration.
23
+ */
24
+ class HetznerProvider extends provider_strategy_1.TerraformProvider {
25
+ constructor(options) {
26
+ super('hcloud', options);
27
+ // If no providers are specified, create a default configuration
28
+ this.providerConfigs =
29
+ options.providers && options.providers.length > 0
30
+ ? options.providers
31
+ : [
32
+ {
33
+ useEnvironmentToken: true,
34
+ },
35
+ ];
36
+ }
37
+ providerSource() {
38
+ return 'hetznercloud/hcloud';
39
+ }
40
+ generateProviderBlock() {
41
+ const lines = [];
42
+ // Generate provider block for each configuration
43
+ this.providerConfigs.forEach((config) => {
44
+ lines.push('provider "hcloud" {');
45
+ if (config.alias) {
46
+ lines.push(` alias = "${config.alias}"`);
47
+ }
48
+ if (config.useEnvironmentToken !== false) {
49
+ lines.push(' # token will be read from HCLOUD_TOKEN environment variable');
50
+ }
51
+ else if (config.token) {
52
+ lines.push(` token = "${config.token}"`);
53
+ }
54
+ else {
55
+ lines.push(' # token = var.hcloud_token # Please set token or use useEnvironmentToken: true');
56
+ }
57
+ if (config.endpoint) {
58
+ lines.push(` endpoint = "${config.endpoint}"`);
59
+ }
60
+ if (config.endpointHetzner) {
61
+ lines.push(` endpoint_hetzner = "${config.endpointHetzner}"`);
62
+ }
63
+ if (config.pollInterval) {
64
+ lines.push(` poll_interval = "${config.pollInterval}"`);
65
+ }
66
+ if (config.pollFunction) {
67
+ lines.push(` poll_function = "${config.pollFunction}"`);
68
+ }
69
+ lines.push('}');
70
+ });
71
+ return lines;
72
+ }
73
+ /**
74
+ * Add a new provider configuration.
75
+ */
76
+ addProviderConfig(config) {
77
+ this.providerConfigs.push(config);
78
+ }
79
+ }
80
+ exports.HetznerProvider = HetznerProvider;
81
+ _a = JSII_RTTI_SYMBOL_1;
82
+ HetznerProvider[_a] = { fqn: "@jttc/projen-project-types.HetznerProvider", version: "1.0.0-beta.10" };
83
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGV0em5lci1wcm92aWRlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy90ZXJyYWZvcm0vcHJvdmlkZXJzL2hldHpuZXItcHJvdmlkZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSwyREFHNkI7QUFFN0I7O0dBRUc7QUFDSCxJQUFZLG1CQVVYO0FBVkQsV0FBWSxtQkFBbUI7SUFDN0I7O09BRUc7SUFDSCw0Q0FBcUIsQ0FBQTtJQUVyQjs7T0FFRztJQUNILGtEQUEyQixDQUFBO0FBQzdCLENBQUMsRUFWVyxtQkFBbUIsbUNBQW5CLG1CQUFtQixRQVU5QjtBQXdGRDs7R0FFRztBQUNILE1BQWEsZUFBZ0IsU0FBUSxxQ0FBaUI7SUFHcEQsWUFBWSxPQUErQjtRQUN6QyxLQUFLLENBQUMsUUFBUSxFQUFFLE9BQU8sQ0FBQyxDQUFDO1FBRXpCLGdFQUFnRTtRQUNoRSxJQUFJLENBQUMsZUFBZTtZQUNsQixPQUFPLENBQUMsU0FBUyxJQUFJLE9BQU8sQ0FBQyxTQUFTLENBQUMsTUFBTSxHQUFHLENBQUM7Z0JBQy9DLENBQUMsQ0FBQyxPQUFPLENBQUMsU0FBUztnQkFDbkIsQ0FBQyxDQUFDO29CQUNFO3dCQUNFLG1CQUFtQixFQUFFLElBQUk7cUJBQzFCO2lCQUNGLENBQUM7SUFDVixDQUFDO0lBRU0sY0FBYztRQUNuQixPQUFPLHFCQUFxQixDQUFDO0lBQy9CLENBQUM7SUFFTSxxQkFBcUI7UUFDMUIsTUFBTSxLQUFLLEdBQWEsRUFBRSxDQUFDO1FBRTNCLGlEQUFpRDtRQUNqRCxJQUFJLENBQUMsZUFBZSxDQUFDLE9BQU8sQ0FBQyxDQUFDLE1BQU0sRUFBRSxFQUFFO1lBQ3RDLEtBQUssQ0FBQyxJQUFJLENBQUMscUJBQXFCLENBQUMsQ0FBQztZQUVsQyxJQUFJLE1BQU0sQ0FBQyxLQUFLLEVBQUUsQ0FBQztnQkFDakIsS0FBSyxDQUFDLElBQUksQ0FBQyxjQUFjLE1BQU0sQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDO1lBQzVDLENBQUM7WUFFRCxJQUFJLE1BQU0sQ0FBQyxtQkFBbUIsS0FBSyxLQUFLLEVBQUUsQ0FBQztnQkFDekMsS0FBSyxDQUFDLElBQUksQ0FDUiwrREFBK0QsQ0FDaEUsQ0FBQztZQUNKLENBQUM7aUJBQU0sSUFBSSxNQUFNLENBQUMsS0FBSyxFQUFFLENBQUM7Z0JBQ3hCLEtBQUssQ0FBQyxJQUFJLENBQUMsY0FBYyxNQUFNLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQztZQUM1QyxDQUFDO2lCQUFNLENBQUM7Z0JBQ04sS0FBSyxDQUFDLElBQUksQ0FDUixtRkFBbUYsQ0FDcEYsQ0FBQztZQUNKLENBQUM7WUFFRCxJQUFJLE1BQU0sQ0FBQyxRQUFRLEVBQUUsQ0FBQztnQkFDcEIsS0FBSyxDQUFDLElBQUksQ0FBQyxpQkFBaUIsTUFBTSxDQUFDLFFBQVEsR0FBRyxDQUFDLENBQUM7WUFDbEQsQ0FBQztZQUVELElBQUksTUFBTSxDQUFDLGVBQWUsRUFBRSxDQUFDO2dCQUMzQixLQUFLLENBQUMsSUFBSSxDQUFDLHlCQUF5QixNQUFNLENBQUMsZUFBZSxHQUFHLENBQUMsQ0FBQztZQUNqRSxDQUFDO1lBRUQsSUFBSSxNQUFNLENBQUMsWUFBWSxFQUFFLENBQUM7Z0JBQ3hCLEtBQUssQ0FBQyxJQUFJLENBQUMsc0JBQXNCLE1BQU0sQ0FBQyxZQUFZLEdBQUcsQ0FBQyxDQUFDO1lBQzNELENBQUM7WUFFRCxJQUFJLE1BQU0sQ0FBQyxZQUFZLEVBQUUsQ0FBQztnQkFDeEIsS0FBSyxDQUFDLElBQUksQ0FBQyxzQkFBc0IsTUFBTSxDQUFDLFlBQVksR0FBRyxDQUFDLENBQUM7WUFDM0QsQ0FBQztZQUVELEtBQUssQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDbEIsQ0FBQyxDQUFDLENBQUM7UUFFSCxPQUFPLEtBQUssQ0FBQztJQUNmLENBQUM7SUFFRDs7T0FFRztJQUNJLGlCQUFpQixDQUFDLE1BQTZCO1FBQ3BELElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQ3BDLENBQUM7O0FBdkVILDBDQXdFQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIFRlcnJhZm9ybVByb3ZpZGVyLFxuICBUZXJyYWZvcm1Qcm92aWRlck9wdGlvbnMsXG59IGZyb20gJy4vcHJvdmlkZXItc3RyYXRlZ3knO1xuXG4vKipcbiAqIFBvbGwgZnVuY3Rpb24gdHlwZXMgZm9yIEhldHpuZXIgQ2xvdWQgcHJvdmlkZXIuXG4gKi9cbmV4cG9ydCBlbnVtIEhldHpuZXJQb2xsRnVuY3Rpb24ge1xuICAvKipcbiAgICogQ29uc3RhbnQgcG9sbGluZyBpbnRlcnZhbC5cbiAgICovXG4gIENPTlNUQU5UID0gJ2NvbnN0YW50JyxcblxuICAvKipcbiAgICogRXhwb25lbnRpYWwgYmFja29mZiBwb2xsaW5nLlxuICAgKi9cbiAgRVhQT05FTlRJQUwgPSAnZXhwb25lbnRpYWwnLFxufVxuXG4vKipcbiAqIENvbmZpZ3VyYXRpb24gZm9yIGEgc3BlY2lmaWMgSGV0em5lciBDbG91ZCBwcm92aWRlciBpbnN0YW5jZS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBIZXR6bmVyUHJvdmlkZXJDb25maWcge1xuICAvKipcbiAgICogUHJvdmlkZXIgYWxpYXMgZm9yIG11bHRpcGxlIGNvbmZpZ3VyYXRpb25zLlxuICAgKi9cbiAgcmVhZG9ubHkgYWxpYXM/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEhldHpuZXIgQ2xvdWQgQVBJIHRva2VuIChjYW4gYmUgc2V0IHZpYSBIQ0xPVURfVE9LRU4gZW52IHZhcikuXG4gICAqIFJlcXVpcmVkIHVubGVzcyB1c2VFbnZpcm9ubWVudFRva2VuIGlzIHRydWUgb3Igc2V0IHZpYSBlbnZpcm9ubWVudCB2YXJpYWJsZS5cbiAgICovXG4gIHJlYWRvbmx5IHRva2VuPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBVc2UgSENMT1VEX1RPS0VOIGVudmlyb25tZW50IHZhcmlhYmxlIGZvciBhdXRoZW50aWNhdGlvbi5cbiAgICogV2hlbiB0cnVlLCB0aGUgdG9rZW4gd2lsbCBiZSByZWFkIGZyb20gSENMT1VEX1RPS0VOIGVudmlyb25tZW50IHZhcmlhYmxlXG4gICAqIGFuZCBubyBleHBsaWNpdCB0b2tlbiBjb25maWd1cmF0aW9uIHdpbGwgYmUgZ2VuZXJhdGVkIGluIHRoZSBwcm92aWRlciBibG9jay5cbiAgICogVGhpcyBpcyB1c2VmdWwgZm9yIENJL0NEIHBpcGVsaW5lcyBhbmQgZGlmZmVyZW50IGVudmlyb25tZW50cy5cbiAgICogQGRlZmF1bHQgdHJ1ZVxuICAgKi9cbiAgcmVhZG9ubHkgdXNlRW52aXJvbm1lbnRUb2tlbj86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIEhldHpuZXIgQ2xvdWQgQVBJIGVuZHBvaW50LlxuICAgKiBAZGVmYXVsdCBcImh0dHBzOi8vYXBpLmhldHpuZXIuY2xvdWQvdjFcIlxuICAgKi9cbiAgcmVhZG9ubHkgZW5kcG9pbnQ/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEhldHpuZXIgQVBJIGVuZHBvaW50IChmb3IgSGV0em5lciBzZXJ2aWNlcywgbm90IEhldHpuZXIgQ2xvdWQpLlxuICAgKiBAZGVmYXVsdCBcImh0dHBzOi8vYXBpLmhldHpuZXIuY29tL3YxXCJcbiAgICovXG4gIHJlYWRvbmx5IGVuZHBvaW50SGV0em5lcj86IHN0cmluZztcblxuICAvKipcbiAgICogQ29uZmlndXJlcyB0aGUgaW50ZXJ2YWwgaW4gd2hpY2ggYWN0aW9ucyBhcmUgcG9sbGVkIGJ5IHRoZSBjbGllbnQuXG4gICAqIEBkZWZhdWx0IFwiNTAwbXNcIlxuICAgKiBAZXhhbXBsZSBcIjFzXCIsIFwiMjAwMG1zXCJcbiAgICovXG4gIHJlYWRvbmx5IHBvbGxJbnRlcnZhbD86IHN0cmluZztcblxuICAvKipcbiAgICogQ29uZmlndXJlcyB0aGUgdHlwZSBvZiBmdW5jdGlvbiB0byBiZSB1c2VkIGR1cmluZyBwb2xsaW5nLlxuICAgKiBAZGVmYXVsdCBcImV4cG9uZW50aWFsXCJcbiAgICovXG4gIHJlYWRvbmx5IHBvbGxGdW5jdGlvbj86IEhldHpuZXJQb2xsRnVuY3Rpb247XG59XG5cbi8qKlxuICogT3B0aW9ucyBmb3IgSGV0em5lciBUZXJyYWZvcm0gcHJvdmlkZXIuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSGV0em5lclByb3ZpZGVyT3B0aW9ucyBleHRlbmRzIFRlcnJhZm9ybVByb3ZpZGVyT3B0aW9ucyB7XG4gIC8qKlxuICAgKiBBcnJheSBvZiBwcm92aWRlciBjb25maWd1cmF0aW9ucyBmb3IgbXVsdGlwbGUgaW5zdGFuY2VzL3Byb2plY3RzLlxuICAgKiBFYWNoIGNvbmZpZ3VyYXRpb24gY2FuIGhhdmUgaXRzIG93biBhbGlhcywgdG9rZW4sIGFuZCBzZXR0aW5ncy5cbiAgICpcbiAgICogSWYgZW1wdHkgb3Igbm90IHByb3ZpZGVkLCBhIGRlZmF1bHQgY29uZmlndXJhdGlvbiB3aWxsIGJlIGNyZWF0ZWRcbiAgICogd2l0aCB1c2VFbnZpcm9ubWVudFRva2VuOiB0cnVlIGFuZCBubyBhbGlhcy5cbiAgICpcbiAgICogQGV4YW1wbGVcbiAgICogLy8gU2ltcGxlIGNhc2UgLSB1c2VzIGRlZmF1bHQgY29uZmlndXJhdGlvbiB3aXRoIEhDTE9VRF9UT0tFTiBlbnYgdmFyXG4gICAqIG5ldyBIZXR6bmVyUHJvdmlkZXIoe1xuICAgKiAgIHZlcnNpb246ICd+PiAxLjQ1J1xuICAgKiB9KVxuICAgKlxuICAgKiAvLyBNdWx0aXBsZSBjb25maWd1cmF0aW9uc1xuICAgKiBuZXcgSGV0em5lclByb3ZpZGVyKHtcbiAgICogICB2ZXJzaW9uOiAnfj4gMS40NScsXG4gICAqICAgcHJvdmlkZXJzOiBbXG4gICAqICAgICB7XG4gICAqICAgICAgIGFsaWFzOiAnZG5zJyxcbiAgICogICAgICAgdG9rZW46ICdkbnMtcHJvamVjdC10b2tlbicsXG4gICAqICAgICAgIHVzZUVudmlyb25tZW50VG9rZW46IGZhbHNlXG4gICAqICAgICB9LFxuICAgKiAgICAge1xuICAgKiAgICAgICBhbGlhczogJ3N0YWdpbmcnLFxuICAgKiAgICAgICB1c2VFbnZpcm9ubWVudFRva2VuOiB0cnVlXG4gICAqICAgICB9XG4gICAqICAgXVxuICAgKiB9KVxuICAgKi9cbiAgcmVhZG9ubHkgcHJvdmlkZXJzPzogSGV0em5lclByb3ZpZGVyQ29uZmlnW107XG59XG5cbi8qKlxuICogSGV0em5lciBDbG91ZCBUZXJyYWZvcm0gcHJvdmlkZXIgY29uZmlndXJhdGlvbi5cbiAqL1xuZXhwb3J0IGNsYXNzIEhldHpuZXJQcm92aWRlciBleHRlbmRzIFRlcnJhZm9ybVByb3ZpZGVyIHtcbiAgcHJpdmF0ZSByZWFkb25seSBwcm92aWRlckNvbmZpZ3M6IEhldHpuZXJQcm92aWRlckNvbmZpZ1tdO1xuXG4gIGNvbnN0cnVjdG9yKG9wdGlvbnM6IEhldHpuZXJQcm92aWRlck9wdGlvbnMpIHtcbiAgICBzdXBlcignaGNsb3VkJywgb3B0aW9ucyk7XG5cbiAgICAvLyBJZiBubyBwcm92aWRlcnMgYXJlIHNwZWNpZmllZCwgY3JlYXRlIGEgZGVmYXVsdCBjb25maWd1cmF0aW9uXG4gICAgdGhpcy5wcm92aWRlckNvbmZpZ3MgPVxuICAgICAgb3B0aW9ucy5wcm92aWRlcnMgJiYgb3B0aW9ucy5wcm92aWRlcnMubGVuZ3RoID4gMFxuICAgICAgICA/IG9wdGlvbnMucHJvdmlkZXJzXG4gICAgICAgIDogW1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICB1c2VFbnZpcm9ubWVudFRva2VuOiB0cnVlLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICBdO1xuICB9XG5cbiAgcHVibGljIHByb3ZpZGVyU291cmNlKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuICdoZXR6bmVyY2xvdWQvaGNsb3VkJztcbiAgfVxuXG4gIHB1YmxpYyBnZW5lcmF0ZVByb3ZpZGVyQmxvY2soKTogc3RyaW5nW10ge1xuICAgIGNvbnN0IGxpbmVzOiBzdHJpbmdbXSA9IFtdO1xuXG4gICAgLy8gR2VuZXJhdGUgcHJvdmlkZXIgYmxvY2sgZm9yIGVhY2ggY29uZmlndXJhdGlvblxuICAgIHRoaXMucHJvdmlkZXJDb25maWdzLmZvckVhY2goKGNvbmZpZykgPT4ge1xuICAgICAgbGluZXMucHVzaCgncHJvdmlkZXIgXCJoY2xvdWRcIiB7Jyk7XG5cbiAgICAgIGlmIChjb25maWcuYWxpYXMpIHtcbiAgICAgICAgbGluZXMucHVzaChgICBhbGlhcyA9IFwiJHtjb25maWcuYWxpYXN9XCJgKTtcbiAgICAgIH1cblxuICAgICAgaWYgKGNvbmZpZy51c2VFbnZpcm9ubWVudFRva2VuICE9PSBmYWxzZSkge1xuICAgICAgICBsaW5lcy5wdXNoKFxuICAgICAgICAgICcgICMgdG9rZW4gd2lsbCBiZSByZWFkIGZyb20gSENMT1VEX1RPS0VOIGVudmlyb25tZW50IHZhcmlhYmxlJyxcbiAgICAgICAgKTtcbiAgICAgIH0gZWxzZSBpZiAoY29uZmlnLnRva2VuKSB7XG4gICAgICAgIGxpbmVzLnB1c2goYCAgdG9rZW4gPSBcIiR7Y29uZmlnLnRva2VufVwiYCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBsaW5lcy5wdXNoKFxuICAgICAgICAgICcgICMgdG9rZW4gPSB2YXIuaGNsb3VkX3Rva2VuICAjIFBsZWFzZSBzZXQgdG9rZW4gb3IgdXNlIHVzZUVudmlyb25tZW50VG9rZW46IHRydWUnLFxuICAgICAgICApO1xuICAgICAgfVxuXG4gICAgICBpZiAoY29uZmlnLmVuZHBvaW50KSB7XG4gICAgICAgIGxpbmVzLnB1c2goYCAgZW5kcG9pbnQgPSBcIiR7Y29uZmlnLmVuZHBvaW50fVwiYCk7XG4gICAgICB9XG5cbiAgICAgIGlmIChjb25maWcuZW5kcG9pbnRIZXR6bmVyKSB7XG4gICAgICAgIGxpbmVzLnB1c2goYCAgZW5kcG9pbnRfaGV0em5lciA9IFwiJHtjb25maWcuZW5kcG9pbnRIZXR6bmVyfVwiYCk7XG4gICAgICB9XG5cbiAgICAgIGlmIChjb25maWcucG9sbEludGVydmFsKSB7XG4gICAgICAgIGxpbmVzLnB1c2goYCAgcG9sbF9pbnRlcnZhbCA9IFwiJHtjb25maWcucG9sbEludGVydmFsfVwiYCk7XG4gICAgICB9XG5cbiAgICAgIGlmIChjb25maWcucG9sbEZ1bmN0aW9uKSB7XG4gICAgICAgIGxpbmVzLnB1c2goYCAgcG9sbF9mdW5jdGlvbiA9IFwiJHtjb25maWcucG9sbEZ1bmN0aW9ufVwiYCk7XG4gICAgICB9XG5cbiAgICAgIGxpbmVzLnB1c2goJ30nKTtcbiAgICB9KTtcblxuICAgIHJldHVybiBsaW5lcztcbiAgfVxuXG4gIC8qKlxuICAgKiBBZGQgYSBuZXcgcHJvdmlkZXIgY29uZmlndXJhdGlvbi5cbiAgICovXG4gIHB1YmxpYyBhZGRQcm92aWRlckNvbmZpZyhjb25maWc6IEhldHpuZXJQcm92aWRlckNvbmZpZyk6IHZvaWQge1xuICAgIHRoaXMucHJvdmlkZXJDb25maWdzLnB1c2goY29uZmlnKTtcbiAgfVxufVxuIl19
@@ -0,0 +1,2 @@
1
+ export * from './provider-strategy';
2
+ export * from './hetzner-provider';
@@ -0,0 +1,19 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
+ };
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ __exportStar(require("./provider-strategy"), exports);
18
+ __exportStar(require("./hetzner-provider"), exports);
19
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvdGVycmFmb3JtL3Byb3ZpZGVycy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsc0RBQW9DO0FBQ3BDLHFEQUFtQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCAqIGZyb20gJy4vcHJvdmlkZXItc3RyYXRlZ3knO1xuZXhwb3J0ICogZnJvbSAnLi9oZXR6bmVyLXByb3ZpZGVyJztcbiJdfQ==
@@ -0,0 +1,44 @@
1
+ /**
2
+ * Base options for Terraform providers.
3
+ */
4
+ export interface TerraformProviderOptions {
5
+ /**
6
+ * Provider version constraint.
7
+ * @example "~> 5.0"
8
+ */
9
+ readonly version?: string;
10
+ /**
11
+ * Provider alias (optional).
12
+ */
13
+ readonly alias?: string;
14
+ }
15
+ /**
16
+ * Base class for Terraform provider configurations.
17
+ * This is a strategy class that holds configuration, not a Projen component.
18
+ */
19
+ export declare abstract class TerraformProvider {
20
+ protected readonly version?: string;
21
+ protected readonly alias?: string;
22
+ protected readonly providerName: string;
23
+ constructor(providerName: string, options?: TerraformProviderOptions);
24
+ /**
25
+ * Get the provider alias for the required_providers block.
26
+ */
27
+ providerAlias(): string;
28
+ /**
29
+ * Get the provider source (e.g., "hashicorp/aws").
30
+ */
31
+ abstract providerSource(): string;
32
+ /**
33
+ * Generate the provider configuration block.
34
+ */
35
+ abstract generateProviderBlock(): string[];
36
+ /**
37
+ * Get the version constraint.
38
+ */
39
+ versionConstraint(): string | undefined;
40
+ /**
41
+ * Get the provider name.
42
+ */
43
+ name(): string;
44
+ }
@@ -0,0 +1,38 @@
1
+ "use strict";
2
+ var _a;
3
+ Object.defineProperty(exports, "__esModule", { value: true });
4
+ exports.TerraformProvider = void 0;
5
+ const JSII_RTTI_SYMBOL_1 = Symbol.for("jsii.rtti");
6
+ /**
7
+ * Base class for Terraform provider configurations.
8
+ * This is a strategy class that holds configuration, not a Projen component.
9
+ */
10
+ class TerraformProvider {
11
+ constructor(providerName, options) {
12
+ this.providerName = providerName;
13
+ this.version = options?.version;
14
+ this.alias = options?.alias;
15
+ }
16
+ /**
17
+ * Get the provider alias for the required_providers block.
18
+ */
19
+ providerAlias() {
20
+ return this.alias || this.providerName;
21
+ }
22
+ /**
23
+ * Get the version constraint.
24
+ */
25
+ versionConstraint() {
26
+ return this.version;
27
+ }
28
+ /**
29
+ * Get the provider name.
30
+ */
31
+ name() {
32
+ return this.providerName;
33
+ }
34
+ }
35
+ exports.TerraformProvider = TerraformProvider;
36
+ _a = JSII_RTTI_SYMBOL_1;
37
+ TerraformProvider[_a] = { fqn: "@jttc/projen-project-types.TerraformProvider", version: "1.0.0-beta.10" };
38
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvdmlkZXItc3RyYXRlZ3kuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvdGVycmFmb3JtL3Byb3ZpZGVycy9wcm92aWRlci1zdHJhdGVneS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQWdCQTs7O0dBR0c7QUFDSCxNQUFzQixpQkFBaUI7SUFLckMsWUFBWSxZQUFvQixFQUFFLE9BQWtDO1FBQ2xFLElBQUksQ0FBQyxZQUFZLEdBQUcsWUFBWSxDQUFDO1FBQ2pDLElBQUksQ0FBQyxPQUFPLEdBQUcsT0FBTyxFQUFFLE9BQU8sQ0FBQztRQUNoQyxJQUFJLENBQUMsS0FBSyxHQUFHLE9BQU8sRUFBRSxLQUFLLENBQUM7SUFDOUIsQ0FBQztJQUVEOztPQUVHO0lBQ0ksYUFBYTtRQUNsQixPQUFPLElBQUksQ0FBQyxLQUFLLElBQUksSUFBSSxDQUFDLFlBQVksQ0FBQztJQUN6QyxDQUFDO0lBWUQ7O09BRUc7SUFDSSxpQkFBaUI7UUFDdEIsT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDO0lBQ3RCLENBQUM7SUFFRDs7T0FFRztJQUNJLElBQUk7UUFDVCxPQUFPLElBQUksQ0FBQyxZQUFZLENBQUM7SUFDM0IsQ0FBQzs7QUF4Q0gsOENBeUNDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBCYXNlIG9wdGlvbnMgZm9yIFRlcnJhZm9ybSBwcm92aWRlcnMuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVGVycmFmb3JtUHJvdmlkZXJPcHRpb25zIHtcbiAgLyoqXG4gICAqIFByb3ZpZGVyIHZlcnNpb24gY29uc3RyYWludC5cbiAgICogQGV4YW1wbGUgXCJ+PiA1LjBcIlxuICAgKi9cbiAgcmVhZG9ubHkgdmVyc2lvbj86IHN0cmluZztcblxuICAvKipcbiAgICogUHJvdmlkZXIgYWxpYXMgKG9wdGlvbmFsKS5cbiAgICovXG4gIHJlYWRvbmx5IGFsaWFzPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIEJhc2UgY2xhc3MgZm9yIFRlcnJhZm9ybSBwcm92aWRlciBjb25maWd1cmF0aW9ucy5cbiAqIFRoaXMgaXMgYSBzdHJhdGVneSBjbGFzcyB0aGF0IGhvbGRzIGNvbmZpZ3VyYXRpb24sIG5vdCBhIFByb2plbiBjb21wb25lbnQuXG4gKi9cbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBUZXJyYWZvcm1Qcm92aWRlciB7XG4gIHByb3RlY3RlZCByZWFkb25seSB2ZXJzaW9uPzogc3RyaW5nO1xuICBwcm90ZWN0ZWQgcmVhZG9ubHkgYWxpYXM/OiBzdHJpbmc7XG4gIHByb3RlY3RlZCByZWFkb25seSBwcm92aWRlck5hbWU6IHN0cmluZztcblxuICBjb25zdHJ1Y3Rvcihwcm92aWRlck5hbWU6IHN0cmluZywgb3B0aW9ucz86IFRlcnJhZm9ybVByb3ZpZGVyT3B0aW9ucykge1xuICAgIHRoaXMucHJvdmlkZXJOYW1lID0gcHJvdmlkZXJOYW1lO1xuICAgIHRoaXMudmVyc2lvbiA9IG9wdGlvbnM/LnZlcnNpb247XG4gICAgdGhpcy5hbGlhcyA9IG9wdGlvbnM/LmFsaWFzO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgcHJvdmlkZXIgYWxpYXMgZm9yIHRoZSByZXF1aXJlZF9wcm92aWRlcnMgYmxvY2suXG4gICAqL1xuICBwdWJsaWMgcHJvdmlkZXJBbGlhcygpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmFsaWFzIHx8IHRoaXMucHJvdmlkZXJOYW1lO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgcHJvdmlkZXIgc291cmNlIChlLmcuLCBcImhhc2hpY29ycC9hd3NcIikuXG4gICAqL1xuICBwdWJsaWMgYWJzdHJhY3QgcHJvdmlkZXJTb3VyY2UoKTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBHZW5lcmF0ZSB0aGUgcHJvdmlkZXIgY29uZmlndXJhdGlvbiBibG9jay5cbiAgICovXG4gIHB1YmxpYyBhYnN0cmFjdCBnZW5lcmF0ZVByb3ZpZGVyQmxvY2soKTogc3RyaW5nW107XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgdmVyc2lvbiBjb25zdHJhaW50LlxuICAgKi9cbiAgcHVibGljIHZlcnNpb25Db25zdHJhaW50KCk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMudmVyc2lvbjtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgdGhlIHByb3ZpZGVyIG5hbWUuXG4gICAqL1xuICBwdWJsaWMgbmFtZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLnByb3ZpZGVyTmFtZTtcbiAgfVxufVxuIl19
@@ -0,0 +1,38 @@
1
+ import { Project, ProjectOptions } from 'projen';
2
+ import { TerraformProvider } from './providers';
3
+ /**
4
+ * Options for Terraform base project.
5
+ */
6
+ export interface TerraformBaseProjectOptions extends ProjectOptions {
7
+ /**
8
+ * Minimum required Terraform version.
9
+ * @default "1.6.0"
10
+ */
11
+ readonly terraformVersion?: string;
12
+ /**
13
+ * Terraform provider configuration.
14
+ */
15
+ readonly provider?: TerraformProvider;
16
+ }
17
+ /**
18
+ * Base Terraform project that provides common Terraform configuration.
19
+ */
20
+ export declare class TerraformBaseProject extends Project {
21
+ private _provider?;
22
+ private readonly _terraformVersion;
23
+ constructor(options: TerraformBaseProjectOptions);
24
+ /**
25
+ * Add a provider to this Terraform project.
26
+ * Only one provider per project is allowed.
27
+ */
28
+ addProvider(provider: TerraformProvider): void;
29
+ /**
30
+ * Get the current provider.
31
+ */
32
+ get provider(): TerraformProvider | undefined;
33
+ preSynthesize(): void;
34
+ /**
35
+ * Generate the provider.tf file if a provider is configured.
36
+ */
37
+ private generateProviderFile;
38
+ }