aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorShinigami <[email protected]>2022-01-14 17:16:18 +0100
committerDamien Retzinger <[email protected]>2022-01-14 18:37:49 -0500
commitc0a62778cc32b120e256f9779b1088b8a753e2ae (patch)
tree9693168d51b01a102175fb06ddb9bc46cc7be709 /src
parent4d4653e6cdfd551b5d6d7a939c85f4232391a235 (diff)
downloadfaker-c0a62778cc32b120e256f9779b1088b8a753e2ae.tar.xz
faker-c0a62778cc32b120e256f9779b1088b8a753e2ae.zip
feat: migrate system (#90)
Diffstat (limited to 'src')
-rw-r--r--src/index.ts3
-rw-r--r--src/system.ts213
2 files changed, 215 insertions, 1 deletions
diff --git a/src/index.ts b/src/index.ts
index ee741166..f2f4520e 100644
--- a/src/index.ts
+++ b/src/index.ts
@@ -10,6 +10,7 @@ import { Internet } from './internet';
import { Mersenne } from './mersenne';
import { Name } from './name';
import { Random } from './random';
+import { System } from './system';
import { Time } from './time';
export interface FakerOptions {
@@ -188,7 +189,7 @@ export class Faker {
readonly music = new (require('./music'))(this);
readonly name: Name = new Name(this);
readonly phone = new (require('./phone_number'))(this);
- readonly system = new (require('./system'))(this);
+ readonly system: System = new System(this);
readonly time: Time = new Time();
readonly vehicle = new (require('./vehicle'))(this);
readonly word = new (require('./word'))(this);
diff --git a/src/system.ts b/src/system.ts
new file mode 100644
index 00000000..652cb277
--- /dev/null
+++ b/src/system.ts
@@ -0,0 +1,213 @@
+// generates fake data for many computer systems properties
+
+import type { Faker } from '.';
+
+const commonFileTypes = ['video', 'audio', 'image', 'text', 'application'];
+
+const commonMimeTypes = [
+ 'application/pdf',
+ 'audio/mpeg',
+ 'audio/wav',
+ 'image/png',
+ 'image/jpeg',
+ 'image/gif',
+ 'video/mp4',
+ 'video/mpeg',
+ 'text/html',
+];
+
+function setToArray<T>(set: Set<T>): T[] {
+ // shortcut if Array.from is available
+ if (Array.from) {
+ return Array.from(set);
+ }
+
+ const array: T[] = [];
+ set.forEach((item) => {
+ array.push(item);
+ });
+ return array;
+}
+
+export class System {
+ constructor(private readonly faker: Faker) {
+ // Bind `this` so namespaced is working correctly
+ for (const name of Object.getOwnPropertyNames(System.prototype)) {
+ if (name === 'constructor' || typeof this[name] !== 'function') {
+ continue;
+ }
+ this[name] = this[name].bind(this);
+ }
+ }
+
+ /**
+ * generates a file name
+ *
+ * @method faker.system.fileName
+ */
+ fileName() {
+ let str = this.faker.random.words();
+ str =
+ str.toLowerCase().replace(/\W/g, '_') + '.' + this.faker.system.fileExt();
+ return str;
+ }
+
+ /**
+ * commonFileName
+ *
+ * @method faker.system.commonFileName
+ * @param ext
+ */
+ commonFileName(ext): string {
+ let str = this.faker.random.words();
+ str = str.toLowerCase().replace(/\W/g, '_');
+ str += '.' + (ext || this.faker.system.commonFileExt());
+ return str;
+ }
+
+ /**
+ * mimeType
+ *
+ * @method faker.system.mimeType
+ */
+ mimeType() {
+ const typeSet = new Set<string>();
+ const extensionSet = new Set();
+ const mimeTypes = this.faker.definitions.system.mimeTypes;
+
+ Object.keys(mimeTypes).forEach((m) => {
+ const type = m.split('/')[0];
+
+ typeSet.add(type);
+
+ if (mimeTypes[m].extensions instanceof Array) {
+ mimeTypes[m].extensions.forEach((ext) => {
+ extensionSet.add(ext);
+ });
+ }
+ });
+
+ const types = setToArray(typeSet);
+ const extensions = setToArray(extensionSet);
+ const mimeTypeKeys = Object.keys(this.faker.definitions.system.mimeTypes);
+
+ return this.faker.random.arrayElement(mimeTypeKeys);
+ }
+
+ /**
+ * Returns a commonly used file type
+ *
+ * @method faker.system.commonFileType
+ */
+ commonFileType() {
+ return this.faker.random.arrayElement(commonFileTypes);
+ }
+
+ /**
+ * Returns a commonly used file extension
+ *
+ * @method faker.system.commonFileExt
+ */
+ commonFileExt() {
+ return this.faker.system.fileExt(
+ this.faker.random.arrayElement(commonMimeTypes)
+ );
+ }
+
+ /**
+ * Returns any file type available as mime-type
+ *
+ * @method faker.system.fileType
+ */
+ fileType() {
+ const typeSet = new Set<string>();
+ const extensionSet = new Set();
+ const mimeTypes = this.faker.definitions.system.mimeTypes;
+
+ Object.keys(mimeTypes).forEach((m) => {
+ const type = m.split('/')[0];
+
+ typeSet.add(type);
+
+ if (mimeTypes[m].extensions instanceof Array) {
+ mimeTypes[m].extensions.forEach((ext) => {
+ extensionSet.add(ext);
+ });
+ }
+ });
+
+ const types = setToArray(typeSet);
+ const extensions = setToArray(extensionSet);
+ const mimeTypeKeys = Object.keys(this.faker.definitions.system.mimeTypes);
+ return this.faker.random.arrayElement(types);
+ }
+
+ /**
+ * fileExt
+ *
+ * @method faker.system.fileExt
+ * @param mimeType
+ */
+ fileExt(mimeType?: string): string {
+ const typeSet = new Set<string>();
+ const extensionSet = new Set<string>();
+ const mimeTypes = this.faker.definitions.system.mimeTypes;
+
+ Object.keys(mimeTypes).forEach((m) => {
+ const type = m.split('/')[0];
+
+ typeSet.add(type);
+
+ if (mimeTypes[m].extensions instanceof Array) {
+ mimeTypes[m].extensions.forEach((ext) => {
+ extensionSet.add(ext);
+ });
+ }
+ });
+
+ const types = setToArray(typeSet);
+ const extensions = setToArray(extensionSet);
+ const mimeTypeKeys = Object.keys(this.faker.definitions.system.mimeTypes);
+
+ if (mimeType) {
+ const mimes = this.faker.definitions.system.mimeTypes;
+ return this.faker.random.arrayElement(mimes[mimeType].extensions);
+ }
+
+ return this.faker.random.arrayElement(extensions);
+ }
+
+ /**
+ * Returns directory path
+ *
+ * @method faker.system.directoryPath
+ */
+ directoryPath(): string {
+ const paths = this.faker.definitions.system.directoryPaths;
+ return this.faker.random.arrayElement(paths);
+ }
+
+ /**
+ * returns file path
+ *
+ * @method faker.system.filePath
+ */
+ filePath() {
+ return this.faker.fake(
+ '{{system.directoryPath}}/{{system.fileName}}.{{system.fileExt}}'
+ );
+ }
+
+ /**
+ * semver
+ *
+ * @method faker.system.semver
+ */
+ semver(): string {
+ return [
+ this.faker.datatype.number(9),
+ this.faker.datatype.number(9),
+ this.faker.datatype.number(9),
+ ].join('.');
+ }
+}