@dittowords/cli 3.10.0 → 3.10.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.
- package/LICENSE +21 -0
- package/bin/pull.js +13 -4
- package/bin/pull.js.map +1 -1
- package/lib/pull.test.ts +289 -101
- package/lib/pull.ts +17 -5
- package/package.json +2 -1
package/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2023 Ditto Tech, Inc.
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
package/bin/pull.js
CHANGED
|
@@ -33,12 +33,21 @@ const FORMAT_EXTENSIONS = {
|
|
|
33
33
|
"ios-stringsdict": ".stringsdict",
|
|
34
34
|
icu: ".json",
|
|
35
35
|
};
|
|
36
|
+
const getJsonFormatIsValid = (data) => {
|
|
37
|
+
try {
|
|
38
|
+
return (Object.keys(JSON.parse(data)).filter((k) => !k.startsWith("__variant"))
|
|
39
|
+
.length > 0);
|
|
40
|
+
}
|
|
41
|
+
catch {
|
|
42
|
+
return false;
|
|
43
|
+
}
|
|
44
|
+
};
|
|
36
45
|
const getFormatDataIsValid = {
|
|
37
|
-
flat:
|
|
38
|
-
structured:
|
|
39
|
-
icu:
|
|
46
|
+
flat: getJsonFormatIsValid,
|
|
47
|
+
structured: getJsonFormatIsValid,
|
|
48
|
+
icu: getJsonFormatIsValid,
|
|
40
49
|
android: (data) => data.includes("<string"),
|
|
41
|
-
"ios-strings": (data) =>
|
|
50
|
+
"ios-strings": (data) => data.includes(`" = "`),
|
|
42
51
|
"ios-stringsdict": (data) => data.includes("<key>"),
|
|
43
52
|
};
|
|
44
53
|
const getFormat = (formatFromSource) => {
|
package/bin/pull.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pull.js","sourceRoot":"","sources":["../lib/pull.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"pull.js","sourceRoot":"","sources":["../lib/pull.ts"],"names":[],"mappings":"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"}
|
package/lib/pull.test.ts
CHANGED
|
@@ -1,8 +1,12 @@
|
|
|
1
1
|
import fs from "fs";
|
|
2
2
|
import path from "path";
|
|
3
|
+
|
|
4
|
+
jest.mock("./api", () => ({
|
|
5
|
+
createApiClient: jest.fn(), // this needs to be mocked in each test that requires it
|
|
6
|
+
}));
|
|
3
7
|
import { createApiClient } from "./api";
|
|
4
8
|
|
|
5
|
-
const testProjects = [
|
|
9
|
+
const testProjects: Project[] = [
|
|
6
10
|
{
|
|
7
11
|
id: "1",
|
|
8
12
|
name: "Project 1",
|
|
@@ -11,8 +15,6 @@ const testProjects = [
|
|
|
11
15
|
{ id: "2", name: "Project 2", fileName: "Project 2" },
|
|
12
16
|
];
|
|
13
17
|
|
|
14
|
-
jest.mock("./api");
|
|
15
|
-
|
|
16
18
|
// TODO: all tests in this file currently failing because we're re-instantiating the api client
|
|
17
19
|
// everywhere and are unable to mock the return type separately for each instance of usage.
|
|
18
20
|
// We need to refactor to share one api client everywhere instead of always re-creating it.
|
|
@@ -29,7 +31,8 @@ jest.mock("./consts", () => ({
|
|
|
29
31
|
}));
|
|
30
32
|
|
|
31
33
|
import consts from "./consts";
|
|
32
|
-
import allPull from "./pull";
|
|
34
|
+
import allPull, { getFormatDataIsValid } from "./pull";
|
|
35
|
+
import { Project } from "./types";
|
|
33
36
|
|
|
34
37
|
const {
|
|
35
38
|
_testing: { cleanOutputFiles, downloadAndSaveVariant, downloadAndSaveBase },
|
|
@@ -67,49 +70,6 @@ describe("cleanOutputFiles", () => {
|
|
|
67
70
|
});
|
|
68
71
|
});
|
|
69
72
|
|
|
70
|
-
// describe("downloadAndSaveVariant", () => {
|
|
71
|
-
// beforeAll(() => {
|
|
72
|
-
// if (!fs.existsSync(consts.TEXT_DIR)) {
|
|
73
|
-
// fs.mkdirSync(consts.TEXT_DIR);
|
|
74
|
-
// }
|
|
75
|
-
// });
|
|
76
|
-
|
|
77
|
-
// it("writes a single file for default format", async () => {
|
|
78
|
-
// cleanOutputDir();
|
|
79
|
-
|
|
80
|
-
// const output = await downloadAndSaveVariant(variant, testProjects, "");
|
|
81
|
-
// expect(/saved to.*english\.json/.test(output)).toEqual(true);
|
|
82
|
-
// expect(output.match(/saved to/g)?.length).toEqual(1);
|
|
83
|
-
// expect(fs.readdirSync(consts.TEXT_DIR).length).toEqual(1);
|
|
84
|
-
// });
|
|
85
|
-
|
|
86
|
-
// it("writes multiple files for flat format", async () => {
|
|
87
|
-
// cleanOutputDir();
|
|
88
|
-
|
|
89
|
-
// const output = await downloadAndSaveVariant(variant, testProjects, "flat");
|
|
90
|
-
|
|
91
|
-
// expect(/saved to.*Project 1__english\.json/.test(output)).toEqual(true);
|
|
92
|
-
// expect(/saved to.*Project 2__english\.json/.test(output)).toEqual(true);
|
|
93
|
-
// expect(output.match(/saved to/g)?.length).toEqual(2);
|
|
94
|
-
// expect(fs.readdirSync(consts.TEXT_DIR).length).toEqual(2);
|
|
95
|
-
// });
|
|
96
|
-
|
|
97
|
-
// it("writes multiple files for structured format", async () => {
|
|
98
|
-
// cleanOutputDir();
|
|
99
|
-
|
|
100
|
-
// const output = await downloadAndSaveVariant(
|
|
101
|
-
// variant,
|
|
102
|
-
// testProjects,
|
|
103
|
-
// "structured"
|
|
104
|
-
// );
|
|
105
|
-
|
|
106
|
-
// expect(/saved to.*Project 1__english\.json/.test(output)).toEqual(true);
|
|
107
|
-
// expect(/saved to.*Project 2__english\.json/.test(output)).toEqual(true);
|
|
108
|
-
// expect(output.match(/saved to/g)?.length).toEqual(2);
|
|
109
|
-
// expect(fs.readdirSync(consts.TEXT_DIR).length).toEqual(2);
|
|
110
|
-
// });
|
|
111
|
-
// });
|
|
112
|
-
|
|
113
73
|
describe("downloadAndSaveBase", () => {
|
|
114
74
|
beforeAll(() => {
|
|
115
75
|
if (!fs.existsSync(consts.TEXT_DIR)) {
|
|
@@ -117,93 +77,321 @@ describe("downloadAndSaveBase", () => {
|
|
|
117
77
|
}
|
|
118
78
|
});
|
|
119
79
|
|
|
120
|
-
|
|
80
|
+
beforeEach(() => {
|
|
121
81
|
cleanOutputDir();
|
|
122
|
-
|
|
123
|
-
mockApi.get.mockResolvedValueOnce({ data: [] });
|
|
124
|
-
const output = await downloadAndSaveBase(
|
|
125
|
-
testProjects,
|
|
126
|
-
"" as any,
|
|
127
|
-
undefined
|
|
128
|
-
);
|
|
129
|
-
|
|
130
|
-
expect(/saved to.*text\.json/.test(output)).toEqual(true);
|
|
131
|
-
expect(output.match(/saved to/g)?.length).toEqual(1);
|
|
132
|
-
expect(fs.readdirSync(consts.TEXT_DIR).length).toEqual(1);
|
|
133
82
|
});
|
|
134
83
|
|
|
135
|
-
it("writes
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
84
|
+
it("writes the flat format to disk", async () => {
|
|
85
|
+
const mockData = {
|
|
86
|
+
hello: "world",
|
|
87
|
+
};
|
|
88
|
+
(createApiClient as any).mockImplementation(() => ({
|
|
89
|
+
get: () => ({ data: mockData }),
|
|
90
|
+
}));
|
|
139
91
|
const output = await downloadAndSaveBase(testProjects, "flat", undefined);
|
|
140
|
-
expect(/saved
|
|
141
|
-
|
|
142
|
-
expect(
|
|
143
|
-
expect(
|
|
92
|
+
expect(/successfully saved/i.test(output)).toEqual(true);
|
|
93
|
+
const directoryContents = fs.readdirSync(consts.TEXT_DIR);
|
|
94
|
+
expect(directoryContents.length).toEqual(testProjects.length);
|
|
95
|
+
expect(directoryContents.every((f) => f.endsWith(".json"))).toBe(true);
|
|
96
|
+
expect(
|
|
97
|
+
JSON.parse(
|
|
98
|
+
fs.readFileSync(
|
|
99
|
+
path.resolve(consts.TEXT_DIR, directoryContents[0]),
|
|
100
|
+
"utf8"
|
|
101
|
+
)
|
|
102
|
+
)
|
|
103
|
+
).toEqual(mockData);
|
|
144
104
|
});
|
|
145
105
|
|
|
146
|
-
it("writes
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
106
|
+
it("writes the structured format to disk", async () => {
|
|
107
|
+
const mockData = {
|
|
108
|
+
hello: { text: "world" },
|
|
109
|
+
};
|
|
110
|
+
(createApiClient as any).mockImplementation(() => ({
|
|
111
|
+
get: () => ({ data: mockData }),
|
|
112
|
+
}));
|
|
150
113
|
const output = await downloadAndSaveBase(
|
|
151
114
|
testProjects,
|
|
152
115
|
"structured",
|
|
153
116
|
undefined
|
|
154
117
|
);
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
expect(
|
|
158
|
-
expect(
|
|
159
|
-
expect(
|
|
118
|
+
expect(/successfully saved/i.test(output)).toEqual(true);
|
|
119
|
+
const directoryContents = fs.readdirSync(consts.TEXT_DIR);
|
|
120
|
+
expect(directoryContents.length).toEqual(testProjects.length);
|
|
121
|
+
expect(directoryContents.every((f) => f.endsWith(".json"))).toBe(true);
|
|
122
|
+
expect(
|
|
123
|
+
JSON.parse(
|
|
124
|
+
fs.readFileSync(
|
|
125
|
+
path.resolve(consts.TEXT_DIR, directoryContents[0]),
|
|
126
|
+
"utf8"
|
|
127
|
+
)
|
|
128
|
+
)
|
|
129
|
+
).toEqual(mockData);
|
|
160
130
|
});
|
|
161
131
|
|
|
162
|
-
it("writes
|
|
163
|
-
|
|
132
|
+
it("writes the icu format to disk", async () => {
|
|
133
|
+
const mockData = {
|
|
134
|
+
hello: "world",
|
|
135
|
+
};
|
|
136
|
+
(createApiClient as any).mockImplementation(() => ({
|
|
137
|
+
get: () => ({ data: mockData }),
|
|
138
|
+
}));
|
|
139
|
+
const output = await downloadAndSaveBase(testProjects, "icu", undefined);
|
|
140
|
+
expect(/successfully saved/i.test(output)).toEqual(true);
|
|
141
|
+
const directoryContents = fs.readdirSync(consts.TEXT_DIR);
|
|
142
|
+
expect(directoryContents.length).toEqual(testProjects.length);
|
|
143
|
+
expect(directoryContents.every((f) => f.endsWith(".json"))).toBe(true);
|
|
144
|
+
expect(
|
|
145
|
+
JSON.parse(
|
|
146
|
+
fs.readFileSync(
|
|
147
|
+
path.resolve(consts.TEXT_DIR, directoryContents[0]),
|
|
148
|
+
"utf8"
|
|
149
|
+
)
|
|
150
|
+
)
|
|
151
|
+
).toEqual(mockData);
|
|
152
|
+
});
|
|
164
153
|
|
|
165
|
-
|
|
154
|
+
it("writes the android format to disk", async () => {
|
|
155
|
+
const mockData = `
|
|
156
|
+
<?xml version="1.0" encoding="utf-8"?>
|
|
157
|
+
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
|
|
158
|
+
<string name="hello-world" ditto_api_id="hello-world">Hello World</string>
|
|
159
|
+
</resources>
|
|
160
|
+
`;
|
|
161
|
+
(createApiClient as any).mockImplementation(() => ({
|
|
162
|
+
get: () => ({ data: mockData }),
|
|
163
|
+
}));
|
|
166
164
|
const output = await downloadAndSaveBase(
|
|
167
165
|
testProjects,
|
|
168
166
|
"android",
|
|
169
167
|
undefined
|
|
170
168
|
);
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
expect(
|
|
174
|
-
expect(
|
|
175
|
-
expect(
|
|
169
|
+
expect(/successfully saved/i.test(output)).toEqual(true);
|
|
170
|
+
const directoryContents = fs.readdirSync(consts.TEXT_DIR);
|
|
171
|
+
expect(directoryContents.length).toEqual(testProjects.length);
|
|
172
|
+
expect(directoryContents.every((f) => f.endsWith(".xml"))).toBe(true);
|
|
173
|
+
expect(
|
|
174
|
+
fs
|
|
175
|
+
.readFileSync(
|
|
176
|
+
path.resolve(consts.TEXT_DIR, directoryContents[0]),
|
|
177
|
+
"utf8"
|
|
178
|
+
)
|
|
179
|
+
.replace(/\s/g, "")
|
|
180
|
+
).toEqual(mockData.replace(/\s/g, ""));
|
|
176
181
|
});
|
|
177
182
|
|
|
178
|
-
it("writes
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
183
|
+
it("writes the ios-strings format to disk", async () => {
|
|
184
|
+
const mockData = `
|
|
185
|
+
"hello" = "world";
|
|
186
|
+
`;
|
|
187
|
+
(createApiClient as any).mockImplementation(() => ({
|
|
188
|
+
get: () => ({ data: mockData }),
|
|
189
|
+
}));
|
|
182
190
|
const output = await downloadAndSaveBase(
|
|
183
191
|
testProjects,
|
|
184
192
|
"ios-strings",
|
|
185
193
|
undefined
|
|
186
194
|
);
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
expect(
|
|
190
|
-
expect(
|
|
191
|
-
expect(
|
|
195
|
+
expect(/successfully saved/i.test(output)).toEqual(true);
|
|
196
|
+
const directoryContents = fs.readdirSync(consts.TEXT_DIR);
|
|
197
|
+
expect(directoryContents.length).toEqual(testProjects.length);
|
|
198
|
+
expect(directoryContents.every((f) => f.endsWith(".strings"))).toBe(true);
|
|
199
|
+
expect(
|
|
200
|
+
fs
|
|
201
|
+
.readFileSync(
|
|
202
|
+
path.resolve(consts.TEXT_DIR, directoryContents[0]),
|
|
203
|
+
"utf8"
|
|
204
|
+
)
|
|
205
|
+
.replace(/\s/g, "")
|
|
206
|
+
).toEqual(mockData.replace(/\s/g, ""));
|
|
192
207
|
});
|
|
193
208
|
|
|
194
|
-
it("writes
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
209
|
+
it("writes the ios-stringsdict format to disk", async () => {
|
|
210
|
+
const mockData = `
|
|
211
|
+
<?xml version="1.0" encoding="utf-8"?>
|
|
212
|
+
<plist version="1.0">
|
|
213
|
+
<dict>
|
|
214
|
+
<key>hello-world</key>
|
|
215
|
+
<dict>
|
|
216
|
+
<key>NSStringLocalizedFormatKey</key>
|
|
217
|
+
<string>%1$#@count@</string>
|
|
218
|
+
<key>count</key>
|
|
219
|
+
<dict>
|
|
220
|
+
<key>NSStringFormatSpecTypeKey</key>
|
|
221
|
+
<string>NSStringPluralRuleType</string>
|
|
222
|
+
<key>NSStringFormatValueTypeKey</key>
|
|
223
|
+
<string>d</string>
|
|
224
|
+
<key>other</key>
|
|
225
|
+
<string>espanol</string>
|
|
226
|
+
</dict>
|
|
227
|
+
</dict>
|
|
228
|
+
</dict>
|
|
229
|
+
</plist>
|
|
230
|
+
`;
|
|
231
|
+
(createApiClient as any).mockImplementation(() => ({
|
|
232
|
+
get: () => ({ data: mockData }),
|
|
233
|
+
}));
|
|
198
234
|
const output = await downloadAndSaveBase(
|
|
199
235
|
testProjects,
|
|
200
236
|
"ios-stringsdict",
|
|
201
237
|
undefined
|
|
202
238
|
);
|
|
239
|
+
expect(/successfully saved/i.test(output)).toEqual(true);
|
|
240
|
+
const directoryContents = fs.readdirSync(consts.TEXT_DIR);
|
|
241
|
+
expect(directoryContents.length).toEqual(testProjects.length);
|
|
242
|
+
expect(directoryContents.every((f) => f.endsWith(".stringsdict"))).toBe(
|
|
243
|
+
true
|
|
244
|
+
);
|
|
245
|
+
expect(
|
|
246
|
+
fs
|
|
247
|
+
.readFileSync(
|
|
248
|
+
path.resolve(consts.TEXT_DIR, directoryContents[0]),
|
|
249
|
+
"utf8"
|
|
250
|
+
)
|
|
251
|
+
.replace(/\s/g, "")
|
|
252
|
+
).toEqual(mockData.replace(/\s/g, ""));
|
|
253
|
+
});
|
|
254
|
+
});
|
|
203
255
|
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
expect(
|
|
207
|
-
expect(
|
|
256
|
+
describe("getFormatDataIsValid", () => {
|
|
257
|
+
it("handles flat format appropriately", () => {
|
|
258
|
+
expect(getFormatDataIsValid.flat("{}")).toBe(false);
|
|
259
|
+
expect(getFormatDataIsValid.flat(`{ "hello": "world" }`)).toBe(true);
|
|
260
|
+
expect(
|
|
261
|
+
getFormatDataIsValid.flat(`{
|
|
262
|
+
"__variant-name": "English",
|
|
263
|
+
"__variant-description": ""
|
|
264
|
+
}`)
|
|
265
|
+
).toBe(false);
|
|
266
|
+
expect(
|
|
267
|
+
getFormatDataIsValid.flat(`{
|
|
268
|
+
"__variant-name": "English",
|
|
269
|
+
"__variant-description": "",
|
|
270
|
+
"hello": "world"
|
|
271
|
+
}`)
|
|
272
|
+
).toBe(true);
|
|
273
|
+
});
|
|
274
|
+
it("handles structured format appropriately", () => {
|
|
275
|
+
expect(getFormatDataIsValid.structured("{}")).toBe(false);
|
|
276
|
+
expect(
|
|
277
|
+
getFormatDataIsValid.structured(`{ "hello": { "text": "world" } }`)
|
|
278
|
+
).toBe(true);
|
|
279
|
+
expect(
|
|
280
|
+
getFormatDataIsValid.structured(`{
|
|
281
|
+
"__variant-name": "English",
|
|
282
|
+
"__variant-description": ""
|
|
283
|
+
}`)
|
|
284
|
+
).toBe(false);
|
|
285
|
+
expect(
|
|
286
|
+
getFormatDataIsValid.structured(`{
|
|
287
|
+
"__variant-name": "English",
|
|
288
|
+
"__variant-description": "",
|
|
289
|
+
"hello": { "text": "world" }
|
|
290
|
+
}`)
|
|
291
|
+
).toBe(true);
|
|
292
|
+
});
|
|
293
|
+
it("handles icu format appropriately", () => {
|
|
294
|
+
expect(getFormatDataIsValid.icu("{}")).toBe(false);
|
|
295
|
+
expect(getFormatDataIsValid.icu(`{ "hello": "world" }`)).toBe(true);
|
|
296
|
+
expect(
|
|
297
|
+
getFormatDataIsValid.icu(`{
|
|
298
|
+
"__variant-name": "English",
|
|
299
|
+
"__variant-description": ""
|
|
300
|
+
}`)
|
|
301
|
+
).toBe(false);
|
|
302
|
+
expect(
|
|
303
|
+
getFormatDataIsValid.icu(`{
|
|
304
|
+
"__variant-name": "English",
|
|
305
|
+
"__variant-description": "",
|
|
306
|
+
"hello": "world"
|
|
307
|
+
}`)
|
|
308
|
+
).toBe(true);
|
|
309
|
+
});
|
|
310
|
+
it("handles android format appropriately", () => {
|
|
311
|
+
expect(
|
|
312
|
+
getFormatDataIsValid.android(`
|
|
313
|
+
<?xml version="1.0" encoding="utf-8"?>
|
|
314
|
+
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"/>
|
|
315
|
+
`)
|
|
316
|
+
).toBe(false);
|
|
317
|
+
expect(
|
|
318
|
+
getFormatDataIsValid.android(`
|
|
319
|
+
<?xml version="1.0" encoding="utf-8"?>
|
|
320
|
+
<!--Variant Name: English-->
|
|
321
|
+
<!--Variant Description: -->
|
|
322
|
+
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"/>
|
|
323
|
+
`)
|
|
324
|
+
).toBe(false);
|
|
325
|
+
expect(
|
|
326
|
+
getFormatDataIsValid.android(`
|
|
327
|
+
<?xml version="1.0" encoding="utf-8"?>
|
|
328
|
+
<!--Variant Name: English-->
|
|
329
|
+
<!--Variant Description: -->
|
|
330
|
+
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
|
|
331
|
+
<string name="hello-world" ditto_api_id="hello-world">Hello World</string>
|
|
332
|
+
</resources>
|
|
333
|
+
`)
|
|
334
|
+
).toBe(true);
|
|
335
|
+
});
|
|
336
|
+
it("handles ios-strings format appropriately", () => {
|
|
337
|
+
expect(getFormatDataIsValid["ios-strings"]("")).toBe(false);
|
|
338
|
+
expect(
|
|
339
|
+
getFormatDataIsValid["ios-strings"](`
|
|
340
|
+
/* Variant Name: English */
|
|
341
|
+
/* Variant Description: */
|
|
342
|
+
`)
|
|
343
|
+
).toBe(false);
|
|
344
|
+
expect(
|
|
345
|
+
getFormatDataIsValid["ios-strings"](`
|
|
346
|
+
/* Variant Name: English */
|
|
347
|
+
/* Variant Description: */
|
|
348
|
+
"Hello" = "World";
|
|
349
|
+
`)
|
|
350
|
+
).toBe(true);
|
|
351
|
+
});
|
|
352
|
+
it("handles ios-stringsdict format appropriately", () => {
|
|
353
|
+
expect(
|
|
354
|
+
getFormatDataIsValid["ios-stringsdict"](`
|
|
355
|
+
<?xml version="1.0" encoding="utf-8"?>
|
|
356
|
+
<plist version="1.0">
|
|
357
|
+
<dict/>
|
|
358
|
+
</plist>
|
|
359
|
+
`)
|
|
360
|
+
).toBe(false);
|
|
361
|
+
expect(
|
|
362
|
+
getFormatDataIsValid["ios-stringsdict"](`
|
|
363
|
+
<?xml version="1.0" encoding="utf-8"?>
|
|
364
|
+
<!--Variant Name: English-->
|
|
365
|
+
<!--Variant Description: -->
|
|
366
|
+
<plist version="1.0">
|
|
367
|
+
<dict/>
|
|
368
|
+
</plist>
|
|
369
|
+
`)
|
|
370
|
+
).toBe(false);
|
|
371
|
+
expect(
|
|
372
|
+
getFormatDataIsValid["ios-stringsdict"](`
|
|
373
|
+
<?xml version="1.0" encoding="utf-8"?>
|
|
374
|
+
<!--Variant Name: English-->
|
|
375
|
+
<!--Variant Description: -->
|
|
376
|
+
<plist version="1.0">
|
|
377
|
+
<dict>
|
|
378
|
+
<key>Hello World</key>
|
|
379
|
+
<dict>
|
|
380
|
+
<key>NSStringLocalizedFormatKey</key>
|
|
381
|
+
<string>%1$#@count@</string>
|
|
382
|
+
<key>count</key>
|
|
383
|
+
<dict>
|
|
384
|
+
<key>NSStringFormatSpecTypeKey</key>
|
|
385
|
+
<string>NSStringPluralRuleType</string>
|
|
386
|
+
<key>NSStringFormatValueTypeKey</key>
|
|
387
|
+
<string>d</string>
|
|
388
|
+
<key>other</key>
|
|
389
|
+
<string>espanol</string>
|
|
390
|
+
</dict>
|
|
391
|
+
</dict>
|
|
392
|
+
</dict>
|
|
393
|
+
</plist>
|
|
394
|
+
`)
|
|
395
|
+
).toBe(true);
|
|
208
396
|
});
|
|
209
397
|
});
|
package/lib/pull.ts
CHANGED
|
@@ -13,6 +13,7 @@ import { generateJsDriver } from "./utils/generateJsDriver";
|
|
|
13
13
|
import { cleanFileName } from "./utils/cleanFileName";
|
|
14
14
|
import { SourceInformation, Token, Project, SupportedFormat } from "./types";
|
|
15
15
|
import { fetchVariants } from "./http/fetchVariants";
|
|
16
|
+
import { kMaxLength } from "buffer";
|
|
16
17
|
|
|
17
18
|
const SUPPORTED_FORMATS: SupportedFormat[] = [
|
|
18
19
|
"flat",
|
|
@@ -34,12 +35,23 @@ const FORMAT_EXTENSIONS = {
|
|
|
34
35
|
icu: ".json",
|
|
35
36
|
};
|
|
36
37
|
|
|
37
|
-
const
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
38
|
+
const getJsonFormatIsValid = (data: string) => {
|
|
39
|
+
try {
|
|
40
|
+
return Object.keys(JSON.parse(data)).some(
|
|
41
|
+
(k) => !k.startsWith("__variant")
|
|
42
|
+
);
|
|
43
|
+
} catch {
|
|
44
|
+
return false;
|
|
45
|
+
}
|
|
46
|
+
};
|
|
47
|
+
|
|
48
|
+
// exported for test usage only
|
|
49
|
+
export const getFormatDataIsValid = {
|
|
50
|
+
flat: getJsonFormatIsValid,
|
|
51
|
+
structured: getJsonFormatIsValid,
|
|
52
|
+
icu: getJsonFormatIsValid,
|
|
41
53
|
android: (data: string) => data.includes("<string"),
|
|
42
|
-
"ios-strings": (data: string) =>
|
|
54
|
+
"ios-strings": (data: string) => data.includes(`" = "`),
|
|
43
55
|
"ios-stringsdict": (data: string) => data.includes("<key>"),
|
|
44
56
|
};
|
|
45
57
|
|