@field123/hacksprint-2022-js-sdk-test-response-generation 0.0.4 → 0.0.8

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.
package/cli.d.ts ADDED
@@ -0,0 +1 @@
1
+
package/cli.js ADDED
@@ -0,0 +1,144 @@
1
+ var __defProp = Object.defineProperty;
2
+ var __getOwnPropSymbols = Object.getOwnPropertySymbols;
3
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
4
+ var __propIsEnum = Object.prototype.propertyIsEnumerable;
5
+ var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
6
+ var __spreadValues = (a, b) => {
7
+ for (var prop in b || (b = {}))
8
+ if (__hasOwnProp.call(b, prop))
9
+ __defNormalProp(a, prop, b[prop]);
10
+ if (__getOwnPropSymbols)
11
+ for (var prop of __getOwnPropSymbols(b)) {
12
+ if (__propIsEnum.call(b, prop))
13
+ __defNormalProp(a, prop, b[prop]);
14
+ }
15
+ return a;
16
+ };
17
+
18
+ // src/cli.ts
19
+ var import_commander = require("commander");
20
+
21
+ // src/load-env.ts
22
+ var import_dotenv = require("dotenv");
23
+ function loadEnv() {
24
+ const result = (0, import_dotenv.config)();
25
+ if (result.error) {
26
+ throw new Error("Failed to load environment variables. Check .env exists and is setup to match example.");
27
+ }
28
+ return result.parsed;
29
+ }
30
+
31
+ // src/newman-exec.ts
32
+ var import_newman = require("newman");
33
+ var import_fs = require("fs");
34
+ async function executeCollection(options, env) {
35
+ const postmanCollection = await getPostmanCollection(options.source);
36
+ const postmanEnvironment = await getPostmanEnvironment(options.env);
37
+ return new Promise((resolve, reject) => {
38
+ (0, import_newman.run)(__spreadValues({
39
+ collection: postmanCollection,
40
+ reporters: ["cli", "htmlextra", "@field123/ep-resp"],
41
+ reporter: {
42
+ "@field123/ep-resp": __spreadValues({}, options)
43
+ },
44
+ environment: postmanEnvironment
45
+ }, env ? { envVar: createEnvironment(env) } : {}), (err) => {
46
+ if (err) {
47
+ reject(err);
48
+ }
49
+ console.log("collection run complete!");
50
+ resolve();
51
+ });
52
+ });
53
+ }
54
+ function createEnvironment(env) {
55
+ return [
56
+ {
57
+ key: "clientID",
58
+ value: env.EPCC_CLIENT_ID
59
+ },
60
+ {
61
+ key: "clientSecret",
62
+ value: env.EPCC_CLIENT_SECRET
63
+ }
64
+ ];
65
+ }
66
+ function getPostmanEnvironment(source) {
67
+ console.log(`Attempting to load postman environment file from ${source}`);
68
+ return getFile(source);
69
+ }
70
+ function getPostmanCollection(source) {
71
+ console.log(`Attempting to load postman collection file from ${source}`);
72
+ return getFile(source);
73
+ }
74
+ function getFile(name) {
75
+ return new Promise((resolve, reject) => {
76
+ (0, import_fs.readFile)(name, "utf-8", (err, data) => {
77
+ if (err) {
78
+ reject(err);
79
+ }
80
+ resolve(JSON.parse(data));
81
+ });
82
+ });
83
+ }
84
+
85
+ // src/terraform.ts
86
+ var import_child_process = require("child_process");
87
+ function applyTerraform(options = { verbose: false }) {
88
+ console.log("Attempting to terraform apply...");
89
+ return handleTerraformCommand(options, "apply", "-auto-approve").then(() => console.log("Applied terraform successfully!"));
90
+ }
91
+ function destroyTerraform(options = { verbose: false }) {
92
+ console.log("Attempting to terraform destroy...");
93
+ return handleTerraformCommand(options, "destroy", "-auto-approve").then(() => console.log("Destroyed terraform successfully!"));
94
+ }
95
+ function handleTerraformCommand(options, ...args) {
96
+ return new Promise((resolve, reject) => {
97
+ try {
98
+ const child = (0, import_child_process.spawn)("terraform", args);
99
+ if (options.verbose) {
100
+ child.stdout.setEncoding("utf8");
101
+ child.stdout.on("data", (data) => {
102
+ console.log("stdout: " + data);
103
+ });
104
+ child.stderr.on("data", (data) => {
105
+ console.log("stderr: " + data);
106
+ });
107
+ }
108
+ child.on("close", (code) => {
109
+ if (code !== 0) {
110
+ return reject(`terraform running failed with ${code}`);
111
+ }
112
+ resolve();
113
+ });
114
+ } catch (error) {
115
+ console.log(`error inside terraform with args ${args}: `, error);
116
+ reject(error);
117
+ }
118
+ });
119
+ }
120
+
121
+ // src/cli.ts
122
+ function initiateCli() {
123
+ import_commander.program.name("ep-resource-json");
124
+ import_commander.program.command("endpoints").description("Used to fetch json response data from Elastic Path endpoints and output them into json files.").requiredOption("-s, --source <source>", "Source postman collection json file.").requiredOption("-e, --env <environment-file>", "Source postman environment json file.").option("-o, --output <output>", "Output location for the generated endpoint json files.", process.cwd()).option("-v, --verbose", "Logs details of terraform commands to console.", false).action(outputJsonResponesAction);
125
+ import_commander.program.command("ter-destroy").description("Run terraform destroy in isolation.").action(isolatedTerraformDestroyAction);
126
+ import_commander.program.parse(process.argv);
127
+ }
128
+ function outputJsonResponesAction(args) {
129
+ const env = loadEnv();
130
+ return applyTerraform({ verbose: args.verbose }).then(() => {
131
+ return executeCollection(args, env);
132
+ }).then(() => {
133
+ return destroyTerraform({ verbose: args.verbose });
134
+ }).catch((err) => {
135
+ destroyTerraform({ verbose: args.verbose });
136
+ console.error("error apply terraform: ", err);
137
+ });
138
+ }
139
+ function isolatedTerraformDestroyAction() {
140
+ loadEnv();
141
+ return destroyTerraform({ verbose: true });
142
+ }
143
+ initiateCli();
144
+ //# sourceMappingURL=cli.js.map
package/cli.js.map ADDED
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/cli.ts","../src/load-env.ts","../src/newman-exec.ts","../src/terraform.ts"],"sourcesContent":["import { program } from \"commander\";\nimport { loadEnv } from \"./load-env\";\nimport { executeCollection } from \"./newman-exec\";\nimport { applyTerraform, destroyTerraform } from \"./terraform\";\nimport { EndpointCliOptions } from \"./types\";\n\n/**\n * Checks if the script has been provided the required arguments.\n */\nfunction initiateCli(): void {\n program.name(\"ep-resource-json\");\n\n program\n .command(\"endpoints\")\n .description(\n \"Used to fetch json response data from Elastic Path endpoints and output them into json files.\"\n )\n .requiredOption(\n \"-s, --source <source>\",\n \"Source postman collection json file.\"\n )\n .requiredOption(\n \"-e, --env <environment-file>\",\n \"Source postman environment json file.\"\n )\n .option(\n \"-o, --output <output>\",\n \"Output location for the generated endpoint json files.\",\n process.cwd()\n )\n .option(\n \"-v, --verbose\",\n \"Logs details of terraform commands to console.\",\n false\n )\n .action(outputJsonResponesAction);\n\n program\n .command(\"ter-destroy\")\n .description(\"Run terraform destroy in isolation.\")\n .action(isolatedTerraformDestroyAction);\n\n program.parse(process.argv);\n}\nfunction outputJsonResponesAction(args: EndpointCliOptions): Promise<void> {\n const env = loadEnv();\n return applyTerraform({ verbose: args.verbose })\n .then(() => {\n return executeCollection(args, env);\n })\n .then(() => {\n return destroyTerraform({ verbose: args.verbose });\n })\n .catch((err) => {\n destroyTerraform({ verbose: args.verbose });\n console.error(\"error apply terraform: \", err);\n });\n}\n\nfunction isolatedTerraformDestroyAction(): Promise<void> {\n loadEnv();\n return destroyTerraform({ verbose: true });\n}\n\ninitiateCli();\n","import { config as dotEnvConfig } from \"dotenv\";\nimport { EPEnv } from \"./types\";\n\nexport function loadEnv(): EPEnv {\n const result = dotEnvConfig();\n if (result.error) {\n throw new Error(\n \"Failed to load environment variables. Check .env exists and is setup to match example.\"\n );\n }\n // Casting parsed response.\n return result!.parsed as EPEnv;\n}\n","import { run } from \"newman\";\nimport { readFile } from \"fs\";\nimport type {\n CollectionDefinition,\n VariableScopeDefinition,\n} from \"postman-collection\";\nimport { EndpointCliOptions, EPEnv } from \"./types\";\n\nexport async function executeCollection(\n options: EndpointCliOptions,\n env?: EPEnv\n): Promise<void> {\n const postmanCollection = await getPostmanCollection(options.source);\n const postmanEnvironment = await getPostmanEnvironment(options.env);\n return new Promise((resolve, reject) => {\n run(\n {\n collection: postmanCollection,\n reporters: [\"cli\", \"htmlextra\", \"@field123/ep-resp\"],\n reporter: {\n \"@field123/ep-resp\": {\n ...options,\n },\n },\n\n environment: postmanEnvironment,\n ...(env ? { envVar: createEnvironment(env) } : {}),\n },\n (err) => {\n if (err) {\n reject(err);\n }\n console.log(\"collection run complete!\");\n resolve();\n }\n );\n });\n}\n\nfunction createEnvironment(env: EPEnv): { key: string; value: string }[] {\n return [\n {\n key: \"clientID\",\n value: env.EPCC_CLIENT_ID,\n },\n {\n key: \"clientSecret\",\n value: env.EPCC_CLIENT_SECRET,\n },\n ];\n}\n\nfunction getPostmanEnvironment(\n source: string\n): Promise<VariableScopeDefinition> {\n console.log(`Attempting to load postman environment file from ${source}`);\n return getFile(source);\n}\n\nfunction getPostmanCollection(source: string): Promise<CollectionDefinition> {\n console.log(`Attempting to load postman collection file from ${source}`);\n return getFile(source);\n}\n\nfunction getFile(name: string): Promise<any> {\n return new Promise((resolve, reject) => {\n readFile(name, \"utf-8\", (err, data) => {\n if (err) {\n reject(err);\n }\n resolve(JSON.parse(data));\n });\n });\n}\n","import { spawn } from \"child_process\";\n\ninterface TerraformOptions {\n verbose: boolean;\n}\n\nexport function applyTerraform(\n options: TerraformOptions = { verbose: false }\n): Promise<void> {\n console.log(\"Attempting to terraform apply...\");\n return handleTerraformCommand(options, \"apply\", \"-auto-approve\").then(() =>\n console.log(\"Applied terraform successfully!\")\n );\n}\n\nexport function destroyTerraform(\n options: TerraformOptions = { verbose: false }\n): Promise<void> {\n console.log(\"Attempting to terraform destroy...\");\n return handleTerraformCommand(options, \"destroy\", \"-auto-approve\").then(() =>\n console.log(\"Destroyed terraform successfully!\")\n );\n}\n\nfunction handleTerraformCommand(\n options: TerraformOptions,\n ...args: string[]\n): Promise<void> {\n return new Promise((resolve, reject) => {\n try {\n const child = spawn(\"terraform\", args);\n\n if (options.verbose) {\n child.stdout.setEncoding(\"utf8\");\n child.stdout.on(\"data\", (data) => {\n console.log(\"stdout: \" + data);\n });\n child.stderr.on(\"data\", (data) => {\n console.log(\"stderr: \" + data);\n });\n }\n\n child.on(\"close\", (code) => {\n if (code !== 0) {\n return reject(`terraform running failed with ${code}`);\n }\n resolve();\n });\n } catch (error) {\n console.log(`error inside terraform with args ${args}: `, error);\n reject(error);\n }\n });\n}\n"],"mappings":"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","names":[]}
package/cli.mjs ADDED
@@ -0,0 +1,144 @@
1
+ var __defProp = Object.defineProperty;
2
+ var __getOwnPropSymbols = Object.getOwnPropertySymbols;
3
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
4
+ var __propIsEnum = Object.prototype.propertyIsEnumerable;
5
+ var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
6
+ var __spreadValues = (a, b) => {
7
+ for (var prop in b || (b = {}))
8
+ if (__hasOwnProp.call(b, prop))
9
+ __defNormalProp(a, prop, b[prop]);
10
+ if (__getOwnPropSymbols)
11
+ for (var prop of __getOwnPropSymbols(b)) {
12
+ if (__propIsEnum.call(b, prop))
13
+ __defNormalProp(a, prop, b[prop]);
14
+ }
15
+ return a;
16
+ };
17
+
18
+ // src/cli.ts
19
+ import { program } from "commander";
20
+
21
+ // src/load-env.ts
22
+ import { config as dotEnvConfig } from "dotenv";
23
+ function loadEnv() {
24
+ const result = dotEnvConfig();
25
+ if (result.error) {
26
+ throw new Error("Failed to load environment variables. Check .env exists and is setup to match example.");
27
+ }
28
+ return result.parsed;
29
+ }
30
+
31
+ // src/newman-exec.ts
32
+ import { run } from "newman";
33
+ import { readFile } from "fs";
34
+ async function executeCollection(options, env) {
35
+ const postmanCollection = await getPostmanCollection(options.source);
36
+ const postmanEnvironment = await getPostmanEnvironment(options.env);
37
+ return new Promise((resolve, reject) => {
38
+ run(__spreadValues({
39
+ collection: postmanCollection,
40
+ reporters: ["cli", "htmlextra", "@field123/ep-resp"],
41
+ reporter: {
42
+ "@field123/ep-resp": __spreadValues({}, options)
43
+ },
44
+ environment: postmanEnvironment
45
+ }, env ? { envVar: createEnvironment(env) } : {}), (err) => {
46
+ if (err) {
47
+ reject(err);
48
+ }
49
+ console.log("collection run complete!");
50
+ resolve();
51
+ });
52
+ });
53
+ }
54
+ function createEnvironment(env) {
55
+ return [
56
+ {
57
+ key: "clientID",
58
+ value: env.EPCC_CLIENT_ID
59
+ },
60
+ {
61
+ key: "clientSecret",
62
+ value: env.EPCC_CLIENT_SECRET
63
+ }
64
+ ];
65
+ }
66
+ function getPostmanEnvironment(source) {
67
+ console.log(`Attempting to load postman environment file from ${source}`);
68
+ return getFile(source);
69
+ }
70
+ function getPostmanCollection(source) {
71
+ console.log(`Attempting to load postman collection file from ${source}`);
72
+ return getFile(source);
73
+ }
74
+ function getFile(name) {
75
+ return new Promise((resolve, reject) => {
76
+ readFile(name, "utf-8", (err, data) => {
77
+ if (err) {
78
+ reject(err);
79
+ }
80
+ resolve(JSON.parse(data));
81
+ });
82
+ });
83
+ }
84
+
85
+ // src/terraform.ts
86
+ import { spawn } from "child_process";
87
+ function applyTerraform(options = { verbose: false }) {
88
+ console.log("Attempting to terraform apply...");
89
+ return handleTerraformCommand(options, "apply", "-auto-approve").then(() => console.log("Applied terraform successfully!"));
90
+ }
91
+ function destroyTerraform(options = { verbose: false }) {
92
+ console.log("Attempting to terraform destroy...");
93
+ return handleTerraformCommand(options, "destroy", "-auto-approve").then(() => console.log("Destroyed terraform successfully!"));
94
+ }
95
+ function handleTerraformCommand(options, ...args) {
96
+ return new Promise((resolve, reject) => {
97
+ try {
98
+ const child = spawn("terraform", args);
99
+ if (options.verbose) {
100
+ child.stdout.setEncoding("utf8");
101
+ child.stdout.on("data", (data) => {
102
+ console.log("stdout: " + data);
103
+ });
104
+ child.stderr.on("data", (data) => {
105
+ console.log("stderr: " + data);
106
+ });
107
+ }
108
+ child.on("close", (code) => {
109
+ if (code !== 0) {
110
+ return reject(`terraform running failed with ${code}`);
111
+ }
112
+ resolve();
113
+ });
114
+ } catch (error) {
115
+ console.log(`error inside terraform with args ${args}: `, error);
116
+ reject(error);
117
+ }
118
+ });
119
+ }
120
+
121
+ // src/cli.ts
122
+ function initiateCli() {
123
+ program.name("ep-resource-json");
124
+ program.command("endpoints").description("Used to fetch json response data from Elastic Path endpoints and output them into json files.").requiredOption("-s, --source <source>", "Source postman collection json file.").requiredOption("-e, --env <environment-file>", "Source postman environment json file.").option("-o, --output <output>", "Output location for the generated endpoint json files.", process.cwd()).option("-v, --verbose", "Logs details of terraform commands to console.", false).action(outputJsonResponesAction);
125
+ program.command("ter-destroy").description("Run terraform destroy in isolation.").action(isolatedTerraformDestroyAction);
126
+ program.parse(process.argv);
127
+ }
128
+ function outputJsonResponesAction(args) {
129
+ const env = loadEnv();
130
+ return applyTerraform({ verbose: args.verbose }).then(() => {
131
+ return executeCollection(args, env);
132
+ }).then(() => {
133
+ return destroyTerraform({ verbose: args.verbose });
134
+ }).catch((err) => {
135
+ destroyTerraform({ verbose: args.verbose });
136
+ console.error("error apply terraform: ", err);
137
+ });
138
+ }
139
+ function isolatedTerraformDestroyAction() {
140
+ loadEnv();
141
+ return destroyTerraform({ verbose: true });
142
+ }
143
+ initiateCli();
144
+ //# sourceMappingURL=cli.mjs.map
package/cli.mjs.map ADDED
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/cli.ts","../src/load-env.ts","../src/newman-exec.ts","../src/terraform.ts"],"sourcesContent":["import { program } from \"commander\";\nimport { loadEnv } from \"./load-env\";\nimport { executeCollection } from \"./newman-exec\";\nimport { applyTerraform, destroyTerraform } from \"./terraform\";\nimport { EndpointCliOptions } from \"./types\";\n\n/**\n * Checks if the script has been provided the required arguments.\n */\nfunction initiateCli(): void {\n program.name(\"ep-resource-json\");\n\n program\n .command(\"endpoints\")\n .description(\n \"Used to fetch json response data from Elastic Path endpoints and output them into json files.\"\n )\n .requiredOption(\n \"-s, --source <source>\",\n \"Source postman collection json file.\"\n )\n .requiredOption(\n \"-e, --env <environment-file>\",\n \"Source postman environment json file.\"\n )\n .option(\n \"-o, --output <output>\",\n \"Output location for the generated endpoint json files.\",\n process.cwd()\n )\n .option(\n \"-v, --verbose\",\n \"Logs details of terraform commands to console.\",\n false\n )\n .action(outputJsonResponesAction);\n\n program\n .command(\"ter-destroy\")\n .description(\"Run terraform destroy in isolation.\")\n .action(isolatedTerraformDestroyAction);\n\n program.parse(process.argv);\n}\nfunction outputJsonResponesAction(args: EndpointCliOptions): Promise<void> {\n const env = loadEnv();\n return applyTerraform({ verbose: args.verbose })\n .then(() => {\n return executeCollection(args, env);\n })\n .then(() => {\n return destroyTerraform({ verbose: args.verbose });\n })\n .catch((err) => {\n destroyTerraform({ verbose: args.verbose });\n console.error(\"error apply terraform: \", err);\n });\n}\n\nfunction isolatedTerraformDestroyAction(): Promise<void> {\n loadEnv();\n return destroyTerraform({ verbose: true });\n}\n\ninitiateCli();\n","import { config as dotEnvConfig } from \"dotenv\";\nimport { EPEnv } from \"./types\";\n\nexport function loadEnv(): EPEnv {\n const result = dotEnvConfig();\n if (result.error) {\n throw new Error(\n \"Failed to load environment variables. Check .env exists and is setup to match example.\"\n );\n }\n // Casting parsed response.\n return result!.parsed as EPEnv;\n}\n","import { run } from \"newman\";\nimport { readFile } from \"fs\";\nimport type {\n CollectionDefinition,\n VariableScopeDefinition,\n} from \"postman-collection\";\nimport { EndpointCliOptions, EPEnv } from \"./types\";\n\nexport async function executeCollection(\n options: EndpointCliOptions,\n env?: EPEnv\n): Promise<void> {\n const postmanCollection = await getPostmanCollection(options.source);\n const postmanEnvironment = await getPostmanEnvironment(options.env);\n return new Promise((resolve, reject) => {\n run(\n {\n collection: postmanCollection,\n reporters: [\"cli\", \"htmlextra\", \"@field123/ep-resp\"],\n reporter: {\n \"@field123/ep-resp\": {\n ...options,\n },\n },\n\n environment: postmanEnvironment,\n ...(env ? { envVar: createEnvironment(env) } : {}),\n },\n (err) => {\n if (err) {\n reject(err);\n }\n console.log(\"collection run complete!\");\n resolve();\n }\n );\n });\n}\n\nfunction createEnvironment(env: EPEnv): { key: string; value: string }[] {\n return [\n {\n key: \"clientID\",\n value: env.EPCC_CLIENT_ID,\n },\n {\n key: \"clientSecret\",\n value: env.EPCC_CLIENT_SECRET,\n },\n ];\n}\n\nfunction getPostmanEnvironment(\n source: string\n): Promise<VariableScopeDefinition> {\n console.log(`Attempting to load postman environment file from ${source}`);\n return getFile(source);\n}\n\nfunction getPostmanCollection(source: string): Promise<CollectionDefinition> {\n console.log(`Attempting to load postman collection file from ${source}`);\n return getFile(source);\n}\n\nfunction getFile(name: string): Promise<any> {\n return new Promise((resolve, reject) => {\n readFile(name, \"utf-8\", (err, data) => {\n if (err) {\n reject(err);\n }\n resolve(JSON.parse(data));\n });\n });\n}\n","import { spawn } from \"child_process\";\n\ninterface TerraformOptions {\n verbose: boolean;\n}\n\nexport function applyTerraform(\n options: TerraformOptions = { verbose: false }\n): Promise<void> {\n console.log(\"Attempting to terraform apply...\");\n return handleTerraformCommand(options, \"apply\", \"-auto-approve\").then(() =>\n console.log(\"Applied terraform successfully!\")\n );\n}\n\nexport function destroyTerraform(\n options: TerraformOptions = { verbose: false }\n): Promise<void> {\n console.log(\"Attempting to terraform destroy...\");\n return handleTerraformCommand(options, \"destroy\", \"-auto-approve\").then(() =>\n console.log(\"Destroyed terraform successfully!\")\n );\n}\n\nfunction handleTerraformCommand(\n options: TerraformOptions,\n ...args: string[]\n): Promise<void> {\n return new Promise((resolve, reject) => {\n try {\n const child = spawn(\"terraform\", args);\n\n if (options.verbose) {\n child.stdout.setEncoding(\"utf8\");\n child.stdout.on(\"data\", (data) => {\n console.log(\"stdout: \" + data);\n });\n child.stderr.on(\"data\", (data) => {\n console.log(\"stderr: \" + data);\n });\n }\n\n child.on(\"close\", (code) => {\n if (code !== 0) {\n return reject(`terraform running failed with ${code}`);\n }\n resolve();\n });\n } catch (error) {\n console.log(`error inside terraform with args ${args}: `, error);\n reject(error);\n }\n });\n}\n"],"mappings":"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","names":[]}
package/main.tf ADDED
@@ -0,0 +1,164 @@
1
+ terraform {
2
+ required_providers {
3
+ epcc = {
4
+ source = "elasticpath/epcc"
5
+ version = "0.0.2"
6
+ }
7
+ }
8
+ }
9
+
10
+ provider "epcc" {
11
+ }
12
+
13
+ resource "epcc_hierarchy" "major_appliances" {
14
+ name = "Major Appliances"
15
+ description = "Free standing appliances"
16
+ slug = "Major-Appliances-MA0"
17
+ }
18
+
19
+ resource "epcc_node" "ranges" {
20
+ hierarchy_id = epcc_hierarchy.major_appliances.id
21
+ name = "Ranges"
22
+ description = "All stoves and ovens"
23
+ slug = "Ranges-MA1"
24
+ }
25
+
26
+ resource "epcc_node" "electric_ranges" {
27
+ hierarchy_id = epcc_hierarchy.major_appliances.id
28
+ parent_id = epcc_node.ranges.id
29
+ name = "Electric Ranges"
30
+ description = "Electric stoves and ovens"
31
+ slug = "Electric-Ranges-MA2"
32
+ }
33
+
34
+ resource "epcc_node" "gas_ranges" {
35
+ hierarchy_id = epcc_hierarchy.major_appliances.id
36
+ parent_id = epcc_node.ranges.id
37
+ name = "Gas Ranges"
38
+ description = "Gas stoves and ovens"
39
+ slug = "Ranges-MA2"
40
+ }
41
+
42
+ resource "epcc_product" "be_electric_range" {
43
+ name = "BestEver Electric Range"
44
+ sku = "BE-Electric-Range-1a1a"
45
+ slug = "bestever-range-1a1a"
46
+ description = "This electric model offers an induction heating element and convection oven."
47
+ status = "live"
48
+ commodity_type = "physical"
49
+ upc_ean = "111122223333"
50
+ mpn = "BE-R-1111-aaaa-1a1a"
51
+ }
52
+
53
+ resource "epcc_node_product" "electric_ranges_be_electric_range" {
54
+ hierarchy_id = epcc_hierarchy.major_appliances.id
55
+ node_id = epcc_node.electric_ranges.id
56
+ product_id = epcc_product.be_electric_range.id
57
+ }
58
+
59
+ resource "epcc_product" "be_gas_range" {
60
+ name = "BestEver Gas Range"
61
+ sku = "BE-Gas-Range-2b2b"
62
+ slug = "bestever-range-2b2b"
63
+ description = "This gas model includes a convection oven."
64
+ status = "live"
65
+ commodity_type = "physical"
66
+ upc_ean = "222233334444"
67
+ mpn = "BE-R-2222-bbbb-2b2b"
68
+ }
69
+
70
+ resource "epcc_node_product" "gas_ranges_bestever_gas_range" {
71
+ hierarchy_id = epcc_hierarchy.major_appliances.id
72
+ node_id = epcc_node.gas_ranges.id
73
+ product_id = epcc_product.be_gas_range.id
74
+ }
75
+
76
+ resource "epcc_currency" "british_pound_sterling" {
77
+ code = "GBP"
78
+ exchange_rate = 1
79
+ format = "£{price}"
80
+ decimal_point = "."
81
+ thousand_separator = ","
82
+ decimal_places = 2
83
+ default = false
84
+ enabled = true
85
+ }
86
+
87
+ resource "epcc_pricebook" "preferred_pricing" {
88
+ name = "Preferred Pricing"
89
+ description = "Catalog with pricing suitable for high-volume customers."
90
+ }
91
+
92
+ resource "epcc_product_price" "be_electric_range_price" {
93
+ currency {
94
+ code = "USD"
95
+ amount = 300000
96
+ includes_tax = false
97
+ }
98
+ currency {
99
+ code = epcc_currency.british_pound_sterling.code
100
+ amount = 250000
101
+ includes_tax = false
102
+ }
103
+ pricebook_id = epcc_pricebook.preferred_pricing.id
104
+ sku = epcc_product.be_electric_range.sku
105
+ }
106
+
107
+ resource "epcc_product_price" "be_gas_range_price" {
108
+ currency {
109
+ code = "USD"
110
+ amount = 350000
111
+ includes_tax = false
112
+ }
113
+ currency {
114
+ code = epcc_currency.british_pound_sterling.code
115
+ amount = 300000
116
+ includes_tax = false
117
+ }
118
+ pricebook_id = epcc_pricebook.preferred_pricing.id
119
+ sku = epcc_product.be_gas_range.sku
120
+ }
121
+
122
+ resource "epcc_catalog" "ranges_catalog" {
123
+ name = "Ranges Catalog"
124
+ description = "Catalog of Ranges"
125
+ hierarchies = [epcc_hierarchy.major_appliances.id]
126
+ pricebook = epcc_pricebook.preferred_pricing.id
127
+ }
128
+
129
+ resource "epcc_customer" "billy_bob" {
130
+ name = "Billy Bob"
131
+ email = "billybob@example.com"
132
+ }
133
+
134
+ resource "epcc_catalog_rule" "preferred_customer_pricing" {
135
+ name = "Preferred Customer Pricing"
136
+ description = "Preferred customer pricing"
137
+ catalog = epcc_catalog.ranges_catalog.id
138
+ customers = [epcc_customer.billy_bob.id]
139
+ }
140
+
141
+ output "epcc_hierarchy_id" {
142
+ value = epcc_hierarchy.major_appliances.id
143
+ }
144
+
145
+ output "epcc_product_id" {
146
+ value = epcc_product.be_electric_range.id
147
+ }
148
+
149
+ output "epcc_customer_id" {
150
+ value = epcc_customer.billy_bob.id
151
+ }
152
+
153
+ output "epcc_customer_email" {
154
+ value = epcc_customer.billy_bob.email
155
+ }
156
+
157
+
158
+ output "epcc_catalog_id" {
159
+ value = epcc_catalog.ranges_catalog.id
160
+ }
161
+
162
+ output "epcc_currency_id" {
163
+ value = epcc_currency.british_pound_sterling.id
164
+ }
package/package.json CHANGED
@@ -1,18 +1,14 @@
1
1
  {
2
2
  "name": "@field123/hacksprint-2022-js-sdk-test-response-generation",
3
- "version": "0.0.4",
4
- "main": "dist/cli.js",
3
+ "version": "0.0.8",
4
+ "main": "./cli.js",
5
5
  "repository": "https://gitlab.elasticpath.com/Michelle.Wan/hacksprint-2022-js-sdk-test-response-generation.git",
6
6
  "author": "Elastic Path",
7
7
  "scripts": {
8
- "postinstall": "terraform init && terraform get",
9
- "build": "tsup && yarn build:copy:terra",
10
- "temp:publish": "cd ./dist && yarn publish --access public",
11
- "build:copy:terra": "cp package.json dist/ && cp README.md dist/ && cp main.tf dist/",
12
- "semantic-release": "semantic-release"
8
+ "postinstall": "terraform init && terraform get"
13
9
  },
14
10
  "files": [
15
- "dist/"
11
+ "./"
16
12
  ],
17
13
  "devDependencies": {
18
14
  "@semantic-release/git": "^10.0.1",
@@ -30,12 +26,13 @@
30
26
  "axios": "^0.26.1",
31
27
  "commander": "^9.1.0",
32
28
  "dotenv": "^16.0.0",
33
- "newman": "^5.3.2"
29
+ "newman": "^5.3.2",
30
+ "newman-reporter-htmlextra": "^1.22.8"
34
31
  },
35
32
  "publishConfig": {
36
33
  "access": "public"
37
34
  },
38
35
  "bin": {
39
- "hacksprint-2022-js-sdk-test-response-generation": "dist/cli.js"
36
+ "hacksprint-2022-js-sdk-test-response-generation": "./cli.js"
40
37
  }
41
38
  }