aboutsummaryrefslogtreecommitdiff
path: root/src/modules/image/providers
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/image/providers
parentcc46a0c19af2752b6210c24b715fcce20197b6d9 (diff)
downloadfaker-a2da7c496e9a3741d165ddfe6128b50837fec361.tar.xz
faker-a2da7c496e9a3741d165ddfe6128b50837fec361.zip
refactor!: reorganize src folder (#909)
Diffstat (limited to 'src/modules/image/providers')
-rw-r--r--src/modules/image/providers/lorempicsum.ts126
-rw-r--r--src/modules/image/providers/lorempixel.ts288
-rw-r--r--src/modules/image/providers/unsplash.ts157
3 files changed, 571 insertions, 0 deletions
diff --git a/src/modules/image/providers/lorempicsum.ts b/src/modules/image/providers/lorempicsum.ts
new file mode 100644
index 00000000..25869205
--- /dev/null
+++ b/src/modules/image/providers/lorempicsum.ts
@@ -0,0 +1,126 @@
+import type { Faker } from '../../..';
+
+/**
+ * Module to generate links to random images on `https://picsum.photos/`.
+ */
+// TODO ST-DDT 2022-03-11: Rename to picsum?
+export class LoremPicsum {
+ constructor(private readonly faker: Faker) {}
+
+ /**
+ * Generates a new picsum image url.
+ *
+ * @param width The width of the image. Defaults to `640`.
+ * @param height The height of the image. Defaults to `480`.
+ * @param grayscale Whether to return a grayscale image. Default to `false`.
+ * @param blur The optional level of blur to apply. Supports `1` - `10`.
+ */
+ image(
+ width?: number,
+ height?: number,
+ grayscale?: boolean,
+ blur?: 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10
+ ): string {
+ return this.imageUrl(width, height, grayscale, blur);
+ }
+
+ /**
+ * Generates a new picsum image url.
+ *
+ * @param width The width of the image. Defaults to `640`.
+ * @param height The height of the image. Defaults to `480`.
+ * @param grayscale Whether to return a grayscale image. Default to `false`.
+ */
+ imageGrayscale(width?: number, height?: number, grayscale?: boolean): string {
+ return this.imageUrl(width, height, grayscale);
+ }
+
+ /**
+ * Generates a new picsum image url.
+ *
+ * @param width The width of the image. Defaults to `640`.
+ * @param height The height of the image. Defaults to `480`.
+ * @param blur The optional level of blur to apply. Supports `1` - `10`.
+ */
+ imageBlurred(
+ width?: number,
+ height?: number,
+ blur?: 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10
+ ): string {
+ return this.imageUrl(width, height, undefined, blur);
+ }
+
+ /**
+ * Generates a new picsum image url.
+ *
+ * @param width The width of the image. Defaults to `640`.
+ * @param height The height of the image. Defaults to `480`.
+ * @param grayscale Whether to return a grayscale image. Default to `false`.
+ * @param blur The optional level of blur to apply. Supports `1` - `10`.
+ * @param seed The optional seed to use.
+ */
+ imageRandomSeeded(
+ width?: number,
+ height?: number,
+ grayscale?: boolean,
+ blur?: 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10,
+ seed?: string
+ ): string {
+ // TODO ST-DDT 2022-03-11: This method does the same as image url, maybe generate a seed, if it is missig?
+ return this.imageUrl(width, height, grayscale, blur, seed);
+ }
+
+ /**
+ * Returns a random avatar url.
+ *
+ * @example
+ * faker.internet.avatar()
+ * // 'https://cloudflare-ipfs.com/ipfs/Qmd3W5DuhgHirLHGVixi6V76LhCkZUz6pnFt5AJBiyvHye/avatar/315.jpg'
+ */
+ // TODO ST-DDT 2022-03-11: Deprecate this method as it is duplicate and has nothing to do with lorempicsum.
+ avatar(): string {
+ return this.faker.internet.avatar();
+ }
+
+ /**
+ * Generates a new picsum image url.
+ *
+ * @param width The width of the image. Defaults to `640`.
+ * @param height The height of the image. Defaults to `480`.
+ * @param grayscale Whether to return a grayscale image. Default to `false`.
+ * @param blur The optional level of blur to apply. Supports `1` - `10`.
+ * @param seed The optional seed to use.
+ */
+ imageUrl(
+ width?: number,
+ height?: number,
+ grayscale?: boolean,
+ blur?: 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10,
+ seed?: string
+ ): string {
+ width = width || 640;
+ height = height || 480;
+
+ let url = 'https://picsum.photos';
+
+ if (seed) {
+ url += `/seed/${seed}`;
+ }
+
+ url += `/${width}/${height}`;
+
+ if (grayscale && blur) {
+ return `${url}?grayscale&blur=${blur}`;
+ }
+
+ if (grayscale) {
+ return `${url}?grayscale`;
+ }
+
+ if (blur) {
+ return `${url}?blur=${blur}`;
+ }
+
+ return url;
+ }
+}
diff --git a/src/modules/image/providers/lorempixel.ts b/src/modules/image/providers/lorempixel.ts
new file mode 100644
index 00000000..f1ab384b
--- /dev/null
+++ b/src/modules/image/providers/lorempixel.ts
@@ -0,0 +1,288 @@
+import type { Faker } from '../../..';
+import type { MethodsOf } from '../../../utils/types';
+
+/**
+ * Module to generate links to random images on `https://lorempixel.com/`.
+ */
+export class Lorempixel {
+ constructor(private readonly faker: Faker) {}
+
+ /**
+ * Generates a new lorempixel image url for a random supported category.
+ *
+ * @param width The width of the image. Defaults to `640`.
+ * @param height The height of the image. Defaults to `480`.
+ * @param randomize Whether to append a seed to the url. Defaults to `false`.
+ */
+ image(width?: number, height?: number, randomize?: boolean): string {
+ const categories: MethodsOf<Lorempixel, Lorempixel['image']> = [
+ 'abstract',
+ 'animals',
+ 'business',
+ 'cats',
+ 'city',
+ 'food',
+ 'nightlife',
+ 'fashion',
+ 'people',
+ 'nature',
+ 'sports',
+ 'technics',
+ 'transport',
+ ];
+ return this[this.faker.helpers.arrayElement(categories)](
+ width,
+ height,
+ randomize
+ );
+ }
+
+ /**
+ * Returns a random avatar url.
+ *
+ * @example
+ * faker.internet.avatar()
+ * // 'https://cloudflare-ipfs.com/ipfs/Qmd3W5DuhgHirLHGVixi6V76LhCkZUz6pnFt5AJBiyvHye/avatar/315.jpg'
+ */
+ // TODO ST-DDT 2022-03-11: Deprecate this method as it is duplicate and has nothing to do with lorempixel.
+ avatar(): string {
+ return this.faker.internet.avatar();
+ }
+
+ /**
+ * Generates a new lorempixel image url.
+ *
+ * @param width The width of the image. Defaults to `640`.
+ * @param height The height of the image. Defaults to `480`.
+ * @param category The category of the image to generate.
+ * @param randomize Whether to append a seed to the url. Defaults to `false`.
+ */
+ imageUrl(
+ width?: number,
+ height?: number,
+ category?: string,
+ randomize?: boolean
+ ): string {
+ width = width || 640;
+ height = height || 480;
+
+ let url = `https://lorempixel.com/${width}/${height}`;
+ if (category != null) {
+ url += `/${category}`;
+ }
+
+ if (randomize) {
+ url += `?${this.faker.datatype.number()}`;
+ }
+
+ return url;
+ }
+
+ /**
+ * Generates a new lorempixel image url using the "abstract" category.
+ *
+ * @param width The width of the image. Defaults to `640`.
+ * @param height The height of the image. Defaults to `480`.
+ * @param randomize Whether to append a seed to the url. Defaults to `false`.
+ */
+ abstract(width?: number, height?: number, randomize?: boolean): string {
+ return this.faker.image.lorempixel.imageUrl(
+ width,
+ height,
+ 'abstract',
+ randomize
+ );
+ }
+
+ /**
+ * Generates a new lorempixel image url using the "animals" category.
+ *
+ * @param width The width of the image. Defaults to `640`.
+ * @param height The height of the image. Defaults to `480`.
+ * @param randomize Whether to append a seed to the url. Defaults to `false`.
+ */
+ animals(width?: number, height?: number, randomize?: boolean): string {
+ return this.faker.image.lorempixel.imageUrl(
+ width,
+ height,
+ 'animals',
+ randomize
+ );
+ }
+
+ /**
+ * Generates a new lorempixel image url using the "business" category.
+ *
+ * @param width The width of the image. Defaults to `640`.
+ * @param height The height of the image. Defaults to `480`.
+ * @param randomize Whether to append a seed to the url. Defaults to `false`.
+ */
+ business(width?: number, height?: number, randomize?: boolean): string {
+ return this.faker.image.lorempixel.imageUrl(
+ width,
+ height,
+ 'business',
+ randomize
+ );
+ }
+
+ /**
+ * Generates a new lorempixel image url using the "cats" category.
+ *
+ * @param width The width of the image. Defaults to `640`.
+ * @param height The height of the image. Defaults to `480`.
+ * @param randomize Whether to append a seed to the url. Defaults to `false`.
+ */
+ cats(width?: number, height?: number, randomize?: boolean): string {
+ return this.faker.image.lorempixel.imageUrl(
+ width,
+ height,
+ 'cats',
+ randomize
+ );
+ }
+
+ /**
+ * Generates a new lorempixel image url using the "city" category.
+ *
+ * @param width The width of the image. Defaults to `640`.
+ * @param height The height of the image. Defaults to `480`.
+ * @param randomize Whether to append a seed to the url. Defaults to `false`.
+ */
+ city(width?: number, height?: number, randomize?: boolean): string {
+ return this.faker.image.lorempixel.imageUrl(
+ width,
+ height,
+ 'city',
+ randomize
+ );
+ }
+
+ /**
+ * Generates a new lorempixel image url using the "food" category.
+ *
+ * @param width The width of the image. Defaults to `640`.
+ * @param height The height of the image. Defaults to `480`.
+ * @param randomize Whether to append a seed to the url. Defaults to `false`.
+ */
+ food(width?: number, height?: number, randomize?: boolean): string {
+ return this.faker.image.lorempixel.imageUrl(
+ width,
+ height,
+ 'food',
+ randomize
+ );
+ }
+
+ /**
+ * Generates a new lorempixel image url using the "nightlife" category.
+ *
+ * @param width The width of the image. Defaults to `640`.
+ * @param height The height of the image. Defaults to `480`.
+ * @param randomize Whether to append a seed to the url. Defaults to `false`.
+ */
+ nightlife(width?: number, height?: number, randomize?: boolean): string {
+ return this.faker.image.lorempixel.imageUrl(
+ width,
+ height,
+ 'nightlife',
+ randomize
+ );
+ }
+
+ /**
+ * Generates a new lorempixel image url using the "fashion" category.
+ *
+ * @param width The width of the image. Defaults to `640`.
+ * @param height The height of the image. Defaults to `480`.
+ * @param randomize Whether to append a seed to the url. Defaults to `false`.
+ */
+ fashion(width?: number, height?: number, randomize?: boolean): string {
+ return this.faker.image.lorempixel.imageUrl(
+ width,
+ height,
+ 'fashion',
+ randomize
+ );
+ }
+
+ /**
+ * Generates a new lorempixel image url using the "people" category.
+ *
+ * @param width The width of the image. Defaults to `640`.
+ * @param height The height of the image. Defaults to `480`.
+ * @param randomize Whether to append a seed to the url. Defaults to `false`.
+ */
+ people(width?: number, height?: number, randomize?: boolean): string {
+ return this.faker.image.lorempixel.imageUrl(
+ width,
+ height,
+ 'people',
+ randomize
+ );
+ }
+
+ /**
+ * Generates a new lorempixel image url using the "nature" category.
+ *
+ * @param width The width of the image. Defaults to `640`.
+ * @param height The height of the image. Defaults to `480`.
+ * @param randomize Whether to append a seed to the url. Defaults to `false`.
+ */
+ nature(width?: number, height?: number, randomize?: boolean): string {
+ return this.faker.image.lorempixel.imageUrl(
+ width,
+ height,
+ 'nature',
+ randomize
+ );
+ }
+
+ /**
+ * Generates a new lorempixel image url using the "sports" category.
+ *
+ * @param width The width of the image. Defaults to `640`.
+ * @param height The height of the image. Defaults to `480`.
+ * @param randomize Whether to append a seed to the url. Defaults to `false`.
+ */
+ sports(width?: number, height?: number, randomize?: boolean): string {
+ return this.faker.image.lorempixel.imageUrl(
+ width,
+ height,
+ 'sports',
+ randomize
+ );
+ }
+
+ /**
+ * Generates a new lorempixel image url using the "technics" category.
+ *
+ * @param width The width of the image. Defaults to `640`.
+ * @param height The height of the image. Defaults to `480`.
+ * @param randomize Whether to append a seed to the url. Defaults to `false`.
+ */
+ technics(width?: number, height?: number, randomize?: boolean): string {
+ return this.faker.image.lorempixel.imageUrl(
+ width,
+ height,
+ 'technics',
+ randomize
+ );
+ }
+
+ /**
+ * Generates a new lorempixel image url using the "transport" category.
+ *
+ * @param width The width of the image. Defaults to `640`.
+ * @param height The height of the image. Defaults to `480`.
+ * @param randomize Whether to append a seed to the url. Defaults to `false`.
+ */
+ transport(width?: number, height?: number, randomize?: boolean): string {
+ return this.faker.image.lorempixel.imageUrl(
+ width,
+ height,
+ 'transport',
+ randomize
+ );
+ }
+}
diff --git a/src/modules/image/providers/unsplash.ts b/src/modules/image/providers/unsplash.ts
new file mode 100644
index 00000000..45bd815c
--- /dev/null
+++ b/src/modules/image/providers/unsplash.ts
@@ -0,0 +1,157 @@
+import type { Faker } from '../../..';
+
+/**
+ * Module to generate links to random images on `https://source.unsplash.com/`.
+ */
+export class Unsplash {
+ // TODO ST-DDT 2022-03-11: Remove unused(?) constant
+ categories = [
+ 'food',
+ 'nature',
+ 'people',
+ 'technology',
+ 'objects',
+ 'buildings',
+ ];
+
+ constructor(private readonly faker: Faker) {}
+
+ /**
+ * Generates a new unsplash image url for a random supported category.
+ *
+ * @param width The width of the image. Defaults to `640`.
+ * @param height The height of the image. Defaults to `480`.
+ * @param keyword The image keywords to use.
+ */
+ image(width?: number, height?: number, keyword?: string): string {
+ return this.imageUrl(width, height, undefined, keyword);
+ }
+
+ /**
+ * Returns a random avatar url.
+ *
+ * @example
+ * faker.internet.avatar()
+ * // 'https://cloudflare-ipfs.com/ipfs/Qmd3W5DuhgHirLHGVixi6V76LhCkZUz6pnFt5AJBiyvHye/avatar/315.jpg'
+ */
+ // TODO ST-DDT 2022-03-11: Deprecate this method as it is duplicate and has nothing to do with unsplash.
+ avatar(): string {
+ return this.faker.internet.avatar();
+ }
+
+ /**
+ * Generates a new unsplash image url.
+ *
+ * @param width The width of the image. Defaults to `640`.
+ * @param height The height of the image. Defaults to `480`.
+ * @param category The category of the image to generate.
+ * @param keyword The image keywords to use.
+ */
+ imageUrl(
+ width?: number,
+ height?: number,
+ category?: string,
+ keyword?: string
+ ): string {
+ width = width || 640;
+ height = height || 480;
+
+ let url = 'https://source.unsplash.com';
+
+ if (category != null) {
+ url += `/category/${category}`;
+ }
+
+ url += `/${width}x${height}`;
+
+ if (keyword != null) {
+ const keywordFormat = /^([A-Za-z0-9].+,[A-Za-z0-9]+)$|^([A-Za-z0-9]+)$/;
+ if (keywordFormat.test(keyword)) {
+ url += `?${keyword}`;
+ }
+ }
+
+ return url;
+ }
+
+ /**
+ * Generates a new unsplash image url using the "food" category.
+ *
+ * @param width The width of the image. Defaults to `640`.
+ * @param height The height of the image. Defaults to `480`.
+ * @param keyword The image keywords to use.
+ */
+ food(width?: number, height?: number, keyword?: string): string {
+ return this.faker.image.unsplash.imageUrl(width, height, 'food', keyword);
+ }
+
+ /**
+ * Generates a new unsplash image url using the "people" category.
+ *
+ * @param width The width of the image. Defaults to `640`.
+ * @param height The height of the image. Defaults to `480`.
+ * @param keyword The image keywords to use.
+ */
+ people(width?: number, height?: number, keyword?: string): string {
+ return this.faker.image.unsplash.imageUrl(width, height, 'people', keyword);
+ }
+
+ /**
+ * Generates a new unsplash image url using the "nature" category.
+ *
+ * @param width The width of the image. Defaults to `640`.
+ * @param height The height of the image. Defaults to `480`.
+ * @param keyword The image keywords to use.
+ */
+ nature(width?: number, height?: number, keyword?: string): string {
+ return this.faker.image.unsplash.imageUrl(width, height, 'nature', keyword);
+ }
+
+ /**
+ * Generates a new unsplash image url using the "technology" category.
+ *
+ * @param width The width of the image. Defaults to `640`.
+ * @param height The height of the image. Defaults to `480`.
+ * @param keyword The image keywords to use.
+ */
+ technology(width?: number, height?: number, keyword?: string): string {
+ return this.faker.image.unsplash.imageUrl(
+ width,
+ height,
+ 'technology',
+ keyword
+ );
+ }
+
+ /**
+ * Generates a new unsplash image url using the "objects" category.
+ *
+ * @param width The width of the image. Defaults to `640`.
+ * @param height The height of the image. Defaults to `480`.
+ * @param keyword The image keywords to use.
+ */
+ objects(width?: number, height?: number, keyword?: string): string {
+ return this.faker.image.unsplash.imageUrl(
+ width,
+ height,
+ 'objects',
+ keyword
+ );
+ }
+
+ /**
+ * Generates a new unsplash image url using the "buildings" category.
+ *
+ * @param width The width of the image. Defaults to `640`.
+ * @param height The height of the image. Defaults to `480`.
+ * @param keyword The image keywords to use.
+ */
+ buildings(width?: number, height?: number, keyword?: string): string {
+ return this.faker.image.unsplash.imageUrl(
+ width,
+ height,
+ 'buildings',
+ keyword
+ );
+ }
+}