terrafaker 0.0.0 → 0.0.4

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 (42) hide show
  1. package/README.md +24 -14
  2. package/dist/commands/generate/file.js +11 -9
  3. package/dist/commands/generate/repo.js +7 -3
  4. package/dist/constants/azure.js +187 -0
  5. package/dist/enums/providers.js +1 -0
  6. package/dist/enums/resource-types.js +8 -0
  7. package/dist/utilities/generators/aws-generator.js +68 -0
  8. package/dist/utilities/generators/azure-generator.js +45 -0
  9. package/dist/utilities/generators/file-generator.js +13 -0
  10. package/dist/utilities/generators/gcp-generator.js +53 -0
  11. package/dist/utilities/generators/generator-utils.js +8 -33
  12. package/dist/utilities/generators/provider-generator-factory.js +18 -0
  13. package/dist/utilities/generators/provider-generator.js +35 -0
  14. package/dist/utilities/generators/repo-generator.js +31 -0
  15. package/dist/utilities/string-utils.js +2 -1
  16. package/oclif.manifest.json +5 -3
  17. package/package.json +13 -14
  18. package/dist/commands/generate/file.d.ts +0 -13
  19. package/dist/commands/generate/index.d.ts +0 -7
  20. package/dist/commands/generate/repo.d.ts +0 -18
  21. package/dist/commands/gh/clone-repos.d.ts +0 -10
  22. package/dist/commands/gh/delete-repos.d.ts +0 -9
  23. package/dist/commands/gh/index.d.ts +0 -7
  24. package/dist/commands/util/format-psv.d.ts +0 -10
  25. package/dist/commands/util/format-tsv.d.ts +0 -13
  26. package/dist/commands/util/index.d.ts +0 -7
  27. package/dist/constants/aws.d.ts +0 -192
  28. package/dist/constants/gcp.d.ts +0 -88
  29. package/dist/constants/tags.d.ts +0 -5
  30. package/dist/enums/help-messages.d.ts +0 -4
  31. package/dist/enums/providers.d.ts +0 -8
  32. package/dist/index.d.ts +0 -1
  33. package/dist/types/object-values.d.ts +0 -2
  34. package/dist/utilities/base-command.d.ts +0 -5
  35. package/dist/utilities/flags.d.ts +0 -5
  36. package/dist/utilities/generators/aws-generators.d.ts +0 -4
  37. package/dist/utilities/generators/aws-generators.js +0 -80
  38. package/dist/utilities/generators/gcp-generators.d.ts +0 -4
  39. package/dist/utilities/generators/gcp-generators.js +0 -69
  40. package/dist/utilities/generators/generator-utils.d.ts +0 -80
  41. package/dist/utilities/github.d.ts +0 -8
  42. package/dist/utilities/string-utils.d.ts +0 -5
@@ -1,5 +0,0 @@
1
- import { Command } from "@oclif/core";
2
- declare abstract class BaseCommand extends Command {
3
- showHelp(): Promise<void>;
4
- }
5
- export { BaseCommand };
@@ -1,5 +0,0 @@
1
- declare const formatFlag: import("@oclif/core/interfaces").BooleanFlag<boolean>;
2
- declare const quietFlag: import("@oclif/core/interfaces").BooleanFlag<boolean>;
3
- declare const resourceCountFlag: import("@oclif/core/interfaces").OptionFlag<number, import("@oclif/core/interfaces").CustomOptions>;
4
- declare const providerFlag: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
5
- export { formatFlag, providerFlag, quietFlag, resourceCountFlag };
@@ -1,4 +0,0 @@
1
- import { TerraformGenerator } from "terraform-generator";
2
- import type { FileGeneratorOptions } from "./generator-utils.js";
3
- declare const generateAwsFile: (options?: FileGeneratorOptions) => TerraformGenerator;
4
- export { generateAwsFile };
@@ -1,80 +0,0 @@
1
- import { TerraformGenerator } from "terraform-generator";
2
- import { maybe, randomEnvironmentTag, randomId, randomItem, randomMemorableSlug, randomMemorySize, randomServiceTag, unique, } from "./generator-utils.js";
3
- import { AWS_EBS_VOLUME_TYPES, AWS_INSTANCE_TYPES, AWS_LAMBDA_RUNTIMES, AWS_REGIONS, } from "../../constants/aws.js";
4
- const AwsResourceType = {
5
- Instance: "aws_instance",
6
- LambdaFunction: "aws_lambda_function",
7
- };
8
- const randomRegion = () => randomItem(AWS_REGIONS);
9
- const randomAmi = unique(() => `ami-${randomId()}`);
10
- const randomRole = unique(() => `arn:aws:iam::${randomId()}:mfa/${randomMemorableSlug()}`);
11
- const randomResourceType = () => randomItem(Object.values(AwsResourceType));
12
- const generateAwsInstance = (options) => {
13
- const { tfg, environment = randomEnvironmentTag(), service = randomServiceTag(), } = options;
14
- const ami = randomAmi();
15
- const instanceType = randomItem(AWS_INSTANCE_TYPES);
16
- const name = randomMemorableSlug();
17
- const rootBlockDevice = maybe(0.5)
18
- ? {
19
- root_block_device: {
20
- volume_size: randomMemorySize({
21
- min: 1024,
22
- max: 64 * 1024 * 1024,
23
- step: 1024,
24
- }),
25
- volume_type: randomItem(AWS_EBS_VOLUME_TYPES),
26
- },
27
- }
28
- : {};
29
- tfg.resource(AwsResourceType.Instance, name, {
30
- ami,
31
- instance_type: instanceType,
32
- ...rootBlockDevice,
33
- tags: { name, environment, service },
34
- });
35
- };
36
- const generateAwsLambdaFunction = (options) => {
37
- const { tfg, environment = randomEnvironmentTag(), service = randomServiceTag(), } = options;
38
- const ami = randomAmi();
39
- const name = randomMemorableSlug();
40
- const runtime = randomItem(AWS_LAMBDA_RUNTIMES);
41
- const functionName = randomItem(["run", "test", "handler"]);
42
- const handler = `${randomItem(["exports", "index"])}.${functionName}`;
43
- /** @see https://docs.aws.amazon.com/lambda/latest/dg/configuration-memory.html */
44
- const memorySize = randomMemorySize({ min: 128, max: 10240, step: 128 });
45
- const role = randomRole();
46
- tfg.resource(AwsResourceType.LambdaFunction, name, {
47
- ami,
48
- runtime,
49
- handler,
50
- function_name: functionName,
51
- memory_size: memorySize,
52
- role,
53
- tags: { name, environment, service },
54
- });
55
- };
56
- const generateResourceByType = (options) => {
57
- const { type, ...rest } = options;
58
- switch (type) {
59
- case AwsResourceType.LambdaFunction:
60
- return generateAwsLambdaFunction(rest);
61
- default:
62
- case AwsResourceType.Instance: {
63
- return generateAwsInstance(rest);
64
- }
65
- }
66
- };
67
- const generateAwsFile = (options) => {
68
- const { resourceCount = 3, environment = randomEnvironmentTag() } = options ?? {};
69
- const tfg = new TerraformGenerator();
70
- const region = randomRegion();
71
- tfg.provider("aws", {
72
- region,
73
- });
74
- for (let i = 0; i < resourceCount; i++) {
75
- const type = randomResourceType();
76
- generateResourceByType({ type, tfg, environment });
77
- }
78
- return tfg;
79
- };
80
- export { generateAwsFile };
@@ -1,4 +0,0 @@
1
- import { TerraformGenerator } from "terraform-generator";
2
- import type { FileGeneratorOptions } from "./generator-utils.js";
3
- declare const generateGcpFile: (options?: FileGeneratorOptions) => TerraformGenerator;
4
- export { generateGcpFile };
@@ -1,69 +0,0 @@
1
- import { TerraformGenerator } from "terraform-generator";
2
- import { GCP_GPU_MACHINE_TYPES, GCP_INSTANCE_TYPES, GCP_LAMBDA_RUNTIMES, GCP_REGIONS, } from "../../constants/gcp.js";
3
- import { maybe, randomEnvironmentTag, randomInt, randomItem, randomMemorableSlug, randomMemorySize, randomServiceTag, } from "./generator-utils.js";
4
- const GcpResourceType = {
5
- Instance: "google_compute_instance",
6
- LambdaFunction: "google_cloudfunctions_function",
7
- };
8
- const randomRegion = () => randomItem(GCP_REGIONS);
9
- const randomResourceType = () => randomItem(Object.values(GcpResourceType));
10
- const generateGcpInstance = (options) => {
11
- const { tfg, environment = randomEnvironmentTag(), service = randomServiceTag(), } = options;
12
- const machineType = randomItem(GCP_INSTANCE_TYPES);
13
- const name = randomMemorableSlug();
14
- const guestAccelerator = maybe(0.5)
15
- ? {
16
- guest_accelerator: {
17
- type: randomItem(GCP_GPU_MACHINE_TYPES),
18
- count: randomInt({ min: 1, max: 4 }),
19
- },
20
- }
21
- : {};
22
- tfg.resource(GcpResourceType.Instance, name, {
23
- machine_type: machineType,
24
- ...guestAccelerator,
25
- labels: { name, environment, service },
26
- });
27
- };
28
- const generateGcpLambdaFunction = (options) => {
29
- const { tfg, environment = randomEnvironmentTag(), service = randomServiceTag(), } = options;
30
- const runtime = randomItem(GCP_LAMBDA_RUNTIMES);
31
- const name = randomMemorableSlug();
32
- /** @see https://docs.cloud.google.com/run/docs/configuring/services/memory-limits */
33
- const availableMemoryMb = randomMemorySize({
34
- min: 128,
35
- max: 32 * 1024,
36
- step: 128,
37
- });
38
- tfg.resource(GcpResourceType.LambdaFunction, name, {
39
- runtime,
40
- name,
41
- available_memory_mb: availableMemoryMb,
42
- labels: { name, environment, service },
43
- });
44
- };
45
- const generateResourceByType = (options) => {
46
- const { type, ...rest } = options;
47
- switch (type) {
48
- case GcpResourceType.LambdaFunction:
49
- return generateGcpLambdaFunction(rest);
50
- default:
51
- case GcpResourceType.Instance: {
52
- return generateGcpInstance(rest);
53
- }
54
- }
55
- };
56
- const generateGcpFile = (options) => {
57
- const { resourceCount = 3, environment = randomEnvironmentTag() } = options ?? {};
58
- const tfg = new TerraformGenerator();
59
- const region = randomRegion();
60
- tfg.provider("google", {
61
- region,
62
- });
63
- for (let i = 0; i < resourceCount; i++) {
64
- const type = randomResourceType();
65
- generateResourceByType({ type, tfg, environment });
66
- }
67
- return tfg;
68
- };
69
- export { generateGcpFile };
@@ -1,80 +0,0 @@
1
- import type { TerraformGenerator } from "terraform-generator";
2
- import type { Provider } from "../../enums/providers.js";
3
- type StringGenerator = () => string;
4
- interface ResourceGeneratorOptions {
5
- tfg: TerraformGenerator;
6
- environment?: string;
7
- service?: string;
8
- }
9
- interface FileGeneratorOptions {
10
- resourceCount?: number;
11
- environment?: string;
12
- }
13
- /**
14
- * Wraps a generator function to ensure the values it returns are not reused within the program runtime
15
- */
16
- declare function unique(generator: StringGenerator): StringGenerator;
17
- declare const randomMemorableSlug: StringGenerator;
18
- declare const randomItem: <T>(values: T[]) => T;
19
- declare const randomProvider: () => "aws" | "gcp";
20
- declare const randomId: StringGenerator;
21
- declare const randomEnvironmentTag: () => string;
22
- declare const randomServiceTag: () => string;
23
- interface RandomMemorySizeOptions extends Required<RandomIntOptions> {
24
- step: number;
25
- }
26
- declare const randomMemorySize: (options: RandomMemorySizeOptions) => number;
27
- interface RandomIntOptions {
28
- min?: number;
29
- max?: number;
30
- }
31
- declare const randomInt: (options: RandomIntOptions) => number;
32
- /**
33
- * Returns true/false depending on the provided probability (0 to 1)
34
- */
35
- declare const maybe: (probability: number) => boolean;
36
- interface GenerateFileByProviderOptions extends FileGeneratorOptions {
37
- provider: Provider;
38
- }
39
- declare const generateFileByProvider: (options: GenerateFileByProviderOptions) => TerraformGenerator;
40
- interface GenerateRepoOptions {
41
- /**
42
- * Provider to generate a terraform file for.
43
- */
44
- provider: Provider;
45
- /**
46
- * Environment to use for tags, etc.
47
- */
48
- environment?: string;
49
- /**
50
- * Whether the terraform files should be formatted. Requires `terraform` to be installed.
51
- */
52
- format: boolean;
53
- /**
54
- * Prefix for the repo
55
- */
56
- prefix: string;
57
- /**
58
- * Directory to generate the repo in
59
- */
60
- directory: string;
61
- /**
62
- * Number of files to generate
63
- */
64
- fileCount: number;
65
- /**
66
- * Number of resources per file to generate
67
- */
68
- resourceCount: number;
69
- /**
70
- * Whether output from the commands should be silenced
71
- */
72
- quiet?: boolean;
73
- }
74
- interface GenerateRepoResult {
75
- name: string;
76
- path: string;
77
- }
78
- declare const generateRepo: (options: GenerateRepoOptions) => Promise<GenerateRepoResult>;
79
- export type { FileGeneratorOptions, ResourceGeneratorOptions, StringGenerator };
80
- export { generateFileByProvider, generateRepo, maybe, randomEnvironmentTag, randomId, randomInt, randomItem, randomMemorableSlug, randomMemorySize, randomProvider, randomServiceTag, unique, };
@@ -1,8 +0,0 @@
1
- interface Repo {
2
- name: string;
3
- nameWithOwner: string;
4
- }
5
- declare const listRepos: () => Repo[];
6
- declare const stringifyRepos: (repos: Repo[]) => string;
7
- export type { Repo };
8
- export { listRepos, stringifyRepos };
@@ -1,5 +0,0 @@
1
- declare const slugify: (value: string) => string;
2
- declare const snakeSlugify: (value: string) => string;
3
- declare const success: (message: string) => string;
4
- declare const stringifySingleLineArray: (values: string[]) => string;
5
- export { slugify, snakeSlugify, stringifySingleLineArray, success };