@formatjs/cli 5.0.5 → 5.0.8

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (45) hide show
  1. package/BUILD +22 -0
  2. package/CHANGELOG.md +1098 -0
  3. package/LICENSE.md +0 -0
  4. package/README.md +0 -0
  5. package/integration-tests/BUILD +81 -0
  6. package/integration-tests/compile/__snapshots__/integration.test.ts.snap +1056 -0
  7. package/integration-tests/compile/glob/en.json +14 -0
  8. package/integration-tests/compile/glob/en2.json +14 -0
  9. package/integration-tests/compile/glob-conflict/en.json +14 -0
  10. package/integration-tests/compile/glob-conflict/en2.json +14 -0
  11. package/integration-tests/compile/integration.test.ts +213 -0
  12. package/integration-tests/compile/lang/empty.json +1 -0
  13. package/integration-tests/compile/lang/en-crowdin.json +14 -0
  14. package/integration-tests/compile/lang/en-format.json +14 -0
  15. package/integration-tests/compile/lang/en-lokalise.json +14 -0
  16. package/integration-tests/compile/lang/en-simple.json +5 -0
  17. package/integration-tests/compile/lang/en-smartling.json +24 -0
  18. package/integration-tests/compile/lang/en-transifex.json +14 -0
  19. package/integration-tests/compile/lang/en.json +22 -0
  20. package/integration-tests/compile/lang/malformed-messages.json +14 -0
  21. package/integration-tests/compile_folder/__snapshots__/integration.test.ts.snap +44 -0
  22. package/integration-tests/compile_folder/integration.test.ts +33 -0
  23. package/integration-tests/compile_folder/lang/empty.json +1 -0
  24. package/integration-tests/compile_folder/lang/en.json +14 -0
  25. package/integration-tests/compile_folder/lang/en2.json +14 -0
  26. package/integration-tests/extract/__snapshots__/integration.test.ts.snap +932 -0
  27. package/integration-tests/extract/defineMessages/actual.ignore.js +22 -0
  28. package/integration-tests/extract/defineMessages/actual.js +65 -0
  29. package/integration-tests/extract/defineMessages/bad.json +1 -0
  30. package/integration-tests/extract/duplicated/file1.tsx +10 -0
  31. package/integration-tests/extract/duplicated/file2.tsx +10 -0
  32. package/integration-tests/extract/integration.test.ts +240 -0
  33. package/integration-tests/extract/nonDuplicated/file1.tsx +14 -0
  34. package/integration-tests/extract/nonDuplicated/file2.tsx +14 -0
  35. package/integration-tests/extract/typescript/actual.ignore.tsx +21 -0
  36. package/integration-tests/extract/typescript/actual.tsx +104 -0
  37. package/integration-tests/extract/typescript/err.tsx +1 -0
  38. package/integration-tests/extract/typescript/pragma.tsx +77 -0
  39. package/integration-tests/extract-vue/__snapshots__/integration.test.ts.snap +17 -0
  40. package/integration-tests/extract-vue/comp.vue +22 -0
  41. package/integration-tests/extract-vue/integration.test.ts +14 -0
  42. package/integration-tests/formatter.js +18 -0
  43. package/integration-tests/package.json +5 -0
  44. package/package.json +3 -3
  45. package/bin/formatjs +0 -155103
@@ -0,0 +1,932 @@
1
+ // Jest Snapshot v1, https://goo.gl/fbAQLP
2
+
3
+ exports[`[glob] basic case: defineMessages -> stdout 1`] = `
4
+ Object {
5
+ "stderr": "",
6
+ "stdout": "{
7
+ \\"286VP8\\": {
8
+ \\"defaultMessage\\": \\"No ID\\",
9
+ \\"description\\": \\"no ID\\"
10
+ },
11
+ \\"OvR0NS\\": {
12
+ \\"defaultMessage\\": \\"I have {count, plural, one{a dog} other{many dogs}}\\"
13
+ },
14
+ \\"app.home.kittens\\": {
15
+ \\"defaultMessage\\": \\"{count, plural, =0 {😭} one {# kitten} other {# kittens}}\\",
16
+ \\"description\\": \\"Counts kittens\\"
17
+ },
18
+ \\"escaped.apostrophe\\": {
19
+ \\"defaultMessage\\": \\"A quoted value ''{value}'\\",
20
+ \\"description\\": \\"Escaped apostrophe\\"
21
+ },
22
+ \\"foo.bar.baz\\": {
23
+ \\"defaultMessage\\": \\"Hello World!\\",
24
+ \\"description\\": \\"The default message\\"
25
+ },
26
+ \\"foo.bar.biff\\": {
27
+ \\"defaultMessage\\": \\"Hello Nurse!\\",
28
+ \\"description\\": \\"Another message\\"
29
+ },
30
+ \\"ignore\\": {
31
+ \\"defaultMessage\\": \\"ignore\\"
32
+ },
33
+ \\"inline-msg\\": {
34
+ \\"defaultMessage\\": \\"inline message\\",
35
+ \\"description\\": \\"inline description\\"
36
+ },
37
+ \\"trailing.ws\\": {
38
+ \\"defaultMessage\\": \\"Some whitespace\\",
39
+ \\"description\\": \\"Whitespace\\"
40
+ }
41
+ }
42
+ ",
43
+ }
44
+ `;
45
+
46
+ exports[`basic case: defineMessages -> out-file 1`] = `
47
+ Object {
48
+ "stderr": "",
49
+ "stdout": "",
50
+ }
51
+ `;
52
+
53
+ exports[`basic case: defineMessages -> out-file 2`] = `
54
+ Object {
55
+ "286VP8": Object {
56
+ "defaultMessage": "No ID",
57
+ "description": "no ID",
58
+ },
59
+ "OvR0NS": Object {
60
+ "defaultMessage": "I have {count, plural, one{a dog} other{many dogs}}",
61
+ },
62
+ "app.home.kittens": Object {
63
+ "defaultMessage": "{count, plural, =0 {😭} one {# kitten} other {# kittens}}",
64
+ "description": "Counts kittens",
65
+ },
66
+ "escaped.apostrophe": Object {
67
+ "defaultMessage": "A quoted value ''{value}'",
68
+ "description": "Escaped apostrophe",
69
+ },
70
+ "foo.bar.baz": Object {
71
+ "defaultMessage": "Hello World!",
72
+ "description": "The default message",
73
+ },
74
+ "foo.bar.biff": Object {
75
+ "defaultMessage": "Hello Nurse!",
76
+ "description": "Another message",
77
+ },
78
+ "inline-msg": Object {
79
+ "defaultMessage": "inline message",
80
+ "description": "inline description",
81
+ },
82
+ "trailing.ws": Object {
83
+ "defaultMessage": "Some whitespace",
84
+ "description": "Whitespace",
85
+ },
86
+ }
87
+ `;
88
+
89
+ exports[`basic case: defineMessages -> out-file with location 1`] = `
90
+ Object {
91
+ "stderr": "",
92
+ "stdout": "",
93
+ }
94
+ `;
95
+
96
+ exports[`basic case: defineMessages -> out-file with location 2`] = `
97
+ Object {
98
+ "286VP8": Object {
99
+ "col": 18,
100
+ "defaultMessage": "No ID",
101
+ "description": "no ID",
102
+ "end": 935,
103
+ "file": "defineMessages/actual.js",
104
+ "line": 34,
105
+ "start": 874,
106
+ },
107
+ "OvR0NS": Object {
108
+ "col": 10,
109
+ "defaultMessage": "I have {count, plural, one{a dog} other{many dogs}}",
110
+ "end": 1028,
111
+ "file": "defineMessages/actual.js",
112
+ "line": 38,
113
+ "start": 947,
114
+ },
115
+ "app.home.kittens": Object {
116
+ "col": 10,
117
+ "defaultMessage": "{count, plural, =0 {😭} one {# kitten} other {# kittens}}",
118
+ "description": "Counts kittens",
119
+ "end": 520,
120
+ "file": "defineMessages/actual.js",
121
+ "line": 15,
122
+ "start": 370,
123
+ },
124
+ "escaped.apostrophe": Object {
125
+ "col": 10,
126
+ "defaultMessage": "A quoted value ''{value}'",
127
+ "description": "Escaped apostrophe",
128
+ "end": 784,
129
+ "file": "defineMessages/actual.js",
130
+ "line": 25,
131
+ "start": 660,
132
+ },
133
+ "foo.bar.baz": Object {
134
+ "col": 9,
135
+ "defaultMessage": "Hello World!",
136
+ "description": "The default message",
137
+ "end": 244,
138
+ "file": "defineMessages/actual.js",
139
+ "line": 5,
140
+ "start": 139,
141
+ },
142
+ "foo.bar.biff": Object {
143
+ "col": 10,
144
+ "defaultMessage": "Hello Nurse!",
145
+ "description": "Another message",
146
+ "end": 358,
147
+ "file": "defineMessages/actual.js",
148
+ "line": 10,
149
+ "start": 256,
150
+ },
151
+ "inline-msg": Object {
152
+ "col": 10,
153
+ "defaultMessage": "inline message",
154
+ "description": "inline description",
155
+ "end": 1505,
156
+ "file": "defineMessages/actual.js",
157
+ "line": 56,
158
+ "start": 1358,
159
+ },
160
+ "trailing.ws": Object {
161
+ "col": 21,
162
+ "defaultMessage": "Some whitespace",
163
+ "description": "Whitespace",
164
+ "end": 648,
165
+ "file": "defineMessages/actual.js",
166
+ "line": 20,
167
+ "start": 543,
168
+ },
169
+ }
170
+ `;
171
+
172
+ exports[`basic case: defineMessages -> stdout 1`] = `
173
+ Object {
174
+ "stderr": "",
175
+ "stdout": "{
176
+ \\"286VP8\\": {
177
+ \\"defaultMessage\\": \\"No ID\\",
178
+ \\"description\\": \\"no ID\\"
179
+ },
180
+ \\"OvR0NS\\": {
181
+ \\"defaultMessage\\": \\"I have {count, plural, one{a dog} other{many dogs}}\\"
182
+ },
183
+ \\"app.home.kittens\\": {
184
+ \\"defaultMessage\\": \\"{count, plural, =0 {😭} one {# kitten} other {# kittens}}\\",
185
+ \\"description\\": \\"Counts kittens\\"
186
+ },
187
+ \\"escaped.apostrophe\\": {
188
+ \\"defaultMessage\\": \\"A quoted value ''{value}'\\",
189
+ \\"description\\": \\"Escaped apostrophe\\"
190
+ },
191
+ \\"foo.bar.baz\\": {
192
+ \\"defaultMessage\\": \\"Hello World!\\",
193
+ \\"description\\": \\"The default message\\"
194
+ },
195
+ \\"foo.bar.biff\\": {
196
+ \\"defaultMessage\\": \\"Hello Nurse!\\",
197
+ \\"description\\": \\"Another message\\"
198
+ },
199
+ \\"inline-msg\\": {
200
+ \\"defaultMessage\\": \\"inline message\\",
201
+ \\"description\\": \\"inline description\\"
202
+ },
203
+ \\"trailing.ws\\": {
204
+ \\"defaultMessage\\": \\"Some whitespace\\",
205
+ \\"description\\": \\"Whitespace\\"
206
+ }
207
+ }
208
+ ",
209
+ }
210
+ `;
211
+
212
+ exports[`basic case: help 1`] = `
213
+ Object {
214
+ "stderr": "",
215
+ "stdout": "Usage: formatjs extract [options] [files...]
216
+
217
+ Extract string messages from React components that use react-intl.
218
+ The input language is expected to be TypeScript or ES2017 with JSX.
219
+
220
+ Options:
221
+ --format <path> Path to a formatter file that controls the shape of JSON file from \`--out-file\`.
222
+ The formatter file must export a function called \`format\` with the signature
223
+ \`\`\`
224
+ type FormatFn = <T = Record<string, MessageDescriptor>>(
225
+ msgs: Record<string, MessageDescriptor>
226
+ ) => T
227
+ \`\`\`
228
+ This is especially useful to convert from our extracted format to a TMS-specific format.
229
+
230
+ --out-file <path> The target file path where the plugin will output an aggregated
231
+ \`.json\` file of all the translations from the \`files\` supplied.
232
+ --id-interpolation-pattern <pattern> If certain message descriptors don't have id, this \`pattern\` will be used to automatically
233
+ generate IDs for them. Default to \`[sha512:contenthash:base64:6]\` where \`contenthash\` is the hash of
234
+ \`defaultMessage\` and \`description\`.
235
+ See https://github.com/webpack/loader-utils#interpolatename for sample patterns (default: \\"[sha512:contenthash:base64:6]\\")
236
+ --extract-source-location Whether the metadata about the location of the message in the source file should be
237
+ extracted. If \`true\`, then \`file\`, \`start\`, and \`end\` fields will exist for each
238
+ extracted message descriptors. (default: false)
239
+ --remove-default-message Remove \`defaultMessage\` field in generated js after extraction (default: false)
240
+ --additional-component-names <comma-separated-names> Additional component names to extract messages from, e.g: \`'FormattedFooBarMessage'\`.
241
+ **NOTE**: By default we check for the fact that \`FormattedMessage\`
242
+ is imported from \`moduleSourceName\` to make sure variable alias
243
+ works. This option does not do that so it's less safe.
244
+ --additional-function-names <comma-separated-names> Additional function names to extract messages from, e.g: \`'$t'\`.
245
+ --ignore <files...> List of glob paths to **not** extract translations from.
246
+ --throws Whether to throw an exception when we fail to process any file in the batch.
247
+ --pragma <pragma> parse specific additional custom pragma. This allows you to tag certain file with metadata such as \`project\`. For example with this file:
248
+
249
+ \`\`\`
250
+ // @intl-meta project:my-custom-project
251
+ import {FormattedMessage} from 'react-intl';
252
+
253
+ <FormattedMessage defaultMessage=\\"foo\\" id=\\"bar\\" />;
254
+ \`\`\`
255
+
256
+ and with option \`{pragma: \\"intl-meta\\"}\`, we'll parse out \`// @intl-meta project:my-custom-project\` into \`{project: 'my-custom-project'}\` in the result file.
257
+ --preserve-whitespace Whether to preserve whitespace and newlines.
258
+ --flatten Whether to hoist selectors & flatten sentences as much as possible. E.g:
259
+ \\"I have {count, plural, one{a dog} other{many dogs}}\\"
260
+ becomes \\"{count, plural, one{I have a dog} other{I have many dogs}}\\".
261
+ The goal is to provide as many full sentences as possible since fragmented
262
+ sentences are not translator-friendly.
263
+ -h, --help display help for command
264
+ ",
265
+ }
266
+ `;
267
+
268
+ exports[`duplicated descriptor ids shows warning 1`] = `
269
+ Object {
270
+ "foo": Object {
271
+ "defaultMessage": "Bar",
272
+ },
273
+ }
274
+ `;
275
+
276
+ exports[`flatten defineMessages -> stdout 1`] = `
277
+ Object {
278
+ "stderr": "",
279
+ "stdout": "{
280
+ \\"286VP8\\": {
281
+ \\"defaultMessage\\": \\"No ID\\",
282
+ \\"description\\": \\"no ID\\"
283
+ },
284
+ \\"OvR0NS\\": {
285
+ \\"defaultMessage\\": \\"{count,plural,one{I have a dog} other{I have many dogs}}\\"
286
+ },
287
+ \\"app.home.kittens\\": {
288
+ \\"defaultMessage\\": \\"{count,plural,=0{😭} one{# kitten} other{# kittens}}\\",
289
+ \\"description\\": \\"Counts kittens\\"
290
+ },
291
+ \\"escaped.apostrophe\\": {
292
+ \\"defaultMessage\\": \\"A quoted value '{value}'\\",
293
+ \\"description\\": \\"Escaped apostrophe\\"
294
+ },
295
+ \\"foo.bar.baz\\": {
296
+ \\"defaultMessage\\": \\"Hello World!\\",
297
+ \\"description\\": \\"The default message\\"
298
+ },
299
+ \\"foo.bar.biff\\": {
300
+ \\"defaultMessage\\": \\"Hello Nurse!\\",
301
+ \\"description\\": \\"Another message\\"
302
+ },
303
+ \\"inline-msg\\": {
304
+ \\"defaultMessage\\": \\"inline message\\",
305
+ \\"description\\": \\"inline description\\"
306
+ },
307
+ \\"trailing.ws\\": {
308
+ \\"defaultMessage\\": \\"Some whitespace\\",
309
+ \\"description\\": \\"Whitespace\\"
310
+ }
311
+ }
312
+ ",
313
+ }
314
+ `;
315
+
316
+ exports[`ignore -> stdout JS 1`] = `
317
+ Object {
318
+ "286VP8": Object {
319
+ "defaultMessage": "No ID",
320
+ "description": "no ID",
321
+ },
322
+ "OvR0NS": Object {
323
+ "defaultMessage": "I have {count, plural, one{a dog} other{many dogs}}",
324
+ },
325
+ "app.home.kittens": Object {
326
+ "defaultMessage": "{count, plural, =0 {😭} one {# kitten} other {# kittens}}",
327
+ "description": "Counts kittens",
328
+ },
329
+ "escaped.apostrophe": Object {
330
+ "defaultMessage": "A quoted value ''{value}'",
331
+ "description": "Escaped apostrophe",
332
+ },
333
+ "foo.bar.baz": Object {
334
+ "defaultMessage": "Hello World!",
335
+ "description": "The default message",
336
+ },
337
+ "foo.bar.biff": Object {
338
+ "defaultMessage": "Hello Nurse!",
339
+ "description": "Another message",
340
+ },
341
+ "ignore": Object {
342
+ "defaultMessage": "ignore",
343
+ },
344
+ "inline-msg": Object {
345
+ "defaultMessage": "inline message",
346
+ "description": "inline description",
347
+ },
348
+ "trailing.ws": Object {
349
+ "defaultMessage": "Some whitespace",
350
+ "description": "Whitespace",
351
+ },
352
+ }
353
+ `;
354
+
355
+ exports[`ignore -> stdout TS 1`] = `
356
+ Object {
357
+ "stderr": "",
358
+ "stdout": "{
359
+ \\"286VP8\\": {
360
+ \\"defaultMessage\\": \\"No ID\\",
361
+ \\"description\\": \\"no ID\\"
362
+ },
363
+ \\"app.home.kittens\\": {
364
+ \\"defaultMessage\\": \\"{count, plural, =0 {😭} one {# kitten} other {# kittens}}\\",
365
+ \\"description\\": \\"Counts kittens\\"
366
+ },
367
+ \\"eCy8Eo\\": {
368
+ \\"defaultMessage\\": \\"No Desc\\"
369
+ },
370
+ \\"escaped.apostrophe\\": {
371
+ \\"defaultMessage\\": \\"A quoted value ''{value}'\\",
372
+ \\"description\\": \\"Escaped apostrophe\\"
373
+ },
374
+ \\"foo.bar.baz\\": {
375
+ \\"defaultMessage\\": \\"Hello World!\\",
376
+ \\"description\\": \\"The default message\\"
377
+ },
378
+ \\"foo.bar.biff\\": {
379
+ \\"defaultMessage\\": \\"Hello Nurse!\\",
380
+ \\"description\\": \\"Another message\\"
381
+ },
382
+ \\"inline\\": {
383
+ \\"defaultMessage\\": \\"formatted message\\",
384
+ \\"description\\": \\"foo\\"
385
+ },
386
+ \\"inline.linebreak\\": {
387
+ \\"defaultMessage\\": \\"formatted message with linebreak\\",
388
+ \\"description\\": \\"foo\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t\\\\tbar\\"
389
+ },
390
+ \\"linebreak\\": {
391
+ \\"defaultMessage\\": \\"this is a message\\",
392
+ \\"description\\": \\"this is\\\\na\\\\ndescription\\"
393
+ },
394
+ \\"newline\\": {
395
+ \\"defaultMessage\\": \\"this is a message\\",
396
+ \\"description\\": \\"this is a description\\"
397
+ },
398
+ \\"templateLinebreak\\": {
399
+ \\"defaultMessage\\": \\"this is a message\\",
400
+ \\"description\\": \\"this is\\\\n a\\\\n description\\"
401
+ },
402
+ \\"trailing.ws\\": {
403
+ \\"defaultMessage\\": \\"Some whitespace\\",
404
+ \\"description\\": \\"Whitespace\\"
405
+ }
406
+ }
407
+ ",
408
+ }
409
+ `;
410
+
411
+ exports[`non duplicated descriptors does not throw 1`] = `
412
+ Object {
413
+ "stderr": "",
414
+ "stdout": "",
415
+ }
416
+ `;
417
+
418
+ exports[`non duplicated descriptors does not throw 2`] = `
419
+ Object {
420
+ "foo": Object {
421
+ "defaultMessage": "Foo",
422
+ "description": Object {
423
+ "maxCharacterCount": 2,
424
+ "text": "Bar",
425
+ },
426
+ },
427
+ }
428
+ `;
429
+
430
+ exports[`pragma 1`] = `
431
+ Object {
432
+ "stderr": "",
433
+ "stdout": "{
434
+ \\"286VP8\\": {
435
+ \\"defaultMessage\\": \\"No ID\\",
436
+ \\"description\\": \\"no ID\\",
437
+ \\"meta\\": {
438
+ \\"baz\\": \\"1\\",
439
+ \\"foo\\": \\"bar\\"
440
+ }
441
+ },
442
+ \\"app.home.kittens\\": {
443
+ \\"defaultMessage\\": \\"{count, plural, =0 {😭} one {# kitten} other {# kittens}}\\",
444
+ \\"description\\": \\"Counts kittens\\",
445
+ \\"meta\\": {
446
+ \\"baz\\": \\"1\\",
447
+ \\"foo\\": \\"bar\\"
448
+ }
449
+ },
450
+ \\"eCy8Eo\\": {
451
+ \\"defaultMessage\\": \\"No Desc\\",
452
+ \\"meta\\": {
453
+ \\"baz\\": \\"1\\",
454
+ \\"foo\\": \\"bar\\"
455
+ }
456
+ },
457
+ \\"escaped.apostrophe\\": {
458
+ \\"defaultMessage\\": \\"A quoted value ''{value}'\\",
459
+ \\"description\\": \\"Escaped apostrophe\\",
460
+ \\"meta\\": {
461
+ \\"baz\\": \\"1\\",
462
+ \\"foo\\": \\"bar\\"
463
+ }
464
+ },
465
+ \\"foo.bar.baz\\": {
466
+ \\"defaultMessage\\": \\"Hello World!\\",
467
+ \\"description\\": \\"The default message\\",
468
+ \\"meta\\": {
469
+ \\"baz\\": \\"1\\",
470
+ \\"foo\\": \\"bar\\"
471
+ }
472
+ },
473
+ \\"foo.bar.biff\\": {
474
+ \\"defaultMessage\\": \\"Hello Nurse!\\",
475
+ \\"description\\": \\"Another message\\",
476
+ \\"meta\\": {
477
+ \\"baz\\": \\"1\\",
478
+ \\"foo\\": \\"bar\\"
479
+ }
480
+ },
481
+ \\"inline\\": {
482
+ \\"defaultMessage\\": \\"formatted message\\",
483
+ \\"description\\": \\"foo\\",
484
+ \\"meta\\": {
485
+ \\"baz\\": \\"1\\",
486
+ \\"foo\\": \\"bar\\"
487
+ }
488
+ },
489
+ \\"trailing.ws\\": {
490
+ \\"defaultMessage\\": \\"Some whitespace\\",
491
+ \\"description\\": \\"Whitespace\\",
492
+ \\"meta\\": {
493
+ \\"baz\\": \\"1\\",
494
+ \\"foo\\": \\"bar\\"
495
+ }
496
+ }
497
+ }
498
+ ",
499
+ }
500
+ `;
501
+
502
+ exports[`typescript -> stdout 1`] = `
503
+ Object {
504
+ "stderr": "",
505
+ "stdout": "{
506
+ \\"286VP8\\": {
507
+ \\"defaultMessage\\": \\"No ID\\",
508
+ \\"description\\": \\"no ID\\"
509
+ },
510
+ \\"app.home.kittens\\": {
511
+ \\"defaultMessage\\": \\"{count, plural, =0 {😭} one {# kitten} other {# kittens}}\\",
512
+ \\"description\\": \\"Counts kittens\\"
513
+ },
514
+ \\"eCy8Eo\\": {
515
+ \\"defaultMessage\\": \\"No Desc\\"
516
+ },
517
+ \\"escaped.apostrophe\\": {
518
+ \\"defaultMessage\\": \\"A quoted value ''{value}'\\",
519
+ \\"description\\": \\"Escaped apostrophe\\"
520
+ },
521
+ \\"foo.bar.baz\\": {
522
+ \\"defaultMessage\\": \\"Hello World!\\",
523
+ \\"description\\": \\"The default message\\"
524
+ },
525
+ \\"foo.bar.biff\\": {
526
+ \\"defaultMessage\\": \\"Hello Nurse!\\",
527
+ \\"description\\": \\"Another message\\"
528
+ },
529
+ \\"inline\\": {
530
+ \\"defaultMessage\\": \\"formatted message\\",
531
+ \\"description\\": \\"foo\\"
532
+ },
533
+ \\"inline.linebreak\\": {
534
+ \\"defaultMessage\\": \\"formatted message with linebreak\\",
535
+ \\"description\\": \\"foo\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t\\\\tbar\\"
536
+ },
537
+ \\"linebreak\\": {
538
+ \\"defaultMessage\\": \\"this is a message\\",
539
+ \\"description\\": \\"this is\\\\na\\\\ndescription\\"
540
+ },
541
+ \\"newline\\": {
542
+ \\"defaultMessage\\": \\"this is a message\\",
543
+ \\"description\\": \\"this is a description\\"
544
+ },
545
+ \\"templateLinebreak\\": {
546
+ \\"defaultMessage\\": \\"this is a message\\",
547
+ \\"description\\": \\"this is\\\\n a\\\\n description\\"
548
+ },
549
+ \\"trailing.ws\\": {
550
+ \\"defaultMessage\\": \\"Some whitespace\\",
551
+ \\"description\\": \\"Whitespace\\"
552
+ }
553
+ }
554
+ ",
555
+ }
556
+ `;
557
+
558
+ exports[`typescript -> stdout with crowdin 1`] = `
559
+ Object {
560
+ "stderr": "",
561
+ "stdout": "{
562
+ \\"286VP8\\": {
563
+ \\"description\\": \\"no ID\\",
564
+ \\"message\\": \\"No ID\\"
565
+ },
566
+ \\"app.home.kittens\\": {
567
+ \\"description\\": \\"Counts kittens\\",
568
+ \\"message\\": \\"{count, plural, =0 {😭} one {# kitten} other {# kittens}}\\"
569
+ },
570
+ \\"eCy8Eo\\": {
571
+ \\"message\\": \\"No Desc\\"
572
+ },
573
+ \\"escaped.apostrophe\\": {
574
+ \\"description\\": \\"Escaped apostrophe\\",
575
+ \\"message\\": \\"A quoted value ''{value}'\\"
576
+ },
577
+ \\"foo.bar.baz\\": {
578
+ \\"description\\": \\"The default message\\",
579
+ \\"message\\": \\"Hello World!\\"
580
+ },
581
+ \\"foo.bar.biff\\": {
582
+ \\"description\\": \\"Another message\\",
583
+ \\"message\\": \\"Hello Nurse!\\"
584
+ },
585
+ \\"inline\\": {
586
+ \\"description\\": \\"foo\\",
587
+ \\"message\\": \\"formatted message\\"
588
+ },
589
+ \\"inline.linebreak\\": {
590
+ \\"description\\": \\"foo\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t\\\\tbar\\",
591
+ \\"message\\": \\"formatted message with linebreak\\"
592
+ },
593
+ \\"linebreak\\": {
594
+ \\"description\\": \\"this is\\\\na\\\\ndescription\\",
595
+ \\"message\\": \\"this is a message\\"
596
+ },
597
+ \\"newline\\": {
598
+ \\"description\\": \\"this is a description\\",
599
+ \\"message\\": \\"this is a message\\"
600
+ },
601
+ \\"templateLinebreak\\": {
602
+ \\"description\\": \\"this is\\\\n a\\\\n description\\",
603
+ \\"message\\": \\"this is a message\\"
604
+ },
605
+ \\"trailing.ws\\": {
606
+ \\"description\\": \\"Whitespace\\",
607
+ \\"message\\": \\"Some whitespace\\"
608
+ }
609
+ }
610
+ ",
611
+ }
612
+ `;
613
+
614
+ exports[`typescript -> stdout with formatter 1`] = `
615
+ Object {
616
+ "stderr": "",
617
+ "stdout": "{
618
+ \\"286VP8\\": {
619
+ \\"comment\\": \\"no ID\\",
620
+ \\"string\\": \\"No ID\\"
621
+ },
622
+ \\"app.home.kittens\\": {
623
+ \\"comment\\": \\"Counts kittens\\",
624
+ \\"string\\": \\"{count, plural, =0 {😭} one {# kitten} other {# kittens}}\\"
625
+ },
626
+ \\"eCy8Eo\\": {
627
+ \\"string\\": \\"No Desc\\"
628
+ },
629
+ \\"escaped.apostrophe\\": {
630
+ \\"comment\\": \\"Escaped apostrophe\\",
631
+ \\"string\\": \\"A quoted value ''{value}'\\"
632
+ },
633
+ \\"foo.bar.baz\\": {
634
+ \\"comment\\": \\"The default message\\",
635
+ \\"string\\": \\"Hello World!\\"
636
+ },
637
+ \\"foo.bar.biff\\": {
638
+ \\"comment\\": \\"Another message\\",
639
+ \\"string\\": \\"Hello Nurse!\\"
640
+ },
641
+ \\"inline\\": {
642
+ \\"comment\\": \\"foo\\",
643
+ \\"string\\": \\"formatted message\\"
644
+ },
645
+ \\"inline.linebreak\\": {
646
+ \\"comment\\": \\"foo\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t\\\\tbar\\",
647
+ \\"string\\": \\"formatted message with linebreak\\"
648
+ },
649
+ \\"linebreak\\": {
650
+ \\"comment\\": \\"this is\\\\na\\\\ndescription\\",
651
+ \\"string\\": \\"this is a message\\"
652
+ },
653
+ \\"newline\\": {
654
+ \\"comment\\": \\"this is a description\\",
655
+ \\"string\\": \\"this is a message\\"
656
+ },
657
+ \\"templateLinebreak\\": {
658
+ \\"comment\\": \\"this is\\\\n a\\\\n description\\",
659
+ \\"string\\": \\"this is a message\\"
660
+ },
661
+ \\"trailing.ws\\": {
662
+ \\"comment\\": \\"Whitespace\\",
663
+ \\"string\\": \\"Some whitespace\\"
664
+ }
665
+ }
666
+ ",
667
+ }
668
+ `;
669
+
670
+ exports[`typescript -> stdout with lokalise 1`] = `
671
+ Object {
672
+ "stderr": "",
673
+ "stdout": "{
674
+ \\"286VP8\\": {
675
+ \\"notes\\": \\"no ID\\",
676
+ \\"translation\\": \\"No ID\\"
677
+ },
678
+ \\"app.home.kittens\\": {
679
+ \\"notes\\": \\"Counts kittens\\",
680
+ \\"translation\\": \\"{count, plural, =0 {😭} one {# kitten} other {# kittens}}\\"
681
+ },
682
+ \\"eCy8Eo\\": {
683
+ \\"translation\\": \\"No Desc\\"
684
+ },
685
+ \\"escaped.apostrophe\\": {
686
+ \\"notes\\": \\"Escaped apostrophe\\",
687
+ \\"translation\\": \\"A quoted value ''{value}'\\"
688
+ },
689
+ \\"foo.bar.baz\\": {
690
+ \\"notes\\": \\"The default message\\",
691
+ \\"translation\\": \\"Hello World!\\"
692
+ },
693
+ \\"foo.bar.biff\\": {
694
+ \\"notes\\": \\"Another message\\",
695
+ \\"translation\\": \\"Hello Nurse!\\"
696
+ },
697
+ \\"inline\\": {
698
+ \\"notes\\": \\"foo\\",
699
+ \\"translation\\": \\"formatted message\\"
700
+ },
701
+ \\"inline.linebreak\\": {
702
+ \\"notes\\": \\"foo\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t\\\\tbar\\",
703
+ \\"translation\\": \\"formatted message with linebreak\\"
704
+ },
705
+ \\"linebreak\\": {
706
+ \\"notes\\": \\"this is\\\\na\\\\ndescription\\",
707
+ \\"translation\\": \\"this is a message\\"
708
+ },
709
+ \\"newline\\": {
710
+ \\"notes\\": \\"this is a description\\",
711
+ \\"translation\\": \\"this is a message\\"
712
+ },
713
+ \\"templateLinebreak\\": {
714
+ \\"notes\\": \\"this is\\\\n a\\\\n description\\",
715
+ \\"translation\\": \\"this is a message\\"
716
+ },
717
+ \\"trailing.ws\\": {
718
+ \\"notes\\": \\"Whitespace\\",
719
+ \\"translation\\": \\"Some whitespace\\"
720
+ }
721
+ }
722
+ ",
723
+ }
724
+ `;
725
+
726
+ exports[`typescript -> stdout with simple 1`] = `
727
+ Object {
728
+ "stderr": "",
729
+ "stdout": "{
730
+ \\"286VP8\\": \\"No ID\\",
731
+ \\"app.home.kittens\\": \\"{count, plural, =0 {😭} one {# kitten} other {# kittens}}\\",
732
+ \\"eCy8Eo\\": \\"No Desc\\",
733
+ \\"escaped.apostrophe\\": \\"A quoted value ''{value}'\\",
734
+ \\"foo.bar.baz\\": \\"Hello World!\\",
735
+ \\"foo.bar.biff\\": \\"Hello Nurse!\\",
736
+ \\"inline\\": \\"formatted message\\",
737
+ \\"inline.linebreak\\": \\"formatted message with linebreak\\",
738
+ \\"linebreak\\": \\"this is a message\\",
739
+ \\"newline\\": \\"this is a message\\",
740
+ \\"templateLinebreak\\": \\"this is a message\\",
741
+ \\"trailing.ws\\": \\"Some whitespace\\"
742
+ }
743
+ ",
744
+ }
745
+ `;
746
+
747
+ exports[`typescript -> stdout with smartling 1`] = `
748
+ Object {
749
+ "stderr": "",
750
+ "stdout": "{
751
+ \\"smartling\\": {
752
+ \\"string_format\\": \\"icu\\",
753
+ \\"translate_paths\\": [
754
+ {
755
+ \\"instruction\\": \\"*/description\\",
756
+ \\"key\\": \\"{*}/message\\",
757
+ \\"path\\": \\"*/message\\"
758
+ }
759
+ ],
760
+ \\"variants_enabled\\": true
761
+ },
762
+ \\"286VP8\\": {
763
+ \\"description\\": \\"no ID\\",
764
+ \\"message\\": \\"No ID\\"
765
+ },
766
+ \\"app.home.kittens\\": {
767
+ \\"description\\": \\"Counts kittens\\",
768
+ \\"message\\": \\"{count, plural, =0 {😭} one {# kitten} other {# kittens}}\\"
769
+ },
770
+ \\"eCy8Eo\\": {
771
+ \\"message\\": \\"No Desc\\"
772
+ },
773
+ \\"escaped.apostrophe\\": {
774
+ \\"description\\": \\"Escaped apostrophe\\",
775
+ \\"message\\": \\"A quoted value ''{value}'\\"
776
+ },
777
+ \\"foo.bar.baz\\": {
778
+ \\"description\\": \\"The default message\\",
779
+ \\"message\\": \\"Hello World!\\"
780
+ },
781
+ \\"foo.bar.biff\\": {
782
+ \\"description\\": \\"Another message\\",
783
+ \\"message\\": \\"Hello Nurse!\\"
784
+ },
785
+ \\"inline\\": {
786
+ \\"description\\": \\"foo\\",
787
+ \\"message\\": \\"formatted message\\"
788
+ },
789
+ \\"inline.linebreak\\": {
790
+ \\"description\\": \\"foo\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t\\\\tbar\\",
791
+ \\"message\\": \\"formatted message with linebreak\\"
792
+ },
793
+ \\"linebreak\\": {
794
+ \\"description\\": \\"this is\\\\na\\\\ndescription\\",
795
+ \\"message\\": \\"this is a message\\"
796
+ },
797
+ \\"newline\\": {
798
+ \\"description\\": \\"this is a description\\",
799
+ \\"message\\": \\"this is a message\\"
800
+ },
801
+ \\"templateLinebreak\\": {
802
+ \\"description\\": \\"this is\\\\n a\\\\n description\\",
803
+ \\"message\\": \\"this is a message\\"
804
+ },
805
+ \\"trailing.ws\\": {
806
+ \\"description\\": \\"Whitespace\\",
807
+ \\"message\\": \\"Some whitespace\\"
808
+ }
809
+ }
810
+ ",
811
+ }
812
+ `;
813
+
814
+ exports[`typescript -> stdout with transifex 1`] = `
815
+ Object {
816
+ "stderr": "",
817
+ "stdout": "{
818
+ \\"286VP8\\": {
819
+ \\"developer_comment\\": \\"no ID\\",
820
+ \\"string\\": \\"No ID\\"
821
+ },
822
+ \\"app.home.kittens\\": {
823
+ \\"developer_comment\\": \\"Counts kittens\\",
824
+ \\"string\\": \\"{count, plural, =0 {😭} one {# kitten} other {# kittens}}\\"
825
+ },
826
+ \\"eCy8Eo\\": {
827
+ \\"string\\": \\"No Desc\\"
828
+ },
829
+ \\"escaped.apostrophe\\": {
830
+ \\"developer_comment\\": \\"Escaped apostrophe\\",
831
+ \\"string\\": \\"A quoted value ''{value}'\\"
832
+ },
833
+ \\"foo.bar.baz\\": {
834
+ \\"developer_comment\\": \\"The default message\\",
835
+ \\"string\\": \\"Hello World!\\"
836
+ },
837
+ \\"foo.bar.biff\\": {
838
+ \\"developer_comment\\": \\"Another message\\",
839
+ \\"string\\": \\"Hello Nurse!\\"
840
+ },
841
+ \\"inline\\": {
842
+ \\"developer_comment\\": \\"foo\\",
843
+ \\"string\\": \\"formatted message\\"
844
+ },
845
+ \\"inline.linebreak\\": {
846
+ \\"developer_comment\\": \\"foo\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t\\\\tbar\\",
847
+ \\"string\\": \\"formatted message with linebreak\\"
848
+ },
849
+ \\"linebreak\\": {
850
+ \\"developer_comment\\": \\"this is\\\\na\\\\ndescription\\",
851
+ \\"string\\": \\"this is a message\\"
852
+ },
853
+ \\"newline\\": {
854
+ \\"developer_comment\\": \\"this is a description\\",
855
+ \\"string\\": \\"this is a message\\"
856
+ },
857
+ \\"templateLinebreak\\": {
858
+ \\"developer_comment\\": \\"this is\\\\n a\\\\n description\\",
859
+ \\"string\\": \\"this is a message\\"
860
+ },
861
+ \\"trailing.ws\\": {
862
+ \\"developer_comment\\": \\"Whitespace\\",
863
+ \\"string\\": \\"Some whitespace\\"
864
+ }
865
+ }
866
+ ",
867
+ }
868
+ `;
869
+
870
+ exports[`whitespace and newlines should be preserved 1`] = `
871
+ Object {
872
+ "stderr": "",
873
+ "stdout": "",
874
+ }
875
+ `;
876
+
877
+ exports[`whitespace and newlines should be preserved 2`] = `
878
+ Object {
879
+ "286VP8": Object {
880
+ "defaultMessage": "No ID",
881
+ "description": "no ID",
882
+ },
883
+ "app.home.kittens": Object {
884
+ "defaultMessage": "{count, plural, =0 {😭} one {# kitten} other {# kittens}}",
885
+ "description": "Counts kittens",
886
+ },
887
+ "eCy8Eo": Object {
888
+ "defaultMessage": "No Desc",
889
+ },
890
+ "escaped.apostrophe": Object {
891
+ "defaultMessage": "A quoted value ''{value}'",
892
+ "description": "Escaped apostrophe",
893
+ },
894
+ "foo.bar.baz": Object {
895
+ "defaultMessage": "Hello World!",
896
+ "description": "The default message",
897
+ },
898
+ "foo.bar.biff": Object {
899
+ "defaultMessage": "Hello Nurse!",
900
+ "description": "Another message",
901
+ },
902
+ "inline": Object {
903
+ "defaultMessage": "formatted message",
904
+ "description": "foo",
905
+ },
906
+ "inline.linebreak": Object {
907
+ "defaultMessage": "formatted message with linebreak",
908
+ "description": "foo
909
+ bar",
910
+ },
911
+ "linebreak": Object {
912
+ "defaultMessage": "this is a message",
913
+ "description": "this is
914
+ a
915
+ description",
916
+ },
917
+ "newline": Object {
918
+ "defaultMessage": "this is a message",
919
+ "description": "this is a description",
920
+ },
921
+ "templateLinebreak": Object {
922
+ "defaultMessage": "this is a message",
923
+ "description": "this is
924
+ a
925
+ description",
926
+ },
927
+ "trailing.ws": Object {
928
+ "defaultMessage": "Some whitespace",
929
+ "description": "Whitespace",
930
+ },
931
+ }
932
+ `;