@hiiretail/gcp-infra-generators 1.0.0 → 1.0.2

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 (74) hide show
  1. package/dist/generators/clan-resources/clan-project/index.js +89 -189
  2. package/dist/generators/common-resources/bigquery/index.js +172 -267
  3. package/dist/generators/common-resources/budget/index.js +67 -153
  4. package/dist/generators/common-resources/cloud-armor/index.js +17 -167
  5. package/dist/generators/common-resources/cloud-storage/index.js +96 -205
  6. package/dist/generators/common-resources/cloudsql/index.js +71 -177
  7. package/dist/generators/common-resources/cloudsql-database/index.js +40 -287
  8. package/dist/generators/common-resources/confluent-cluster/index.js +23 -132
  9. package/dist/generators/common-resources/datastore/index.js +48 -194
  10. package/dist/generators/common-resources/elastic-cloud/index.js +22 -132
  11. package/dist/generators/common-resources/elastic-index-policy/handle-yaml.js +76 -0
  12. package/dist/generators/common-resources/elastic-index-policy/index.js +131 -286
  13. package/dist/generators/common-resources/elastic-template/index.js +52 -162
  14. package/dist/generators/common-resources/firestore/index.js +93 -233
  15. package/dist/generators/common-resources/iam/index.js +35 -157
  16. package/dist/generators/common-resources/iam/valid-prefix.js +8 -0
  17. package/dist/generators/common-resources/kafka-connect/index.js +35 -144
  18. package/dist/generators/common-resources/kafka-topics/index.js +20 -129
  19. package/dist/generators/common-resources/kms/index.js +31 -141
  20. package/dist/generators/common-resources/memorystore/index.js +42 -328
  21. package/dist/generators/common-resources/monitoring/handle-yaml.js +49 -0
  22. package/dist/generators/common-resources/monitoring/index.js +144 -322
  23. package/dist/generators/common-resources/monitoring/templates/alerts/generic-infra.yaml +37 -2
  24. package/dist/generators/common-resources/monitoring/validate.js +58 -0
  25. package/dist/generators/common-resources/pubsub/append.js +130 -0
  26. package/dist/generators/common-resources/pubsub/get-gcp-projects.js +34 -0
  27. package/dist/generators/common-resources/pubsub/handle-subscribers.js +68 -0
  28. package/dist/generators/common-resources/pubsub/index.js +194 -536
  29. package/dist/generators/common-resources/pubsub/validate.js +53 -0
  30. package/dist/generators/common-resources/scheduler/append.js +85 -0
  31. package/dist/generators/common-resources/scheduler/index.js +62 -249
  32. package/dist/generators/common-resources/spanner/append.js +31 -0
  33. package/dist/generators/common-resources/spanner/index.js +102 -269
  34. package/dist/generators/common-resources/spanner/validate.js +38 -0
  35. package/dist/generators/docs/rca/index.js +25 -135
  36. package/dist/generators/docs/runbook/index.js +16 -126
  37. package/dist/generators/docs/srb/index.js +33 -147
  38. package/dist/generators/docs/srb/run-docker.js +2 -0
  39. package/dist/generators/init/clan-infra/gcp-projects.js +47 -0
  40. package/dist/generators/init/clan-infra/index.js +95 -290
  41. package/dist/generators/init/clan-infra/tribe-clan-repo.js +38 -0
  42. package/dist/generators/init/clan-infra/validate.js +8 -0
  43. package/dist/generators/maintenance/manage-states/index.js +142 -219
  44. package/dist/generators/maintenance/update-modules/index.js +56 -155
  45. package/dist/generators/organization/clan-project/googlecloud.js +124 -0
  46. package/dist/generators/organization/clan-project/index.js +81 -303
  47. package/dist/node_modules/.package-lock.json +88 -31
  48. package/dist/node_modules/@google-cloud/storage/build/cjs/src/bucket.js +5 -5
  49. package/dist/node_modules/@google-cloud/storage/build/cjs/src/file.d.ts +1 -0
  50. package/dist/node_modules/@google-cloud/storage/build/cjs/src/file.js +10 -1
  51. package/dist/node_modules/@google-cloud/storage/build/cjs/src/storage.js +1 -1
  52. package/dist/node_modules/@google-cloud/storage/build/cjs/src/transfer-manager.d.ts +4 -4
  53. package/dist/node_modules/@google-cloud/storage/build/cjs/src/transfer-manager.js +4 -4
  54. package/dist/node_modules/@google-cloud/storage/build/cjs/src/util.d.ts +1 -1
  55. package/dist/node_modules/@google-cloud/storage/build/cjs/src/util.js +2 -2
  56. package/dist/node_modules/@google-cloud/storage/build/esm/src/bucket.js +5 -5
  57. package/dist/node_modules/@google-cloud/storage/build/esm/src/file.d.ts +1 -0
  58. package/dist/node_modules/@google-cloud/storage/build/esm/src/file.js +10 -1
  59. package/dist/node_modules/@google-cloud/storage/build/esm/src/storage.js +1 -1
  60. package/dist/node_modules/@google-cloud/storage/build/esm/src/transfer-manager.d.ts +4 -4
  61. package/dist/node_modules/@google-cloud/storage/build/esm/src/transfer-manager.js +4 -4
  62. package/dist/node_modules/@google-cloud/storage/build/esm/src/util.d.ts +1 -1
  63. package/dist/node_modules/@google-cloud/storage/build/esm/src/util.js +2 -2
  64. package/dist/node_modules/@google-cloud/storage/package.json +5 -5
  65. package/dist/package.json +45 -0
  66. package/dist/src/BaseGenerator.js +84 -0
  67. package/dist/src/SecretsGenerator.js +137 -0
  68. package/dist/src/cli.js +54 -255
  69. package/dist/src/dependency-check.js +48 -0
  70. package/dist/src/update-check.js +38 -0
  71. package/dist/src/validators.js +33 -0
  72. package/dist/src/yeoman.js +80 -0
  73. package/package.json +2 -3
  74. package/dist/node_modules/@google-cloud/storage/CHANGELOG.md +0 -1769
@@ -1,184 +1,62 @@
1
- var __defProp = Object.defineProperty;
2
- var __getOwnPropNames = Object.getOwnPropertyNames;
3
- var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
4
- var __commonJS = (cb, mod) => function __require() {
5
- return mod || (0, cb[__getOwnPropNames(cb)[0]])((mod = { exports: {} }).exports, mod), mod.exports;
6
- };
7
-
8
- // src/validators.js
9
- var require_validators = __commonJS({
10
- "src/validators.js"(exports2, module2) {
11
- var path = require("path");
12
- module2.exports = {
13
- chain: /* @__PURE__ */ __name((input, ...validators) => {
14
- let msg = "";
15
- validators.every((validator) => {
16
- msg = validator(input);
17
- return msg === true;
18
- });
19
- return msg === true ? true : msg;
20
- }, "chain"),
21
- filename: /* @__PURE__ */ __name((input) => {
22
- if (!input) {
23
- return true;
24
- }
25
- return path.basename(input) === input ? true : "Invalid filename";
26
- }, "filename"),
27
- maxLength: /* @__PURE__ */ __name((input, maxLength) => !input || input.length <= maxLength ? true : `Exceeds max \
28
- length: ${maxLength}`, "maxLength"),
29
- required: /* @__PURE__ */ __name((input) => {
30
- const msg = "Required";
31
- if (Array.isArray(input)) {
32
- return input.length > 0 ? true : msg;
33
- }
34
- if (input) {
35
- return input.trim().length > 0 ? true : msg;
36
- }
37
- return msg;
38
- }, "required")
39
- };
40
- }
41
- });
42
-
43
- // src/BaseGenerator.js
44
- var require_BaseGenerator = __commonJS({
45
- "src/BaseGenerator.js"(exports2, module2) {
46
- var Generator = require("yeoman-generator");
47
- var path = require("path");
48
- var fs = require("fs");
49
- var inquirer = require("inquirer");
50
- var { chain, required: required2, filename } = require_validators();
51
- module2.exports = class extends Generator {
52
- constructor(args, opts) {
53
- super(args, opts);
54
- this.baseDir = path.resolve(path.join(__dirname, ".."));
55
- this.destinationRoot(process.cwd());
56
- const [command, generator] = opts.namespace.split(":").slice(-2);
57
- this.generatorId = path.join(command, generator);
58
- this.sourceRoot(
59
- path.join(this.baseDir, "generators", this.generatorId, "templates")
60
- );
61
- this.copyDir = (templateDir, targetDir, answers = this.answers, skipIfExists = false) => {
62
- if (skipIfExists && fs.existsSync(targetDir)) {
63
- return;
64
- }
65
- this.fs.copyTpl(
66
- this.templatePath(`${templateDir}/**/*`),
67
- this.destinationPath(targetDir),
68
- answers
69
- );
70
- };
71
- this.listSubDirectories = (parent) => fs.readdirSync(parent).filter((f) => !f.startsWith(".")).filter((f) => fs.
72
- lstatSync(path.join(parent, f)).isDirectory()).sort((a, b) => a.localeCompare(b));
73
- this.kebabCase = (input) => input.replace(/\s|_/g, "-");
74
- this.chooseOrCreatePrompts = (name, getChoicesDirectory) => [
75
- {
76
- when: /* @__PURE__ */ __name((answers) => fs.existsSync(getChoicesDirectory(answers)), "when"),
77
- type: "list",
78
- name,
79
- message: `Choose ${name}`,
80
- store: true,
81
- choices: /* @__PURE__ */ __name((answers) => [
82
- ...this.listSubDirectories(getChoicesDirectory(answers)),
83
- new inquirer.Separator(),
84
- `Create new ${name}`
85
- ], "choices"),
86
- validate: required2,
87
- filter: this.kebabCase
88
- },
89
- {
90
- when: /* @__PURE__ */ __name((answers) => !fs.existsSync(getChoicesDirectory(answers)) || answers[name] === `\
91
- Create-new-${name}`, "when"),
92
- type: "input",
93
- name: `new-${name}`,
94
- message: `New ${name} name`,
95
- store: false,
96
- validate: /* @__PURE__ */ __name((input) => chain(input, required2, filename), "validate"),
97
- filter: this.kebabCase
98
- },
99
- {
100
- when: /* @__PURE__ */ __name((answers) => !fs.existsSync(getChoicesDirectory(answers)) || answers[name] === "\
101
- Create-new-tribe", "when"),
102
- type: "input",
103
- name: "costCenter",
104
- message: "Please provide the Cost Center of the Tribe",
105
- store: false,
106
- validate: /* @__PURE__ */ __name((input) => chain(input, required2, filename), "validate"),
107
- filter: this.kebabCase
108
- }
109
- ];
110
- }
111
- };
112
- }
113
- });
114
-
115
- // generators/common-resources/iam/valid-prefix.js
116
- var require_valid_prefix = __commonJS({
117
- "generators/common-resources/iam/valid-prefix.js"(exports2, module2) {
118
- var validPrefix2 = /* @__PURE__ */ __name((input) => {
119
- if (input.replace(/\s/g, "").length === 3) {
120
- return true;
121
- }
122
- return "Permission prefix must be 3 characters";
123
- }, "validPrefix");
124
- module2.exports = validPrefix2;
125
- }
126
- });
1
+ const chalk = require('chalk');
2
+ const { required } = require('../../../src/validators');
3
+ const BaseGenerator = require('../../../src/BaseGenerator');
4
+ const validPrefix = require('./valid-prefix');
127
5
 
128
- // generators/common-resources/iam/index.js
129
- var chalk = require("chalk");
130
- var { required } = require_validators();
131
- var BaseGenerator = require_BaseGenerator();
132
- var validPrefix = require_valid_prefix();
133
6
  module.exports = class extends BaseGenerator {
134
7
  prompting() {
135
8
  const prompts = [
136
9
  {
137
- type: "input",
138
- name: "systemName",
139
- message: "System name",
140
- validate: required
10
+ type: 'input',
11
+ name: 'systemName',
12
+ message: 'System name',
13
+ validate: required,
141
14
  },
142
15
  {
143
- type: "input",
144
- name: "permissionPrefix",
145
- message: "Permission prefix",
146
- transform: /* @__PURE__ */ __name((input) => input.toLowerCase(), "transform"),
147
- validate: /* @__PURE__ */ __name((input) => required(input) && validPrefix(input), "validate")
16
+ type: 'input',
17
+ name: 'permissionPrefix',
18
+ message: 'Permission prefix',
19
+ transform: (input) => input.toLowerCase(),
20
+ validate: (input) => required(input) && validPrefix(input),
148
21
  },
149
22
  {
150
- type: "input",
151
- name: "serviceName",
152
- message: "Cloud Run service name",
153
- validate: required
23
+ type: 'input',
24
+ name: 'serviceName',
25
+ message: 'Cloud Run service name',
26
+ validate: required,
154
27
  },
155
28
  {
156
- type: "input",
157
- name: "repository",
158
- message: "Git repository name",
159
- validate: required
160
- }
29
+ type: 'input',
30
+ name: 'repository',
31
+ message: 'Git repository name',
32
+ validate: required,
33
+ },
161
34
  ];
35
+
162
36
  return this.prompt(prompts).then((props) => {
163
37
  this.answers = props;
164
38
  });
165
39
  }
40
+
166
41
  writing() {
167
42
  const { permissionPrefix } = this.answers;
43
+
168
44
  this.fs.copy(
169
- this.templatePath("github", "workflows", "iam.yml"),
170
- this.destinationPath(".github", "workflows", "iam.yml")
45
+ this.templatePath('github', 'workflows', 'iam.yml'),
46
+ this.destinationPath('.github', 'workflows', 'iam.yml'),
171
47
  );
48
+
172
49
  this.fs.copyTpl(
173
- this.templatePath("iam.yaml"),
174
- this.destinationPath("iam", `${permissionPrefix}.yaml`),
175
- this.answers
50
+ this.templatePath('iam.yaml'),
51
+ this.destinationPath('iam', `${permissionPrefix}.yaml`),
52
+ this.answers,
176
53
  );
177
54
  }
55
+
178
56
  end() {
179
57
  this.log(`
180
- ${chalk.green("Your IAM resources have now been created.")}
181
- ${chalk.green("1.")} Modify the IAM YAML file to define permissions and roles.\`);
182
- ${chalk.green("2.")} Push this change in a feature branch and open a pull request.`);
58
+ ${chalk.green('Your IAM resources have now been created.')}
59
+ ${chalk.green('1.')} Modify the IAM YAML file to define permissions and roles.\`);
60
+ ${chalk.green('2.')} Push this change in a feature branch and open a pull request.`);
183
61
  }
184
62
  };
@@ -0,0 +1,8 @@
1
+ const validPrefix = (input) => {
2
+ if (input.replace(/\s/g, '').length === 3) {
3
+ return true;
4
+ }
5
+ return 'Permission prefix must be 3 characters';
6
+ };
7
+
8
+ module.exports = validPrefix;
@@ -1,179 +1,70 @@
1
- var __defProp = Object.defineProperty;
2
- var __getOwnPropNames = Object.getOwnPropertyNames;
3
- var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
4
- var __commonJS = (cb, mod) => function __require() {
5
- return mod || (0, cb[__getOwnPropNames(cb)[0]])((mod = { exports: {} }).exports, mod), mod.exports;
6
- };
7
-
8
- // src/validators.js
9
- var require_validators = __commonJS({
10
- "src/validators.js"(exports2, module2) {
11
- var path2 = require("path");
12
- module2.exports = {
13
- chain: /* @__PURE__ */ __name((input, ...validators) => {
14
- let msg = "";
15
- validators.every((validator) => {
16
- msg = validator(input);
17
- return msg === true;
18
- });
19
- return msg === true ? true : msg;
20
- }, "chain"),
21
- filename: /* @__PURE__ */ __name((input) => {
22
- if (!input) {
23
- return true;
24
- }
25
- return path2.basename(input) === input ? true : "Invalid filename";
26
- }, "filename"),
27
- maxLength: /* @__PURE__ */ __name((input, maxLength) => !input || input.length <= maxLength ? true : `Exceeds max \
28
- length: ${maxLength}`, "maxLength"),
29
- required: /* @__PURE__ */ __name((input) => {
30
- const msg = "Required";
31
- if (Array.isArray(input)) {
32
- return input.length > 0 ? true : msg;
33
- }
34
- if (input) {
35
- return input.trim().length > 0 ? true : msg;
36
- }
37
- return msg;
38
- }, "required")
39
- };
40
- }
41
- });
42
-
43
- // src/BaseGenerator.js
44
- var require_BaseGenerator = __commonJS({
45
- "src/BaseGenerator.js"(exports2, module2) {
46
- var Generator = require("yeoman-generator");
47
- var path2 = require("path");
48
- var fs = require("fs");
49
- var inquirer = require("inquirer");
50
- var { chain, required: required2, filename } = require_validators();
51
- module2.exports = class extends Generator {
52
- constructor(args, opts) {
53
- super(args, opts);
54
- this.baseDir = path2.resolve(path2.join(__dirname, ".."));
55
- this.destinationRoot(process.cwd());
56
- const [command, generator] = opts.namespace.split(":").slice(-2);
57
- this.generatorId = path2.join(command, generator);
58
- this.sourceRoot(
59
- path2.join(this.baseDir, "generators", this.generatorId, "templates")
60
- );
61
- this.copyDir = (templateDir, targetDir, answers = this.answers, skipIfExists = false) => {
62
- if (skipIfExists && fs.existsSync(targetDir)) {
63
- return;
64
- }
65
- this.fs.copyTpl(
66
- this.templatePath(`${templateDir}/**/*`),
67
- this.destinationPath(targetDir),
68
- answers
69
- );
70
- };
71
- this.listSubDirectories = (parent) => fs.readdirSync(parent).filter((f) => !f.startsWith(".")).filter((f) => fs.
72
- lstatSync(path2.join(parent, f)).isDirectory()).sort((a, b) => a.localeCompare(b));
73
- this.kebabCase = (input) => input.replace(/\s|_/g, "-");
74
- this.chooseOrCreatePrompts = (name, getChoicesDirectory) => [
75
- {
76
- when: /* @__PURE__ */ __name((answers) => fs.existsSync(getChoicesDirectory(answers)), "when"),
77
- type: "list",
78
- name,
79
- message: `Choose ${name}`,
80
- store: true,
81
- choices: /* @__PURE__ */ __name((answers) => [
82
- ...this.listSubDirectories(getChoicesDirectory(answers)),
83
- new inquirer.Separator(),
84
- `Create new ${name}`
85
- ], "choices"),
86
- validate: required2,
87
- filter: this.kebabCase
88
- },
89
- {
90
- when: /* @__PURE__ */ __name((answers) => !fs.existsSync(getChoicesDirectory(answers)) || answers[name] === `\
91
- Create-new-${name}`, "when"),
92
- type: "input",
93
- name: `new-${name}`,
94
- message: `New ${name} name`,
95
- store: false,
96
- validate: /* @__PURE__ */ __name((input) => chain(input, required2, filename), "validate"),
97
- filter: this.kebabCase
98
- },
99
- {
100
- when: /* @__PURE__ */ __name((answers) => !fs.existsSync(getChoicesDirectory(answers)) || answers[name] === "\
101
- Create-new-tribe", "when"),
102
- type: "input",
103
- name: "costCenter",
104
- message: "Please provide the Cost Center of the Tribe",
105
- store: false,
106
- validate: /* @__PURE__ */ __name((input) => chain(input, required2, filename), "validate"),
107
- filter: this.kebabCase
108
- }
109
- ];
110
- }
111
- };
112
- }
113
- });
1
+ const path = require('path');
2
+ const chalk = require('chalk');
3
+ const BaseGenerator = require('../../../src/BaseGenerator');
4
+ const { required } = require('../../../src/validators');
114
5
 
115
- // generators/common-resources/kafka-connect/index.js
116
- var path = require("path");
117
- var chalk = require("chalk");
118
- var BaseGenerator = require_BaseGenerator();
119
- var { required } = require_validators();
120
6
  module.exports = class extends BaseGenerator {
121
7
  prompting() {
122
8
  const prompts = [
123
9
  {
124
- type: "list",
125
- name: "connectionClass",
126
- message: "Connection type (connector.class):",
127
- default: "ElasticsearchSink",
128
- choices: ["ElasticsearchSink", "PubSubSource"],
129
- validate: required
10
+ type: 'list',
11
+ name: 'connectionClass',
12
+ message: 'Connection type (connector.class):',
13
+ default: 'ElasticsearchSink',
14
+ choices: ['ElasticsearchSink', 'PubSubSource'],
15
+ validate: required,
130
16
  },
131
17
  {
132
- type: "input",
133
- name: "connectionName",
134
- message: "Connection name:",
135
- validate: required
18
+ type: 'input',
19
+ name: 'connectionName',
20
+ message: 'Connection name:',
21
+ validate: required,
136
22
  },
137
23
  {
138
- type: "input",
139
- name: "topicName",
140
- message: "Kafka Topic:",
141
- validate: required
142
- }
24
+ type: 'input',
25
+ name: 'topicName',
26
+ message: 'Kafka Topic:',
27
+ validate: required,
28
+ },
143
29
  ];
30
+
144
31
  return this.prompt(prompts).then((props) => {
145
32
  this.answers = props;
146
33
  });
147
34
  }
35
+
148
36
  writing() {
149
37
  const { connectionName, connectionClass } = this.answers;
38
+
150
39
  const templateMap = {
151
- ElasticsearchSink: "elastic",
152
- PubSubSource: "pubsub"
40
+ ElasticsearchSink: 'elastic',
41
+ PubSubSource: 'pubsub',
153
42
  };
154
- ["prod", "staging"].forEach((env) => {
43
+
44
+ ['prod', 'staging'].forEach((env) => {
155
45
  this.copyDir(
156
46
  templateMap[connectionClass],
157
- path.join("infra", env, "kafka-connect", connectionName),
47
+ path.join('infra', env, 'kafka-connect', connectionName),
158
48
  {
159
49
  ...this.answers,
160
50
  env,
161
- connectionName
162
- }
51
+ connectionName,
52
+ },
163
53
  );
164
54
  });
165
55
  }
56
+
166
57
  end() {
167
58
  const { connectionName } = this.answers;
59
+
168
60
  const connectionDir = path.join(connectionName);
169
61
  this.log(`
170
62
  ${chalk.green(`Your Kafka connection have now been created. To finalize your configuration, please continue
171
63
  with manual editing of the generated files.`)}
172
- ${chalk.green("1.")} Review and fill other parameters.
173
- \u2192 ${chalk.cyan(path.join(connectionDir, "terragrunt.hcl"))}
174
- ${chalk.green("2.")} Make sure that the different projects are used in configuration for staging and prod in pubsub sour\
175
- ce connection.
176
- ${chalk.green("3.")} Push this change in a feature branch and open a pull request.
64
+ ${chalk.green('1.')} Review and fill other parameters.
65
+ \u2192 ${chalk.cyan(path.join(connectionDir, 'terragrunt.hcl'))}
66
+ ${chalk.green('2.')} Make sure that the different projects are used in configuration for staging and prod in pubsub source connection.
67
+ ${chalk.green('3.')} Push this change in a feature branch and open a pull request.
177
68
  `);
178
69
  }
179
70
  };
@@ -1,155 +1,46 @@
1
- var __defProp = Object.defineProperty;
2
- var __getOwnPropNames = Object.getOwnPropertyNames;
3
- var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
4
- var __commonJS = (cb, mod) => function __require() {
5
- return mod || (0, cb[__getOwnPropNames(cb)[0]])((mod = { exports: {} }).exports, mod), mod.exports;
6
- };
7
-
8
- // src/validators.js
9
- var require_validators = __commonJS({
10
- "src/validators.js"(exports2, module2) {
11
- var path2 = require("path");
12
- module2.exports = {
13
- chain: /* @__PURE__ */ __name((input, ...validators) => {
14
- let msg = "";
15
- validators.every((validator) => {
16
- msg = validator(input);
17
- return msg === true;
18
- });
19
- return msg === true ? true : msg;
20
- }, "chain"),
21
- filename: /* @__PURE__ */ __name((input) => {
22
- if (!input) {
23
- return true;
24
- }
25
- return path2.basename(input) === input ? true : "Invalid filename";
26
- }, "filename"),
27
- maxLength: /* @__PURE__ */ __name((input, maxLength) => !input || input.length <= maxLength ? true : `Exceeds max \
28
- length: ${maxLength}`, "maxLength"),
29
- required: /* @__PURE__ */ __name((input) => {
30
- const msg = "Required";
31
- if (Array.isArray(input)) {
32
- return input.length > 0 ? true : msg;
33
- }
34
- if (input) {
35
- return input.trim().length > 0 ? true : msg;
36
- }
37
- return msg;
38
- }, "required")
39
- };
40
- }
41
- });
42
-
43
- // src/BaseGenerator.js
44
- var require_BaseGenerator = __commonJS({
45
- "src/BaseGenerator.js"(exports2, module2) {
46
- var Generator = require("yeoman-generator");
47
- var path2 = require("path");
48
- var fs = require("fs");
49
- var inquirer = require("inquirer");
50
- var { chain, required: required2, filename } = require_validators();
51
- module2.exports = class extends Generator {
52
- constructor(args, opts) {
53
- super(args, opts);
54
- this.baseDir = path2.resolve(path2.join(__dirname, ".."));
55
- this.destinationRoot(process.cwd());
56
- const [command, generator] = opts.namespace.split(":").slice(-2);
57
- this.generatorId = path2.join(command, generator);
58
- this.sourceRoot(
59
- path2.join(this.baseDir, "generators", this.generatorId, "templates")
60
- );
61
- this.copyDir = (templateDir, targetDir, answers = this.answers, skipIfExists = false) => {
62
- if (skipIfExists && fs.existsSync(targetDir)) {
63
- return;
64
- }
65
- this.fs.copyTpl(
66
- this.templatePath(`${templateDir}/**/*`),
67
- this.destinationPath(targetDir),
68
- answers
69
- );
70
- };
71
- this.listSubDirectories = (parent) => fs.readdirSync(parent).filter((f) => !f.startsWith(".")).filter((f) => fs.
72
- lstatSync(path2.join(parent, f)).isDirectory()).sort((a, b) => a.localeCompare(b));
73
- this.kebabCase = (input) => input.replace(/\s|_/g, "-");
74
- this.chooseOrCreatePrompts = (name, getChoicesDirectory) => [
75
- {
76
- when: /* @__PURE__ */ __name((answers) => fs.existsSync(getChoicesDirectory(answers)), "when"),
77
- type: "list",
78
- name,
79
- message: `Choose ${name}`,
80
- store: true,
81
- choices: /* @__PURE__ */ __name((answers) => [
82
- ...this.listSubDirectories(getChoicesDirectory(answers)),
83
- new inquirer.Separator(),
84
- `Create new ${name}`
85
- ], "choices"),
86
- validate: required2,
87
- filter: this.kebabCase
88
- },
89
- {
90
- when: /* @__PURE__ */ __name((answers) => !fs.existsSync(getChoicesDirectory(answers)) || answers[name] === `\
91
- Create-new-${name}`, "when"),
92
- type: "input",
93
- name: `new-${name}`,
94
- message: `New ${name} name`,
95
- store: false,
96
- validate: /* @__PURE__ */ __name((input) => chain(input, required2, filename), "validate"),
97
- filter: this.kebabCase
98
- },
99
- {
100
- when: /* @__PURE__ */ __name((answers) => !fs.existsSync(getChoicesDirectory(answers)) || answers[name] === "\
101
- Create-new-tribe", "when"),
102
- type: "input",
103
- name: "costCenter",
104
- message: "Please provide the Cost Center of the Tribe",
105
- store: false,
106
- validate: /* @__PURE__ */ __name((input) => chain(input, required2, filename), "validate"),
107
- filter: this.kebabCase
108
- }
109
- ];
110
- }
111
- };
112
- }
113
- });
1
+ const path = require('path');
2
+ const chalk = require('chalk');
3
+ const BaseGenerator = require('../../../src/BaseGenerator');
4
+ const { required } = require('../../../src/validators');
114
5
 
115
- // generators/common-resources/kafka-topics/index.js
116
- var path = require("path");
117
- var chalk = require("chalk");
118
- var BaseGenerator = require_BaseGenerator();
119
- var { required } = require_validators();
120
6
  module.exports = class extends BaseGenerator {
121
7
  prompting() {
122
8
  const prompts = [
123
9
  {
124
- type: "input",
125
- name: "topicName",
126
- message: "Please provide the Kafka topic name",
127
- validate: required
128
- }
10
+ type: 'input',
11
+ name: 'topicName',
12
+ message: 'Please provide the Kafka topic name',
13
+ validate: required,
14
+ },
129
15
  ];
16
+
130
17
  return this.prompt(prompts).then((props) => {
131
18
  this.answers = props;
132
19
  });
133
20
  }
21
+
134
22
  writing() {
135
23
  const { topicName } = this.answers;
136
- ["prod", "staging"].forEach((env) => {
137
- this.copyDir("kafka", path.join("infra", env, "kafka"), {
24
+
25
+ ['prod', 'staging'].forEach((env) => {
26
+ this.copyDir('kafka', path.join('infra', env, 'kafka'), {
138
27
  ...this.answers,
139
28
  env,
140
- topicName
29
+ topicName,
141
30
  });
142
31
  });
143
32
  }
33
+
144
34
  end() {
145
35
  const { topicName } = this.answers;
36
+
146
37
  const kafkaDir = path.join(topicName);
147
38
  this.log(`
148
39
  ${chalk.green(`Your Kafka topic have now been created. To finalize your configuration, please continue
149
40
  with manual editing of the generated files.`)}
150
- ${chalk.green("1.")} Review and add more subscribers if needed.
151
- \u2192 ${chalk.cyan(path.join(kafkaDir, "kafka.yaml"))}
152
- ${chalk.green("2.")} Push this change in a feature branch and open a pull request.
41
+ ${chalk.green('1.')} Review and add more subscribers if needed.
42
+ \u2192 ${chalk.cyan(path.join(kafkaDir, 'kafka.yaml'))}
43
+ ${chalk.green('2.')} Push this change in a feature branch and open a pull request.
153
44
  `);
154
45
  }
155
46
  };