@payloadcms/translations 4.0.0-internal.e7d4ebc → 4.0.0-internal.ea6e8f8
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/dist/clientKeys.d.ts +1 -1
- package/dist/clientKeys.d.ts.map +1 -1
- package/dist/clientKeys.js +141 -1
- package/dist/clientKeys.js.map +1 -1
- package/dist/dateFNS/ar.js +1 -0
- package/dist/dateFNS/az.js +1 -0
- package/dist/dateFNS/bg.js +1 -0
- package/dist/dateFNS/bn.js +1 -0
- package/dist/dateFNS/ca.js +1 -0
- package/dist/dateFNS/chunk-YT6ULX4E.js +1 -0
- package/dist/dateFNS/cs.js +1 -0
- package/dist/dateFNS/da.js +1 -0
- package/dist/dateFNS/de.js +1 -0
- package/dist/dateFNS/es.js +1 -0
- package/dist/dateFNS/et.js +1 -0
- package/dist/dateFNS/fa-IR.js +1 -0
- package/dist/dateFNS/fr.js +1 -0
- package/dist/dateFNS/he.js +1 -0
- package/dist/dateFNS/hr.js +1 -0
- package/dist/dateFNS/hu.js +1 -0
- package/dist/dateFNS/id.js +1 -0
- package/dist/dateFNS/is.js +1 -0
- package/dist/dateFNS/it.js +1 -0
- package/dist/dateFNS/ja.js +1 -0
- package/dist/dateFNS/ko.js +1 -0
- package/dist/dateFNS/lt.js +1 -0
- package/dist/dateFNS/lv.js +1 -0
- package/dist/dateFNS/nb.js +1 -0
- package/dist/dateFNS/nl.js +1 -0
- package/dist/dateFNS/pl.js +1 -0
- package/dist/dateFNS/pt.js +1 -0
- package/dist/dateFNS/ro.js +1 -0
- package/dist/dateFNS/ru.js +1 -0
- package/dist/dateFNS/sk.js +1 -0
- package/dist/dateFNS/sl.js +1 -0
- package/dist/dateFNS/sr-Latn.js +1 -0
- package/dist/dateFNS/sr.js +1 -0
- package/dist/dateFNS/sv.js +1 -0
- package/dist/dateFNS/ta.js +1 -0
- package/dist/dateFNS/th.js +1 -0
- package/dist/dateFNS/tr.js +1 -0
- package/dist/dateFNS/uk.js +1 -0
- package/dist/dateFNS/vi.js +1 -0
- package/dist/dateFNS/zh-CN.js +1 -0
- package/dist/dateFNS/zh-TW.js +1 -0
- package/dist/importDateFNSLocale.js +41 -41
- package/dist/languages/ar.d.ts.map +1 -1
- package/dist/languages/ar.js +149 -5
- package/dist/languages/ar.js.map +1 -1
- package/dist/languages/az.d.ts.map +1 -1
- package/dist/languages/az.js +149 -5
- package/dist/languages/az.js.map +1 -1
- package/dist/languages/bg.d.ts.map +1 -1
- package/dist/languages/bg.js +148 -4
- package/dist/languages/bg.js.map +1 -1
- package/dist/languages/bnBd.d.ts.map +1 -1
- package/dist/languages/bnBd.js +149 -5
- package/dist/languages/bnBd.js.map +1 -1
- package/dist/languages/bnIn.d.ts.map +1 -1
- package/dist/languages/bnIn.js +149 -5
- package/dist/languages/bnIn.js.map +1 -1
- package/dist/languages/ca.d.ts.map +1 -1
- package/dist/languages/ca.js +149 -5
- package/dist/languages/ca.js.map +1 -1
- package/dist/languages/cs.d.ts.map +1 -1
- package/dist/languages/cs.js +149 -5
- package/dist/languages/cs.js.map +1 -1
- package/dist/languages/da.d.ts.map +1 -1
- package/dist/languages/da.js +149 -5
- package/dist/languages/da.js.map +1 -1
- package/dist/languages/de.d.ts.map +1 -1
- package/dist/languages/de.js +149 -5
- package/dist/languages/de.js.map +1 -1
- package/dist/languages/en.d.ts +145 -1
- package/dist/languages/en.d.ts.map +1 -1
- package/dist/languages/en.js +149 -5
- package/dist/languages/en.js.map +1 -1
- package/dist/languages/es.d.ts.map +1 -1
- package/dist/languages/es.js +148 -4
- package/dist/languages/es.js.map +1 -1
- package/dist/languages/et.d.ts.map +1 -1
- package/dist/languages/et.js +149 -5
- package/dist/languages/et.js.map +1 -1
- package/dist/languages/fa.d.ts.map +1 -1
- package/dist/languages/fa.js +149 -5
- package/dist/languages/fa.js.map +1 -1
- package/dist/languages/fr.d.ts.map +1 -1
- package/dist/languages/fr.js +149 -5
- package/dist/languages/fr.js.map +1 -1
- package/dist/languages/he.d.ts.map +1 -1
- package/dist/languages/he.js +149 -5
- package/dist/languages/he.js.map +1 -1
- package/dist/languages/hr.d.ts.map +1 -1
- package/dist/languages/hr.js +149 -5
- package/dist/languages/hr.js.map +1 -1
- package/dist/languages/hu.d.ts.map +1 -1
- package/dist/languages/hu.js +149 -5
- package/dist/languages/hu.js.map +1 -1
- package/dist/languages/hy.d.ts.map +1 -1
- package/dist/languages/hy.js +149 -5
- package/dist/languages/hy.js.map +1 -1
- package/dist/languages/id.d.ts.map +1 -1
- package/dist/languages/id.js +149 -5
- package/dist/languages/id.js.map +1 -1
- package/dist/languages/is.d.ts.map +1 -1
- package/dist/languages/is.js +149 -5
- package/dist/languages/is.js.map +1 -1
- package/dist/languages/it.d.ts.map +1 -1
- package/dist/languages/it.js +149 -5
- package/dist/languages/it.js.map +1 -1
- package/dist/languages/ja.d.ts.map +1 -1
- package/dist/languages/ja.js +166 -22
- package/dist/languages/ja.js.map +1 -1
- package/dist/languages/ko.d.ts.map +1 -1
- package/dist/languages/ko.js +149 -5
- package/dist/languages/ko.js.map +1 -1
- package/dist/languages/lt.d.ts.map +1 -1
- package/dist/languages/lt.js +149 -5
- package/dist/languages/lt.js.map +1 -1
- package/dist/languages/lv.d.ts.map +1 -1
- package/dist/languages/lv.js +149 -5
- package/dist/languages/lv.js.map +1 -1
- package/dist/languages/my.d.ts.map +1 -1
- package/dist/languages/my.js +149 -5
- package/dist/languages/my.js.map +1 -1
- package/dist/languages/nb.d.ts.map +1 -1
- package/dist/languages/nb.js +149 -5
- package/dist/languages/nb.js.map +1 -1
- package/dist/languages/nl.d.ts.map +1 -1
- package/dist/languages/nl.js +149 -5
- package/dist/languages/nl.js.map +1 -1
- package/dist/languages/pl.d.ts.map +1 -1
- package/dist/languages/pl.js +149 -5
- package/dist/languages/pl.js.map +1 -1
- package/dist/languages/pt.d.ts.map +1 -1
- package/dist/languages/pt.js +149 -5
- package/dist/languages/pt.js.map +1 -1
- package/dist/languages/ro.d.ts.map +1 -1
- package/dist/languages/ro.js +149 -5
- package/dist/languages/ro.js.map +1 -1
- package/dist/languages/rs.d.ts.map +1 -1
- package/dist/languages/rs.js +149 -5
- package/dist/languages/rs.js.map +1 -1
- package/dist/languages/rsLatin.d.ts.map +1 -1
- package/dist/languages/rsLatin.js +149 -5
- package/dist/languages/rsLatin.js.map +1 -1
- package/dist/languages/ru.d.ts.map +1 -1
- package/dist/languages/ru.js +149 -5
- package/dist/languages/ru.js.map +1 -1
- package/dist/languages/sk.d.ts.map +1 -1
- package/dist/languages/sk.js +149 -5
- package/dist/languages/sk.js.map +1 -1
- package/dist/languages/sl.d.ts.map +1 -1
- package/dist/languages/sl.js +149 -5
- package/dist/languages/sl.js.map +1 -1
- package/dist/languages/sv.d.ts.map +1 -1
- package/dist/languages/sv.js +149 -5
- package/dist/languages/sv.js.map +1 -1
- package/dist/languages/ta.d.ts.map +1 -1
- package/dist/languages/ta.js +149 -5
- package/dist/languages/ta.js.map +1 -1
- package/dist/languages/th.d.ts.map +1 -1
- package/dist/languages/th.js +149 -5
- package/dist/languages/th.js.map +1 -1
- package/dist/languages/tr.d.ts.map +1 -1
- package/dist/languages/tr.js +149 -5
- package/dist/languages/tr.js.map +1 -1
- package/dist/languages/uk.d.ts.map +1 -1
- package/dist/languages/uk.js +149 -5
- package/dist/languages/uk.js.map +1 -1
- package/dist/languages/vi.d.ts.map +1 -1
- package/dist/languages/vi.js +149 -5
- package/dist/languages/vi.js.map +1 -1
- package/dist/languages/zh.d.ts.map +1 -1
- package/dist/languages/zh.js +149 -5
- package/dist/languages/zh.js.map +1 -1
- package/dist/languages/zhTw.d.ts.map +1 -1
- package/dist/languages/zhTw.js +170 -26
- package/dist/languages/zhTw.js.map +1 -1
- package/dist/utilities/getTranslationsByContext.d.ts +145 -1
- package/dist/utilities/getTranslationsByContext.d.ts.map +1 -1
- package/dist/utilities/getTranslationsByContext.js +41 -33
- package/dist/utilities/getTranslationsByContext.js.map +1 -1
- package/package.json +8 -6
- package/dist/utilities/deepMergeSimple.spec.js +0 -81
- package/dist/utilities/deepMergeSimple.spec.js.map +0 -1
- package/dist/utilities/languages.spec.js +0 -42
- package/dist/utilities/languages.spec.js.map +0 -1
|
@@ -53,6 +53,7 @@ export declare const getTranslationsByContext: (selectedLanguage: Language, cont
|
|
|
53
53
|
notRedirected: string;
|
|
54
54
|
passed: string;
|
|
55
55
|
passwordResetSuccessfully: string;
|
|
56
|
+
resend: string;
|
|
56
57
|
resetPassword: string;
|
|
57
58
|
resetPasswordExpiration: string;
|
|
58
59
|
resetPasswordToken: string;
|
|
@@ -73,6 +74,80 @@ export declare const getTranslationsByContext: (selectedLanguage: Language, cont
|
|
|
73
74
|
youAreReceivingResetPassword: string;
|
|
74
75
|
youDidNotRequestPassword: string;
|
|
75
76
|
};
|
|
77
|
+
branching: {
|
|
78
|
+
andMoreChanges: string;
|
|
79
|
+
branch: string;
|
|
80
|
+
branchClosed: string;
|
|
81
|
+
branchDescription: string;
|
|
82
|
+
branchedFrom: string;
|
|
83
|
+
branches: string;
|
|
84
|
+
branchHistory: string;
|
|
85
|
+
branchMerging: string;
|
|
86
|
+
branchName: string;
|
|
87
|
+
branchSettings: string;
|
|
88
|
+
cancelSchedule: string;
|
|
89
|
+
changedDocuments: string;
|
|
90
|
+
changesTo: string;
|
|
91
|
+
closeBranchAfterMerge: string;
|
|
92
|
+
closeBranchHelpOff: string;
|
|
93
|
+
closeBranchHelpOn: string;
|
|
94
|
+
confirmDiscardAll: string;
|
|
95
|
+
confirmDiscardSelected: string;
|
|
96
|
+
createAndSwitch: string;
|
|
97
|
+
createNewBranch: string;
|
|
98
|
+
currentChanges: string;
|
|
99
|
+
defaultBranch: string;
|
|
100
|
+
discardAll: string;
|
|
101
|
+
discardChanges: string;
|
|
102
|
+
discardedCount: string;
|
|
103
|
+
discarding: string;
|
|
104
|
+
discardSelected: string;
|
|
105
|
+
historyPageOf: string;
|
|
106
|
+
manage: string;
|
|
107
|
+
manageBranches: string;
|
|
108
|
+
merge: string;
|
|
109
|
+
mergeAllChanges: string;
|
|
110
|
+
mergeAllCount: string;
|
|
111
|
+
mergeBlocked: string;
|
|
112
|
+
mergeBranchInto: string;
|
|
113
|
+
mergeChanges: string;
|
|
114
|
+
mergeComplete: string;
|
|
115
|
+
merged: string;
|
|
116
|
+
mergedByCount: string;
|
|
117
|
+
mergedCount: string;
|
|
118
|
+
mergedOfTotal: string;
|
|
119
|
+
mergedOn: string;
|
|
120
|
+
mergeHistory: string;
|
|
121
|
+
mergeInterrupted: string;
|
|
122
|
+
mergeNow: string;
|
|
123
|
+
mergeOnlySelected: string;
|
|
124
|
+
mergePartial: string;
|
|
125
|
+
mergeScheduledFor: string;
|
|
126
|
+
mergeSelectedOfTotal: string;
|
|
127
|
+
mergeStarting: string;
|
|
128
|
+
merging: string;
|
|
129
|
+
mergingProgress: string;
|
|
130
|
+
noChangesYet: string;
|
|
131
|
+
operation_create: string;
|
|
132
|
+
operation_delete: string;
|
|
133
|
+
operation_update: string;
|
|
134
|
+
reviewingChangedDocuments: string;
|
|
135
|
+
scheduleAnotherMerge: string;
|
|
136
|
+
scheduleCancelled: string;
|
|
137
|
+
scheduleCount: string;
|
|
138
|
+
scheduledMerges: string;
|
|
139
|
+
scheduledToMerge: string;
|
|
140
|
+
scheduledToMergeOn: string;
|
|
141
|
+
scheduleHasNothingLeft: string;
|
|
142
|
+
scheduleMerge: string;
|
|
143
|
+
scheduleMergeHelp: string;
|
|
144
|
+
scheduleWillApplyAll: string;
|
|
145
|
+
scheduleWillApplySelected: string;
|
|
146
|
+
scheduling: string;
|
|
147
|
+
searchBranches: string;
|
|
148
|
+
selectBranch: string;
|
|
149
|
+
untouchedDocumentsNote: string;
|
|
150
|
+
};
|
|
76
151
|
commandPalette: {
|
|
77
152
|
actions: string;
|
|
78
153
|
createNew: string;
|
|
@@ -100,23 +175,38 @@ export declare const getTranslationsByContext: (selectedLanguage: Language, cont
|
|
|
100
175
|
editingDashboard: string;
|
|
101
176
|
noItems: string;
|
|
102
177
|
resetLayout: string;
|
|
178
|
+
resizeWidget: string;
|
|
103
179
|
searchWidgets: string;
|
|
180
|
+
widgetAddPin: string;
|
|
104
181
|
widgetCollectionRequired: string;
|
|
105
182
|
widgetConfigurationError: string;
|
|
183
|
+
widgetDropFilesToUpload: string;
|
|
106
184
|
widgetInvalidCollection: string;
|
|
107
185
|
widgetInvalidFilterField: string;
|
|
108
186
|
widgetInvalidSortField: string;
|
|
109
187
|
widgetLimitLabel: string;
|
|
110
188
|
widgetNonSortableSortField: string;
|
|
189
|
+
widgetPageCount: string;
|
|
190
|
+
widgetPagination: string;
|
|
191
|
+
widgetPinned: string;
|
|
192
|
+
widgetPinnedEmpty: string;
|
|
193
|
+
widgetPinnedEmptyDescription: string;
|
|
194
|
+
widgetPinnedSaveError: string;
|
|
111
195
|
widgetQueryError: string;
|
|
112
196
|
widgetRecentlyViewedEmpty: string;
|
|
197
|
+
widgetRecentlyViewedEmptyDescription: string;
|
|
198
|
+
widgetRecentlyViewedFilterDescription: string;
|
|
113
199
|
widgetRecentlyViewedTitle: string;
|
|
200
|
+
widgetRecentsAndPinned: string;
|
|
201
|
+
widgetRemovePin: string;
|
|
114
202
|
widgetSelectCollectionFirst: string;
|
|
115
203
|
widgetSelectSortField: string;
|
|
116
204
|
widgetSortDirectionLabel: string;
|
|
117
205
|
widgetSortFieldLabel: string;
|
|
118
206
|
widgetTitleFallback: string;
|
|
119
207
|
widgetTitleLabel: string;
|
|
208
|
+
widgetUploadDropzoneDescription: string;
|
|
209
|
+
widgetUploadFiles: string;
|
|
120
210
|
};
|
|
121
211
|
error: {
|
|
122
212
|
accountAlreadyActivated: string;
|
|
@@ -128,6 +218,7 @@ export declare const getTranslationsByContext: (selectedLanguage: Language, cont
|
|
|
128
218
|
emailOrPasswordIncorrect: string;
|
|
129
219
|
failedToResetLayout: string;
|
|
130
220
|
failedToSaveLayout: string;
|
|
221
|
+
fileFetchFailed: string;
|
|
131
222
|
followingFieldsInvalid_one: string;
|
|
132
223
|
followingFieldsInvalid_other: string;
|
|
133
224
|
incorrectCollection: string;
|
|
@@ -144,6 +235,7 @@ export declare const getTranslationsByContext: (selectedLanguage: Language, cont
|
|
|
144
235
|
missingIDOfDocument: string;
|
|
145
236
|
missingIDOfVersion: string;
|
|
146
237
|
missingRequiredData: string;
|
|
238
|
+
noFileFoundInClipboard: string;
|
|
147
239
|
noFilesUploaded: string;
|
|
148
240
|
noMatchedField: string;
|
|
149
241
|
notAllowedToAccessPage: string;
|
|
@@ -158,6 +250,7 @@ export declare const getTranslationsByContext: (selectedLanguage: Language, cont
|
|
|
158
250
|
tokenNotProvided: string;
|
|
159
251
|
unableToCopy: string;
|
|
160
252
|
unableToDeleteCount: string;
|
|
253
|
+
unableToReadClipboard: string;
|
|
161
254
|
unableToReindexCollection: string;
|
|
162
255
|
unableToUpdateCount: string;
|
|
163
256
|
unauthorized: string;
|
|
@@ -166,6 +259,7 @@ export declare const getTranslationsByContext: (selectedLanguage: Language, cont
|
|
|
166
259
|
unPublishingDocument: string;
|
|
167
260
|
unspecific: string;
|
|
168
261
|
unverifiedEmail: string;
|
|
262
|
+
urlNotAllowed: string;
|
|
169
263
|
userEmailAlreadyRegistered: string;
|
|
170
264
|
userLocked: string;
|
|
171
265
|
usernameAlreadyRegistered: string;
|
|
@@ -244,6 +338,7 @@ export declare const getTranslationsByContext: (selectedLanguage: Language, cont
|
|
|
244
338
|
all: string;
|
|
245
339
|
allCollections: string;
|
|
246
340
|
allLocales: string;
|
|
341
|
+
allowedTypes: string;
|
|
247
342
|
and: string;
|
|
248
343
|
anotherUser: string;
|
|
249
344
|
anotherUserTakenOver: string;
|
|
@@ -252,13 +347,16 @@ export declare const getTranslationsByContext: (selectedLanguage: Language, cont
|
|
|
252
347
|
auto: string;
|
|
253
348
|
automatic: string;
|
|
254
349
|
backToDashboard: string;
|
|
350
|
+
breadcrumb: string;
|
|
255
351
|
by: string;
|
|
256
352
|
cancel: string;
|
|
257
353
|
changesNotSaved: string;
|
|
258
354
|
checked: string;
|
|
259
355
|
clear: string;
|
|
260
356
|
clearAll: string;
|
|
357
|
+
clearSearch: string;
|
|
261
358
|
close: string;
|
|
359
|
+
closed: string;
|
|
262
360
|
collapse: string;
|
|
263
361
|
collection: string;
|
|
264
362
|
collections: string;
|
|
@@ -283,6 +381,7 @@ export declare const getTranslationsByContext: (selectedLanguage: Language, cont
|
|
|
283
381
|
create: string;
|
|
284
382
|
created: string;
|
|
285
383
|
createdAt: string;
|
|
384
|
+
createdBy: string;
|
|
286
385
|
createNew: string;
|
|
287
386
|
createNewLabel: string;
|
|
288
387
|
creating: string;
|
|
@@ -343,6 +442,8 @@ export declare const getTranslationsByContext: (selectedLanguage: Language, cont
|
|
|
343
442
|
filterWhere: string;
|
|
344
443
|
globals: string;
|
|
345
444
|
goBack: string;
|
|
445
|
+
goToPage: string;
|
|
446
|
+
gridLayout: string;
|
|
346
447
|
groupByLabel: string;
|
|
347
448
|
hideSidebar: string;
|
|
348
449
|
import: string;
|
|
@@ -375,6 +476,7 @@ export declare const getTranslationsByContext: (selectedLanguage: Language, cont
|
|
|
375
476
|
newLabel: string;
|
|
376
477
|
newPassword: string;
|
|
377
478
|
next: string;
|
|
479
|
+
nextPage: string;
|
|
378
480
|
no: string;
|
|
379
481
|
noDateSelected: string;
|
|
380
482
|
noFiltersSet: string;
|
|
@@ -388,6 +490,7 @@ export declare const getTranslationsByContext: (selectedLanguage: Language, cont
|
|
|
388
490
|
notFound: string;
|
|
389
491
|
nothingFound: string;
|
|
390
492
|
noTrashResults: string;
|
|
493
|
+
notSelectedDocument: string;
|
|
391
494
|
notShownInTable: string;
|
|
392
495
|
noUpcomingEventsScheduled: string;
|
|
393
496
|
noValue: string;
|
|
@@ -400,7 +503,9 @@ export declare const getTranslationsByContext: (selectedLanguage: Language, cont
|
|
|
400
503
|
original: string;
|
|
401
504
|
overwriteExistingData: string;
|
|
402
505
|
pageNotFound: string;
|
|
506
|
+
pageNumberRange: string;
|
|
403
507
|
password: string;
|
|
508
|
+
pasteBelow: string;
|
|
404
509
|
pasteField: string;
|
|
405
510
|
pasteRow: string;
|
|
406
511
|
payloadSettings: string;
|
|
@@ -410,11 +515,14 @@ export declare const getTranslationsByContext: (selectedLanguage: Language, cont
|
|
|
410
515
|
perPageLabel: string;
|
|
411
516
|
presets: string;
|
|
412
517
|
previous: string;
|
|
518
|
+
previousPage: string;
|
|
413
519
|
reindex: string;
|
|
414
520
|
reindexingAll: string;
|
|
415
521
|
reloadDocument: string;
|
|
416
522
|
remove: string;
|
|
417
523
|
rename: string;
|
|
524
|
+
replaceRow: string;
|
|
525
|
+
requiredFields: string;
|
|
418
526
|
reset: string;
|
|
419
527
|
resetPreferences: string;
|
|
420
528
|
resetPreferencesDescription: string;
|
|
@@ -430,21 +538,28 @@ export declare const getTranslationsByContext: (selectedLanguage: Language, cont
|
|
|
430
538
|
saveChanges: string;
|
|
431
539
|
saving: string;
|
|
432
540
|
schedulePublishFor: string;
|
|
541
|
+
searchAutomatically: string;
|
|
433
542
|
searchBy: string;
|
|
543
|
+
searchCleared: string;
|
|
434
544
|
searchColumns: string;
|
|
545
|
+
searchGroups: string;
|
|
546
|
+
searchResults: string;
|
|
435
547
|
select: string;
|
|
436
548
|
selectAll: string;
|
|
437
549
|
selectAllRows: string;
|
|
438
550
|
selectedCount: string;
|
|
551
|
+
selectedDocument: string;
|
|
439
552
|
selectLabel: string;
|
|
440
553
|
selectValue: string;
|
|
441
554
|
settings: string;
|
|
442
555
|
showAllLabel: string;
|
|
443
556
|
shownInTable: string;
|
|
444
557
|
showSidebar: string;
|
|
558
|
+
skipToContent: string;
|
|
445
559
|
sorryNotFound: string;
|
|
446
560
|
sort: string;
|
|
447
561
|
sortByLabelDirection: string;
|
|
562
|
+
sortByOrderToReorder: string;
|
|
448
563
|
stayOnThisPage: string;
|
|
449
564
|
submissionSuccessful: string;
|
|
450
565
|
submit: string;
|
|
@@ -453,6 +568,7 @@ export declare const getTranslationsByContext: (selectedLanguage: Language, cont
|
|
|
453
568
|
successfullyCreated: string;
|
|
454
569
|
successfullyDuplicated: string;
|
|
455
570
|
successfullyReindexed: string;
|
|
571
|
+
tableLayout: string;
|
|
456
572
|
takeOver: string;
|
|
457
573
|
theme: string;
|
|
458
574
|
thisLanguage: string;
|
|
@@ -474,6 +590,7 @@ export declare const getTranslationsByContext: (selectedLanguage: Language, cont
|
|
|
474
590
|
upcomingEvents: string;
|
|
475
591
|
updatedAgo: string;
|
|
476
592
|
updatedAt: string;
|
|
593
|
+
updatedBy: string;
|
|
477
594
|
updatedCountSuccessfully: string;
|
|
478
595
|
updatedLabelSuccessfully: string;
|
|
479
596
|
updatedSuccessfully: string;
|
|
@@ -492,13 +609,29 @@ export declare const getTranslationsByContext: (selectedLanguage: Language, cont
|
|
|
492
609
|
yes: string;
|
|
493
610
|
};
|
|
494
611
|
hierarchy: {
|
|
612
|
+
goTo: string;
|
|
495
613
|
itemsMovedTo: string;
|
|
496
614
|
itemsMovedToRoot: string;
|
|
497
|
-
|
|
615
|
+
moveTo: string;
|
|
498
616
|
moveToRoot: string;
|
|
499
617
|
noParent: string;
|
|
500
618
|
noResults: string;
|
|
619
|
+
removeFrom: string;
|
|
501
620
|
searchLabel: string;
|
|
621
|
+
searchResults: string;
|
|
622
|
+
};
|
|
623
|
+
llmInstructions: {
|
|
624
|
+
additionalInstructions: string;
|
|
625
|
+
collectionDescription: string;
|
|
626
|
+
collectionSystemDescription: string;
|
|
627
|
+
editInstructions: string;
|
|
628
|
+
global: string;
|
|
629
|
+
globalDescription: string;
|
|
630
|
+
globalSystemDescription: string;
|
|
631
|
+
instructions: string;
|
|
632
|
+
systemInstructions: string;
|
|
633
|
+
targetCannotBeChanged: string;
|
|
634
|
+
title: string;
|
|
502
635
|
};
|
|
503
636
|
localization: {
|
|
504
637
|
cannotCopySameLocale: string;
|
|
@@ -532,8 +665,18 @@ export declare const getTranslationsByContext: (selectedLanguage: Language, cont
|
|
|
532
665
|
addFile: string;
|
|
533
666
|
addFiles: string;
|
|
534
667
|
bulkUpload: string;
|
|
668
|
+
copyLinkToFile: string;
|
|
669
|
+
copyURL: string;
|
|
535
670
|
crop: string;
|
|
671
|
+
cropBottom: string;
|
|
672
|
+
cropBottomLeft: string;
|
|
673
|
+
cropBottomRight: string;
|
|
674
|
+
cropLeft: string;
|
|
675
|
+
cropRight: string;
|
|
536
676
|
cropToolDescription: string;
|
|
677
|
+
cropTop: string;
|
|
678
|
+
cropTopLeft: string;
|
|
679
|
+
cropTopRight: string;
|
|
537
680
|
download: string;
|
|
538
681
|
dragAndDrop: string;
|
|
539
682
|
dragAndDropHere: string;
|
|
@@ -550,6 +693,7 @@ export declare const getTranslationsByContext: (selectedLanguage: Language, cont
|
|
|
550
693
|
linkToFile: string;
|
|
551
694
|
moreInfo: string;
|
|
552
695
|
noFile: string;
|
|
696
|
+
pasteFromClipboard: string;
|
|
553
697
|
pasteURL: string;
|
|
554
698
|
previewSizes: string;
|
|
555
699
|
renameFile: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"getTranslationsByContext.d.ts","sourceRoot":"","sources":["../../src/utilities/getTranslationsByContext.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAA;
|
|
1
|
+
{"version":3,"file":"getTranslationsByContext.d.ts","sourceRoot":"","sources":["../../src/utilities/getTranslationsByContext.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAA;AA6E3C,eAAO,MAAM,wBAAwB,qBAAsB,QAAQ,WAAW,KAAK,GAAG,QAAQ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAM7F,CAAA"}
|
|
@@ -1,41 +1,49 @@
|
|
|
1
1
|
import { clientTranslationKeys } from '../clientKeys.js';
|
|
2
|
-
|
|
2
|
+
/**
|
|
3
|
+
* The client translation keys, grouped by namespace. For example, the keys `general:cancel`,
|
|
4
|
+
* `general:item` and `authentication:account` are stored as:
|
|
5
|
+
*
|
|
6
|
+
* `Map { 'general' => Set { 'cancel', 'item' }, 'authentication' => Set { 'account' } }`
|
|
7
|
+
*/ const clientKeysByNamespace = new Map();
|
|
8
|
+
for (const clientKey of clientTranslationKeys){
|
|
9
|
+
const separatorIndex = clientKey.indexOf(':');
|
|
10
|
+
const namespace = clientKey.slice(0, separatorIndex);
|
|
11
|
+
const key = clientKey.slice(separatorIndex + 1);
|
|
12
|
+
const keys = clientKeysByNamespace.get(namespace) ?? new Set();
|
|
13
|
+
clientKeysByNamespace.set(namespace, keys.add(key));
|
|
14
|
+
}
|
|
15
|
+
/** Plural forms of a key, for example `item_one` and `item_other` for `item` */ const pluralSuffix = /_(?:zero|one|two|few|many|other)$/;
|
|
16
|
+
/**
|
|
17
|
+
* Keeps only the translations the admin needs in the browser: the keys listed in
|
|
18
|
+
* `clientTranslationKeys`, plus their plural forms. Namespaces that end up empty are left out.
|
|
19
|
+
*
|
|
20
|
+
* @example
|
|
21
|
+
* // With the client keys `general:cancel` and `general:item`:
|
|
22
|
+
* filterClientKeys({
|
|
23
|
+
* general: { cancel: 'Cancel', item: 'Item', item_other: 'Items', save: 'Save' },
|
|
24
|
+
* error: { notFound: 'Not found' },
|
|
25
|
+
* })
|
|
26
|
+
* // => { general: { cancel: 'Cancel', item: 'Item', item_other: 'Items' } }
|
|
27
|
+
*/ function filterClientKeys(translations) {
|
|
3
28
|
const result = {};
|
|
4
|
-
for (const [
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
result[namespaceKey] = value;
|
|
29
|
+
for (const [namespace, value] of Object.entries(translations)){
|
|
30
|
+
if (namespace === '$schema') {
|
|
31
|
+
result[namespace] = value;
|
|
8
32
|
continue;
|
|
9
33
|
}
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
if (parentGroupKey === groupKey) {
|
|
19
|
-
if (namespaceKey === selector) {
|
|
20
|
-
result[selector] = value;
|
|
21
|
-
} else {
|
|
22
|
-
const pluralKeys = [
|
|
23
|
-
'zero',
|
|
24
|
-
'one',
|
|
25
|
-
'two',
|
|
26
|
-
'few',
|
|
27
|
-
'many',
|
|
28
|
-
'other'
|
|
29
|
-
];
|
|
30
|
-
pluralKeys.forEach((pluralKey)=>{
|
|
31
|
-
if (namespaceKey === `${selector}_${pluralKey}`) {
|
|
32
|
-
result[`${selector}_${pluralKey}`] = value;
|
|
33
|
-
}
|
|
34
|
-
});
|
|
35
|
-
}
|
|
36
|
-
}
|
|
34
|
+
const clientKeys = clientKeysByNamespace.get(namespace);
|
|
35
|
+
if (!clientKeys || typeof value !== 'object' || value === null) {
|
|
36
|
+
continue;
|
|
37
|
+
}
|
|
38
|
+
const clientTranslations = {};
|
|
39
|
+
for (const [key, translation] of Object.entries(value)){
|
|
40
|
+
if (clientKeys.has(key) || clientKeys.has(key.replace(pluralSuffix, ''))) {
|
|
41
|
+
clientTranslations[key] = translation;
|
|
37
42
|
}
|
|
38
43
|
}
|
|
44
|
+
if (Object.keys(clientTranslations).length > 0) {
|
|
45
|
+
result[namespace] = clientTranslations;
|
|
46
|
+
}
|
|
39
47
|
}
|
|
40
48
|
return result;
|
|
41
49
|
}
|
|
@@ -52,7 +60,7 @@ function sortObject(obj) {
|
|
|
52
60
|
}
|
|
53
61
|
export const getTranslationsByContext = (selectedLanguage, context)=>{
|
|
54
62
|
if (context === 'client') {
|
|
55
|
-
return sortObject(
|
|
63
|
+
return sortObject(filterClientKeys(selectedLanguage.translations));
|
|
56
64
|
} else {
|
|
57
65
|
return selectedLanguage.translations;
|
|
58
66
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/utilities/getTranslationsByContext.ts"],"sourcesContent":["import type { Language } from '../types.js'\n\nimport { clientTranslationKeys } from '../clientKeys.js'\n\
|
|
1
|
+
{"version":3,"sources":["../../src/utilities/getTranslationsByContext.ts"],"sourcesContent":["import type { Language } from '../types.js'\n\nimport { clientTranslationKeys } from '../clientKeys.js'\n\n/**\n * The client translation keys, grouped by namespace. For example, the keys `general:cancel`,\n * `general:item` and `authentication:account` are stored as:\n *\n * `Map { 'general' => Set { 'cancel', 'item' }, 'authentication' => Set { 'account' } }`\n */\nconst clientKeysByNamespace = new Map<string, Set<string>>()\nfor (const clientKey of clientTranslationKeys) {\n const separatorIndex = clientKey.indexOf(':')\n const namespace = clientKey.slice(0, separatorIndex)\n const key = clientKey.slice(separatorIndex + 1)\n const keys = clientKeysByNamespace.get(namespace) ?? new Set<string>()\n clientKeysByNamespace.set(namespace, keys.add(key))\n}\n\n/** Plural forms of a key, for example `item_one` and `item_other` for `item` */\nconst pluralSuffix = /_(?:zero|one|two|few|many|other)$/\n\n/**\n * Keeps only the translations the admin needs in the browser: the keys listed in\n * `clientTranslationKeys`, plus their plural forms. Namespaces that end up empty are left out.\n *\n * @example\n * // With the client keys `general:cancel` and `general:item`:\n * filterClientKeys({\n * general: { cancel: 'Cancel', item: 'Item', item_other: 'Items', save: 'Save' },\n * error: { notFound: 'Not found' },\n * })\n * // => { general: { cancel: 'Cancel', item: 'Item', item_other: 'Items' } }\n */\nfunction filterClientKeys(translations: Record<string, unknown>) {\n const result: Record<string, unknown> = {}\n\n for (const [namespace, value] of Object.entries(translations)) {\n if (namespace === '$schema') {\n result[namespace] = value\n continue\n }\n\n const clientKeys = clientKeysByNamespace.get(namespace)\n if (!clientKeys || typeof value !== 'object' || value === null) {\n continue\n }\n\n const clientTranslations: Record<string, unknown> = {}\n for (const [key, translation] of Object.entries(value)) {\n if (clientKeys.has(key) || clientKeys.has(key.replace(pluralSuffix, ''))) {\n clientTranslations[key] = translation\n }\n }\n\n if (Object.keys(clientTranslations).length > 0) {\n result[namespace] = clientTranslations\n }\n }\n\n return result\n}\n\nfunction sortObject(obj: Record<string, unknown>) {\n const sortedObject: Record<string, unknown> = {}\n Object.keys(obj)\n .sort()\n .forEach((key) => {\n if (typeof obj[key] === 'object') {\n sortedObject[key] = sortObject(obj[key] as Record<string, unknown>)\n } else {\n sortedObject[key] = obj[key]\n }\n })\n return sortedObject\n}\n\nexport const getTranslationsByContext = (selectedLanguage: Language, context: 'api' | 'client') => {\n if (context === 'client') {\n return sortObject(filterClientKeys(selectedLanguage.translations))\n } else {\n return selectedLanguage.translations\n }\n}\n"],"names":["clientTranslationKeys","clientKeysByNamespace","Map","clientKey","separatorIndex","indexOf","namespace","slice","key","keys","get","Set","set","add","pluralSuffix","filterClientKeys","translations","result","value","Object","entries","clientKeys","clientTranslations","translation","has","replace","length","sortObject","obj","sortedObject","sort","forEach","getTranslationsByContext","selectedLanguage","context"],"mappings":"AAEA,SAASA,qBAAqB,QAAQ,mBAAkB;AAExD;;;;;CAKC,GACD,MAAMC,wBAAwB,IAAIC;AAClC,KAAK,MAAMC,aAAaH,sBAAuB;IAC7C,MAAMI,iBAAiBD,UAAUE,OAAO,CAAC;IACzC,MAAMC,YAAYH,UAAUI,KAAK,CAAC,GAAGH;IACrC,MAAMI,MAAML,UAAUI,KAAK,CAACH,iBAAiB;IAC7C,MAAMK,OAAOR,sBAAsBS,GAAG,CAACJ,cAAc,IAAIK;IACzDV,sBAAsBW,GAAG,CAACN,WAAWG,KAAKI,GAAG,CAACL;AAChD;AAEA,8EAA8E,GAC9E,MAAMM,eAAe;AAErB;;;;;;;;;;;CAWC,GACD,SAASC,iBAAiBC,YAAqC;IAC7D,MAAMC,SAAkC,CAAC;IAEzC,KAAK,MAAM,CAACX,WAAWY,MAAM,IAAIC,OAAOC,OAAO,CAACJ,cAAe;QAC7D,IAAIV,cAAc,WAAW;YAC3BW,MAAM,CAACX,UAAU,GAAGY;YACpB;QACF;QAEA,MAAMG,aAAapB,sBAAsBS,GAAG,CAACJ;QAC7C,IAAI,CAACe,cAAc,OAAOH,UAAU,YAAYA,UAAU,MAAM;YAC9D;QACF;QAEA,MAAMI,qBAA8C,CAAC;QACrD,KAAK,MAAM,CAACd,KAAKe,YAAY,IAAIJ,OAAOC,OAAO,CAACF,OAAQ;YACtD,IAAIG,WAAWG,GAAG,CAAChB,QAAQa,WAAWG,GAAG,CAAChB,IAAIiB,OAAO,CAACX,cAAc,MAAM;gBACxEQ,kBAAkB,CAACd,IAAI,GAAGe;YAC5B;QACF;QAEA,IAAIJ,OAAOV,IAAI,CAACa,oBAAoBI,MAAM,GAAG,GAAG;YAC9CT,MAAM,CAACX,UAAU,GAAGgB;QACtB;IACF;IAEA,OAAOL;AACT;AAEA,SAASU,WAAWC,GAA4B;IAC9C,MAAMC,eAAwC,CAAC;IAC/CV,OAAOV,IAAI,CAACmB,KACTE,IAAI,GACJC,OAAO,CAAC,CAACvB;QACR,IAAI,OAAOoB,GAAG,CAACpB,IAAI,KAAK,UAAU;YAChCqB,YAAY,CAACrB,IAAI,GAAGmB,WAAWC,GAAG,CAACpB,IAAI;QACzC,OAAO;YACLqB,YAAY,CAACrB,IAAI,GAAGoB,GAAG,CAACpB,IAAI;QAC9B;IACF;IACF,OAAOqB;AACT;AAEA,OAAO,MAAMG,2BAA2B,CAACC,kBAA4BC;IACnE,IAAIA,YAAY,UAAU;QACxB,OAAOP,WAAWZ,iBAAiBkB,iBAAiBjB,YAAY;IAClE,OAAO;QACL,OAAOiB,iBAAiBjB,YAAY;IACtC;AACF,EAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@payloadcms/translations",
|
|
3
|
-
"version": "4.0.0-internal.
|
|
3
|
+
"version": "4.0.0-internal.ea6e8f8",
|
|
4
4
|
"homepage": "https://payloadcms.com",
|
|
5
5
|
"repository": {
|
|
6
6
|
"type": "git",
|
|
@@ -46,18 +46,20 @@
|
|
|
46
46
|
"dist"
|
|
47
47
|
],
|
|
48
48
|
"dependencies": {
|
|
49
|
-
"date-fns": "4.
|
|
49
|
+
"date-fns": "4.4.0"
|
|
50
50
|
},
|
|
51
51
|
"devDependencies": {
|
|
52
|
-
"@types/react": "19.
|
|
53
|
-
"@types/react-dom": "19.
|
|
52
|
+
"@types/react": "19.3.0",
|
|
53
|
+
"@types/react-dom": "19.3.0",
|
|
54
54
|
"dotenv": "16.4.7",
|
|
55
|
+
"esbuild": "0.27.1",
|
|
55
56
|
"prettier": "3.5.3",
|
|
56
|
-
"typescript": "6.0.
|
|
57
|
+
"typescript": "npm:@typescript/typescript6@6.0.2",
|
|
57
58
|
"@payloadcms/eslint-config": "3.28.0"
|
|
58
59
|
},
|
|
59
60
|
"scripts": {
|
|
60
|
-
"build": "pnpm build:types && pnpm build:swc",
|
|
61
|
+
"build": "pnpm build:types && pnpm build:swc && pnpm build:dateFNS",
|
|
62
|
+
"build:dateFNS": "node bundleDateFNSLocales.js",
|
|
61
63
|
"build:debug": "pnpm build",
|
|
62
64
|
"build:swc": "swc ./src -d ./dist --config-file .swcrc --strip-leading-paths",
|
|
63
65
|
"build:types": "tsc --emitDeclarationOnly --outDir dist",
|
|
@@ -1,81 +0,0 @@
|
|
|
1
|
-
import { describe, expect, it } from 'vitest';
|
|
2
|
-
import { deepMergeSimple } from './deepMergeSimple.js';
|
|
3
|
-
describe('deepMergeSimple', ()=>{
|
|
4
|
-
it('should merge two flat objects', ()=>{
|
|
5
|
-
const result = deepMergeSimple({
|
|
6
|
-
a: 1
|
|
7
|
-
}, {
|
|
8
|
-
b: 2
|
|
9
|
-
});
|
|
10
|
-
expect(result).toEqual({
|
|
11
|
-
a: 1,
|
|
12
|
-
b: 2
|
|
13
|
-
});
|
|
14
|
-
});
|
|
15
|
-
it('should let obj2 override obj1 keys', ()=>{
|
|
16
|
-
const result = deepMergeSimple({
|
|
17
|
-
a: 1
|
|
18
|
-
}, {
|
|
19
|
-
a: 2
|
|
20
|
-
});
|
|
21
|
-
expect(result).toEqual({
|
|
22
|
-
a: 2
|
|
23
|
-
});
|
|
24
|
-
});
|
|
25
|
-
it('should recursively merge nested objects', ()=>{
|
|
26
|
-
const result = deepMergeSimple({
|
|
27
|
-
a: {
|
|
28
|
-
b: 1,
|
|
29
|
-
c: 2
|
|
30
|
-
}
|
|
31
|
-
}, {
|
|
32
|
-
a: {
|
|
33
|
-
c: 3,
|
|
34
|
-
d: 4
|
|
35
|
-
}
|
|
36
|
-
});
|
|
37
|
-
expect(result).toEqual({
|
|
38
|
-
a: {
|
|
39
|
-
b: 1,
|
|
40
|
-
c: 3,
|
|
41
|
-
d: 4
|
|
42
|
-
}
|
|
43
|
-
});
|
|
44
|
-
});
|
|
45
|
-
it('should not mutate the input objects', ()=>{
|
|
46
|
-
const obj1 = {
|
|
47
|
-
a: 1
|
|
48
|
-
};
|
|
49
|
-
const obj2 = {
|
|
50
|
-
b: 2
|
|
51
|
-
};
|
|
52
|
-
deepMergeSimple(obj1, obj2);
|
|
53
|
-
expect(obj1).toEqual({
|
|
54
|
-
a: 1
|
|
55
|
-
});
|
|
56
|
-
expect(obj2).toEqual({
|
|
57
|
-
b: 2
|
|
58
|
-
});
|
|
59
|
-
});
|
|
60
|
-
it('should not pollute global Object.prototype via __proto__', ()=>{
|
|
61
|
-
const malicious = JSON.parse('{"__proto__": {"isAdmin": true}}');
|
|
62
|
-
deepMergeSimple({}, malicious);
|
|
63
|
-
expect({}.isAdmin).toBeUndefined();
|
|
64
|
-
});
|
|
65
|
-
it('should not hijack the returned object prototype via __proto__', ()=>{
|
|
66
|
-
const malicious = JSON.parse('{"__proto__": {"isAdmin": true}}');
|
|
67
|
-
const result = deepMergeSimple({}, malicious);
|
|
68
|
-
expect(result.isAdmin).toBeUndefined();
|
|
69
|
-
});
|
|
70
|
-
it('should not hijack prototype via nested __proto__ key', ()=>{
|
|
71
|
-
const malicious = JSON.parse('{"a": {"__proto__": {"isAdmin": true}}}');
|
|
72
|
-
const base = {
|
|
73
|
-
a: {}
|
|
74
|
-
};
|
|
75
|
-
const result = deepMergeSimple(base, malicious);
|
|
76
|
-
expect(result.a.isAdmin).toBeUndefined();
|
|
77
|
-
expect({}.isAdmin).toBeUndefined();
|
|
78
|
-
});
|
|
79
|
-
});
|
|
80
|
-
|
|
81
|
-
//# sourceMappingURL=deepMergeSimple.spec.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/utilities/deepMergeSimple.spec.ts"],"sourcesContent":["import { describe, expect, it } from 'vitest'\n\nimport { deepMergeSimple } from './deepMergeSimple.js'\n\ndescribe('deepMergeSimple', () => {\n it('should merge two flat objects', () => {\n const result = deepMergeSimple({ a: 1 }, { b: 2 })\n expect(result).toEqual({ a: 1, b: 2 })\n })\n\n it('should let obj2 override obj1 keys', () => {\n const result = deepMergeSimple({ a: 1 }, { a: 2 })\n expect(result).toEqual({ a: 2 })\n })\n\n it('should recursively merge nested objects', () => {\n const result = deepMergeSimple({ a: { b: 1, c: 2 } }, { a: { c: 3, d: 4 } })\n expect(result).toEqual({ a: { b: 1, c: 3, d: 4 } })\n })\n\n it('should not mutate the input objects', () => {\n const obj1 = { a: 1 }\n const obj2 = { b: 2 }\n deepMergeSimple(obj1, obj2)\n expect(obj1).toEqual({ a: 1 })\n expect(obj2).toEqual({ b: 2 })\n })\n\n it('should not pollute global Object.prototype via __proto__', () => {\n const malicious = JSON.parse('{\"__proto__\": {\"isAdmin\": true}}')\n deepMergeSimple({}, malicious)\n expect(({} as any).isAdmin).toBeUndefined()\n })\n\n it('should not hijack the returned object prototype via __proto__', () => {\n const malicious = JSON.parse('{\"__proto__\": {\"isAdmin\": true}}')\n const result = deepMergeSimple({}, malicious) as any\n expect(result.isAdmin).toBeUndefined()\n })\n\n it('should not hijack prototype via nested __proto__ key', () => {\n const malicious = JSON.parse('{\"a\": {\"__proto__\": {\"isAdmin\": true}}}')\n const base = { a: {} }\n const result = deepMergeSimple(base, malicious) as any\n expect(result.a.isAdmin).toBeUndefined()\n expect(({} as any).isAdmin).toBeUndefined()\n })\n})\n"],"names":["describe","expect","it","deepMergeSimple","result","a","b","toEqual","c","d","obj1","obj2","malicious","JSON","parse","isAdmin","toBeUndefined","base"],"mappings":"AAAA,SAASA,QAAQ,EAAEC,MAAM,EAAEC,EAAE,QAAQ,SAAQ;AAE7C,SAASC,eAAe,QAAQ,uBAAsB;AAEtDH,SAAS,mBAAmB;IAC1BE,GAAG,iCAAiC;QAClC,MAAME,SAASD,gBAAgB;YAAEE,GAAG;QAAE,GAAG;YAAEC,GAAG;QAAE;QAChDL,OAAOG,QAAQG,OAAO,CAAC;YAAEF,GAAG;YAAGC,GAAG;QAAE;IACtC;IAEAJ,GAAG,sCAAsC;QACvC,MAAME,SAASD,gBAAgB;YAAEE,GAAG;QAAE,GAAG;YAAEA,GAAG;QAAE;QAChDJ,OAAOG,QAAQG,OAAO,CAAC;YAAEF,GAAG;QAAE;IAChC;IAEAH,GAAG,2CAA2C;QAC5C,MAAME,SAASD,gBAAgB;YAAEE,GAAG;gBAAEC,GAAG;gBAAGE,GAAG;YAAE;QAAE,GAAG;YAAEH,GAAG;gBAAEG,GAAG;gBAAGC,GAAG;YAAE;QAAE;QAC1ER,OAAOG,QAAQG,OAAO,CAAC;YAAEF,GAAG;gBAAEC,GAAG;gBAAGE,GAAG;gBAAGC,GAAG;YAAE;QAAE;IACnD;IAEAP,GAAG,uCAAuC;QACxC,MAAMQ,OAAO;YAAEL,GAAG;QAAE;QACpB,MAAMM,OAAO;YAAEL,GAAG;QAAE;QACpBH,gBAAgBO,MAAMC;QACtBV,OAAOS,MAAMH,OAAO,CAAC;YAAEF,GAAG;QAAE;QAC5BJ,OAAOU,MAAMJ,OAAO,CAAC;YAAED,GAAG;QAAE;IAC9B;IAEAJ,GAAG,4DAA4D;QAC7D,MAAMU,YAAYC,KAAKC,KAAK,CAAC;QAC7BX,gBAAgB,CAAC,GAAGS;QACpBX,OAAO,AAAC,CAAC,EAAUc,OAAO,EAAEC,aAAa;IAC3C;IAEAd,GAAG,iEAAiE;QAClE,MAAMU,YAAYC,KAAKC,KAAK,CAAC;QAC7B,MAAMV,SAASD,gBAAgB,CAAC,GAAGS;QACnCX,OAAOG,OAAOW,OAAO,EAAEC,aAAa;IACtC;IAEAd,GAAG,wDAAwD;QACzD,MAAMU,YAAYC,KAAKC,KAAK,CAAC;QAC7B,MAAMG,OAAO;YAAEZ,GAAG,CAAC;QAAE;QACrB,MAAMD,SAASD,gBAAgBc,MAAML;QACrCX,OAAOG,OAAOC,CAAC,CAACU,OAAO,EAAEC,aAAa;QACtCf,OAAO,AAAC,CAAC,EAAUc,OAAO,EAAEC,aAAa;IAC3C;AACF"}
|
|
@@ -1,42 +0,0 @@
|
|
|
1
|
-
import { describe, expect, it } from 'vitest';
|
|
2
|
-
import { extractHeaderLanguage } from './languages.js';
|
|
3
|
-
describe('extractHeaderLanguage', ()=>{
|
|
4
|
-
it('should return exact match when base language tag is supported', ()=>{
|
|
5
|
-
expect(extractHeaderLanguage('ja')).toBe('ja');
|
|
6
|
-
expect(extractHeaderLanguage('en')).toBe('en');
|
|
7
|
-
expect(extractHeaderLanguage('de')).toBe('de');
|
|
8
|
-
});
|
|
9
|
-
it('should fall back to base tag when regional tag has no exact match', ()=>{
|
|
10
|
-
expect(extractHeaderLanguage('ja-JP')).toBe('ja');
|
|
11
|
-
expect(extractHeaderLanguage('de-AT')).toBe('de');
|
|
12
|
-
expect(extractHeaderLanguage('fr-BE')).toBe('fr');
|
|
13
|
-
});
|
|
14
|
-
it('should match exact regional tag when it is supported', ()=>{
|
|
15
|
-
// zh-TW is in acceptedLanguages, so it should match directly
|
|
16
|
-
expect(extractHeaderLanguage('zh-TW')).toBe('zh-TW');
|
|
17
|
-
// bn-BD is in acceptedLanguages
|
|
18
|
-
expect(extractHeaderLanguage('bn-BD')).toBe('bn-BD');
|
|
19
|
-
});
|
|
20
|
-
it('should fall back to base tag for unsupported regional variant of a supported regional language', ()=>{
|
|
21
|
-
// zh-CN is not in acceptedLanguages, but zh is
|
|
22
|
-
expect(extractHeaderLanguage('zh-CN')).toBe('zh');
|
|
23
|
-
});
|
|
24
|
-
it('should return undefined for unsupported languages', ()=>{
|
|
25
|
-
expect(extractHeaderLanguage('xx')).toBeUndefined();
|
|
26
|
-
expect(extractHeaderLanguage('xx-XX')).toBeUndefined();
|
|
27
|
-
});
|
|
28
|
-
it('should respect quality ordering and return highest quality supported language', ()=>{
|
|
29
|
-
expect(extractHeaderLanguage('ja-JP;q=0.9, en;q=1.0')).toBe('en');
|
|
30
|
-
expect(extractHeaderLanguage('ja-JP, en;q=0.9')).toBe('ja');
|
|
31
|
-
});
|
|
32
|
-
it('should skip unsupported languages and find the next supported one', ()=>{
|
|
33
|
-
expect(extractHeaderLanguage('xx-XX, ja-JP')).toBe('ja');
|
|
34
|
-
expect(extractHeaderLanguage('xx, yy, de-DE')).toBe('de');
|
|
35
|
-
});
|
|
36
|
-
it('should handle empty string', ()=>{
|
|
37
|
-
// empty string produces one entry with empty language, which won't match
|
|
38
|
-
expect(extractHeaderLanguage('')).toBeUndefined();
|
|
39
|
-
});
|
|
40
|
-
});
|
|
41
|
-
|
|
42
|
-
//# sourceMappingURL=languages.spec.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/utilities/languages.spec.ts"],"sourcesContent":["import { describe, expect, it } from 'vitest'\n\nimport { extractHeaderLanguage } from './languages.js'\n\ndescribe('extractHeaderLanguage', () => {\n it('should return exact match when base language tag is supported', () => {\n expect(extractHeaderLanguage('ja')).toBe('ja')\n expect(extractHeaderLanguage('en')).toBe('en')\n expect(extractHeaderLanguage('de')).toBe('de')\n })\n\n it('should fall back to base tag when regional tag has no exact match', () => {\n expect(extractHeaderLanguage('ja-JP')).toBe('ja')\n expect(extractHeaderLanguage('de-AT')).toBe('de')\n expect(extractHeaderLanguage('fr-BE')).toBe('fr')\n })\n\n it('should match exact regional tag when it is supported', () => {\n // zh-TW is in acceptedLanguages, so it should match directly\n expect(extractHeaderLanguage('zh-TW')).toBe('zh-TW')\n // bn-BD is in acceptedLanguages\n expect(extractHeaderLanguage('bn-BD')).toBe('bn-BD')\n })\n\n it('should fall back to base tag for unsupported regional variant of a supported regional language', () => {\n // zh-CN is not in acceptedLanguages, but zh is\n expect(extractHeaderLanguage('zh-CN')).toBe('zh')\n })\n\n it('should return undefined for unsupported languages', () => {\n expect(extractHeaderLanguage('xx')).toBeUndefined()\n expect(extractHeaderLanguage('xx-XX')).toBeUndefined()\n })\n\n it('should respect quality ordering and return highest quality supported language', () => {\n expect(extractHeaderLanguage('ja-JP;q=0.9, en;q=1.0')).toBe('en')\n expect(extractHeaderLanguage('ja-JP, en;q=0.9')).toBe('ja')\n })\n\n it('should skip unsupported languages and find the next supported one', () => {\n expect(extractHeaderLanguage('xx-XX, ja-JP')).toBe('ja')\n expect(extractHeaderLanguage('xx, yy, de-DE')).toBe('de')\n })\n\n it('should handle empty string', () => {\n // empty string produces one entry with empty language, which won't match\n expect(extractHeaderLanguage('')).toBeUndefined()\n })\n})\n"],"names":["describe","expect","it","extractHeaderLanguage","toBe","toBeUndefined"],"mappings":"AAAA,SAASA,QAAQ,EAAEC,MAAM,EAAEC,EAAE,QAAQ,SAAQ;AAE7C,SAASC,qBAAqB,QAAQ,iBAAgB;AAEtDH,SAAS,yBAAyB;IAChCE,GAAG,iEAAiE;QAClED,OAAOE,sBAAsB,OAAOC,IAAI,CAAC;QACzCH,OAAOE,sBAAsB,OAAOC,IAAI,CAAC;QACzCH,OAAOE,sBAAsB,OAAOC,IAAI,CAAC;IAC3C;IAEAF,GAAG,qEAAqE;QACtED,OAAOE,sBAAsB,UAAUC,IAAI,CAAC;QAC5CH,OAAOE,sBAAsB,UAAUC,IAAI,CAAC;QAC5CH,OAAOE,sBAAsB,UAAUC,IAAI,CAAC;IAC9C;IAEAF,GAAG,wDAAwD;QACzD,6DAA6D;QAC7DD,OAAOE,sBAAsB,UAAUC,IAAI,CAAC;QAC5C,gCAAgC;QAChCH,OAAOE,sBAAsB,UAAUC,IAAI,CAAC;IAC9C;IAEAF,GAAG,kGAAkG;QACnG,+CAA+C;QAC/CD,OAAOE,sBAAsB,UAAUC,IAAI,CAAC;IAC9C;IAEAF,GAAG,qDAAqD;QACtDD,OAAOE,sBAAsB,OAAOE,aAAa;QACjDJ,OAAOE,sBAAsB,UAAUE,aAAa;IACtD;IAEAH,GAAG,iFAAiF;QAClFD,OAAOE,sBAAsB,0BAA0BC,IAAI,CAAC;QAC5DH,OAAOE,sBAAsB,oBAAoBC,IAAI,CAAC;IACxD;IAEAF,GAAG,qEAAqE;QACtED,OAAOE,sBAAsB,iBAAiBC,IAAI,CAAC;QACnDH,OAAOE,sBAAsB,kBAAkBC,IAAI,CAAC;IACtD;IAEAF,GAAG,8BAA8B;QAC/B,yEAAyE;QACzED,OAAOE,sBAAsB,KAAKE,aAAa;IACjD;AACF"}
|