Skip to content

Commit 9646279

Browse files
committed
Merge remote-tracking branch 'faker/next' into feat/adds-support-for-ulid-generation
# Conflicts: # src/modules/date/index.ts # test/utils/__snapshots__/base32.spec.ts.snap
2 parents ddd7e59 + 4a8499a commit 9646279

25 files changed

+140
-77
lines changed

CHANGELOG.md

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,18 @@
22

33
All notable changes to this project will be documented in this file. See [commit-and-tag-version](https://github.com/absolute-version/commit-and-tag-version) for commit guidelines.
44

5+
## [9.0.3](https://github.com/faker-js/faker/compare/v9.0.2...v9.0.3) (2024-09-26)
6+
7+
8+
### Changed Locales
9+
10+
* **locale:** update french legal entity types ([#3142](https://github.com/faker-js/faker/issues/3142)) ([d6bceb6](https://github.com/faker-js/faker/commit/d6bceb662de6559446fedb11de53a632a525aba0))
11+
12+
13+
### Bug Fixes
14+
15+
* **image:** fix dataUri with type svg-base64 in browsers ([#3144](https://github.com/faker-js/faker/issues/3144)) ([78b2a3a](https://github.com/faker-js/faker/commit/78b2a3a8b85679eeff27beccebcc404b0a5ff3cf))
16+
517
## [9.0.2](https://github.com/faker-js/faker/compare/v9.0.1...v9.0.2) (2024-09-23)
618

719

docs/guide/usage.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -74,7 +74,7 @@ const randomEmail = faker.internet.email(); // [email protected]
7474
```
7575

7676
::: info Note
77-
It is highly recommended to use version tags when importing libraries in Deno, e.g: `import { faker } from "https://esm.sh/@faker-js/[email protected].2"`.
77+
It is highly recommended to use version tags when importing libraries in Deno, e.g: `import { faker } from "https://esm.sh/@faker-js/[email protected].3"`.
7878
:::
7979

8080
### Alternative CDN links

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "@faker-js/faker",
3-
"version": "9.0.2",
3+
"version": "9.0.3",
44
"description": "Generate massive amounts of fake contextual data",
55
"scripts": {
66
"clean": "rimraf coverage .eslintcache dist docs/.vitepress/cache docs/.vitepress/dist node_modules",

src/faker.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
import type { LocaleDefinition, MetadataDefinition } from './definitions';
22
import { FakerError } from './errors/faker-error';
33
import { deprecated } from './internal/deprecated';
4-
import type { LocaleProxy } from './locale-proxy';
5-
import { createLocaleProxy } from './locale-proxy';
4+
import type { LocaleProxy } from './internal/locale-proxy';
5+
import { createLocaleProxy } from './internal/locale-proxy';
66
import { AirlineModule } from './modules/airline';
77
import { AnimalModule } from './modules/animal';
88
import { ColorModule } from './modules/color';

src/index.ts

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -30,10 +30,6 @@ export type {
3030
export { FakerError } from './errors/faker-error';
3131
export { Faker } from './faker';
3232
export type { FakerOptions } from './faker';
33-
export {
34-
generateMersenne32Randomizer,
35-
generateMersenne53Randomizer,
36-
} from './internal/mersenne';
3733
export * from './locale';
3834
export { fakerEN as faker } from './locale';
3935
export * from './locales';
@@ -85,3 +81,7 @@ export type { WordModule } from './modules/word';
8581
export type { Randomizer } from './randomizer';
8682
export { SimpleFaker, simpleFaker } from './simple-faker';
8783
export { mergeLocales } from './utils/merge-locales';
84+
export {
85+
generateMersenne32Randomizer,
86+
generateMersenne53Randomizer,
87+
} from './utils/mersenne';

src/internal/base64.ts

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
/**
2+
* This works the same as `Buffer.from(input).toString('base64')`
3+
* to work on both Node.js and browser environment.
4+
*
5+
* @internal
6+
*
7+
* @param input The string to encode to Base64.
8+
*
9+
* @returns Base64 encoded string.
10+
*
11+
* @see https://datatracker.ietf.org/doc/html/rfc4648
12+
*
13+
* @example const encodedHeader = toBase64(JSON.stringify(header));
14+
*/
15+
export const toBase64: (input: string) => string =
16+
typeof Buffer === 'undefined'
17+
? (input) => {
18+
const utf8Bytes = new TextEncoder().encode(input);
19+
const binaryString = Array.from(utf8Bytes, (byte) =>
20+
String.fromCodePoint(byte)
21+
).join('');
22+
return btoa(binaryString);
23+
}
24+
: (input) => Buffer.from(input).toString('base64');

src/locale-proxy.ts renamed to src/internal/locale-proxy.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
1-
import type { LocaleDefinition } from './definitions';
2-
import { FakerError } from './errors/faker-error';
1+
import type { LocaleDefinition } from '../definitions';
2+
import { FakerError } from '../errors/faker-error';
33

44
/**
55
* A proxy for LocaleDefinition that marks all properties as required and throws an error when an entry is accessed that is not defined.

src/internal/mersenne.ts

Lines changed: 0 additions & 48 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,3 @@
1-
import type { Randomizer } from '../randomizer';
2-
31
/**
42
* Copyright (c) 2022-2023 Faker
53
*
@@ -325,49 +323,3 @@ export class MersenneTwister19937 {
325323
}
326324
// These real versions are due to Isaku Wada, 2002/01/09
327325
}
328-
329-
/**
330-
* Generates a MersenneTwister19937 randomizer with 32 bits of precision.
331-
* This is the default randomizer used by faker prior to v9.0.
332-
*/
333-
export function generateMersenne32Randomizer(): Randomizer {
334-
const twister = new MersenneTwister19937();
335-
336-
twister.initGenrand(Math.ceil(Math.random() * Number.MAX_SAFE_INTEGER));
337-
338-
return {
339-
next(): number {
340-
return twister.genrandReal2();
341-
},
342-
seed(seed: number | number[]): void {
343-
if (typeof seed === 'number') {
344-
twister.initGenrand(seed);
345-
} else if (Array.isArray(seed)) {
346-
twister.initByArray(seed, seed.length);
347-
}
348-
},
349-
};
350-
}
351-
352-
/**
353-
* Generates a MersenneTwister19937 randomizer with 53 bits of precision.
354-
* This is the default randomizer used by faker starting with v9.0.
355-
*/
356-
export function generateMersenne53Randomizer(): Randomizer {
357-
const twister = new MersenneTwister19937();
358-
359-
twister.initGenrand(Math.ceil(Math.random() * Number.MAX_SAFE_INTEGER));
360-
361-
return {
362-
next(): number {
363-
return twister.genrandRes53();
364-
},
365-
seed(seed: number | number[]): void {
366-
if (typeof seed === 'number') {
367-
twister.initGenrand(seed);
368-
} else if (Array.isArray(seed)) {
369-
twister.initByArray(seed, seed.length);
370-
}
371-
},
372-
};
373-
}
File renamed without changes.
Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1,14 @@
1-
export default ['EI', 'EURL', 'GIE', 'SA', 'SARL', 'SAS', 'SCOP', 'SEM'];
1+
export default [
2+
'EI',
3+
'EURL',
4+
'GIE',
5+
'SA',
6+
'SARL',
7+
'SAS',
8+
'SASU',
9+
'SCA',
10+
'SCOP',
11+
'SCS',
12+
'SEM',
13+
'SNC',
14+
];

src/modules/date/index.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,8 @@ import type { Faker } from '../..';
22
import type { DateEntryDefinition } from '../../definitions';
33
import { FakerError } from '../../errors/faker-error';
44
import { toDate } from '../../internal/date';
5+
import { assertLocaleData } from '../../internal/locale-proxy';
56
import { SimpleModuleBase } from '../../internal/module-base';
6-
import { assertLocaleData } from '../../locale-proxy';
77

88
/**
99
* Module to generate dates (without methods requiring localized data).

src/modules/image/index.ts

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
import { toBase64 } from '../../internal/base64';
12
import { deprecated } from '../../internal/deprecated';
23
import { ModuleBase } from '../../internal/module-base';
34

@@ -388,8 +389,6 @@ export class ImageModule extends ModuleBase {
388389

389390
return type === 'svg-uri'
390391
? `data:image/svg+xml;charset=UTF-8,${encodeURIComponent(svgString)}`
391-
: `data:image/svg+xml;base64,${Buffer.from(svgString).toString(
392-
'base64'
393-
)}`;
392+
: `data:image/svg+xml;base64,${toBase64(svgString)}`;
394393
}
395394
}

src/modules/string/index.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ import { FakerError } from '../../errors/faker-error';
22
import { CROCKFORDS_BASE32, dateToBase32 } from '../../internal/base32';
33
import { toDate } from '../../internal/date';
44
import { SimpleModuleBase } from '../../internal/module-base';
5-
import type { LiteralUnion } from '../../utils/types';
5+
import type { LiteralUnion } from '../../internal/types';
66

77
export type Casing = 'upper' | 'lower' | 'mixed';
88

src/simple-faker.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,10 @@
1-
import { generateMersenne53Randomizer } from './internal/mersenne';
21
import { DatatypeModule } from './modules/datatype';
32
import { SimpleDateModule } from './modules/date';
43
import { SimpleHelpersModule } from './modules/helpers';
54
import { NumberModule } from './modules/number';
65
import { StringModule } from './modules/string';
76
import type { Randomizer } from './randomizer';
7+
import { generateMersenne53Randomizer } from './utils/mersenne';
88

99
/**
1010
* This is a simplified Faker class that doesn't need any localized data to generate its output.

src/utils/mersenne.ts

Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,48 @@
1+
import { MersenneTwister19937 } from '../internal/mersenne';
2+
import type { Randomizer } from '../randomizer';
3+
4+
/**
5+
* Generates a MersenneTwister19937 randomizer with 32 bits of precision.
6+
* This is the default randomizer used by faker prior to v9.0.
7+
*/
8+
export function generateMersenne32Randomizer(): Randomizer {
9+
const twister = new MersenneTwister19937();
10+
11+
twister.initGenrand(Math.ceil(Math.random() * Number.MAX_SAFE_INTEGER));
12+
13+
return {
14+
next(): number {
15+
return twister.genrandReal2();
16+
},
17+
seed(seed: number | number[]): void {
18+
if (typeof seed === 'number') {
19+
twister.initGenrand(seed);
20+
} else if (Array.isArray(seed)) {
21+
twister.initByArray(seed, seed.length);
22+
}
23+
},
24+
};
25+
}
26+
27+
/**
28+
* Generates a MersenneTwister19937 randomizer with 53 bits of precision.
29+
* This is the default randomizer used by faker starting with v9.0.
30+
*/
31+
export function generateMersenne53Randomizer(): Randomizer {
32+
const twister = new MersenneTwister19937();
33+
34+
twister.initGenrand(Math.ceil(Math.random() * Number.MAX_SAFE_INTEGER));
35+
36+
return {
37+
next(): number {
38+
return twister.genrandRes53();
39+
},
40+
seed(seed: number | number[]): void {
41+
if (typeof seed === 'number') {
42+
twister.initGenrand(seed);
43+
} else if (Array.isArray(seed)) {
44+
twister.initByArray(seed, seed.length);
45+
}
46+
},
47+
};
48+
}

test/internal/__snapshots__/base32.spec.ts.snap

Lines changed: 0 additions & 3 deletions
This file was deleted.

test/internal/base64.spec.ts

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
import { describe, expect, it } from 'vitest';
2+
import { faker } from '../../src';
3+
import { toBase64 } from '../../src/internal/base64';
4+
5+
// This test is kind of useless, because during testing the Buffer object is always available.
6+
describe('toBase64', () => {
7+
it.each(
8+
faker.helpers.multiple(
9+
() => faker.string.alphanumeric({ length: { min: 0, max: 100 } }),
10+
{ count: 5 }
11+
)
12+
)(
13+
"should behave the same as `Buffer.from(value).toString('base64')`",
14+
(value) => {
15+
expect(toBase64(value)).toBe(Buffer.from(value).toString('base64'));
16+
}
17+
);
18+
});

test/locale-proxy.spec.ts renamed to test/internal/locale-proxy.spec.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import { describe, expect, it } from 'vitest';
2-
import { FakerError, en } from '../src';
3-
import { createLocaleProxy } from '../src/locale-proxy';
2+
import { FakerError, en } from '../../src';
3+
import { createLocaleProxy } from '../../src/internal/locale-proxy';
44

55
describe('LocaleProxy', () => {
66
const locale = createLocaleProxy(en);

test/modules/number.spec.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
import validator from 'validator';
22
import { describe, expect, it } from 'vitest';
33
import { FakerError, SimpleFaker, faker } from '../../src';
4-
import { MERSENNE_MAX_VALUE } from '../internal/mersenne-test-utils';
54
import { seededTests } from '../support/seeded-runs';
5+
import { MERSENNE_MAX_VALUE } from '../utils/mersenne-test-utils';
66
import { times } from './../support/times';
77

88
describe('number', () => {

test/scripts/apidocs/method.example.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import type { Casing, ColorFormat } from '../../../src';
22
import { FakerError } from '../../../src/errors/faker-error';
3+
import type { LiteralUnion } from '../../../src/internal/types';
34
import type { AlphaNumericChar } from '../../../src/modules/string';
4-
import type { LiteralUnion } from '../../../src/utils/types';
55
// explicitly export types so they show up in the docs as decomposed types
66
export type { NumberColorFormat, StringColorFormat } from '../../../src';
77
export type { AlphaNumericChar, Casing, ColorFormat, LiteralUnion };

test/scripts/apidocs/verify-jsdoc-tags.spec.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -119,7 +119,7 @@ describe('verify JSDoc tags', () => {
119119
);
120120

121121
if (moduleName === 'randomizer') {
122-
examples = `import { generateMersenne32Randomizer } from '${relativeImportPath}/internal/mersenne';
122+
examples = `import { generateMersenne32Randomizer } from '${relativeImportPath}/utils/mersenne';
123123
124124
const randomizer = generateMersenne32Randomizer();
125125

test/support/seeded-runs.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import { describe, expect, describe as vi_describe, it as vi_it } from 'vitest';
22
import type { Faker } from '../../src/faker';
3-
import type { Callable, MethodOf } from '../../src/utils/types';
3+
import type { Callable, MethodOf } from '../../src/internal/types';
44

55
export const seededRuns = [42, 1337, 1211];
66

test/internal/mersenne.spec.ts renamed to test/utils/mersenne.spec.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,10 @@
11
import { beforeAll, beforeEach, describe, expect, it } from 'vitest';
2+
import { MersenneTwister19937 } from '../../src/internal/mersenne';
3+
import type { Randomizer } from '../../src/randomizer';
24
import {
3-
MersenneTwister19937,
45
generateMersenne32Randomizer,
56
generateMersenne53Randomizer,
6-
} from '../../src/internal/mersenne';
7-
import type { Randomizer } from '../../src/randomizer';
7+
} from '../../src/utils/mersenne';
88
import { seededRuns } from '../support/seeded-runs';
99
import { times } from '../support/times';
1010
import {

0 commit comments

Comments
 (0)