@cdktn/commons 0.21.0

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 (59) hide show
  1. package/README.md +3 -0
  2. package/ambient.d.ts +14 -0
  3. package/eslint.config.mjs +77 -0
  4. package/jest.config.js +19 -0
  5. package/package.json +76 -0
  6. package/src/checkpoint.d.ts +19 -0
  7. package/src/checkpoint.d.ts.map +1 -0
  8. package/src/checkpoint.js +176 -0
  9. package/src/config.d.ts +61 -0
  10. package/src/config.d.ts.map +1 -0
  11. package/src/config.js +267 -0
  12. package/src/config.test.d.ts +2 -0
  13. package/src/config.test.d.ts.map +1 -0
  14. package/src/config.test.js +680 -0
  15. package/src/construct-maker-target.d.ts +57 -0
  16. package/src/construct-maker-target.d.ts.map +1 -0
  17. package/src/construct-maker-target.js +129 -0
  18. package/src/construct-maker-target.test.d.ts +6 -0
  19. package/src/construct-maker-target.test.d.ts.map +1 -0
  20. package/src/construct-maker-target.test.js +72 -0
  21. package/src/debug.d.ts +13 -0
  22. package/src/debug.d.ts.map +1 -0
  23. package/src/debug.js +379 -0
  24. package/src/environment.d.ts +4 -0
  25. package/src/environment.d.ts.map +1 -0
  26. package/src/environment.js +15 -0
  27. package/src/errors.d.ts +10 -0
  28. package/src/errors.d.ts.map +1 -0
  29. package/src/errors.js +75 -0
  30. package/src/gradle.d.ts +19 -0
  31. package/src/gradle.d.ts.map +1 -0
  32. package/src/gradle.js +160 -0
  33. package/src/index.d.ts +15 -0
  34. package/src/index.d.ts.map +1 -0
  35. package/src/index.js +33 -0
  36. package/src/logging.d.ts +17 -0
  37. package/src/logging.d.ts.map +1 -0
  38. package/src/logging.js +117 -0
  39. package/src/module-schema.d.ts +17 -0
  40. package/src/module-schema.d.ts.map +1 -0
  41. package/src/module-schema.js +3 -0
  42. package/src/provider-schema.d.ts +99 -0
  43. package/src/provider-schema.d.ts.map +1 -0
  44. package/src/provider-schema.js +21 -0
  45. package/src/terraform-module.d.ts +2 -0
  46. package/src/terraform-module.d.ts.map +1 -0
  47. package/src/terraform-module.js +23 -0
  48. package/src/terraform-module.test.d.ts +6 -0
  49. package/src/terraform-module.test.d.ts.map +1 -0
  50. package/src/terraform-module.test.js +31 -0
  51. package/src/terraform.d.ts +3 -0
  52. package/src/terraform.d.ts.map +1 -0
  53. package/src/terraform.js +12 -0
  54. package/src/util.d.ts +39 -0
  55. package/src/util.d.ts.map +1 -0
  56. package/src/util.js +262 -0
  57. package/src/version.d.ts +2 -0
  58. package/src/version.d.ts.map +1 -0
  59. package/src/version.js +11 -0
package/README.md ADDED
@@ -0,0 +1,3 @@
1
+ # @cdktn/commons
2
+
3
+ This package is meant to contain all code shared across the packages, like logging, types, configuration, etc. It is not meant for public usage and will not have a stable API.
package/ambient.d.ts ADDED
@@ -0,0 +1,14 @@
1
+ // Copyright (c) HashiCorp, Inc
2
+ // Licensed under the Mozilla Public License 2.0
3
+ declare module '@skorfmann/ink-confirm-input';
4
+ declare module '@npmcli/ci-detect';
5
+
6
+ declare module 'child_process' {
7
+ interface SpawnOptions {
8
+ signal?: AbortSignal;
9
+ }
10
+ }
11
+
12
+ declare module 'tunnel-agent';
13
+
14
+ declare module "archiver";
@@ -0,0 +1,77 @@
1
+ /**
2
+ * Copyright (c) HashiCorp, Inc.
3
+ * SPDX-License-Identifier: MPL-2.0
4
+ */
5
+
6
+ import { fixupConfigRules } from "@eslint/compat";
7
+ import eslint from "@eslint/js";
8
+ import tseslint from "typescript-eslint";
9
+ import tsParser from "@typescript-eslint/parser";
10
+ import react from "eslint-plugin-react";
11
+ import prettierConfig from "eslint-plugin-prettier/recommended";
12
+ import path from "node:path";
13
+ import { fileURLToPath } from "node:url";
14
+ import js from "@eslint/js";
15
+ import { FlatCompat } from "@eslint/eslintrc";
16
+
17
+ const __filename = fileURLToPath(import.meta.url);
18
+ const __dirname = path.dirname(__filename);
19
+ const compat = new FlatCompat({
20
+ baseDirectory: __dirname,
21
+ recommendedConfig: js.configs.recommended,
22
+ allConfig: js.configs.all,
23
+ });
24
+
25
+ export default [
26
+ {
27
+ ignores: [
28
+ "**/node_modules",
29
+ "**/dist",
30
+ "**/coverage",
31
+ "**/*.d.ts",
32
+ "**/*.js",
33
+ ],
34
+ },
35
+ ...tseslint.config(eslint.configs.recommended, tseslint.configs.recommended),
36
+ {
37
+ settings: {
38
+ react: {
39
+ version: "detect",
40
+ },
41
+ },
42
+ },
43
+ react.configs.flat.recommended,
44
+ ...fixupConfigRules(compat.extends("plugin:react-hooks/recommended")).map(
45
+ (config) => ({
46
+ ...config,
47
+ files: ["**/*.ts", "**/*.tsx"],
48
+ }),
49
+ ),
50
+ {
51
+ files: ["**/*.ts", "**/*.tsx"],
52
+
53
+ languageOptions: {
54
+ parser: tsParser,
55
+ },
56
+
57
+ rules: {
58
+ "@typescript-eslint/no-explicit-any": 0,
59
+ "@typescript-eslint/explicit-function-return-type": 0,
60
+ "@typescript-eslint/no-use-before-define": 0,
61
+ "@typescript-eslint/explicit-module-boundary-types": 0,
62
+ "@typescript-eslint/no-var-requires": 0,
63
+ "@typescript-eslint/no-require-imports": "warn",
64
+ "react/no-unescaped-entities": 0,
65
+ "no-sequences": "error",
66
+ "no-unused-vars": "warn",
67
+
68
+ "no-irregular-whitespace": [
69
+ "error",
70
+ {
71
+ skipTemplates: true,
72
+ },
73
+ ],
74
+ },
75
+ },
76
+ prettierConfig,
77
+ ];
package/jest.config.js ADDED
@@ -0,0 +1,19 @@
1
+ /**
2
+ * Copyright (c) HashiCorp, Inc.
3
+ * SPDX-License-Identifier: MPL-2.0
4
+ */
5
+
6
+ module.exports = {
7
+ roots: [
8
+ "<rootDir>"
9
+ ],
10
+ testMatch: ['**/*.test.ts', '**/*.test.tsx'],
11
+ transform: {
12
+ "^.+\\.tsx?$": "ts-jest"
13
+ },
14
+ moduleFileExtensions: [
15
+ "js",
16
+ "ts",
17
+ "tsx"
18
+ ],
19
+ }
package/package.json ADDED
@@ -0,0 +1,76 @@
1
+ {
2
+ "name": "@cdktn/commons",
3
+ "version": "0.21.0",
4
+ "publishConfig": {
5
+ "access": "public"
6
+ },
7
+ "description": "CDK Terrain Common utilities",
8
+ "scripts": {
9
+ "build": "tsc",
10
+ "watch": "tsc -w",
11
+ "watch-preserve-output": "tsc -w --preserveWatchOutput",
12
+ "lint": "eslint . ",
13
+ "lint:fix": "eslint . --fix",
14
+ "pretest": "yarn build",
15
+ "pretest:ci": "yarn build",
16
+ "test": "yarn lint && jest",
17
+ "test:ci": "yarn lint && jest --ci",
18
+ "test:update": "jest -u",
19
+ "jest-watch": "jest --watch",
20
+ "package": "./package.sh",
21
+ "dist-clean": "rm -rf dist",
22
+ "package:js": "./package.sh"
23
+ },
24
+ "main": "src/index.js",
25
+ "types": "src/index.d.ts",
26
+ "repository": {
27
+ "type": "git",
28
+ "url": "git://github.com/open-constructs/cdk-terrain.git",
29
+ "directory": "packages/@cdktn/commons"
30
+ },
31
+ "author": {
32
+ "name": "OpenConstructs",
33
+ "url": "https://github.com/open-constructs"
34
+ },
35
+ "keywords": [
36
+ "cdk",
37
+ "cdktf",
38
+ "terraform"
39
+ ],
40
+ "license": "MPL-2.0",
41
+ "dependencies": {
42
+ "@sentry/node": "7.120.3",
43
+ "cdktn": "0.21.0",
44
+ "ci-info": "3.9.0",
45
+ "codemaker": "1.112.0",
46
+ "cross-spawn": "7.0.6",
47
+ "follow-redirects": "1.15.9",
48
+ "fs-extra": "11.3.0",
49
+ "log4js": "6.9.1",
50
+ "strip-ansi": "6.0.1",
51
+ "uuid": "9.0.1",
52
+ "validator": "13.15.0"
53
+ },
54
+ "devDependencies": {
55
+ "@eslint/compat": "^1.2.9",
56
+ "@eslint/eslintrc": "^3.3.1",
57
+ "@eslint/js": "^9.27.0",
58
+ "@types/follow-redirects": "1.14.4",
59
+ "@types/fs-extra": "11.0.4",
60
+ "@types/uuid": "9.0.8",
61
+ "@types/validator": "13.15.0",
62
+ "@typescript-eslint/parser": "^8.32.1",
63
+ "eslint": "^9.27.0",
64
+ "eslint-plugin-prettier": "^5.4.0",
65
+ "eslint-plugin-react": "7.37.5",
66
+ "jest": "^29.7.0",
67
+ "lint-staged": "^15.5.2",
68
+ "ts-jest": "29.3.4",
69
+ "tsc-files": "1.1.4",
70
+ "typescript": "5.4.5",
71
+ "typescript-eslint": "^8.32.1"
72
+ },
73
+ "lint-staged": {
74
+ "src/**/*.{ts,tsx}": "tsc-files ambient.d.ts --noEmit"
75
+ }
76
+ }
@@ -0,0 +1,19 @@
1
+ export interface ReportParams {
2
+ dateTime?: Date;
3
+ arch?: string;
4
+ os?: string;
5
+ payload: Record<string, any>;
6
+ product: string;
7
+ runID?: string;
8
+ version?: string;
9
+ command?: string;
10
+ language?: string;
11
+ userId?: string;
12
+ ci?: string;
13
+ projectId?: string;
14
+ }
15
+ export declare function sendTelemetry(command: string, payload: Record<string, any>): Promise<void>;
16
+ export declare function getProjectId(projectPath?: string): string;
17
+ export declare function getUserId(): string;
18
+ export declare function ReportRequest(reportParams: ReportParams): Promise<void>;
19
+ //# sourceMappingURL=checkpoint.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"checkpoint.d.ts","sourceRoot":"","sources":["checkpoint.ts"],"names":[],"mappings":"AA2BA,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,EAAE,IAAI,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAC7B,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAqCD,wBAAsB,aAAa,CACjC,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,iBAgB7B;AAuCD,wBAAgB,YAAY,CAAC,WAAW,SAAgB,GAAG,MAAM,CAEhE;AAED,wBAAgB,SAAS,IAAI,MAAM,CAWlC;AAED,wBAAsB,aAAa,CAAC,YAAY,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC,CAiD7E"}
@@ -0,0 +1,176 @@
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 __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || function (mod) {
19
+ if (mod && mod.__esModule) return mod;
20
+ var result = {};
21
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
22
+ __setModuleDefault(result, mod);
23
+ return result;
24
+ };
25
+ var __importDefault = (this && this.__importDefault) || function (mod) {
26
+ return (mod && mod.__esModule) ? mod : { "default": mod };
27
+ };
28
+ Object.defineProperty(exports, "__esModule", { value: true });
29
+ exports.ReportRequest = exports.getUserId = exports.getProjectId = exports.sendTelemetry = void 0;
30
+ // Copyright (c) HashiCorp, Inc
31
+ // SPDX-License-Identifier: MPL-2.0
32
+ const https = require("https");
33
+ const url_1 = require("url");
34
+ const uuid_1 = require("uuid");
35
+ const os = __importStar(require("os"));
36
+ const ci_info_1 = __importDefault(require("ci-info"));
37
+ const logging_1 = require("./logging");
38
+ const path = __importStar(require("path"));
39
+ const fs = __importStar(require("fs-extra"));
40
+ const version_1 = require("./version");
41
+ const BASE_URL = `https://checkpoint-api.hashicorp.com/v1/`;
42
+ const VALID_STATUS_CODES = [200, 201];
43
+ const MAX_REQUEST_BODY_SIZE = 8192;
44
+ function homeDir() {
45
+ var _a;
46
+ return process.env.CDKTF_HOME
47
+ ? path.resolve(process.env.CDKTF_HOME)
48
+ : path.join(((_a = os.userInfo().homedir) !== null && _a !== void 0 ? _a : os.homedir()).trim() || "/", ".cdktf");
49
+ }
50
+ async function post(url, data) {
51
+ return new Promise((ok, ko) => {
52
+ const req = https.request((0, url_1.format)(url), {
53
+ headers: {
54
+ Accept: "application/json",
55
+ "Content-Length": data.length,
56
+ "User-Agent": "OpenConstructs/cdktn-cli",
57
+ },
58
+ method: "POST",
59
+ }, (res) => {
60
+ if (res.statusCode) {
61
+ const statusCode = res.statusCode;
62
+ if (!VALID_STATUS_CODES.includes(statusCode)) {
63
+ return ko(new Error(res.statusMessage));
64
+ }
65
+ }
66
+ const data = new Array();
67
+ res.on("data", (chunk) => data.push(chunk));
68
+ res.on("error", (err) => ko(err));
69
+ res.on("end", () => {
70
+ return ok();
71
+ });
72
+ });
73
+ req.setTimeout(1000, () => ko(new Error("request timeout")));
74
+ req.write(data);
75
+ req.end();
76
+ req.on("error", (err) => ko(err));
77
+ });
78
+ }
79
+ async function sendTelemetry(command, payload) {
80
+ const reportParams = {
81
+ command,
82
+ product: "cdktn",
83
+ version: `${version_1.DISPLAY_VERSION}`,
84
+ dateTime: new Date(),
85
+ language: payload.language,
86
+ payload,
87
+ };
88
+ try {
89
+ await ReportRequest(reportParams);
90
+ }
91
+ catch (err) {
92
+ logging_1.logger.error(`Could not send telemetry data: ${err}`);
93
+ }
94
+ }
95
+ exports.sendTelemetry = sendTelemetry;
96
+ function getId(filePath, key, forceCreation = false, explanatoryComment) {
97
+ const _uuid = (0, uuid_1.v4)(); // create a new UUID in case we don't find one
98
+ let jsonFile;
99
+ try {
100
+ jsonFile = require(filePath); // we found the file
101
+ }
102
+ catch (_a) {
103
+ // we found no file, create one if we're forcing a creation
104
+ if (forceCreation) {
105
+ const _idFile = {}; // compose JSON id file in case we don't find one
106
+ if (explanatoryComment) {
107
+ _idFile["//"] = explanatoryComment.replace(/\n/g, " ");
108
+ }
109
+ _idFile[key] = _uuid;
110
+ fs.ensureDirSync(path.dirname(filePath));
111
+ fs.writeFileSync(filePath, JSON.stringify(_idFile, null, 2));
112
+ }
113
+ return _uuid;
114
+ }
115
+ if (jsonFile[key]) {
116
+ return jsonFile[key]; // we found an id
117
+ }
118
+ else {
119
+ // we found no id, we add it to the file for future use
120
+ fs.writeFileSync(filePath, JSON.stringify({ ...jsonFile, [key]: _uuid }, null, 2));
121
+ return _uuid;
122
+ }
123
+ }
124
+ function getProjectId(projectPath = process.cwd()) {
125
+ return getId(path.resolve(projectPath, "cdktf.json"), "projectId");
126
+ }
127
+ exports.getProjectId = getProjectId;
128
+ function getUserId() {
129
+ return getId(path.resolve(homeDir(), "config.json"), "userId", true, `This signature is a randomly generated UUID used to anonymously differentiate users in telemetry data order to inform product direction.
130
+ This signature is random, it is not based on any personally identifiable information.
131
+ To create a new signature, you can simply delete this file at any time.
132
+ See https://cdk.tf/telemetry for more
133
+ information on how to disable it.`);
134
+ }
135
+ exports.getUserId = getUserId;
136
+ async function ReportRequest(reportParams) {
137
+ // we won't report when checkpoint is disabled.
138
+ // Check at runtime (not import time) to allow tests to modify the env var
139
+ if (process.env.CHECKPOINT_DISABLE) {
140
+ return;
141
+ }
142
+ if (!reportParams.runID) {
143
+ reportParams.runID = (0, uuid_1.v4)();
144
+ }
145
+ if (!reportParams.dateTime) {
146
+ reportParams.dateTime = new Date();
147
+ }
148
+ if (!reportParams.arch) {
149
+ reportParams.arch = os.arch();
150
+ }
151
+ if (!reportParams.os) {
152
+ reportParams.os = os.platform();
153
+ }
154
+ const ci = ci_info_1.default.isCI ? ci_info_1.default.name || "unknown" : false;
155
+ if (!reportParams.userId && !ci) {
156
+ reportParams.userId = getUserId();
157
+ }
158
+ if (ci) {
159
+ reportParams.ci = ci;
160
+ }
161
+ reportParams.projectId = reportParams.projectId || getProjectId();
162
+ const postData = JSON.stringify(reportParams);
163
+ if (postData.length > MAX_REQUEST_BODY_SIZE) {
164
+ logging_1.logger.warn(`Skipped sending telemetry as the request body size was ${postData.length} bytes. The limit is ${MAX_REQUEST_BODY_SIZE} bytes`);
165
+ return;
166
+ }
167
+ try {
168
+ await post(`${BASE_URL}telemetry/${reportParams.product}`, postData);
169
+ }
170
+ catch (e) {
171
+ // Log errors writing to checkpoint
172
+ (0, logging_1.processLoggerError)(e.message);
173
+ }
174
+ }
175
+ exports.ReportRequest = ReportRequest;
176
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hlY2twb2ludC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbImNoZWNrcG9pbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSwrQkFBK0I7QUFDL0IsbUNBQW1DO0FBQ25DLCtCQUFnQztBQUNoQyw2QkFBNkI7QUFDN0IsK0JBQW9DO0FBQ3BDLHVDQUF5QjtBQUN6QixzREFBNkI7QUFDN0IsdUNBQXVEO0FBQ3ZELDJDQUE2QjtBQUM3Qiw2Q0FBK0I7QUFDL0IsdUNBQTRDO0FBRTVDLE1BQU0sUUFBUSxHQUFHLDBDQUEwQyxDQUFDO0FBRTVELE1BQU0sa0JBQWtCLEdBQUcsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFFdEMsTUFBTSxxQkFBcUIsR0FBRyxJQUFJLENBQUM7QUFFbkMsU0FBUyxPQUFPOztJQUNkLE9BQU8sT0FBTyxDQUFDLEdBQUcsQ0FBQyxVQUFVO1FBQzNCLENBQUMsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDO1FBQ3RDLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUNQLENBQUMsTUFBQSxFQUFFLENBQUMsUUFBUSxFQUFFLENBQUMsT0FBTyxtQ0FBSSxFQUFFLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQyxJQUFJLEVBQUUsSUFBSSxHQUFHLEVBQ3JELFFBQVEsQ0FDVCxDQUFDO0FBQ1IsQ0FBQztBQWlCRCxLQUFLLFVBQVUsSUFBSSxDQUFDLEdBQVcsRUFBRSxJQUFZO0lBQzNDLE9BQU8sSUFBSSxPQUFPLENBQU8sQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUU7UUFDbEMsTUFBTSxHQUFHLEdBQUcsS0FBSyxDQUFDLE9BQU8sQ0FDdkIsSUFBQSxZQUFNLEVBQUMsR0FBRyxDQUFDLEVBQ1g7WUFDRSxPQUFPLEVBQUU7Z0JBQ1AsTUFBTSxFQUFFLGtCQUFrQjtnQkFDMUIsZ0JBQWdCLEVBQUUs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UUFDNUMsZ0JBQU0sQ0FBQyxJQUFJLENBQ1QsMERBQTBELFFBQVEsQ0FBQyxNQUFNLHdCQUF3QixxQkFBcUIsUUFBUSxDQUMvSCxDQUFDO1FBQ0YsT0FBTztJQUNULENBQUM7SUFFRCxJQUFJLENBQUM7UUFDSCxNQUFNLElBQUksQ0FBQyxHQUFHLFFBQVEsYUFBYSxZQUFZLENBQUMsT0FBTyxFQUFFLEVBQUUsUUFBUSxDQUFDLENBQUM7SUFDdkUsQ0FBQztJQUFDLE9BQU8sQ0FBTSxFQUFFLENBQUM7UUFDaEIsbUNBQW1DO1FBQ25DLElBQUEsNEJBQWtCLEVBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQ2hDLENBQUM7QUFDSCxDQUFDO0FBakRELHNDQWlEQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIENvcHlyaWdodCAoYykgSGFzaGlDb3JwLCBJbmNcbi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBNUEwtMi4wXG5pbXBvcnQgaHR0cHMgPSByZXF1aXJlKFwiaHR0cHNcIik7XG5pbXBvcnQgeyBmb3JtYXQgfSBmcm9tIFwidXJsXCI7XG5pbXBvcnQgeyB2NCBhcyB1dWlkdjQgfSBmcm9tIFwidXVpZFwiO1xuaW1wb3J0ICogYXMgb3MgZnJvbSBcIm9zXCI7XG5pbXBvcnQgY2lJbmZvIGZyb20gXCJjaS1pbmZvXCI7XG5pbXBvcnQgeyBsb2dnZXIsIHByb2Nlc3NMb2dnZXJFcnJvciB9IGZyb20gXCIuL2xvZ2dpbmdcIjtcbmltcG9ydCAqIGFzIHBhdGggZnJvbSBcInBhdGhcIjtcbmltcG9ydCAqIGFzIGZzIGZyb20gXCJmcy1leHRyYVwiO1xuaW1wb3J0IHsgRElTUExBWV9WRVJTSU9OIH0gZnJvbSBcIi4vdmVyc2lvblwiO1xuXG5jb25zdCBCQVNFX1VSTCA9IGBodHRwczovL2NoZWNrcG9pbnQtYXBpLmhhc2hpY29ycC5jb20vdjEvYDtcblxuY29uc3QgVkFMSURfU1RBVFVTX0NPREVTID0gWzIwMCwgMjAxXTtcblxuY29uc3QgTUFYX1JFUVVFU1RfQk9EWV9TSVpFID0gODE5MjtcblxuZnVuY3Rpb24gaG9tZURpcigpIHtcbiAgcmV0dXJuIHByb2Nlc3MuZW52LkNES1RGX0hPTUVcbiAgICA/IHBhdGgucmVzb2x2ZShwcm9jZXNzLmVudi5DREtURl9IT01FKVxuICAgIDogcGF0aC5qb2luKFxuICAgICAgICAob3MudXNlckluZm8oKS5ob21lZGlyID8/IG9zLmhvbWVkaXIoKSkudHJpbSgpIHx8IFwiL1wiLFxuICAgICAgICBcIi5jZGt0ZlwiLFxuICAgICAgKTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBSZXBvcnRQYXJhbXMge1xuICBkYXRlVGltZT86IERhdGU7XG4gIGFyY2g/OiBzdHJpbmc7XG4gIG9zPzogc3RyaW5nO1xuICBwYXlsb2FkOiBSZWNvcmQ8c3RyaW5nLCBhbnk+O1xuICBwcm9kdWN0OiBzdHJpbmc7XG4gIHJ1bklEPzogc3RyaW5nO1xuICB2ZXJzaW9uPzogc3RyaW5nO1xuICBjb21tYW5kPzogc3RyaW5nO1xuICBsYW5ndWFnZT86IHN0cmluZztcbiAgdXNlcklkPzogc3RyaW5nO1xuICBjaT86IHN0cmluZztcbiAgcHJvamVjdElkPzogc3RyaW5nO1xufVxuXG5hc3luYyBmdW5jdGlvbiBwb3N0KHVybDogc3RyaW5nLCBkYXRhOiBzdHJpbmcpIHtcbiAgcmV0dXJuIG5ldyBQcm9taXNlPHZvaWQ+KChvaywga28pID0+IHtcbiAgICBjb25zdCByZXEgPSBodHRwcy5yZXF1ZXN0KFxuICAgICAgZm9ybWF0KHVybCksXG4gICAgICB7XG4gICAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgICBBY2NlcHQ6IFwiYXBwbGljYXRpb24vanNvblwiLFxuICAgICAgICAgIFwiQ29udGVudC1MZW5ndGhcIjogZGF0YS5sZW5ndGgsXG4gICAgICAgICAgXCJVc2VyLUFnZW50XCI6IFwiT3BlbkNvbnN0cnVjdHMvY2RrdG4tY2xpXCIsXG4gICAgICAgIH0sXG4gICAgICAgIG1ldGhvZDogXCJQT1NUXCIsXG4gICAgICB9LFxuICAgICAgKHJlcykgPT4ge1xuICAgICAgICBpZiAocmVzLnN0YXR1c0NvZGUpIHtcbiAgICAgICAgICBjb25zdCBzdGF0dXNDb2RlID0gcmVzLnN0YXR1c0NvZGU7XG4gICAgICAgICAgaWYgKCFWQUxJRF9TVEFUVVNfQ09ERVMuaW5jbHVkZXMoc3RhdHVzQ29kZSkpIHtcbiAgICAgICAgICAgIHJldHVybiBrbyhuZXcgRXJyb3IocmVzLnN0YXR1c01lc3NhZ2UpKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgZGF0YSA9IG5ldyBBcnJheTxCdWZmZXI+KCk7XG4gICAgICAgIHJlcy5vbihcImRhdGFcIiwgKGNodW5rKSA9PiBkYXRhLnB1c2goY2h1bmspKTtcbiAgICAgICAgcmVzLm9uKFwiZXJyb3JcIiwgKGVycikgPT4ga28oZXJyKSk7XG4gICAgICAgIHJlcy5vbihcImVuZFwiLCAoKSA9PiB7XG4gICAgICAgICAgcmV0dXJuIG9rKCk7XG4gICAgICAgIH0pO1xuICAgICAgfSxcbiAgICApO1xuXG4gICAgcmVxLnNldFRpbWVvdXQoMTAwMCwgKCkgPT4ga28obmV3IEVycm9yKFwicmVxdWVzdCB0aW1lb3V0XCIpKSk7XG4gICAgcmVxLndyaXRlKGRhdGEpO1xuICAgIHJlcS5lbmQoKTtcbiAgICByZXEub24oXCJlcnJvclwiLCAoZXJyKSA9PiBrbyhlcnIpKTtcbiAgfSk7XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBzZW5kVGVsZW1ldHJ5KFxuICBjb21tYW5kOiBzdHJpbmcsXG4gIHBheWxvYWQ6IFJlY29yZDxzdHJpbmcsIGFueT4sXG4pIHtcbiAgY29uc3QgcmVwb3J0UGFyYW1zOiBSZXBvcnRQYXJhbXMgPSB7XG4gICAgY29tbWFuZCxcbiAgICBwcm9kdWN0OiBcImNka3RuXCIsXG4gICAgdmVyc2lvbjogYCR7RElTUExBWV9WRVJTSU9OfWAsXG4gICAgZGF0ZVRpbWU6IG5ldyBEYXRlKCksXG4gICAgbGFuZ3VhZ2U6IHBheWxvYWQubGFuZ3VhZ2UsXG4gICAgcGF5bG9hZCxcbiAgfTtcblxuICB0cnkge1xuICAgIGF3YWl0IFJlcG9ydFJlcXVlc3QocmVwb3J0UGFyYW1zKTtcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgbG9nZ2VyLmVycm9yKGBDb3VsZCBub3Qgc2VuZCB0ZWxlbWV0cnkgZGF0YTogJHtlcnJ9YCk7XG4gIH1cbn1cblxuZnVuY3Rpb24gZ2V0SWQoXG4gIGZpbGVQYXRoOiBzdHJpbmcsXG4gIGtleTogc3RyaW5nLFxuICBmb3JjZUNyZWF0aW9uID0gZmFsc2UsXG4gIGV4cGxhbmF0b3J5Q29tbWVudD86IHN0cmluZyxcbik6IHN0cmluZyB7XG4gIGNvbnN0IF91dWlkID0gdXVpZHY0KCk7IC8vIGNyZWF0ZSBhIG5ldyBVVUlEIGluIGNhc2Ugd2UgZG9uJ3QgZmluZCBvbmVcblxuICBsZXQganNvbkZpbGU7XG4gIHRyeSB7XG4gICAganNvbkZpbGUgPSByZXF1aXJlKGZpbGVQYXRoKTsgLy8gd2UgZm91bmQgdGhlIGZpbGVcbiAgfSBjYXRjaCB7XG4gICAgLy8gd2UgZm91bmQgbm8gZmlsZSwgY3JlYXRlIG9uZSBpZiB3ZSdyZSBmb3JjaW5nIGEgY3JlYXRpb25cbiAgICBpZiAoZm9yY2VDcmVhdGlvbikge1xuICAgICAgY29uc3QgX2lkRmlsZSA9IHt9IGFzIFJlY29yZDxzdHJpbmcsIHN0cmluZz47IC8vIGNvbXBvc2UgSlNPTiBpZCBmaWxlIGluIGNhc2Ugd2UgZG9uJ3QgZmluZCBvbmVcbiAgICAgIGlmIChleHBsYW5hdG9yeUNvbW1lbnQpIHtcbiAgICAgICAgX2lkRmlsZVtcIi8vXCJdID0gZXhwbGFuYXRvcnlDb21tZW50LnJlcGxhY2UoL1xcbi9nLCBcIiBcIik7XG4gICAgICB9XG4gICAgICBfaWRGaWxlW2tleV0gPSBfdXVpZDtcbiAgICAgIGZzLmVuc3VyZURpclN5bmMocGF0aC5kaXJuYW1lKGZpbGVQYXRoKSk7XG4gICAgICBmcy53cml0ZUZpbGVTeW5jKGZpbGVQYXRoLCBKU09OLnN0cmluZ2lmeShfaWRGaWxlLCBudWxsLCAyKSk7XG4gICAgfVxuICAgIHJldHVybiBfdXVpZDtcbiAgfVxuXG4gIGlmIChqc29uRmlsZVtrZXldKSB7XG4gICAgcmV0dXJuIGpzb25GaWxlW2tleV07IC8vIHdlIGZvdW5kIGFuIGlkXG4gIH0gZWxzZSB7XG4gICAgLy8gd2UgZm91bmQgbm8gaWQsIHdlIGFkZCBpdCB0byB0aGUgZmlsZSBmb3IgZnV0dXJlIHVzZVxuICAgIGZzLndyaXRlRmlsZVN5bmMoXG4gICAgICBmaWxlUGF0aCxcbiAgICAgIEpTT04uc3RyaW5naWZ5KHsgLi4uanNvbkZpbGUsIFtrZXldOiBfdXVpZCB9LCBudWxsLCAyKSxcbiAgICApO1xuICAgIHJldHVybiBfdXVpZDtcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0UHJvamVjdElkKHByb2plY3RQYXRoID0gcHJvY2Vzcy5jd2QoKSk6IHN0cmluZyB7XG4gIHJldHVybiBnZXRJZChwYXRoLnJlc29sdmUocHJvamVjdFBhdGgsIFwiY2RrdGYuanNvblwiKSwgXCJwcm9qZWN0SWRcIik7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRVc2VySWQoKTogc3RyaW5nIHtcbiAgcmV0dXJuIGdldElkKFxuICAgIHBhdGgucmVzb2x2ZShob21lRGlyKCksIFwiY29uZmlnLmpzb25cIiksXG4gICAgXCJ1c2VySWRcIixcbiAgICB0cnVlLFxuICAgIGBUaGlzIHNpZ25hdHVyZSBpcyBhIHJhbmRvbWx5IGdlbmVyYXRlZCBVVUlEIHVzZWQgdG8gYW5vbnltb3VzbHkgZGlmZmVyZW50aWF0ZSB1c2VycyBpbiB0ZWxlbWV0cnkgZGF0YSBvcmRlciB0byBpbmZvcm0gcHJvZHVjdCBkaXJlY3Rpb24uXG5UaGlzIHNpZ25hdHVyZSBpcyByYW5kb20sIGl0IGlzIG5vdCBiYXNlZCBvbiBhbnkgcGVyc29uYWxseSBpZGVudGlmaWFibGUgaW5mb3JtYXRpb24uXG5UbyBjcmVhdGUgYSBuZXcgc2lnbmF0dXJlLCB5b3UgY2FuIHNpbXBseSBkZWxldGUgdGhpcyBmaWxlIGF0IGFueSB0aW1lLlxuU2VlIGh0dHBzOi8vY2RrLnRmL3RlbGVtZXRyeSBmb3IgbW9yZVxuaW5mb3JtYXRpb24gb24gaG93IHRvIGRpc2FibGUgaXQuYCxcbiAgKTtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIFJlcG9ydFJlcXVlc3QocmVwb3J0UGFyYW1zOiBSZXBvcnRQYXJhbXMpOiBQcm9taXNlPHZvaWQ+IHtcbiAgLy8gd2Ugd29uJ3QgcmVwb3J0IHdoZW4gY2hlY2twb2ludCBpcyBkaXNhYmxlZC5cbiAgLy8gQ2hlY2sgYXQgcnVudGltZSAobm90IGltcG9ydCB0aW1lKSB0byBhbGxvdyB0ZXN0cyB0byBtb2RpZnkgdGhlIGVudiB2YXJcbiAgaWYgKHByb2Nlc3MuZW52LkNIRUNLUE9JTlRfRElTQUJMRSkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGlmICghcmVwb3J0UGFyYW1zLnJ1bklEKSB7XG4gICAgcmVwb3J0UGFyYW1zLnJ1bklEID0gdXVpZHY0KCk7XG4gIH1cblxuICBpZiAoIXJlcG9ydFBhcmFtcy5kYXRlVGltZSkge1xuICAgIHJlcG9ydFBhcmFtcy5kYXRlVGltZSA9IG5ldyBEYXRlKCk7XG4gIH1cblxuICBpZiAoIXJlcG9ydFBhcmFtcy5hcmNoKSB7XG4gICAgcmVwb3J0UGFyYW1zLmFyY2ggPSBvcy5hcmNoKCk7XG4gIH1cblxuICBpZiAoIXJlcG9ydFBhcmFtcy5vcykge1xuICAgIHJlcG9ydFBhcmFtcy5vcyA9IG9zLnBsYXRmb3JtKCk7XG4gIH1cblxuICBjb25zdCBjaTogc3RyaW5nIHwgZmFsc2UgPSBjaUluZm8uaXNDSSA/IGNpSW5mby5uYW1lIHx8IFwidW5rbm93blwiIDogZmFsc2U7XG4gIGlmICghcmVwb3J0UGFyYW1zLnVzZXJJZCAmJiAhY2kpIHtcbiAgICByZXBvcnRQYXJhbXMudXNlcklkID0gZ2V0VXNlcklkKCk7XG4gIH1cblxuICBpZiAoY2kpIHtcbiAgICByZXBvcnRQYXJhbXMuY2kgPSBjaTtcbiAgfVxuXG4gIHJlcG9ydFBhcmFtcy5wcm9qZWN0SWQgPSByZXBvcnRQYXJhbXMucHJvamVjdElkIHx8IGdldFByb2plY3RJZCgpO1xuXG4gIGNvbnN0IHBvc3REYXRhID0gSlNPTi5zdHJpbmdpZnkocmVwb3J0UGFyYW1zKTtcblxuICBpZiAocG9zdERhdGEubGVuZ3RoID4gTUFYX1JFUVVFU1RfQk9EWV9TSVpFKSB7XG4gICAgbG9nZ2VyLndhcm4oXG4gICAgICBgU2tpcHBlZCBzZW5kaW5nIHRlbGVtZXRyeSBhcyB0aGUgcmVxdWVzdCBib2R5IHNpemUgd2FzICR7cG9zdERhdGEubGVuZ3RofSBieXRlcy4gVGhlIGxpbWl0IGlzICR7TUFYX1JFUVVFU1RfQk9EWV9TSVpFfSBieXRlc2AsXG4gICAgKTtcbiAgICByZXR1cm47XG4gIH1cblxuICB0cnkge1xuICAgIGF3YWl0IHBvc3QoYCR7QkFTRV9VUkx9dGVsZW1ldHJ5LyR7cmVwb3J0UGFyYW1zLnByb2R1Y3R9YCwgcG9zdERhdGEpO1xuICB9IGNhdGNoIChlOiBhbnkpIHtcbiAgICAvLyBMb2cgZXJyb3JzIHdyaXRpbmcgdG8gY2hlY2twb2ludFxuICAgIHByb2Nlc3NMb2dnZXJFcnJvcihlLm1lc3NhZ2UpO1xuICB9XG59XG4iXX0=
@@ -0,0 +1,61 @@
1
+ /**
2
+ * Copyright (c) HashiCorp, Inc.
3
+ * SPDX-License-Identifier: MPL-2.0
4
+ */
5
+ export declare enum Language {
6
+ TYPESCRIPT = "typescript",
7
+ PYTHON = "python",
8
+ CSHARP = "csharp",
9
+ JAVA = "java",
10
+ GO = "go"
11
+ }
12
+ export declare const LANGUAGES: Language[];
13
+ export declare const CONFIG_DEFAULTS: {
14
+ output: string;
15
+ codeMakerOutput: string;
16
+ };
17
+ export interface TerraformDependencyConstraint {
18
+ readonly name: string;
19
+ readonly source: string;
20
+ readonly version?: string;
21
+ readonly fqn: string;
22
+ readonly namespace?: string;
23
+ }
24
+ export declare function isLocalModule(source: string): boolean;
25
+ export declare class TerraformModuleConstraint implements TerraformDependencyConstraint {
26
+ readonly name: string;
27
+ readonly source: string;
28
+ readonly localSourceAbsolutePath?: string;
29
+ readonly fqn: string;
30
+ readonly version?: string;
31
+ readonly namespace?: string;
32
+ constructor(item: TerraformDependencyConstraint | string);
33
+ get className(): string;
34
+ get fileName(): string;
35
+ private parseDependencyConstraint;
36
+ }
37
+ export declare class TerraformProviderConstraint implements TerraformDependencyConstraint {
38
+ readonly name: string;
39
+ readonly source: string;
40
+ readonly version?: string;
41
+ readonly fqn: string;
42
+ readonly namespace?: string;
43
+ constructor(item: Omit<TerraformDependencyConstraint, "fqn"> | string);
44
+ private parseDependencyConstraint;
45
+ }
46
+ export interface Config {
47
+ readonly app?: string;
48
+ readonly language?: Language;
49
+ readonly output: string;
50
+ readonly codeMakerOutput: string;
51
+ terraformProviders?: TerraformProviderConstraint[];
52
+ terraformModules?: TerraformModuleConstraint[];
53
+ readonly context?: {
54
+ [key: string]: any;
55
+ };
56
+ }
57
+ export declare const parseConfig: (configJSON?: string) => Config;
58
+ export declare function readConfigSync(configFile?: string): Config;
59
+ export declare function shouldCheckCodeMakerOutput(config: Config): boolean;
60
+ export declare function logTimespan(message: string): () => void;
61
+ //# sourceMappingURL=config.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["config.ts"],"names":[],"mappings":"AAAA;;;GAGG;AASH,oBAAY,QAAQ;IAClB,UAAU,eAAe;IACzB,MAAM,WAAW;IACjB,MAAM,WAAW;IACjB,IAAI,SAAS;IACb,EAAE,OAAO;CACV;AAED,eAAO,MAAM,SAAS,YAMrB,CAAC;AAKF,eAAO,MAAM,eAAe;;;CAG3B,CAAC;AAKF,MAAM,WAAW,6BAA6B;IAC5C,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;CAC7B;AAMD,wBAAgB,aAAa,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAErD;AAED,qBAAa,yBACX,YAAW,6BAA6B;IAExC,SAAgB,IAAI,EAAE,MAAM,CAAC;IAC7B,SAAgB,MAAM,EAAE,MAAM,CAAC;IAC/B,SAAgB,uBAAuB,CAAC,EAAE,MAAM,CAAC;IACjD,SAAgB,GAAG,EAAE,MAAM,CAAC;IAC5B,SAAgB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjC,SAAgB,SAAS,CAAC,EAAE,MAAM,CAAC;gBAEvB,IAAI,EAAE,6BAA6B,GAAG,MAAM;IAsBxD,IAAW,SAAS,WAEnB;IAED,IAAW,QAAQ,WAElB;IAED,OAAO,CAAC,yBAAyB;CA2GlC;AAED,qBAAa,2BACX,YAAW,6BAA6B;IAExC,SAAgB,IAAI,EAAE,MAAM,CAAC;IAC7B,SAAgB,MAAM,EAAE,MAAM,CAAC;IAC/B,SAAgB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjC,SAAgB,GAAG,EAAE,MAAM,CAAC;IAC5B,SAAgB,SAAS,CAAC,EAAE,MAAM,CAAC;gBAEvB,IAAI,EAAE,IAAI,CAAC,6BAA6B,EAAE,KAAK,CAAC,GAAG,MAAM;IAiBrE,OAAO,CAAC,yBAAyB;CAoBlC;AAED,MAAM,WAAW,MAAM;IACrB,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,QAAQ,CAAC,EAAE,QAAQ,CAAC;IAC7B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,eAAe,EAAE,MAAM,CAAC;IACjC,kBAAkB,CAAC,EAAE,2BAA2B,EAAE,CAAC;IACnD,gBAAgB,CAAC,EAAE,yBAAyB,EAAE,CAAC;IAC/C,QAAQ,CAAC,OAAO,CAAC,EAAE;QAAE,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAA;KAAE,CAAC;CAC3C;AAED,eAAO,MAAM,WAAW,gBAAiB,MAAM,WAuB9C,CAAC;AAEF,wBAAgB,cAAc,CAC5B,UAAU,SAAwC,GACjD,MAAM,CAQR;AAED,wBAAgB,0BAA0B,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAIlE;AAED,wBAAgB,WAAW,CAAC,OAAO,EAAE,MAAM,cAS1C"}