@akinon/next 1.92.0-rc.25 → 1.92.0-rc.26
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.
- package/CHANGELOG.md +6 -0
- package/__tests__/next-config.test.ts +1 -10
- package/__tests__/redirect.test.ts +432 -0
- package/jest.config.js +8 -2
- package/package.json +2 -2
package/CHANGELOG.md
CHANGED
|
@@ -1,15 +1,6 @@
|
|
|
1
1
|
import { resolve } from 'path';
|
|
2
2
|
import type { NextConfig } from 'next';
|
|
3
|
-
|
|
4
|
-
function findBaseDir() {
|
|
5
|
-
const insideNodeModules = __dirname.includes('node_modules');
|
|
6
|
-
|
|
7
|
-
if (insideNodeModules) {
|
|
8
|
-
return resolve(__dirname, '../../../../');
|
|
9
|
-
} else {
|
|
10
|
-
return resolve(__dirname, '../../../apps/projectzeronext');
|
|
11
|
-
}
|
|
12
|
-
}
|
|
3
|
+
import findBaseDir from '../utils/find-base-dir';
|
|
13
4
|
|
|
14
5
|
const baseDir = findBaseDir();
|
|
15
6
|
|
|
@@ -0,0 +1,432 @@
|
|
|
1
|
+
import * as fs from 'fs';
|
|
2
|
+
import * as path from 'path';
|
|
3
|
+
|
|
4
|
+
const mockNextRedirect = jest.fn();
|
|
5
|
+
const mockHeaders = jest.fn();
|
|
6
|
+
|
|
7
|
+
function findBaseDir() {
|
|
8
|
+
const insideNodeModules = __dirname.includes('node_modules');
|
|
9
|
+
|
|
10
|
+
if (insideNodeModules) {
|
|
11
|
+
return path.resolve(__dirname, '../../../../');
|
|
12
|
+
} else {
|
|
13
|
+
return path.resolve(__dirname, '../../../apps/projectzeronext');
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
jest.mock(
|
|
18
|
+
'@theme/routes',
|
|
19
|
+
() => ({
|
|
20
|
+
ROUTES: {
|
|
21
|
+
AUTH: '/auth',
|
|
22
|
+
BASKET: '/basket',
|
|
23
|
+
ACCOUNT_ORDERS: '/account/orders'
|
|
24
|
+
}
|
|
25
|
+
}),
|
|
26
|
+
{ virtual: true }
|
|
27
|
+
);
|
|
28
|
+
|
|
29
|
+
jest.mock('next/navigation', () => ({
|
|
30
|
+
redirect: mockNextRedirect,
|
|
31
|
+
RedirectType: {
|
|
32
|
+
replace: 'replace',
|
|
33
|
+
push: 'push'
|
|
34
|
+
}
|
|
35
|
+
}));
|
|
36
|
+
|
|
37
|
+
jest.mock('next/headers', () => ({
|
|
38
|
+
headers: () => mockHeaders()
|
|
39
|
+
}));
|
|
40
|
+
|
|
41
|
+
const mockServerVariables = {
|
|
42
|
+
locale: 'en' as string | undefined
|
|
43
|
+
};
|
|
44
|
+
|
|
45
|
+
jest.mock('@akinon/next/utils/server-variables', () => ({
|
|
46
|
+
ServerVariables: mockServerVariables
|
|
47
|
+
}));
|
|
48
|
+
|
|
49
|
+
jest.mock('@akinon/next/utils', () => ({
|
|
50
|
+
urlLocaleMatcherRegex: /^\/(?:tr|ar)(?=\/|$)/
|
|
51
|
+
}));
|
|
52
|
+
|
|
53
|
+
describe('Redirect utility functional tests', () => {
|
|
54
|
+
let redirect: any;
|
|
55
|
+
let getUrlPathWithLocale: any;
|
|
56
|
+
let LocaleUrlStrategy: any;
|
|
57
|
+
|
|
58
|
+
beforeAll(async () => {
|
|
59
|
+
const localizationModule = await import('@akinon/next/localization');
|
|
60
|
+
LocaleUrlStrategy = localizationModule.LocaleUrlStrategy;
|
|
61
|
+
|
|
62
|
+
const redirectModule = await import('@akinon/next/utils/redirect');
|
|
63
|
+
redirect = redirectModule.redirect;
|
|
64
|
+
|
|
65
|
+
const localizationUtilsModule = await import(
|
|
66
|
+
'@akinon/next/utils/localization'
|
|
67
|
+
);
|
|
68
|
+
getUrlPathWithLocale = localizationUtilsModule.getUrlPathWithLocale;
|
|
69
|
+
});
|
|
70
|
+
|
|
71
|
+
beforeEach(() => {
|
|
72
|
+
jest.clearAllMocks();
|
|
73
|
+
process.env.NEXT_PUBLIC_URL = 'https://example.com';
|
|
74
|
+
|
|
75
|
+
mockServerVariables.locale = 'en';
|
|
76
|
+
});
|
|
77
|
+
|
|
78
|
+
describe('getUrlPathWithLocale functional tests', () => {
|
|
79
|
+
describe('Actual behavior testing', () => {
|
|
80
|
+
it('should test actual function behavior with real inputs', () => {
|
|
81
|
+
const result1 = getUrlPathWithLocale('/login', 'en');
|
|
82
|
+
const result2 = getUrlPathWithLocale('/login', 'tr');
|
|
83
|
+
const result3 = getUrlPathWithLocale('/login', undefined);
|
|
84
|
+
|
|
85
|
+
expect(result1).toBe('/login');
|
|
86
|
+
expect(result2).toBe('/tr/login');
|
|
87
|
+
expect(result3).toBe('/login');
|
|
88
|
+
});
|
|
89
|
+
|
|
90
|
+
it('should handle complex paths with locale prefixes', () => {
|
|
91
|
+
const result1 = getUrlPathWithLocale('/account/orders/123', 'en');
|
|
92
|
+
const result2 = getUrlPathWithLocale('/account/orders/123', 'tr');
|
|
93
|
+
const result3 = getUrlPathWithLocale('/account/orders/123', 'ar');
|
|
94
|
+
|
|
95
|
+
expect(result1).toBe('/account/orders/123');
|
|
96
|
+
expect(result2).toBe('/tr/account/orders/123');
|
|
97
|
+
expect(result3).toBe('/ar/account/orders/123');
|
|
98
|
+
});
|
|
99
|
+
|
|
100
|
+
it('should fallback to default locale behavior when currentLocale is undefined', () => {
|
|
101
|
+
const result = getUrlPathWithLocale('/dashboard', undefined);
|
|
102
|
+
expect(result).toBe('/dashboard');
|
|
103
|
+
});
|
|
104
|
+
|
|
105
|
+
it('should handle empty paths correctly', () => {
|
|
106
|
+
const result1 = getUrlPathWithLocale('/', 'en');
|
|
107
|
+
const result2 = getUrlPathWithLocale('/', 'tr');
|
|
108
|
+
|
|
109
|
+
expect(result1).toBe('/');
|
|
110
|
+
expect(result2).toBe('/tr/');
|
|
111
|
+
});
|
|
112
|
+
|
|
113
|
+
it('should handle paths with query parameters', () => {
|
|
114
|
+
const result1 = getUrlPathWithLocale('/search?q=test', 'en');
|
|
115
|
+
const result2 = getUrlPathWithLocale('/search?q=test', 'tr');
|
|
116
|
+
|
|
117
|
+
expect(result1).toBe('/search?q=test');
|
|
118
|
+
expect(result2).toBe('/tr/search?q=test');
|
|
119
|
+
});
|
|
120
|
+
});
|
|
121
|
+
});
|
|
122
|
+
|
|
123
|
+
describe('URL locale matcher regex behavior', () => {
|
|
124
|
+
const urlLocaleMatcherRegex = /^\/(?:tr|ar)(?=\/|$)/;
|
|
125
|
+
|
|
126
|
+
it('should match non-default locale prefixes', () => {
|
|
127
|
+
expect(urlLocaleMatcherRegex.test('/tr/profile')).toBe(true);
|
|
128
|
+
expect(urlLocaleMatcherRegex.test('/ar/dashboard')).toBe(true);
|
|
129
|
+
});
|
|
130
|
+
|
|
131
|
+
it('should not match default locale or paths without locale', () => {
|
|
132
|
+
expect(urlLocaleMatcherRegex.test('/en/profile')).toBe(false);
|
|
133
|
+
expect(urlLocaleMatcherRegex.test('/profile')).toBe(false);
|
|
134
|
+
expect(urlLocaleMatcherRegex.test('/dashboard')).toBe(false);
|
|
135
|
+
});
|
|
136
|
+
|
|
137
|
+
it('should match locale at start of path only', () => {
|
|
138
|
+
expect(urlLocaleMatcherRegex.test('/tr/some/path')).toBe(true);
|
|
139
|
+
expect(urlLocaleMatcherRegex.test('/tr')).toBe(true);
|
|
140
|
+
expect(urlLocaleMatcherRegex.test('/some/tr/path')).toBe(false);
|
|
141
|
+
});
|
|
142
|
+
|
|
143
|
+
it('should handle callback URL extraction correctly', () => {
|
|
144
|
+
const testPaths = [
|
|
145
|
+
{ input: '/tr/profile', expected: '/profile' },
|
|
146
|
+
{ input: '/ar/dashboard/settings', expected: '/dashboard/settings' },
|
|
147
|
+
{ input: '/profile', expected: '/profile' },
|
|
148
|
+
{ input: '/en/profile', expected: '/en/profile' }
|
|
149
|
+
];
|
|
150
|
+
|
|
151
|
+
testPaths.forEach(({ input, expected }) => {
|
|
152
|
+
const result = input.replace(urlLocaleMatcherRegex, '');
|
|
153
|
+
expect(result).toBe(expected);
|
|
154
|
+
});
|
|
155
|
+
});
|
|
156
|
+
});
|
|
157
|
+
|
|
158
|
+
describe('redirect function behavior', () => {
|
|
159
|
+
describe('Default locale strategy tests', () => {
|
|
160
|
+
beforeEach(() => {
|
|
161
|
+
mockServerVariables.locale = 'en';
|
|
162
|
+
});
|
|
163
|
+
|
|
164
|
+
it('should redirect with correct URL for default locale', () => {
|
|
165
|
+
mockHeaders.mockReturnValue(
|
|
166
|
+
new Map([['pz-url', 'https://example.com/profile']])
|
|
167
|
+
);
|
|
168
|
+
|
|
169
|
+
redirect('/login');
|
|
170
|
+
|
|
171
|
+
expect(mockNextRedirect).toHaveBeenCalledWith(
|
|
172
|
+
'/login?callbackUrl=/profile'
|
|
173
|
+
);
|
|
174
|
+
});
|
|
175
|
+
|
|
176
|
+
it('should redirect with locale handling for non-default locale', () => {
|
|
177
|
+
mockServerVariables.locale = 'tr';
|
|
178
|
+
mockHeaders.mockReturnValue(
|
|
179
|
+
new Map([['pz-url', 'https://example.com/tr/profile']])
|
|
180
|
+
);
|
|
181
|
+
|
|
182
|
+
redirect('/login');
|
|
183
|
+
|
|
184
|
+
expect(mockNextRedirect).toHaveBeenCalledWith(
|
|
185
|
+
'/tr/login?callbackUrl=/profile'
|
|
186
|
+
);
|
|
187
|
+
});
|
|
188
|
+
|
|
189
|
+
it('should extract callback URL correctly removing locale prefix', () => {
|
|
190
|
+
mockServerVariables.locale = 'tr';
|
|
191
|
+
mockHeaders.mockReturnValue(
|
|
192
|
+
new Map([['pz-url', 'https://example.com/tr/dashboard/settings']])
|
|
193
|
+
);
|
|
194
|
+
|
|
195
|
+
redirect('/auth');
|
|
196
|
+
|
|
197
|
+
expect(mockNextRedirect).toHaveBeenCalledWith(
|
|
198
|
+
'/tr/auth?callbackUrl=/dashboard/settings'
|
|
199
|
+
);
|
|
200
|
+
});
|
|
201
|
+
|
|
202
|
+
it('should handle Arabic RTL locale correctly', () => {
|
|
203
|
+
mockServerVariables.locale = 'ar';
|
|
204
|
+
mockHeaders.mockReturnValue(
|
|
205
|
+
new Map([['pz-url', 'https://example.com/ar/products/123']])
|
|
206
|
+
);
|
|
207
|
+
|
|
208
|
+
redirect('/checkout');
|
|
209
|
+
|
|
210
|
+
expect(mockNextRedirect).toHaveBeenCalledWith(
|
|
211
|
+
'/checkout?callbackUrl=/products/123'
|
|
212
|
+
);
|
|
213
|
+
});
|
|
214
|
+
|
|
215
|
+
it('should preserve complex callback URLs', () => {
|
|
216
|
+
mockServerVariables.locale = 'tr';
|
|
217
|
+
mockHeaders.mockReturnValue(
|
|
218
|
+
new Map([
|
|
219
|
+
['pz-url', 'https://example.com/tr/account/orders/123/details']
|
|
220
|
+
])
|
|
221
|
+
);
|
|
222
|
+
|
|
223
|
+
redirect('/auth/login');
|
|
224
|
+
|
|
225
|
+
expect(mockNextRedirect).toHaveBeenCalledWith(
|
|
226
|
+
'/tr/auth/login?callbackUrl=/account/orders/123/details'
|
|
227
|
+
);
|
|
228
|
+
});
|
|
229
|
+
});
|
|
230
|
+
|
|
231
|
+
describe('Redirect type handling', () => {
|
|
232
|
+
beforeEach(() => {
|
|
233
|
+
mockHeaders.mockReturnValue(
|
|
234
|
+
new Map([['pz-url', 'https://example.com/profile']])
|
|
235
|
+
);
|
|
236
|
+
});
|
|
237
|
+
|
|
238
|
+
it('should pass RedirectType when provided', () => {
|
|
239
|
+
const { RedirectType } = require('next/navigation');
|
|
240
|
+
|
|
241
|
+
redirect('/login', RedirectType.replace);
|
|
242
|
+
|
|
243
|
+
expect(mockNextRedirect).toHaveBeenCalledTimes(1);
|
|
244
|
+
const [redirectUrl, type] = mockNextRedirect.mock.calls[0];
|
|
245
|
+
expect(redirectUrl).toContain('/login');
|
|
246
|
+
expect(type).toBe(RedirectType.replace);
|
|
247
|
+
});
|
|
248
|
+
|
|
249
|
+
it('should call redirect without type when not provided', () => {
|
|
250
|
+
redirect('/login');
|
|
251
|
+
|
|
252
|
+
expect(mockNextRedirect).toHaveBeenCalledTimes(1);
|
|
253
|
+
const args = mockNextRedirect.mock.calls[0];
|
|
254
|
+
expect(args.length).toBe(1);
|
|
255
|
+
});
|
|
256
|
+
});
|
|
257
|
+
|
|
258
|
+
describe('Error handling and edge cases', () => {
|
|
259
|
+
it('should handle missing pz-url header with env fallback', () => {
|
|
260
|
+
mockHeaders.mockReturnValue(new Map());
|
|
261
|
+
process.env.NEXT_PUBLIC_URL = 'https://fallback.com/some/path';
|
|
262
|
+
|
|
263
|
+
redirect('/login');
|
|
264
|
+
|
|
265
|
+
expect(mockNextRedirect).toHaveBeenCalledWith(
|
|
266
|
+
'/login?callbackUrl=/some/path'
|
|
267
|
+
);
|
|
268
|
+
});
|
|
269
|
+
|
|
270
|
+
it('should handle completely missing URL sources gracefully', () => {
|
|
271
|
+
mockHeaders.mockReturnValue(new Map());
|
|
272
|
+
const originalEnv = process.env.NEXT_PUBLIC_URL;
|
|
273
|
+
delete process.env.NEXT_PUBLIC_URL;
|
|
274
|
+
|
|
275
|
+
expect(() => {
|
|
276
|
+
redirect('/login');
|
|
277
|
+
}).toThrow('Invalid URL');
|
|
278
|
+
|
|
279
|
+
process.env.NEXT_PUBLIC_URL = originalEnv;
|
|
280
|
+
});
|
|
281
|
+
|
|
282
|
+
it('should handle undefined locale gracefully', () => {
|
|
283
|
+
mockServerVariables.locale = undefined;
|
|
284
|
+
mockHeaders.mockReturnValue(
|
|
285
|
+
new Map([['pz-url', 'https://example.com/profile']])
|
|
286
|
+
);
|
|
287
|
+
|
|
288
|
+
redirect('/login');
|
|
289
|
+
|
|
290
|
+
expect(mockNextRedirect).toHaveBeenCalledWith(
|
|
291
|
+
'/login?callbackUrl=/profile'
|
|
292
|
+
);
|
|
293
|
+
});
|
|
294
|
+
|
|
295
|
+
it('should handle invalid locale gracefully', () => {
|
|
296
|
+
mockServerVariables.locale = 'invalid-locale';
|
|
297
|
+
mockHeaders.mockReturnValue(
|
|
298
|
+
new Map([['pz-url', 'https://example.com/profile']])
|
|
299
|
+
);
|
|
300
|
+
|
|
301
|
+
redirect('/login');
|
|
302
|
+
|
|
303
|
+
expect(mockNextRedirect).toHaveBeenCalledWith(
|
|
304
|
+
'/login?callbackUrl=/profile'
|
|
305
|
+
);
|
|
306
|
+
});
|
|
307
|
+
|
|
308
|
+
it('should strip query parameters from callback URL', () => {
|
|
309
|
+
mockHeaders.mockReturnValue(
|
|
310
|
+
new Map([
|
|
311
|
+
['pz-url', 'https://example.com/profile?tab=settings&view=list']
|
|
312
|
+
])
|
|
313
|
+
);
|
|
314
|
+
|
|
315
|
+
redirect('/login');
|
|
316
|
+
|
|
317
|
+
expect(mockNextRedirect).toHaveBeenCalledWith(
|
|
318
|
+
'/login?callbackUrl=/profile'
|
|
319
|
+
);
|
|
320
|
+
});
|
|
321
|
+
|
|
322
|
+
it('should strip fragments from callback URL', () => {
|
|
323
|
+
mockHeaders.mockReturnValue(
|
|
324
|
+
new Map([['pz-url', 'https://example.com/profile#section']])
|
|
325
|
+
);
|
|
326
|
+
|
|
327
|
+
redirect('/login');
|
|
328
|
+
|
|
329
|
+
expect(mockNextRedirect).toHaveBeenCalledWith(
|
|
330
|
+
'/login?callbackUrl=/profile'
|
|
331
|
+
);
|
|
332
|
+
});
|
|
333
|
+
|
|
334
|
+
it('should handle URL with both query params and fragments', () => {
|
|
335
|
+
mockHeaders.mockReturnValue(
|
|
336
|
+
new Map([['pz-url', 'https://example.com/profile?tab=orders#recent']])
|
|
337
|
+
);
|
|
338
|
+
|
|
339
|
+
redirect('/auth');
|
|
340
|
+
|
|
341
|
+
expect(mockNextRedirect).toHaveBeenCalledWith(
|
|
342
|
+
'/auth?callbackUrl=/profile'
|
|
343
|
+
);
|
|
344
|
+
});
|
|
345
|
+
});
|
|
346
|
+
});
|
|
347
|
+
|
|
348
|
+
describe('Integration scenarios', () => {
|
|
349
|
+
it('should handle complete flow with non-default locale and complex path', () => {
|
|
350
|
+
mockServerVariables.locale = 'tr';
|
|
351
|
+
mockHeaders.mockReturnValue(
|
|
352
|
+
new Map([['pz-url', 'https://example.com/tr/account/orders/123']])
|
|
353
|
+
);
|
|
354
|
+
|
|
355
|
+
redirect('/auth/login');
|
|
356
|
+
|
|
357
|
+
expect(mockNextRedirect).toHaveBeenCalledWith(
|
|
358
|
+
'/tr/auth/login?callbackUrl=/account/orders/123'
|
|
359
|
+
);
|
|
360
|
+
});
|
|
361
|
+
|
|
362
|
+
it('should handle RTL locale with deep nested paths', () => {
|
|
363
|
+
mockServerVariables.locale = 'ar';
|
|
364
|
+
mockHeaders.mockReturnValue(
|
|
365
|
+
new Map([
|
|
366
|
+
[
|
|
367
|
+
'pz-url',
|
|
368
|
+
'https://example.com/ar/products/category/electronics/item/456'
|
|
369
|
+
]
|
|
370
|
+
])
|
|
371
|
+
);
|
|
372
|
+
|
|
373
|
+
redirect('/auth');
|
|
374
|
+
|
|
375
|
+
expect(mockNextRedirect).toHaveBeenCalledWith(
|
|
376
|
+
'/auth?callbackUrl=/products/category/electronics/item/456'
|
|
377
|
+
);
|
|
378
|
+
});
|
|
379
|
+
|
|
380
|
+
it('should handle default locale with no prefix in callback', () => {
|
|
381
|
+
mockServerVariables.locale = 'en';
|
|
382
|
+
mockHeaders.mockReturnValue(
|
|
383
|
+
new Map([['pz-url', 'https://example.com/checkout/payment']])
|
|
384
|
+
);
|
|
385
|
+
|
|
386
|
+
redirect('/auth/login');
|
|
387
|
+
|
|
388
|
+
expect(mockNextRedirect).toHaveBeenCalledWith(
|
|
389
|
+
'/auth/login?callbackUrl=/checkout/payment'
|
|
390
|
+
);
|
|
391
|
+
});
|
|
392
|
+
|
|
393
|
+
it('should handle complex URLs with mixed locale scenarios', () => {
|
|
394
|
+
mockServerVariables.locale = 'tr';
|
|
395
|
+
mockHeaders.mockReturnValue(
|
|
396
|
+
new Map([
|
|
397
|
+
[
|
|
398
|
+
'pz-url',
|
|
399
|
+
'https://subdomain.example.com/tr/user/dashboard?section=profile&tab=settings#preferences'
|
|
400
|
+
]
|
|
401
|
+
])
|
|
402
|
+
);
|
|
403
|
+
|
|
404
|
+
redirect('/verify-account');
|
|
405
|
+
|
|
406
|
+
expect(mockNextRedirect).toHaveBeenCalledWith(
|
|
407
|
+
'/tr/verify-account?callbackUrl=/user/dashboard'
|
|
408
|
+
);
|
|
409
|
+
});
|
|
410
|
+
});
|
|
411
|
+
|
|
412
|
+
it('should verify redirect utility file exists and has expected structure', () => {
|
|
413
|
+
const baseDir = findBaseDir();
|
|
414
|
+
const insideNodeModules = __dirname.includes('node_modules');
|
|
415
|
+
|
|
416
|
+
let redirectFilePath;
|
|
417
|
+
if (insideNodeModules) {
|
|
418
|
+
redirectFilePath = path.resolve(__dirname, '../utils/redirect.ts');
|
|
419
|
+
} else {
|
|
420
|
+
redirectFilePath = path.resolve(
|
|
421
|
+
baseDir,
|
|
422
|
+
'../../packages/akinon-next/utils/redirect.ts'
|
|
423
|
+
);
|
|
424
|
+
}
|
|
425
|
+
|
|
426
|
+
const redirectFileContent = fs.readFileSync(redirectFilePath, 'utf8');
|
|
427
|
+
|
|
428
|
+
expect(redirectFileContent.includes('export const redirect')).toBe(true);
|
|
429
|
+
expect(redirectFileContent.includes('getUrlPathWithLocale')).toBe(true);
|
|
430
|
+
expect(redirectFileContent.includes('callbackUrl')).toBe(true);
|
|
431
|
+
});
|
|
432
|
+
});
|
package/jest.config.js
CHANGED
|
@@ -1,13 +1,19 @@
|
|
|
1
1
|
const path = require('path');
|
|
2
|
+
const findBaseDir = require('./utils/find-base-dir');
|
|
3
|
+
|
|
4
|
+
const baseDir = findBaseDir();
|
|
2
5
|
|
|
3
6
|
module.exports = {
|
|
4
7
|
preset: 'ts-jest',
|
|
5
8
|
testEnvironment: 'node',
|
|
6
9
|
rootDir: path.resolve(__dirname),
|
|
7
|
-
|
|
8
|
-
testMatch: ['**/*.test.ts'],
|
|
10
|
+
testMatch: ['**/__tests__/**/*.test.ts'],
|
|
9
11
|
testPathIgnorePatterns: [],
|
|
12
|
+
roots: [],
|
|
10
13
|
transformIgnorePatterns: [],
|
|
14
|
+
moduleNameMapper: {
|
|
15
|
+
'^settings$': path.resolve(baseDir, 'src/settings.js')
|
|
16
|
+
},
|
|
11
17
|
transform: {
|
|
12
18
|
'^.+\\.(tsx?|jsx?|mjs?)$': [
|
|
13
19
|
'ts-jest',
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@akinon/next",
|
|
3
3
|
"description": "Core package for Project Zero Next",
|
|
4
|
-
"version": "1.92.0-rc.
|
|
4
|
+
"version": "1.92.0-rc.26",
|
|
5
5
|
"private": false,
|
|
6
6
|
"license": "MIT",
|
|
7
7
|
"bin": {
|
|
@@ -34,7 +34,7 @@
|
|
|
34
34
|
"set-cookie-parser": "2.6.0"
|
|
35
35
|
},
|
|
36
36
|
"devDependencies": {
|
|
37
|
-
"@akinon/eslint-plugin-projectzero": "1.92.0-rc.
|
|
37
|
+
"@akinon/eslint-plugin-projectzero": "1.92.0-rc.26",
|
|
38
38
|
"@babel/core": "7.26.10",
|
|
39
39
|
"@babel/preset-env": "7.26.9",
|
|
40
40
|
"@babel/preset-typescript": "7.27.0",
|