diff options
| -rw-r--r-- | src/helpers.ts | 37 | ||||
| -rw-r--r-- | src/internal/deprecated.ts | 29 | ||||
| -rw-r--r-- | src/name.ts | 82 | ||||
| -rw-r--r-- | src/random.ts | 55 | ||||
| -rw-r--r-- | src/time.ts | 14 | ||||
| -rw-r--r-- | test/helpers.spec.ts | 4 | ||||
| -rw-r--r-- | test/name.spec.ts | 16 | ||||
| -rw-r--r-- | test/random.spec.ts | 2 | ||||
| -rw-r--r-- | test/time.spec.ts | 24 | ||||
| -rw-r--r-- | tsconfig.json | 3 |
10 files changed, 170 insertions, 96 deletions
diff --git a/src/helpers.ts b/src/helpers.ts index 38e70c29..6ed51ec5 100644 --- a/src/helpers.ts +++ b/src/helpers.ts @@ -1,4 +1,5 @@ import type { Faker } from '.'; +import { deprecated } from './internal/deprecated'; /** * A full card with various details. @@ -143,9 +144,12 @@ export class Helpers { randomize<T = string>( array: ReadonlyArray<T> = ['a', 'b', 'c'] as unknown as ReadonlyArray<T> ): T { - console.warn( - 'Deprecation Warning: faker.helpers.randomize is now located in faker.random.arrayElement' - ); + deprecated({ + deprecated: 'faker.helpers.randomize()', + proposed: 'faker.random.arrayElement()', + // since: 'v5.0.0', (?) + until: 'v7.0.0', + }); return this.faker.random.arrayElement(array); } @@ -511,9 +515,12 @@ export class Helpers { * @deprecated If you need some specific object you should create your own method. */ createCard(): Card { - console.warn( - 'Deprecation Warning: If you need some specific object you should create your own method.' - ); + deprecated({ + deprecated: 'helpers.createCard()', + proposed: 'a self-build function', + since: 'v6.1.0', + until: 'v7.0.0', + }); return { name: this.faker.name.findName(), username: this.faker.internet.userName(), @@ -582,9 +589,12 @@ export class Helpers { * @deprecated If you need some specific object you should create your own method. */ contextualCard(): ContextualCard { - console.warn( - 'Deprecation Warning: If you need some specific object you should create your own method.' - ); + deprecated({ + deprecated: 'helpers.contextualCard()', + proposed: 'a self-build function', + since: 'v6.1.0', + until: 'v7.0.0', + }); const name = this.faker.name.firstName(); const userName = this.faker.internet.userName(name); return { @@ -631,9 +641,12 @@ export class Helpers { * @deprecated If you need some specific object you should create your own method. */ userCard(): UserCard { - console.warn( - 'Deprecation Warning: If you need some specific object you should create your own method.' - ); + deprecated({ + deprecated: 'helpers.userCard()', + proposed: 'a self-build function', + since: 'v6.1.0', + until: 'v7.0.0', + }); return { name: this.faker.name.findName(), username: this.faker.internet.userName(), diff --git a/src/internal/deprecated.ts b/src/internal/deprecated.ts new file mode 100644 index 00000000..7f20c24f --- /dev/null +++ b/src/internal/deprecated.ts @@ -0,0 +1,29 @@ +/* eslint-disable jsdoc/check-tag-names */ +/* eslint-disable jsdoc/require-param */ + +/** @internal */ +export interface DeprecatedOptions { + deprecated: string; + proposed?: string; + since?: string; + until?: string; +} + +/** @internal */ +export function deprecated(opts: DeprecatedOptions): void { + let message = `[@faker-js/faker]: ${opts.deprecated} is deprecated`; + + if (opts.since) { + message += ` since ${opts.since}`; + } + + if (opts.until) { + message += ` and will be removed in ${opts.until}`; + } + + if (opts.proposed) { + message += `. Please use ${opts.proposed} instead`; + } + + console.warn(message + '.'); +} diff --git a/src/name.ts b/src/name.ts index 8fac27c4..a6dd4ea6 100644 --- a/src/name.ts +++ b/src/name.ts @@ -1,4 +1,5 @@ import type { Faker } from '.'; +import { deprecated } from './internal/deprecated'; export enum Gender { female = 'female', @@ -12,10 +13,12 @@ export type GenderType = 'female' | 'male' | 0 | 1; * Normalize gender. * * @param gender Gender. + * @param functionName Temporary parameter for deprecation message. * @returns Normalized gender. */ function normalizeGender( - gender?: GenderType + gender?: GenderType, + functionName?: string ): Exclude<GenderType, number> | undefined { if (gender == null || typeof gender === 'string') { // TODO @Shinigami92 21-03-2022: Cast can be removed when we set `strict: true` @@ -24,9 +27,12 @@ function normalizeGender( const normalizedGender = gender === 0 ? 'male' : 'female'; - console.warn( - `Deprecation Warning: Please use '${normalizedGender}' for gender instead of ${gender}` - ); + deprecated({ + deprecated: `name.${functionName}(number)`, + proposed: "'female' or 'male'", + since: 'v6.1.0', + until: 'v7.0.0', + }); return normalizedGender; } @@ -40,6 +46,7 @@ function normalizeGender( * @param param2.generic Non-gender definitions. * @param param2.female Female definitions. * @param param2.male Male definitions. + * @param functionName Temporary parameter for deprecation message. * @returns Definition based on given gender. */ function selectDefinition( @@ -50,9 +57,10 @@ function selectDefinition( generic, female, male, - }: { generic?: string[]; female?: string[]; male?: string[] } = {} + }: { generic?: string[]; female?: string[]; male?: string[] } = {}, + functionName?: string ) { - const normalizedGender = normalizeGender(gender); + const normalizedGender = normalizeGender(gender, functionName); let values: string[] | undefined; switch (normalizedGender) { @@ -107,11 +115,16 @@ export class Name { const { first_name, female_first_name, male_first_name } = this.faker.definitions.name; - return selectDefinition(this.faker, gender, { - generic: first_name, - female: female_first_name, - male: male_first_name, - }); + return selectDefinition( + this.faker, + gender, + { + generic: first_name, + female: female_first_name, + male: male_first_name, + }, + 'firstName' + ); } /** @@ -129,11 +142,16 @@ export class Name { const { last_name, female_last_name, male_last_name } = this.faker.definitions.name; - return selectDefinition(this.faker, gender, { - generic: last_name, - female: female_last_name, - male: male_last_name, - }); + return selectDefinition( + this.faker, + gender, + { + generic: last_name, + female: female_last_name, + male: male_last_name, + }, + 'lastName' + ); } /** @@ -151,11 +169,16 @@ export class Name { const { middle_name, female_middle_name, male_middle_name } = this.faker.definitions.name; - return selectDefinition(this.faker, gender, { - generic: middle_name, - female: female_middle_name, - male: male_middle_name, - }); + return selectDefinition( + this.faker, + gender, + { + generic: middle_name, + female: female_middle_name, + male: male_middle_name, + }, + 'middleName' + ); } /** @@ -179,7 +202,7 @@ export class Name { let suffix = ''; const normalizedGender: Exclude<GenderType, number> = - normalizeGender(gender) ?? + normalizeGender(gender, 'findName') ?? this.faker.random.arrayElement(['female', 'male']); firstName = firstName || this.faker.name.firstName(normalizedGender); @@ -237,11 +260,16 @@ export class Name { prefix(gender?: GenderType): string { const { prefix, female_prefix, male_prefix } = this.faker.definitions.name; - return selectDefinition(this.faker, gender, { - generic: prefix, - female: female_prefix, - male: male_prefix, - }); + return selectDefinition( + this.faker, + gender, + { + generic: prefix, + female: female_prefix, + male: male_prefix, + }, + 'prefix' + ); } /** diff --git a/src/random.ts b/src/random.ts index fced36a3..0a3b3c5e 100644 --- a/src/random.ts +++ b/src/random.ts @@ -1,4 +1,5 @@ import type { Faker } from '.'; +import { deprecated } from './internal/deprecated'; /** * Method to reduce array of characters. @@ -52,9 +53,12 @@ export class Random { number( options?: number | { min?: number; max?: number; precision?: number } ): number { - console.warn( - 'Deprecation Warning: faker.random.number is now located in faker.datatype.number' - ); + deprecated({ + deprecated: 'faker.random.number()', + proposed: 'faker.datatype.number()', + // since: 'v5.0.0', (?) + until: 'v7.0.0', + }); return this.faker.datatype.number(options); } @@ -81,9 +85,12 @@ export class Random { float( options?: number | { min?: number; max?: number; precision?: number } ): number { - console.warn( - 'Deprecation Warning: faker.random.float is now located in faker.datatype.float' - ); + deprecated({ + deprecated: 'faker.random.float()', + proposed: 'faker.datatype.float()', + // since: 'v5.0.0', (?) + until: 'v7.0.0', + }); return this.faker.datatype.float(options); } @@ -213,9 +220,12 @@ export class Random { * @deprecated */ uuid(): string { - console.warn( - 'Deprecation Warning: faker.random.uuid is now located in faker.datatype.uuid' - ); + deprecated({ + deprecated: 'faker.random.uuid()', + proposed: 'faker.datatype.uuid()', + // since: 'v5.0.0', (?) + until: 'v7.0.0', + }); return this.faker.datatype.uuid(); } @@ -230,9 +240,12 @@ export class Random { * @deprecated */ boolean(): boolean { - console.warn( - 'Deprecation Warning: faker.random.boolean is now located in faker.datatype.boolean' - ); + deprecated({ + deprecated: 'faker.random.boolean()', + proposed: 'faker.datatype.boolean()', + // since: 'v5.0.0', (?) + until: 'v7.0.0', + }); return this.faker.datatype.boolean(); } @@ -347,9 +360,12 @@ export class Random { * @deprecated */ image(): string { - console.warn( - 'Deprecation Warning: faker.random.image is now located in faker.image.image' - ); + deprecated({ + deprecated: 'faker.random.image()', + proposed: 'faker.image.image()', + // since: 'v5.0.0', (?) + until: 'v7.0.0', + }); return this.faker.image.image(); } @@ -533,9 +549,12 @@ export class Random { * @deprecated */ hexaDecimal(count?: number): string { - console.warn( - 'Deprecation Warning: faker.random.hexaDecimal is now located in faker.datatype.hexaDecimal' - ); + deprecated({ + deprecated: 'faker.random.hexaDecimal()', + proposed: 'faker.datatype.hexaDecimal()', + // since: 'v5.0.0', (?) + until: 'v7.0.0', + }); return this.faker.datatype.hexaDecimal(count); } } diff --git a/src/time.ts b/src/time.ts index 06a32021..8eeaef42 100644 --- a/src/time.ts +++ b/src/time.ts @@ -1,4 +1,5 @@ import type { LiteralUnion } from './faker'; +import { deprecated } from './internal/deprecated'; /** * Module to generate time of dates in various formats. @@ -28,13 +29,12 @@ export class Time { recent( format: LiteralUnion<'abbr' | 'date' | 'wide' | 'unix'> = 'unix' ): string | number | Date { - console.warn( - `Deprecation Warning: faker.time.recent() is deprecated. Use the native \`new Date()\` and call the function you want on it. - abbr => toLocaleTimeString() - wide => toTimeString() - unix => getTime() -` - ); + deprecated({ + deprecated: 'faker.time.recent()', + proposed: 'native `new Date()` and call the function you want on it', + since: 'v6.1.0', + until: 'v7.0.0', + }); let date: string | number | Date = new Date(); diff --git a/test/helpers.spec.ts b/test/helpers.spec.ts index cbb541c1..0be83f98 100644 --- a/test/helpers.spec.ts +++ b/test/helpers.spec.ts @@ -774,7 +774,7 @@ describe('helpers', () => { faker.helpers[functionName](); expect(spy).toHaveBeenCalledWith( - `Deprecation Warning: faker.helpers.${functionName} is now located in faker.${newLocation}` + `[@faker-js/faker]: faker.helpers.${functionName}() is deprecated and will be removed in v7.0.0. Please use faker.${newLocation}() instead.` ); spy.mockRestore(); } @@ -791,7 +791,7 @@ describe('helpers', () => { faker.helpers[functionName](); expect(spy).toHaveBeenCalledWith( - `Deprecation Warning: If you need some specific object you should create your own method.` + `[@faker-js/faker]: helpers.${functionName}() is deprecated since v6.1.0 and will be removed in v7.0.0. Please use a self-build function instead.` ); spy.mockRestore(); } diff --git a/test/name.spec.ts b/test/name.spec.ts index 7572b3d6..40f34955 100644 --- a/test/name.spec.ts +++ b/test/name.spec.ts @@ -189,13 +189,13 @@ describe('name', () => { let name = faker.name.firstName(0); expect(faker.definitions.name.male_first_name).toContain(name); expect(spy).toHaveBeenCalledWith( - `Deprecation Warning: Please use 'male' for gender instead of 0` + "[@faker-js/faker]: name.firstName(number) is deprecated since v6.1.0 and will be removed in v7.0.0. Please use 'female' or 'male' instead." ); name = faker.name.firstName(1); expect(faker.definitions.name.female_first_name).toContain(name); expect(spy).toHaveBeenCalledWith( - `Deprecation Warning: Please use 'female' for gender instead of 1` + "[@faker-js/faker]: name.firstName(number) is deprecated since v6.1.0 and will be removed in v7.0.0. Please use 'female' or 'male' instead." ); spy.mockRestore(); @@ -242,13 +242,13 @@ describe('name', () => { let name = faker.name.lastName(0); expect(faker.definitions.name.male_last_name).toContain(name); expect(spy).toHaveBeenCalledWith( - `Deprecation Warning: Please use 'male' for gender instead of 0` + "[@faker-js/faker]: name.lastName(number) is deprecated since v6.1.0 and will be removed in v7.0.0. Please use 'female' or 'male' instead." ); name = faker.name.lastName(1); expect(faker.definitions.name.female_last_name).toContain(name); expect(spy).toHaveBeenCalledWith( - `Deprecation Warning: Please use 'female' for gender instead of 1` + "[@faker-js/faker]: name.lastName(number) is deprecated since v6.1.0 and will be removed in v7.0.0. Please use 'female' or 'male' instead." ); spy.mockRestore(); @@ -299,13 +299,13 @@ describe('name', () => { let name = faker.name.middleName(0); expect(faker.definitions.name.male_middle_name).toContain(name); expect(spy).toHaveBeenCalledWith( - `Deprecation Warning: Please use 'male' for gender instead of 0` + "[@faker-js/faker]: name.middleName(number) is deprecated since v6.1.0 and will be removed in v7.0.0. Please use 'female' or 'male' instead." ); name = faker.name.middleName(1); expect(faker.definitions.name.female_middle_name).toContain(name); expect(spy).toHaveBeenCalledWith( - `Deprecation Warning: Please use 'female' for gender instead of 1` + "[@faker-js/faker]: name.middleName(number) is deprecated since v6.1.0 and will be removed in v7.0.0. Please use 'female' or 'male' instead." ); spy.mockRestore(); @@ -475,7 +475,7 @@ describe('name', () => { expect(faker.definitions.name.male_prefix).toContain(prefix); expect(spy).toHaveBeenCalledWith( - `Deprecation Warning: Please use 'male' for gender instead of 0` + "[@faker-js/faker]: name.prefix(number) is deprecated since v6.1.0 and will be removed in v7.0.0. Please use 'female' or 'male' instead." ); spy.mockRestore(); @@ -492,7 +492,7 @@ describe('name', () => { expect(faker.definitions.name.female_prefix).toContain(prefix); expect(spy).toHaveBeenCalledWith( - `Deprecation Warning: Please use 'female' for gender instead of 1` + "[@faker-js/faker]: name.prefix(number) is deprecated since v6.1.0 and will be removed in v7.0.0. Please use 'female' or 'male' instead." ); spy.mockRestore(); diff --git a/test/random.spec.ts b/test/random.spec.ts index ceb454cc..9e66f58a 100644 --- a/test/random.spec.ts +++ b/test/random.spec.ts @@ -294,7 +294,7 @@ describe('random', () => { faker.random[functionName](); expect(spy).toHaveBeenCalledWith( - `Deprecation Warning: faker.random.${functionName} is now located in faker.${newLocation}` + `[@faker-js/faker]: faker.random.${functionName}() is deprecated and will be removed in v7.0.0. Please use faker.${newLocation}() instead.` ); spy.mockRestore(); } diff --git a/test/time.spec.ts b/test/time.spec.ts index 90d4d2c4..82c3fbae 100644 --- a/test/time.spec.ts +++ b/test/time.spec.ts @@ -62,11 +62,7 @@ describe('time', () => { expect(date).toBeTypeOf('number'); expect(spy).toHaveBeenCalledWith( - `Deprecation Warning: faker.time.recent() is deprecated. Use the native \`new Date()\` and call the function you want on it. - abbr => toLocaleTimeString() - wide => toTimeString() - unix => getTime() -` + '[@faker-js/faker]: faker.time.recent() is deprecated since v6.1.0 and will be removed in v7.0.0. Please use native `new Date()` and call the function you want on it instead.' ); spy.mockRestore(); }); @@ -78,11 +74,7 @@ describe('time', () => { expect(date).toBeTypeOf('string'); expect(spy).toHaveBeenCalledWith( - `Deprecation Warning: faker.time.recent() is deprecated. Use the native \`new Date()\` and call the function you want on it. - abbr => toLocaleTimeString() - wide => toTimeString() - unix => getTime() -` + '[@faker-js/faker]: faker.time.recent() is deprecated since v6.1.0 and will be removed in v7.0.0. Please use native `new Date()` and call the function you want on it instead.' ); spy.mockRestore(); }); @@ -94,11 +86,7 @@ describe('time', () => { expect(date).toBeTypeOf('string'); expect(spy).toHaveBeenCalledWith( - `Deprecation Warning: faker.time.recent() is deprecated. Use the native \`new Date()\` and call the function you want on it. - abbr => toLocaleTimeString() - wide => toTimeString() - unix => getTime() -` + '[@faker-js/faker]: faker.time.recent() is deprecated since v6.1.0 and will be removed in v7.0.0. Please use native `new Date()` and call the function you want on it instead.' ); spy.mockRestore(); }); @@ -110,11 +98,7 @@ describe('time', () => { expect(date).toBeTypeOf('number'); expect(spy).toHaveBeenCalledWith( - `Deprecation Warning: faker.time.recent() is deprecated. Use the native \`new Date()\` and call the function you want on it. - abbr => toLocaleTimeString() - wide => toTimeString() - unix => getTime() -` + '[@faker-js/faker]: faker.time.recent() is deprecated since v6.1.0 and will be removed in v7.0.0. Please use native `new Date()` and call the function you want on it instead.' ); spy.mockRestore(); }); diff --git a/tsconfig.json b/tsconfig.json index aea7ca43..06a5489f 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -12,7 +12,8 @@ // "strictPropertyInitialization": true, // "noImplicitAny": true, // "noImplicitThis": true, - "useUnknownInCatchVariables": true + "useUnknownInCatchVariables": true, + "stripInternal": true }, "include": ["src/**/*"], "exclude": ["node_modules"] |
