gt-sanity 4.0.15 → 4.0.16

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/index.js CHANGED
@@ -2775,7 +2775,7 @@ const useTranslations = () => {
2775
2775
  ] }) })
2776
2776
  }
2777
2777
  ) : null;
2778
- var version = "4.0.15";
2778
+ var version = "4.0.16";
2779
2779
  function buildDebugInfo({
2780
2780
  secrets,
2781
2781
  preferences,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "gt-sanity",
3
- "version": "4.0.15",
3
+ "version": "4.0.16",
4
4
  "description": "General Translation integration with Sanity",
5
5
  "keywords": [
6
6
  "sanity",
@@ -48,7 +48,7 @@
48
48
  "jsonpointer": "^5.0.1",
49
49
  "lodash.merge": "^4.6.2",
50
50
  "sanity-plugin-internationalized-array": "^5.1.27",
51
- "generaltranslation": "9.4.0"
51
+ "generaltranslation": "9.4.1"
52
52
  },
53
53
  "devDependencies": {
54
54
  "@portabletext/types": "^2.0.15",
@@ -63,117 +63,181 @@ describe('Sanity API adapter', () => {
63
63
  });
64
64
  });
65
65
 
66
- it('canonicalizes the optional source locale when enqueueing files', async () => {
67
- fetchMock.mockImplementation(async (request) => {
68
- const body = JSON.parse(await new Request(request).text()) as {
69
- sourceLocale?: string;
70
- targetLocales: string[];
71
- };
72
- expect(body.sourceLocale).toBe('en-US');
73
- expect(body.targetLocales).toEqual(['es-ES']);
74
- return Response.json({
75
- jobData: {},
76
- locales: [],
77
- message: 'Enqueued files',
66
+ it.each([
67
+ ['source', 'target'],
68
+ ['en-us', 'es-es'],
69
+ ])(
70
+ 'canonicalizes enqueue locales %s / %s',
71
+ async (sourceLocale, targetLocale) => {
72
+ fetchMock.mockImplementation(async (request) => {
73
+ const body = JSON.parse(await new Request(request).text()) as {
74
+ sourceLocale?: string;
75
+ targetLocales: string[];
76
+ };
77
+ expect(body.sourceLocale).toBe('en-US');
78
+ expect(body.targetLocales).toEqual(['es-ES']);
79
+ return Response.json({
80
+ jobData: {},
81
+ locales: [],
82
+ message: 'Enqueued files',
83
+ });
78
84
  });
79
- });
80
85
 
81
- await api.enqueueFiles([{ fileId: 'file-id', versionId: 'version-id' }], {
82
- sourceLocale: 'source',
83
- targetLocales: ['target'],
84
- });
86
+ await api.enqueueFiles([{ fileId: 'file-id', versionId: 'version-id' }], {
87
+ sourceLocale,
88
+ targetLocales: [targetLocale],
89
+ });
85
90
 
86
- expect(fetchMock).toHaveBeenCalledOnce();
87
- });
91
+ expect(fetchMock).toHaveBeenCalledOnce();
92
+ }
93
+ );
94
+
95
+ it.each([
96
+ ['source', 'target'],
97
+ ['en-us', 'es-es'],
98
+ ])(
99
+ 'canonicalizes upload locales %s / %s',
100
+ async (sourceLocale, targetLocale) => {
101
+ fetchMock.mockImplementation(async (request) => {
102
+ const body = JSON.parse(await new Request(request).text()) as {
103
+ sourceLocale: string;
104
+ data: Array<{
105
+ source: { locale: string };
106
+ translations: Array<{ locale: string }>;
107
+ }>;
108
+ };
109
+ expect(body.sourceLocale).toBe('en-US');
110
+ expect(body.data[0].source.locale).toBe('en-US');
111
+ expect(body.data[0].translations[0].locale).toBe('es-ES');
112
+ return Response.json({
113
+ uploadedFiles: [],
114
+ count: 0,
115
+ message: 'Uploaded files',
116
+ });
117
+ });
118
+
119
+ await api.uploadTranslations(
120
+ [
121
+ {
122
+ source: {
123
+ content: 'source',
124
+ fileName: 'document.html',
125
+ fileFormat: 'HTML',
126
+ locale: sourceLocale,
127
+ },
128
+ translations: [
129
+ {
130
+ content: 'translation',
131
+ fileName: 'document.html',
132
+ fileFormat: 'HTML',
133
+ locale: targetLocale,
134
+ },
135
+ ],
136
+ },
137
+ ],
138
+ { sourceLocale }
139
+ );
88
140
 
89
- it('canonicalizes translation locales when uploading translations', async () => {
141
+ expect(fetchMock).toHaveBeenCalledOnce();
142
+ }
143
+ );
144
+
145
+ it('canonicalizes source upload locales without mutating input', async () => {
90
146
  fetchMock.mockImplementation(async (request) => {
91
- const body = JSON.parse(await new Request(request).text()) as {
92
- sourceLocale: string;
93
- data: Array<{ translations: Array<{ locale: string }> }>;
94
- };
95
- expect(body.sourceLocale).toBe('en-US');
96
- expect(body.data[0].translations[0].locale).toBe('es-ES');
147
+ const body = JSON.parse(await new Request(request).text());
148
+ expect(body).toMatchObject({
149
+ sourceLocale: 'en-US',
150
+ data: [{ source: { locale: 'en-US' } }],
151
+ });
97
152
  return Response.json({
98
153
  uploadedFiles: [],
99
154
  count: 0,
100
155
  message: 'Uploaded files',
101
156
  });
102
157
  });
103
-
104
- await api.uploadTranslations(
105
- [
106
- {
107
- source: {
108
- content: 'source',
109
- fileName: 'document.html',
110
- fileFormat: 'HTML',
111
- locale: 'source',
112
- },
113
- translations: [
114
- {
115
- content: 'translation',
116
- fileName: 'document.html',
117
- fileFormat: 'HTML',
118
- locale: 'target',
119
- },
120
- ],
158
+ const files = [
159
+ {
160
+ source: {
161
+ content: 'source',
162
+ fileName: 'document.html',
163
+ fileFormat: 'HTML' as const,
164
+ locale: 'en-us',
121
165
  },
122
- ],
123
- { sourceLocale: 'source' }
124
- );
166
+ },
167
+ ];
125
168
 
126
- expect(fetchMock).toHaveBeenCalledOnce();
127
- });
169
+ await api.uploadSourceFiles(files, { sourceLocale: 'en-us' });
128
170
 
129
- it('canonicalizes the locale when downloading one file', async () => {
130
- vi.mocked(downloadFile).mockResolvedValue(
131
- result({ data: Buffer.from('translated').toString('base64') })
132
- );
133
-
134
- await expect(
135
- api.downloadFile({ fileId: 'file-id', locale: 'target' })
136
- ).resolves.toBe('translated');
137
- expect(downloadFile).toHaveBeenCalledWith(
138
- expect.objectContaining({
139
- query: expect.objectContaining({ locale: 'es-ES' }),
140
- })
141
- );
171
+ expect(fetchMock).toHaveBeenCalledOnce();
172
+ expect(files[0].source.locale).toBe('en-us');
142
173
  });
143
174
 
144
- it('maps batch-download locales in both directions', async () => {
175
+ it('canonicalizes project setup locales', async () => {
145
176
  fetchMock.mockImplementation(async (request) => {
146
- const body = JSON.parse(await new Request(request).text()) as Array<{
147
- locale?: string;
148
- }>;
149
- expect(body).toEqual([{ fileId: 'file-id', locale: 'es-ES' }]);
150
- return Response.json({
151
- files: [
152
- {
153
- id: 'id',
154
- branchId: 'branch-id',
155
- fileId: 'file-id',
156
- locale: 'es-ES',
157
- versionId: 'version-id',
158
- fileName: 'document.html',
159
- data: Buffer.from('translated').toString('base64'),
160
- metadata: {},
161
- fileFormat: 'HTML',
162
- },
163
- ],
164
- count: 1,
165
- pending: [],
166
- });
177
+ const body = JSON.parse(await new Request(request).text());
178
+ expect(body.locales).toEqual(['en-US', 'es-ES']);
179
+ return Response.json({ status: 'completed' });
167
180
  });
168
181
 
169
- const response = await api.downloadFileBatch([
170
- { fileId: 'file-id', locale: 'target' },
171
- ]);
182
+ await api.setupProject([], { locales: ['source', 'es-es'] });
172
183
 
173
184
  expect(fetchMock).toHaveBeenCalledOnce();
174
- expect(response.files[0].locale).toBe('target');
175
185
  });
176
186
 
187
+ it.each(['target', 'es-es'])(
188
+ 'canonicalizes single download locale %s',
189
+ async (locale) => {
190
+ vi.mocked(downloadFile).mockResolvedValue(
191
+ result({ data: Buffer.from('translated').toString('base64') })
192
+ );
193
+
194
+ await expect(
195
+ api.downloadFile({ fileId: 'file-id', locale })
196
+ ).resolves.toBe('translated');
197
+ expect(downloadFile).toHaveBeenCalledWith(
198
+ expect.objectContaining({
199
+ query: expect.objectContaining({ locale: 'es-ES' }),
200
+ })
201
+ );
202
+ }
203
+ );
204
+
205
+ it.each(['target', 'es-es'])(
206
+ 'maps batch-download locale %s in both directions',
207
+ async (locale) => {
208
+ fetchMock.mockImplementation(async (request) => {
209
+ const body = JSON.parse(await new Request(request).text()) as Array<{
210
+ locale?: string;
211
+ }>;
212
+ expect(body).toEqual([{ fileId: 'file-id', locale: 'es-ES' }]);
213
+ return Response.json({
214
+ files: [
215
+ {
216
+ id: 'id',
217
+ branchId: 'branch-id',
218
+ fileId: 'file-id',
219
+ locale: 'es-ES',
220
+ versionId: 'version-id',
221
+ fileName: 'document.html',
222
+ data: Buffer.from('translated').toString('base64'),
223
+ metadata: {},
224
+ fileFormat: 'HTML',
225
+ },
226
+ ],
227
+ count: 1,
228
+ pending: [],
229
+ });
230
+ });
231
+
232
+ const response = await api.downloadFileBatch([
233
+ { fileId: 'file-id', locale },
234
+ ]);
235
+
236
+ expect(fetchMock).toHaveBeenCalledOnce();
237
+ expect(response.files[0].locale).toBe('target');
238
+ }
239
+ );
240
+
177
241
  it('does not request an empty batch download', async () => {
178
242
  await expect(api.downloadFileBatch([])).resolves.toEqual({
179
243
  files: [],