@regardio/js 0.3.0 → 0.4.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (61) hide show
  1. package/dist/async/delay.d.ts +7 -2
  2. package/dist/async/delay.js +7 -4
  3. package/dist/browser/base64.d.ts +8 -2
  4. package/dist/browser/base64.js +12 -9
  5. package/dist/format/bytes.d.ts +3 -2
  6. package/dist/format/bytes.js +12 -9
  7. package/dist/format/measure.d.ts +3 -2
  8. package/dist/format/measure.js +14 -12
  9. package/dist/http/cookie.d.ts +15 -3
  10. package/dist/http/cookie.js +44 -43
  11. package/dist/http/domain.d.ts +9 -2
  12. package/dist/http/domain.js +15 -12
  13. package/dist/http/request-helpers.d.ts +3 -2
  14. package/dist/http/request-helpers.js +9 -6
  15. package/dist/intl/language-detector.d.ts +64 -6
  16. package/dist/intl/language-detector.js +128 -123
  17. package/dist/time/time.d.ts +8 -7
  18. package/dist/time/time.js +121 -118
  19. package/dist/validation/invariant.d.ts +34 -3
  20. package/dist/validation/invariant.js +14 -11
  21. package/dist/validation/verify-file-accept.d.ts +10 -2
  22. package/dist/validation/verify-file-accept.js +6 -3
  23. package/package.json +4 -3
  24. package/dist/async/delay.d.ts.map +0 -1
  25. package/dist/async/delay.test.d.ts +0 -2
  26. package/dist/async/delay.test.d.ts.map +0 -1
  27. package/dist/async/delay.test.js +0 -35
  28. package/dist/browser/base64.d.ts.map +0 -1
  29. package/dist/format/bytes.d.ts.map +0 -1
  30. package/dist/format/bytes.test.d.ts +0 -2
  31. package/dist/format/bytes.test.d.ts.map +0 -1
  32. package/dist/format/bytes.test.js +0 -49
  33. package/dist/format/measure.d.ts.map +0 -1
  34. package/dist/format/measure.test.d.ts +0 -2
  35. package/dist/format/measure.test.d.ts.map +0 -1
  36. package/dist/format/measure.test.js +0 -50
  37. package/dist/http/cookie.d.ts.map +0 -1
  38. package/dist/http/domain.d.ts.map +0 -1
  39. package/dist/http/domain.test.d.ts +0 -2
  40. package/dist/http/domain.test.d.ts.map +0 -1
  41. package/dist/http/domain.test.js +0 -29
  42. package/dist/http/request-helpers.d.ts.map +0 -1
  43. package/dist/http/request-helpers.test.d.ts +0 -2
  44. package/dist/http/request-helpers.test.d.ts.map +0 -1
  45. package/dist/http/request-helpers.test.js +0 -37
  46. package/dist/intl/language-detector.d.ts.map +0 -1
  47. package/dist/intl/language-detector.test.d.ts +0 -2
  48. package/dist/intl/language-detector.test.d.ts.map +0 -1
  49. package/dist/intl/language-detector.test.js +0 -186
  50. package/dist/time/time.d.ts.map +0 -1
  51. package/dist/time/time.test.d.ts +0 -2
  52. package/dist/time/time.test.d.ts.map +0 -1
  53. package/dist/time/time.test.js +0 -202
  54. package/dist/validation/invariant.d.ts.map +0 -1
  55. package/dist/validation/invariant.test.d.ts +0 -2
  56. package/dist/validation/invariant.test.d.ts.map +0 -1
  57. package/dist/validation/invariant.test.js +0 -110
  58. package/dist/validation/verify-file-accept.d.ts.map +0 -1
  59. package/dist/validation/verify-file-accept.test.d.ts +0 -2
  60. package/dist/validation/verify-file-accept.test.d.ts.map +0 -1
  61. package/dist/validation/verify-file-accept.test.js +0 -71
@@ -1 +0,0 @@
1
- {"version":3,"file":"delay.test.d.ts","sourceRoot":"","sources":["../../src/async/delay.test.ts"],"names":[],"mappings":""}
@@ -1,35 +0,0 @@
1
- import { describe, expect, test, vi } from 'vitest';
2
- import { delay } from './delay';
3
- describe('delay', () => {
4
- test('should return a promise', () => {
5
- const result = delay(0);
6
- expect(result).toBeInstanceOf(Promise);
7
- });
8
- test('should resolve after the specified time', async () => {
9
- vi.useFakeTimers();
10
- const promise = delay(100);
11
- vi.advanceTimersByTime(100);
12
- await expect(promise).resolves.toBeUndefined();
13
- vi.useRealTimers();
14
- });
15
- test('should not resolve before the specified time', async () => {
16
- vi.useFakeTimers();
17
- let resolved = false;
18
- delay(100).then(() => {
19
- resolved = true;
20
- });
21
- vi.advanceTimersByTime(50);
22
- expect(resolved).toBe(false);
23
- vi.advanceTimersByTime(50);
24
- await Promise.resolve();
25
- expect(resolved).toBe(true);
26
- vi.useRealTimers();
27
- });
28
- test('should work with 0ms delay', async () => {
29
- vi.useFakeTimers();
30
- const promise = delay(0);
31
- vi.advanceTimersByTime(0);
32
- await expect(promise).resolves.toBeUndefined();
33
- vi.useRealTimers();
34
- });
35
- });
@@ -1 +0,0 @@
1
- {"version":3,"file":"base64.d.ts","sourceRoot":"","sources":["../../src/browser/base64.ts"],"names":[],"mappings":"AAKA,eAAO,MAAM,qBAAqB,GAAI,cAAc,MAAM,KAAG,UAW5D,CAAC"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"bytes.d.ts","sourceRoot":"","sources":["../../src/format/bytes.ts"],"names":[],"mappings":"AAAA,wBAAgB,WAAW,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,SAAI,UAetD"}
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=bytes.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"bytes.test.d.ts","sourceRoot":"","sources":["../../src/format/bytes.test.ts"],"names":[],"mappings":""}
@@ -1,49 +0,0 @@
1
- import { describe, expect, test } from 'vitest';
2
- import { formatBytes } from './bytes';
3
- describe('formatBytes', () => {
4
- test('should return "0 Bytes" for 0', () => {
5
- expect(formatBytes(0)).toBe('0 Bytes');
6
- });
7
- test('should return "0 Bytes" for NaN', () => {
8
- expect(formatBytes(Number.NaN)).toBe('0 Bytes');
9
- });
10
- test('should format bytes correctly', () => {
11
- expect(formatBytes(1)).toBe('1 Bytes');
12
- expect(formatBytes(500)).toBe('500 Bytes');
13
- expect(formatBytes(999)).toBe('999 Bytes');
14
- });
15
- test('should format kilobytes correctly (base 10)', () => {
16
- expect(formatBytes(1000)).toBe('1 KB');
17
- expect(formatBytes(1500)).toBe('1.5 KB');
18
- expect(formatBytes(999000)).toBe('999 KB');
19
- });
20
- test('should format megabytes correctly', () => {
21
- expect(formatBytes(1000000)).toBe('1 MB');
22
- expect(formatBytes(1500000)).toBe('1.5 MB');
23
- expect(formatBytes(999000000)).toBe('999 MB');
24
- });
25
- test('should format gigabytes correctly', () => {
26
- expect(formatBytes(1000000000)).toBe('1 GB');
27
- expect(formatBytes(1500000000)).toBe('1.5 GB');
28
- });
29
- test('should format terabytes correctly', () => {
30
- expect(formatBytes(1000000000000)).toBe('1 TB');
31
- });
32
- test('should format petabytes correctly', () => {
33
- expect(formatBytes(1000000000000000)).toBe('1 PB');
34
- });
35
- test('should respect custom decimal places', () => {
36
- expect(formatBytes(1234, 0)).toBe('1 KB');
37
- expect(formatBytes(1234, 1)).toBe('1.2 KB');
38
- expect(formatBytes(1234, 2)).toBe('1.23 KB');
39
- expect(formatBytes(1234, 3)).toBe('1.234 KB');
40
- });
41
- test('should handle negative decimal places as 0', () => {
42
- expect(formatBytes(1234, -1)).toBe('1 KB');
43
- expect(formatBytes(1234, -5)).toBe('1 KB');
44
- });
45
- test('should handle large numbers', () => {
46
- expect(formatBytes(1e21)).toBe('1 ZB');
47
- expect(formatBytes(1e24)).toBe('1 YB');
48
- });
49
- });
@@ -1 +0,0 @@
1
- {"version":3,"file":"measure.d.ts","sourceRoot":"","sources":["../../src/format/measure.ts"],"names":[],"mappings":"AAAA,wBAAsB,OAAO,CAAC,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,mBAc1F"}
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=measure.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"measure.test.d.ts","sourceRoot":"","sources":["../../src/format/measure.test.ts"],"names":[],"mappings":""}
@@ -1,50 +0,0 @@
1
- import { afterEach, beforeEach, describe, expect, test, vi } from 'vitest';
2
- import { measure } from './measure';
3
- describe('measure', () => {
4
- beforeEach(() => {
5
- vi.spyOn(console, 'log').mockImplementation(() => { });
6
- });
7
- afterEach(() => {
8
- vi.restoreAllMocks();
9
- });
10
- test('should return the result of a synchronous callback', async () => {
11
- const result = await measure('test', () => 42);
12
- expect(result).toBe(42);
13
- });
14
- test('should return the result of an async callback', async () => {
15
- const result = await measure('test', async () => 'async result');
16
- expect(result).toBe('async result');
17
- });
18
- test('should log the execution time with the key', async () => {
19
- vi.spyOn(Date, 'now').mockReturnValueOnce(1000).mockReturnValueOnce(1050);
20
- await measure('myOperation', () => 'result');
21
- expect(console.log).toHaveBeenCalledWith('myOperation took 50ms');
22
- });
23
- test('should log even if the callback throws', async () => {
24
- vi.spyOn(Date, 'now').mockReturnValueOnce(1000).mockReturnValueOnce(1100);
25
- await expect(measure('failingOp', () => {
26
- throw new Error('test error');
27
- })).rejects.toThrow('test error');
28
- expect(console.log).toHaveBeenCalledWith('failingOp took 100ms');
29
- });
30
- test('should log even if async callback rejects', async () => {
31
- vi.spyOn(Date, 'now').mockReturnValueOnce(1000).mockReturnValueOnce(1200);
32
- await expect(measure('asyncFail', () => {
33
- return Promise.reject(new Error('async error'));
34
- })).rejects.toThrow('async error');
35
- expect(console.log).toHaveBeenCalledWith('asyncFail took 200ms');
36
- });
37
- test('should handle callbacks returning undefined', async () => {
38
- const result = await measure('voidOp', () => undefined);
39
- expect(result).toBeUndefined();
40
- });
41
- test('should handle callbacks returning null', async () => {
42
- const result = await measure('nullOp', () => null);
43
- expect(result).toBeNull();
44
- });
45
- test('should handle callbacks returning objects', async () => {
46
- const obj = { foo: 'bar', num: 123 };
47
- const result = await measure('objectOp', () => obj);
48
- expect(result).toEqual(obj);
49
- });
50
- });
@@ -1 +0,0 @@
1
- {"version":3,"file":"cookie.d.ts","sourceRoot":"","sources":["../../src/http/cookie.ts"],"names":[],"mappings":"AAMA,wBAAgB,cAAc,CAC5B,IAAI,EAAE,MAAM,EACZ,KAAK,EAAE,MAAM,EACb,OAAO,GAAE;IACP,OAAO,CAAC,EAAE,IAAI,CAAC;IACf,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,CAAC;CACZ,GACL,IAAI,CAuCN;AAOD,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAe1D"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"domain.d.ts","sourceRoot":"","sources":["../../src/http/domain.ts"],"names":[],"mappings":"AAMA,eAAO,MAAM,YAAY,GAAI,SAAS,OAAO,KAAG,MAmB/C,CAAC"}
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=domain.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"domain.test.d.ts","sourceRoot":"","sources":["../../src/http/domain.test.ts"],"names":[],"mappings":""}
@@ -1,29 +0,0 @@
1
- import { describe, expect, test } from 'vitest';
2
- import { createDomain } from './domain';
3
- describe('createDomain', () => {
4
- test('handles request behind proxy with x-forwarded-proto', () => {
5
- const request = new Request('http://example.com', {
6
- headers: {
7
- host: 'example.com',
8
- 'x-forwarded-proto': 'https',
9
- },
10
- });
11
- expect(createDomain(request)).toBe('https://example.com');
12
- });
13
- test('handles localhost development environment', () => {
14
- const request = new Request('http://localhost:3000/path');
15
- expect(createDomain(request)).toBe('http://localhost:3000');
16
- });
17
- test('handles production environment', () => {
18
- const request = new Request('https://production.com/path');
19
- expect(createDomain(request)).toBe('https://production.com');
20
- });
21
- test('uses URL host when x-forwarded-proto exists but host header is missing', () => {
22
- const request = new Request('http://example.com', {
23
- headers: {
24
- 'x-forwarded-proto': 'https',
25
- },
26
- });
27
- expect(createDomain(request)).toBe('https://example.com');
28
- });
29
- });
@@ -1 +0,0 @@
1
- {"version":3,"file":"request-helpers.d.ts","sourceRoot":"","sources":["../../src/http/request-helpers.ts"],"names":[],"mappings":"AAAA,wBAAgB,WAAW,CAAC,OAAO,EAAE,OAAO,UAQ3C"}
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=request-helpers.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"request-helpers.test.d.ts","sourceRoot":"","sources":["../../src/http/request-helpers.test.ts"],"names":[],"mappings":""}
@@ -1,37 +0,0 @@
1
- import { describe, expect, test } from 'vitest';
2
- import { getCleanUrl } from './request-helpers';
3
- describe('getCleanUrl', () => {
4
- test('should return URL without search params', () => {
5
- const request = new Request('https://example.com/path?foo=bar');
6
- expect(getCleanUrl(request)).toBe('https://example.com/path');
7
- });
8
- test('should return URL unchanged if no search params', () => {
9
- const request = new Request('https://example.com/path');
10
- expect(getCleanUrl(request)).toBe('https://example.com/path');
11
- });
12
- test('should preserve the path', () => {
13
- const request = new Request('https://example.com/some/deep/path?param=value');
14
- expect(getCleanUrl(request)).toBe('https://example.com/some/deep/path');
15
- });
16
- test('should preserve the hash', () => {
17
- const request = new Request('https://example.com/path?foo=bar#section');
18
- const result = getCleanUrl(request);
19
- expect(result).toBe('https://example.com/path#section');
20
- });
21
- test('should handle root path', () => {
22
- const request = new Request('https://example.com/?foo=bar');
23
- expect(getCleanUrl(request)).toBe('https://example.com/');
24
- });
25
- test('should handle multiple search params', () => {
26
- const request = new Request('https://example.com/page?a=1&a=2&a=3');
27
- expect(getCleanUrl(request)).toBe('https://example.com/page');
28
- });
29
- test('should handle URL with port', () => {
30
- const request = new Request('https://example.com:8080/path?foo=bar');
31
- expect(getCleanUrl(request)).toBe('https://example.com:8080/path');
32
- });
33
- test('should handle localhost', () => {
34
- const request = new Request('http://localhost:3000/api?debug=true');
35
- expect(getCleanUrl(request)).toBe('http://localhost:3000/api');
36
- });
37
- });
@@ -1 +0,0 @@
1
- {"version":3,"file":"language-detector.d.ts","sourceRoot":"","sources":["../../src/intl/language-detector.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAE3D,MAAM,WAAW,sBAAsB;IAMrC,kBAAkB,EAAE,MAAM,EAAE,CAAC;IAM7B,gBAAgB,EAAE,MAAM,CAAC;IAKzB,MAAM,CAAC,EAAE,MAAM,CAAC;IAMhB,cAAc,CAAC,EAAE,cAAc,CAAC;IAMhC,UAAU,CAAC,EAAE,MAAM,CAAC;IAOpB,cAAc,CAAC,EAAE,MAAM,CAAC;IAWxB,KAAK,CAAC,EAAE,KAAK,CAAC,SAAS,GAAG,cAAc,GAAG,QAAQ,GAAG,SAAS,GAAG,QAAQ,CAAC,CAAC;CAC7E;AAED,MAAM,WAAW,6BAA6B;IAC5C,SAAS,EAAE,sBAAsB,CAAC;CACnC;AAED,qBAAa,sBAAsB;IACjC,OAAO,CAAC,QAAQ,CAAmB;IACnC,OAAO,CAAC,OAAO,CAAgC;gBAEnC,OAAO,EAAE,6BAA6B;IAgBrC,SAAS,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,MAAM,CAAC;CAG1D;AAOD,qBAAa,gBAAgB;IAC3B,OAAO,CAAC,OAAO,CAAyB;gBAE5B,OAAO,EAAE,sBAAsB;IAM9B,MAAM,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,MAAM,CAAC;IAgCtD,OAAO,CAAC,aAAa;IAQrB,OAAO,CAAC,YAAY;IAMpB,OAAO,CAAC,WAAW;IAenB,OAAO,CAAC,gBAAgB;YAQV,UAAU;YAcV,kBAAkB;IAYhC,OAAO,CAAC,UAAU;IAUlB,OAAO,CAAC,aAAa;CAYtB"}
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=language-detector.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"language-detector.test.d.ts","sourceRoot":"","sources":["../../src/intl/language-detector.test.ts"],"names":[],"mappings":""}
@@ -1,186 +0,0 @@
1
- import { describe, expect, test, vi } from 'vitest';
2
- import { LanguageDetector, LanguageDetectorLingui } from './language-detector';
3
- describe('LanguageDetector', () => {
4
- const defaultOptions = {
5
- fallbackLanguage: 'en',
6
- supportedLanguages: ['en', 'de'],
7
- };
8
- describe('detect', () => {
9
- test('should detect language from search params', async () => {
10
- const detector = new LanguageDetector(defaultOptions);
11
- const request = new Request('https://example.com?lng=de');
12
- const language = await detector.detect(request);
13
- expect(language).toBe('de');
14
- });
15
- test('should detect language from cookie', async () => {
16
- const mockCookie = {
17
- isSigned: false,
18
- name: 'lng',
19
- parse: vi.fn(() => Promise.resolve('de')),
20
- secrets: ['secret'],
21
- serialize: vi.fn(() => Promise.resolve('serialized-cookie')),
22
- };
23
- const detector = new LanguageDetector({
24
- ...defaultOptions,
25
- cookie: mockCookie,
26
- });
27
- const request = new Request('https://example.com', {
28
- headers: {
29
- cookie: 'lng=de',
30
- },
31
- });
32
- const language = await detector.detect(request);
33
- expect(language).toBe('de');
34
- });
35
- test('should detect language from session', async () => {
36
- const mockSession = {
37
- commitSession: vi.fn(() => Promise.resolve('')),
38
- destroySession: vi.fn(() => Promise.resolve('')),
39
- getSession: vi.fn(() => Promise.resolve({
40
- data: { lng: 'de' },
41
- flash: vi.fn(() => { }),
42
- get: (key) => (key === 'lng' ? 'de' : undefined),
43
- has: (key) => key === 'lng',
44
- id: '123',
45
- set: vi.fn(() => { }),
46
- unset: vi.fn(() => { }),
47
- })),
48
- };
49
- const detector = new LanguageDetector({
50
- ...defaultOptions,
51
- sessionStorage: mockSession,
52
- });
53
- const request = new Request('https://example.com');
54
- const language = await detector.detect(request);
55
- expect(language).toBe('de');
56
- });
57
- test('should detect language from Accept-Language header', async () => {
58
- const detector = new LanguageDetector(defaultOptions);
59
- const request = new Request('https://example.com', {
60
- headers: {
61
- 'accept-language': 'de,en;q=0.9,en;q=0.8',
62
- },
63
- });
64
- const language = await detector.detect(request);
65
- expect(language).toBe('de');
66
- });
67
- test('should fall back to default language when no supported language is found', async () => {
68
- const detector = new LanguageDetector(defaultOptions);
69
- const request = new Request('https://example.com', {
70
- headers: {
71
- 'accept-language': 'fr-FR,es-ES;q=0.9',
72
- },
73
- });
74
- const language = await detector.detect(request);
75
- expect(language).toBe('en');
76
- });
77
- test('should handle cookie parsing error', async () => {
78
- const mockCookie = {
79
- isSigned: false,
80
- name: 'lng',
81
- parse: vi.fn(() => Promise.reject(new Error('Cookie parsing failed'))),
82
- secrets: ['secret'],
83
- serialize: vi.fn(() => Promise.resolve('serialized-cookie')),
84
- };
85
- const detector = new LanguageDetector({
86
- ...defaultOptions,
87
- cookie: mockCookie,
88
- });
89
- const request = new Request('https://example.com', {
90
- headers: {
91
- cookie: 'lng=de',
92
- },
93
- });
94
- const language = await detector.detect(request);
95
- expect(language).toBe('en');
96
- });
97
- test('should handle multiple language preferences in session', async () => {
98
- const mockSession = {
99
- commitSession: vi.fn(() => Promise.resolve('')),
100
- destroySession: vi.fn(() => Promise.resolve('')),
101
- getSession: vi.fn(() => Promise.resolve({
102
- data: { lng: ['de', 'en'] },
103
- flash: vi.fn(() => { }),
104
- get: (key) => (key === 'lng' ? ['de', 'en'] : undefined),
105
- has: (key) => key === 'lng',
106
- id: '123',
107
- set: vi.fn(() => { }),
108
- unset: vi.fn(() => { }),
109
- })),
110
- };
111
- const detector = new LanguageDetector({
112
- ...defaultOptions,
113
- sessionStorage: mockSession,
114
- });
115
- const request = new Request('https://example.com');
116
- const language = await detector.detect(request);
117
- expect(language).toBe('de');
118
- });
119
- test('should handle invalid language code in search params', async () => {
120
- const detector = new LanguageDetector(defaultOptions);
121
- const request = new Request('https://example.com?lng=invalid-code');
122
- const language = await detector.detect(request);
123
- expect(language).toBe('en');
124
- });
125
- });
126
- describe('language detection from header', () => {
127
- test('should return first supported language from Accept-Language header', async () => {
128
- const detector = new LanguageDetector(defaultOptions);
129
- const request = new Request('https://example.com', {
130
- headers: {
131
- 'accept-language': 'fr-FR,de;q=0.9,en;q=0.8',
132
- },
133
- });
134
- const language = await detector.detect(request);
135
- expect(language).toBe('de');
136
- });
137
- test('should return fallback language when no supported language in header', async () => {
138
- const detector = new LanguageDetector(defaultOptions);
139
- const request = new Request('https://example.com', {
140
- headers: {
141
- 'accept-language': 'fr-FR,es-ES;q=0.9',
142
- },
143
- });
144
- const language = await detector.detect(request);
145
- expect(language).toBe(defaultOptions.fallbackLanguage);
146
- });
147
- });
148
- describe('language detection from search params', () => {
149
- test('should return language from URL search params', async () => {
150
- const detector = new LanguageDetector(defaultOptions);
151
- const request = new Request('https://example.com?lng=de');
152
- const language = await detector.detect(request);
153
- expect(language).toBe('de');
154
- });
155
- test('should return fallback language when no language param exists', async () => {
156
- const detector = new LanguageDetector(defaultOptions);
157
- const request = new Request('https://example.com');
158
- const language = await detector.detect(request);
159
- expect(language).toBe(defaultOptions.fallbackLanguage);
160
- });
161
- });
162
- });
163
- describe('LanguageDetectorLingui', () => {
164
- const defaultOptions = {
165
- detection: {
166
- fallbackLanguage: 'en',
167
- supportedLanguages: ['en', 'de'],
168
- },
169
- };
170
- test('should detect language using underlying LanguageDetector', async () => {
171
- const detector = new LanguageDetectorLingui(defaultOptions);
172
- const request = new Request('https://example.com?lng=de');
173
- const language = await detector.getLocale(request);
174
- expect(language).toBe('de');
175
- });
176
- test('should fall back to default language when no supported language found', async () => {
177
- const detector = new LanguageDetectorLingui(defaultOptions);
178
- const request = new Request('https://example.com', {
179
- headers: {
180
- 'accept-language': 'fr-FR,es-ES;q=0.9',
181
- },
182
- });
183
- const language = await detector.getLocale(request);
184
- expect(language).toBe('en');
185
- });
186
- });
@@ -1 +0,0 @@
1
- {"version":3,"file":"time.d.ts","sourceRoot":"","sources":["../../src/time/time.ts"],"names":[],"mappings":"AAEA,wBAAgB,OAAO,CAAC,KAAK,EAAE,IAAI,GAAG,MAAM,UAuB3C;AAED,eAAO,MAAM,cAAc,YAI1B,CAAC;AAEF,eAAO,MAAM,aAAa,YAIzB,CAAC;AAEF,eAAO,MAAM,gBAAgB,YAI5B,CAAC;AAEF,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,UAAQ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;SA4GrF;AAED,eAAO,MAAM,cAAc,GAAI,MAAM,MAAM,WAE1C,CAAC"}
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=time.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"time.test.d.ts","sourceRoot":"","sources":["../../src/time/time.test.ts"],"names":[],"mappings":""}