aboutsummaryrefslogtreecommitdiff
path: root/src/modules/commerce
diff options
context:
space:
mode:
authorShinigami <[email protected]>2022-05-03 15:48:20 +0200
committerGitHub <[email protected]>2022-05-03 15:48:20 +0200
commita2da7c496e9a3741d165ddfe6128b50837fec361 (patch)
tree88d371bc19487bc8a34d9043035aed8e4fedd7d5 /src/modules/commerce
parentcc46a0c19af2752b6210c24b715fcce20197b6d9 (diff)
downloadfaker-a2da7c496e9a3741d165ddfe6128b50837fec361.tar.xz
faker-a2da7c496e9a3741d165ddfe6128b50837fec361.zip
refactor!: reorganize src folder (#909)
Diffstat (limited to 'src/modules/commerce')
-rw-r--r--src/modules/commerce/index.ts133
1 files changed, 133 insertions, 0 deletions
diff --git a/src/modules/commerce/index.ts b/src/modules/commerce/index.ts
new file mode 100644
index 00000000..71ce96d6
--- /dev/null
+++ b/src/modules/commerce/index.ts
@@ -0,0 +1,133 @@
+import type { Faker } from '../..';
+
+/**
+ * Module to generate commerce and product related entries.
+ */
+export class Commerce {
+ constructor(private readonly faker: Faker) {
+ // Bind `this` so namespaced is working correctly
+ for (const name of Object.getOwnPropertyNames(Commerce.prototype)) {
+ if (name === 'constructor' || typeof this[name] !== 'function') {
+ continue;
+ }
+ this[name] = this[name].bind(this);
+ }
+ }
+
+ /**
+ * Returns a human readable color name.
+ *
+ * @example
+ * faker.commerce.color() // 'red'
+ */
+ color(): string {
+ return this.faker.helpers.arrayElement(
+ this.faker.definitions.commerce.color
+ );
+ }
+
+ /**
+ * Returns a department inside a shop.
+ *
+ * @example
+ * faker.commerce.department() // 'Garden'
+ */
+ department(): string {
+ return this.faker.helpers.arrayElement(
+ this.faker.definitions.commerce.department
+ );
+ }
+
+ /**
+ * Generates a random descriptive product name.
+ *
+ * @example
+ * faker.commerce.productName() // 'Incredible Soft Gloves'
+ */
+ productName(): string {
+ return `${this.productAdjective()} ${this.productMaterial()} ${this.product()}`;
+ }
+
+ /**
+ * Generates a price between min and max (inclusive).
+ *
+ * @param min The minimum price. Defaults to `1`.
+ * @param max The maximum price. Defaults to `1000`.
+ * @param dec The number of decimal places. Defaults to `2`.
+ * @param symbol The currency value to use. Defaults to `''`.
+ *
+ * @example
+ * faker.commerce.price() // 828.00
+ * faker.commerce.price(100) // 904.00
+ * faker.commerce.price(100, 200) // 154.00
+ * faker.commerce.price(100, 200, 0) // 133
+ * faker.commerce.price(100, 200, 0, '$') // $114
+ */
+ price(
+ min: number = 1,
+ max: number = 1000,
+ dec: number = 2,
+ symbol: string = ''
+ ): string {
+ if (min < 0 || max < 0) {
+ return `${symbol}${0.0}`;
+ }
+
+ const randValue = this.faker.datatype.number({ max: max, min: min });
+
+ return (
+ symbol +
+ (Math.round(randValue * Math.pow(10, dec)) / Math.pow(10, dec)).toFixed(
+ dec
+ )
+ );
+ }
+
+ /**
+ * Returns an adjective describing a product.
+ *
+ * @example
+ * faker.commerce.productAdjective() // 'Handcrafted'
+ */
+ productAdjective(): string {
+ return this.faker.helpers.arrayElement(
+ this.faker.definitions.commerce.product_name.adjective
+ );
+ }
+
+ /**
+ * Returns a material of a product.
+ *
+ * @example
+ * faker.commerce.productMaterial() // 'Rubber'
+ */
+ productMaterial(): string {
+ return this.faker.helpers.arrayElement(
+ this.faker.definitions.commerce.product_name.material
+ );
+ }
+
+ /**
+ * Returns a short product name.
+ *
+ * @example
+ * faker.commerce.product() // 'Computer'
+ */
+ product(): string {
+ return this.faker.helpers.arrayElement(
+ this.faker.definitions.commerce.product_name.product
+ );
+ }
+
+ /**
+ * Returns a product description.
+ *
+ * @example
+ * faker.commerce.productDescription() // 'Andy shoes are designed to keeping...'
+ */
+ productDescription(): string {
+ return this.faker.helpers.arrayElement(
+ this.faker.definitions.commerce.product_description
+ );
+ }
+}