@formatjs/ts-transformer 3.9.7 → 3.9.10

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 (62) hide show
  1. package/BUILD +82 -0
  2. package/CHANGELOG.md +713 -0
  3. package/LICENSE.md +0 -0
  4. package/README.md +0 -0
  5. package/examples/compile.ts +50 -0
  6. package/index.ts +3 -0
  7. package/integration-tests/BUILD +37 -0
  8. package/integration-tests/integration/comp.tsx +40 -0
  9. package/integration-tests/integration/jest.config.js +25 -0
  10. package/integration-tests/integration/ts-jest.test.tsx +32 -0
  11. package/integration-tests/package.json +5 -0
  12. package/integration-tests/vue/fixtures/index.vue +30 -0
  13. package/integration-tests/vue/fixtures/main.ts +4 -0
  14. package/integration-tests/vue/integration.test.ts +75 -0
  15. package/package.json +4 -4
  16. package/src/console_utils.ts +32 -0
  17. package/src/interpolate-name.ts +147 -0
  18. package/src/transform.ts +764 -0
  19. package/src/types.ts +12 -0
  20. package/tests/__snapshots__/index.test.ts.snap +908 -0
  21. package/tests/fixtures/FormattedMessage.tsx +35 -0
  22. package/tests/fixtures/additionalComponentNames.tsx +16 -0
  23. package/tests/fixtures/additionalFunctionNames.tsx +20 -0
  24. package/tests/fixtures/ast.tsx +83 -0
  25. package/tests/fixtures/defineMessages.tsx +67 -0
  26. package/tests/fixtures/defineMessagesPreserveWhitespace.tsx +87 -0
  27. package/tests/fixtures/descriptionsAsObjects.tsx +17 -0
  28. package/tests/fixtures/extractFromFormatMessage.tsx +45 -0
  29. package/tests/fixtures/extractFromFormatMessageStateless.tsx +46 -0
  30. package/tests/fixtures/extractSourceLocation.tsx +8 -0
  31. package/tests/fixtures/formatMessageCall.tsx +44 -0
  32. package/tests/fixtures/inline.tsx +26 -0
  33. package/tests/fixtures/nested.tsx +10 -0
  34. package/tests/fixtures/noImport.tsx +52 -0
  35. package/tests/fixtures/overrideIdFn.tsx +70 -0
  36. package/tests/fixtures/removeDefaultMessage.tsx +22 -0
  37. package/tests/fixtures/removeDescription.tsx +22 -0
  38. package/tests/fixtures/resourcePath.tsx +23 -0
  39. package/tests/fixtures/stringConcat.tsx +26 -0
  40. package/tests/fixtures/templateLiteral.tsx +21 -0
  41. package/tests/index.test.ts +127 -0
  42. package/tests/interpolate-name.test.ts +14 -0
  43. package/ts-jest-integration.ts +9 -0
  44. package/tsconfig.json +5 -0
  45. package/index.d.ts +0 -4
  46. package/index.d.ts.map +0 -1
  47. package/index.js +0 -6
  48. package/src/console_utils.d.ts +0 -4
  49. package/src/console_utils.d.ts.map +0 -1
  50. package/src/console_utils.js +0 -49
  51. package/src/interpolate-name.d.ts +0 -15
  52. package/src/interpolate-name.d.ts.map +0 -1
  53. package/src/interpolate-name.js +0 -95
  54. package/src/transform.d.ts +0 -78
  55. package/src/transform.d.ts.map +0 -1
  56. package/src/transform.js +0 -483
  57. package/src/types.d.ts +0 -12
  58. package/src/types.d.ts.map +0 -1
  59. package/src/types.js +0 -2
  60. package/ts-jest-integration.d.ts +0 -6
  61. package/ts-jest-integration.d.ts.map +0 -1
  62. package/ts-jest-integration.js +0 -10
@@ -0,0 +1,908 @@
1
+ // Jest Snapshot v1, https://goo.gl/fbAQLP
2
+
3
+ exports[`emit asserts for [special] extractSourceLocation 1`] = `
4
+ "import React, { Component } from 'react';
5
+ import { FormattedMessage } from 'react-intl';
6
+ export default class Foo extends Component {
7
+ render() {
8
+ return <FormattedMessage id=\\"foo.bar.baz\\" defaultMessage=\\"Hello World!\\"/>;
9
+ }
10
+ }
11
+ "
12
+ `;
13
+
14
+ exports[`emit asserts for [special] extractSourceLocation 2`] = `
15
+ Object {
16
+ "defaultMessage": "Hello World!",
17
+ "end": 220,
18
+ "file": StringContaining "extractSourceLocation.tsx",
19
+ "id": "foo.bar.baz",
20
+ "start": 152,
21
+ }
22
+ `;
23
+
24
+ exports[`emit asserts for FormattedMessage 1`] = `
25
+ Object {
26
+ "code": "import React, { Component } from 'react';
27
+ import { FormattedMessage } from 'react-intl';
28
+ export default class Foo extends Component {
29
+ render() {
30
+ return (<p>
31
+ <FormattedMessage id=\\"foo.bar.baz\\" defaultMessage=\\"Hello World! {foo, number}\\" values={{
32
+ foo: 1,
33
+ }}/>
34
+ <FormattedMessage id=\\"foo.bar.baz\\" defaultMessage=\\"Hello World! {foo, number}\\" values={{
35
+ foo: 1,
36
+ }}/>
37
+ <FormattedMessage id=\\"foo.bar.baz\\" defaultMessage=\\"Hello World! {foo, number}\\" values={{
38
+ foo: 1,
39
+ }}/>
40
+ </p>);
41
+ }
42
+ }
43
+ ",
44
+ "meta": Object {},
45
+ "msgs": Array [
46
+ Object {
47
+ "defaultMessage": "Hello World! {foo, number}",
48
+ "description": "The default message.",
49
+ "id": "foo.bar.baz",
50
+ },
51
+ Object {
52
+ "defaultMessage": "Hello World! {foo, number}",
53
+ "description": "The default message.",
54
+ "id": "foo.bar.baz",
55
+ },
56
+ Object {
57
+ "defaultMessage": "Hello World! {foo, number}",
58
+ "description": "The default message.",
59
+ "id": "foo.bar.baz",
60
+ },
61
+ ],
62
+ }
63
+ `;
64
+
65
+ exports[`emit asserts for additionalComponentNames 1`] = `
66
+ Object {
67
+ "code": "// @react-intl project:foo
68
+ import React, { Component } from 'react';
69
+ function CustomMessage() { }
70
+ export default class Foo extends Component {
71
+ render() {
72
+ return (<CustomMessage id=\\"greeting-world\\" defaultMessage=\\"Hello World!\\"/>);
73
+ }
74
+ }
75
+ ",
76
+ "meta": Object {
77
+ "project": "foo",
78
+ },
79
+ "msgs": Array [
80
+ Object {
81
+ "defaultMessage": "Hello World!",
82
+ "description": "Greeting to the world",
83
+ "id": "greeting-world",
84
+ },
85
+ ],
86
+ }
87
+ `;
88
+
89
+ exports[`emit asserts for additionalFunctionNames 1`] = `
90
+ Object {
91
+ "code": "// @react-intl project:foo
92
+ import React, { Component } from 'react';
93
+ function CustomMessage() { }
94
+ export default class Foo extends Component {
95
+ render() {
96
+ return (<CustomMessage id={formatMessage({ id: \\"rL0Y20zC+F\\", defaultMessage: \\"foo\\" })} description={$formatMessage({ id: \\"rL0Y20zC+F\\", defaultMessage: \\"foo\\" })} defaultMessage=\\"Hello World!\\"/>);
97
+ }
98
+ }
99
+ ",
100
+ "meta": Object {
101
+ "project": "foo",
102
+ },
103
+ "msgs": Array [
104
+ Object {
105
+ "defaultMessage": "foo",
106
+ "id": "rL0Y20zC+F",
107
+ },
108
+ Object {
109
+ "defaultMessage": "foo",
110
+ "id": "rL0Y20zC+F",
111
+ },
112
+ ],
113
+ }
114
+ `;
115
+
116
+ exports[`emit asserts for ast 1`] = `
117
+ Object {
118
+ "code": "import React, { Component } from 'react';
119
+ import { defineMessages, FormattedMessage, defineMessage } from 'react-intl';
120
+ const msgs = defineMessages({ header: { id: \\"HELLO.foo.bar.baz.12.string\\", defaultMessage: [{ type: 0, value: \\"Hello World!\\" }] }, content: { id: \\"HELLO.foo.bar.biff.12.object\\", defaultMessage: [{ type: 0, value: \\"Hello Nurse!\\" }] } });
121
+ defineMessage({ id: \\"HELLO..13.string\\", defaultMessage: [{ type: 0, value: \\"defineMessage\\" }] });
122
+ export default class Foo extends Component {
123
+ render() {
124
+ const { intl } = this.props;
125
+ const { formatMessage } = intl;
126
+ this.props.intl.formatMessage({ id: \\"HELLO..5.string\\", defaultMessage: [{ type: 0, value: \\"no-id\\" }] });
127
+ intl.formatMessage({ id: \\"HELLO..18.string\\", defaultMessage: [{ type: 0, value: \\"intl.formatMessage\\" }] });
128
+ formatMessage({ id: \\"HELLO..13.string\\", defaultMessage: [{ type: 0, value: \\"formatMessage\\" }] });
129
+ formatMessage({ id: \\"HELLO..39.string\\", defaultMessage: [{ type: 6, value: \\"count\\", options: { \\"=0\\": { value: [{ type: 0, value: \\"zero\\" }] }, other: { value: [{ type: 0, value: \\"other\\" }] } }, offset: 0, pluralType: \\"cardinal\\" }] });
130
+ return (<div>
131
+ <h1>
132
+ <FormattedMessage {...msgs.header}/>
133
+ </h1>
134
+ <p>
135
+ <FormattedMessage {...msgs.content}/>
136
+ </p>
137
+ <FormattedMessage id=\\"HELLO.foo.bar.zoo.18.object\\" defaultMessage={[{ type: 0, value: \\"Hello World! \\" }, { type: 1, value: \\"abc\\" }]} values={{ abc: 2 }}/>
138
+ <FormattedMessage id=\\"HELLO..18.object\\" defaultMessage={[{ type: 0, value: \\"Hello World! \\" }, { type: 1, value: \\"abc\\" }]} values={{ abc: 2 }}/>
139
+
140
+ <FormattedMessage id=\\"HELLO..15.object\\" defaultMessage={[{ type: 2, value: \\"value\\", style: null }]} values={{ abc: 2 }}/>
141
+ </div>);
142
+ }
143
+ }
144
+ ",
145
+ "meta": Object {},
146
+ "msgs": Array [
147
+ Object {
148
+ "defaultMessage": "Hello World!",
149
+ "description": "The default message",
150
+ "id": "HELLO.foo.bar.baz.12.string",
151
+ },
152
+ Object {
153
+ "defaultMessage": "Hello Nurse!",
154
+ "description": Object {
155
+ "metadata": "Additional metadata content.",
156
+ "text": "Something for the translator.",
157
+ },
158
+ "id": "HELLO.foo.bar.biff.12.object",
159
+ },
160
+ Object {
161
+ "defaultMessage": "defineMessage",
162
+ "description": "foo",
163
+ "id": "HELLO..13.string",
164
+ },
165
+ Object {
166
+ "defaultMessage": "no-id",
167
+ "description": "no-id",
168
+ "id": "HELLO..5.string",
169
+ },
170
+ Object {
171
+ "defaultMessage": "intl.formatMessage",
172
+ "description": "no-id",
173
+ "id": "HELLO..18.string",
174
+ },
175
+ Object {
176
+ "defaultMessage": "formatMessage",
177
+ "description": "no-id",
178
+ "id": "HELLO..13.string",
179
+ },
180
+ Object {
181
+ "defaultMessage": "{count, plural, =0 {zero} other{other}}",
182
+ "description": "no-id",
183
+ "id": "HELLO..39.string",
184
+ },
185
+ Object {
186
+ "defaultMessage": "Hello World! {abc}",
187
+ "description": Object {
188
+ "metadata": "Additional metadata content.",
189
+ "text": "Something for the translator. Another description",
190
+ },
191
+ "id": "HELLO.foo.bar.zoo.18.object",
192
+ },
193
+ Object {
194
+ "defaultMessage": "Hello World! {abc}",
195
+ "description": Object {
196
+ "metadata": "Additional metadata content.",
197
+ "text": "Something for the translator. Another description",
198
+ },
199
+ "id": "HELLO..18.object",
200
+ },
201
+ Object {
202
+ "defaultMessage": "{value, number}",
203
+ "description": Object {
204
+ "metadata": "number",
205
+ "text": "number",
206
+ },
207
+ "id": "HELLO..15.object",
208
+ },
209
+ ],
210
+ }
211
+ `;
212
+
213
+ exports[`emit asserts for defineMessages 1`] = `
214
+ Object {
215
+ "code": "// @react-intl project:foo file:bar
216
+ import React, { Component } from 'react';
217
+ import { defineMessages, FormattedMessage } from 'react-intl';
218
+ const msgs = defineMessages({ header: { id: \\"foo.bar.baz\\", defaultMessage: \\"Hello World!\\" }, content: { id: \\"foo.bar.biff\\", defaultMessage: \\"Hello Nurse!\\" }, kittens: { id: \\"app.home.kittens\\", defaultMessage: \\"{count, plural, =0 {\\\\uD83D\\\\uDE2D} one {# kitten} other {# kittens}}\\" }, trailingWhitespace: { id: \\"trailing.ws\\", defaultMessage: \\"Some whitespace\\" }, escaped: { id: \\"escaped.apostrophe\\", defaultMessage: \\"A quoted value ''{value}'\\" }, quoted: { id: \\"escaped.apostrophe\\", defaultMessage: \\"What's going on\\" }, newline: { id: \\"newline\\", defaultMessage: \\"this is a message\\" } });
219
+ export default class Foo extends Component {
220
+ render() {
221
+ return (<div>
222
+ <h1>
223
+ <FormattedMessage {...msgs.header}/>
224
+ </h1>
225
+ <p>
226
+ <FormattedMessage {...msgs.content}/>
227
+ </p>
228
+ <p>
229
+ <FormattedMessage {...msgs.kittens}/>
230
+ <FormattedMessage id=\\"inline\\" defaultMessage=\\"formatted message\\"/>
231
+ </p>
232
+ </div>);
233
+ }
234
+ }
235
+ ",
236
+ "meta": Object {
237
+ "file": "bar",
238
+ "project": "foo",
239
+ },
240
+ "msgs": Array [
241
+ Object {
242
+ "defaultMessage": "Hello World!",
243
+ "description": "The default message",
244
+ "id": "foo.bar.baz",
245
+ },
246
+ Object {
247
+ "defaultMessage": "Hello Nurse!",
248
+ "description": "Another message",
249
+ "id": "foo.bar.biff",
250
+ },
251
+ Object {
252
+ "defaultMessage": "{count, plural, =0 {😭} one {# kitten} other {# kittens}}",
253
+ "description": "Counts kittens",
254
+ "id": "app.home.kittens",
255
+ },
256
+ Object {
257
+ "defaultMessage": "Some whitespace",
258
+ "description": "Whitespace",
259
+ "id": "trailing.ws",
260
+ },
261
+ Object {
262
+ "defaultMessage": "A quoted value ''{value}'",
263
+ "description": "Escaped apostrophe",
264
+ "id": "escaped.apostrophe",
265
+ },
266
+ Object {
267
+ "defaultMessage": "What's going on",
268
+ "description": "Escaped apostrophe",
269
+ "id": "escaped.apostrophe",
270
+ },
271
+ Object {
272
+ "defaultMessage": "this is a message",
273
+ "description": "this is a description",
274
+ "id": "newline",
275
+ },
276
+ Object {
277
+ "defaultMessage": "formatted message",
278
+ "description": "foo",
279
+ "id": "inline",
280
+ },
281
+ ],
282
+ }
283
+ `;
284
+
285
+ exports[`emit asserts for defineMessagesPreserveWhitespace 1`] = `
286
+ Object {
287
+ "code": "// @react-intl project:foo file:bar
288
+ import React, { Component } from 'react';
289
+ import { defineMessages, FormattedMessage } from 'react-intl';
290
+ const msgs = defineMessages({ header: { id: \\"foo.bar.baz\\", defaultMessage: \\"Hello World!\\" }, content: { id: \\"foo.bar.biff\\", defaultMessage: \\"Hello Nurse!\\" }, kittens: { id: \\"app.home.kittens\\", defaultMessage: \\"{count, plural, =0 {\\\\uD83D\\\\uDE2D} one {# kitten} other {# kittens}}\\" }, trailingWhitespace: { id: \\"trailing.ws\\", defaultMessage: \\" Some whitespace \\" }, escaped: { id: \\"escaped.apostrophe\\", defaultMessage: \\"A quoted value ''{value}'\\" }, quoted: { id: \\"escaped.apostrophe\\", defaultMessage: \\"What's going on\\" }, newline: { id: \\"newline\\", defaultMessage: \\"this is a message\\" }, linebreak: { id: \\"linebreak\\", defaultMessage: \\"this is\\\\na message\\" }, templateLinebreak: { id: \\"templateLinebreak\\", defaultMessage: \\"this is\\\\n a message\\" } });
291
+ export default class Foo extends Component {
292
+ render() {
293
+ return (<div>
294
+ <h1>
295
+ <FormattedMessage {...msgs.header}/>
296
+ </h1>
297
+ <p>
298
+ <FormattedMessage {...msgs.content}/>
299
+ </p>
300
+ <p>
301
+ <FormattedMessage {...msgs.kittens}/>
302
+ <FormattedMessage id=\\"inline\\" defaultMessage=\\"formatted message\\"/>
303
+ <FormattedMessage id=\\"inline.linebreak\\" defaultMessage=\\"formatted message&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&#x9;with linebreak\\"/>
304
+ </p>
305
+ </div>);
306
+ }
307
+ }
308
+ ",
309
+ "meta": Object {
310
+ "file": "bar",
311
+ "project": "foo",
312
+ },
313
+ "msgs": Array [
314
+ Object {
315
+ "defaultMessage": "Hello World!",
316
+ "description": "The default message",
317
+ "id": "foo.bar.baz",
318
+ },
319
+ Object {
320
+ "defaultMessage": "Hello Nurse!",
321
+ "description": "Another message",
322
+ "id": "foo.bar.biff",
323
+ },
324
+ Object {
325
+ "defaultMessage": "{count, plural, =0 {😭} one {# kitten} other {# kittens}}",
326
+ "description": "Counts kittens",
327
+ "id": "app.home.kittens",
328
+ },
329
+ Object {
330
+ "defaultMessage": " Some whitespace ",
331
+ "description": "Whitespace",
332
+ "id": "trailing.ws",
333
+ },
334
+ Object {
335
+ "defaultMessage": "A quoted value ''{value}'",
336
+ "description": "Escaped apostrophe",
337
+ "id": "escaped.apostrophe",
338
+ },
339
+ Object {
340
+ "defaultMessage": "What's going on",
341
+ "description": "Escaped apostrophe",
342
+ "id": "escaped.apostrophe",
343
+ },
344
+ Object {
345
+ "defaultMessage": "this is a message",
346
+ "description": "this is a description",
347
+ "id": "newline",
348
+ },
349
+ Object {
350
+ "defaultMessage": "this is
351
+ a message",
352
+ "description": "this is
353
+ a
354
+ description",
355
+ "id": "linebreak",
356
+ },
357
+ Object {
358
+ "defaultMessage": "this is
359
+ a message",
360
+ "description": "this is
361
+ a
362
+ description",
363
+ "id": "templateLinebreak",
364
+ },
365
+ Object {
366
+ "defaultMessage": "formatted message",
367
+ "description": "foo",
368
+ "id": "inline",
369
+ },
370
+ Object {
371
+ "defaultMessage": "formatted message
372
+ with linebreak",
373
+ "description": "foo
374
+ bar",
375
+ "id": "inline.linebreak",
376
+ },
377
+ ],
378
+ }
379
+ `;
380
+
381
+ exports[`emit asserts for descriptionsAsObjects 1`] = `
382
+ Object {
383
+ "code": "import React, { Component } from 'react';
384
+ import { FormattedMessage } from 'react-intl';
385
+ export default class Foo extends Component {
386
+ render() {
387
+ return (<FormattedMessage id=\\"foo.bar.baz\\" defaultMessage=\\"Hello World!\\"/>);
388
+ }
389
+ }
390
+ ",
391
+ "meta": Object {},
392
+ "msgs": Array [
393
+ Object {
394
+ "defaultMessage": "Hello World!",
395
+ "description": Object {
396
+ "metadata": "Additional metadata content.",
397
+ "text": "Something for the translator.",
398
+ },
399
+ "id": "foo.bar.baz",
400
+ },
401
+ ],
402
+ }
403
+ `;
404
+
405
+ exports[`emit asserts for extractFromFormatMessage 1`] = `
406
+ Object {
407
+ "code": "import React, { Component } from 'react';
408
+ import { injectIntl, FormattedMessage } from 'react-intl';
409
+ const objectPointer = {
410
+ id: 'foo.bar.invalid',
411
+ defaultMessage: 'This cannot be extracted',
412
+ description: 'the plugin only supports inline objects',
413
+ };
414
+ class Foo extends Component {
415
+ render() {
416
+ const { intl } = this.props;
417
+ const msgs = {
418
+ baz: this.props.intl.formatMessage({ id: \\"foo.bar.baz\\", defaultMessage: \\"Hello World!\\" }),
419
+ biff: intl.formatMessage({ id: \\"foo.bar.biff\\", defaultMessage: \\"Hello Nurse!\\" }),
420
+ invalid: this.props.intl.formatMessage(objectPointer),
421
+ invalid2: this.props.intl.formatMessage({
422
+ id,
423
+ defaultMessage,
424
+ description: 'asd',
425
+ }),
426
+ };
427
+ return (<div>
428
+ <h1>{msgs.header}</h1>
429
+ <p>{msgs.content}</p>
430
+ <input placeholder={intl.formatMessage({ id: \\"A/2tFVt1SI\\", defaultMessage: \\"inline\\" })}/>
431
+ <span>
432
+ <FormattedMessage id=\\"foo\\" defaultMessage=\\"bar\\"/>
433
+ </span>
434
+ </div>);
435
+ }
436
+ }
437
+ export default injectIntl(Foo);
438
+ ",
439
+ "meta": Object {},
440
+ "msgs": Array [
441
+ Object {
442
+ "defaultMessage": "Hello World!",
443
+ "description": "The default message",
444
+ "id": "foo.bar.baz",
445
+ },
446
+ Object {
447
+ "defaultMessage": "Hello Nurse!",
448
+ "description": "Another message",
449
+ "id": "foo.bar.biff",
450
+ },
451
+ Object {
452
+ "defaultMessage": "inline",
453
+ "id": "A/2tFVt1SI",
454
+ },
455
+ Object {
456
+ "defaultMessage": "bar",
457
+ "description": "baz",
458
+ "id": "foo",
459
+ },
460
+ ],
461
+ }
462
+ `;
463
+
464
+ exports[`emit asserts for extractFromFormatMessageStateless 1`] = `
465
+ Object {
466
+ "code": "import { FormattedMessage, injectIntl, useIntl } from 'react-intl';
467
+ import React from 'react';
468
+ function myFunction(param1, { formatMessage, formatDate }) {
469
+ return (formatMessage({ id: \\"inline1\\", defaultMessage: \\"Hello params!\\" }) + formatDate(new Date()));
470
+ }
471
+ const child = myFunction(filterable, intl);
472
+ function SFC() {
473
+ const { formatMessage } = useIntl();
474
+ return formatMessage({ id: \\"hook\\", defaultMessage: \\"hook\\" });
475
+ }
476
+ const Foo = ({ intl: { formatMessage } }) => {
477
+ const msgs = {
478
+ qux: formatMessage({ id: \\"foo.bar.quux\\", defaultMessage: \\"Hello Stateless!\\" }),
479
+ };
480
+ return (<div>
481
+ <h1>{msgs.header}</h1>
482
+ <p>{msgs.content}</p>
483
+ <span>
484
+ <FormattedMessage id=\\"foo\\" defaultMessage=\\"bar\\"/>
485
+ </span>
486
+ </div>);
487
+ };
488
+ export default injectIntl(Foo);
489
+ ",
490
+ "meta": Object {},
491
+ "msgs": Array [
492
+ Object {
493
+ "defaultMessage": "Hello params!",
494
+ "description": "A stateless message",
495
+ "id": "inline1",
496
+ },
497
+ Object {
498
+ "defaultMessage": "hook",
499
+ "description": "hook",
500
+ "id": "hook",
501
+ },
502
+ Object {
503
+ "defaultMessage": "Hello Stateless!",
504
+ "description": "A stateless message",
505
+ "id": "foo.bar.quux",
506
+ },
507
+ Object {
508
+ "defaultMessage": "bar",
509
+ "description": "baz",
510
+ "id": "foo",
511
+ },
512
+ ],
513
+ }
514
+ `;
515
+
516
+ exports[`emit asserts for formatMessageCall 1`] = `
517
+ Object {
518
+ "code": "import React, { Component } from 'react';
519
+ import { injectIntl, FormattedMessage } from 'react-intl';
520
+ const objectPointer = {
521
+ id: 'foo.bar.invalid',
522
+ defaultMessage: 'This cannot be extracted',
523
+ description: 'the plugin only supports inline objects',
524
+ };
525
+ class Foo extends Component {
526
+ render() {
527
+ const msgs = {
528
+ baz: formatMessage({ id: \\"foo.bar.baz\\", defaultMessage: \\"Hello World!\\" }),
529
+ baz2: this.props.intl.$formatMessage({ id: \\"foo.bar.baz2\\", defaultMessage: \\"Hello World!\\" }),
530
+ biff: $formatMessage({ id: \\"foo.bar.biff\\", defaultMessage: \\"Hello Nurse!\\" }),
531
+ invalid: this.props.intl.formatMessage(objectPointer),
532
+ };
533
+ return (<div>
534
+ <h1>{msgs.header}</h1>
535
+ <p>{msgs.content}</p>
536
+ <input placeholder={intl.formatMessage({ id: \\"A/2tFVt1SI\\", defaultMessage: \\"inline\\" })}/>
537
+ <span>
538
+ <FormattedMessage id=\\"foo\\" defaultMessage=\\"bar\\"/>
539
+ </span>
540
+ </div>);
541
+ }
542
+ }
543
+ export default injectIntl(Foo);
544
+ ",
545
+ "meta": Object {},
546
+ "msgs": Array [
547
+ Object {
548
+ "defaultMessage": "Hello World!",
549
+ "description": "The default message",
550
+ "id": "foo.bar.baz",
551
+ },
552
+ Object {
553
+ "defaultMessage": "Hello World!",
554
+ "description": "The default message $$$",
555
+ "id": "foo.bar.baz2",
556
+ },
557
+ Object {
558
+ "defaultMessage": "Hello Nurse!",
559
+ "description": "Another message",
560
+ "id": "foo.bar.biff",
561
+ },
562
+ Object {
563
+ "defaultMessage": "inline",
564
+ "id": "A/2tFVt1SI",
565
+ },
566
+ Object {
567
+ "defaultMessage": "bar",
568
+ "description": "baz",
569
+ "id": "foo",
570
+ },
571
+ ],
572
+ }
573
+ `;
574
+
575
+ exports[`emit asserts for inline 1`] = `
576
+ Object {
577
+ "code": "import React, { Component } from 'react';
578
+ import { FormattedMessage, defineMessage } from 'react-intl';
579
+ export default class Foo extends Component {
580
+ render() {
581
+ return (<div>
582
+ <FormattedMessage id=\\"foo.bar.baz\\" defaultMessage=\\"Hello World!\\"/>
583
+ {defineMessage({ id: \\"header\\", defaultMessage: \\"Hello World!\\" })}
584
+ {defineMessage({ id: \\"header2\\", defaultMessage: \\"Hello World!\\" })}
585
+ </div>);
586
+ }
587
+ }
588
+ ",
589
+ "meta": Object {},
590
+ "msgs": Array [
591
+ Object {
592
+ "defaultMessage": "Hello World!",
593
+ "description": "The default message.",
594
+ "id": "foo.bar.baz",
595
+ },
596
+ Object {
597
+ "defaultMessage": "Hello World!",
598
+ "description": "The default message",
599
+ "id": "header",
600
+ },
601
+ Object {
602
+ "defaultMessage": "Hello World!",
603
+ "description": "The default message",
604
+ "id": "header2",
605
+ },
606
+ ],
607
+ }
608
+ `;
609
+
610
+ exports[`emit asserts for nested 1`] = `
611
+ Object {
612
+ "code": "intl.formatMessage({ id: \\"HELLO..13.undefined\\", defaultMessage: \\"layer1 {name}\\" }, {
613
+ name: intl.formatMessage({ id: \\"HELLO..6.undefined\\", defaultMessage: \\"layer2\\" }),
614
+ });
615
+ ",
616
+ "meta": Object {},
617
+ "msgs": Array [
618
+ Object {
619
+ "defaultMessage": "layer1 {name}",
620
+ "id": "HELLO..13.undefined",
621
+ },
622
+ Object {
623
+ "defaultMessage": "layer2",
624
+ "id": "HELLO..6.undefined",
625
+ },
626
+ ],
627
+ }
628
+ `;
629
+
630
+ exports[`emit asserts for noImport 1`] = `
631
+ Object {
632
+ "code": "export function foo() {
633
+ props.intl.formatMessage({ id: \\"hYpBl\\", defaultMessage: \\"props {intl}\\" }, { bar: 'bar' });
634
+ this.props.intl.formatMessage({ id: \\"tBZlS\\", defaultMessage: \\"this props {intl}\\" }, { bar: 'bar' });
635
+ this.props.intl.formatMessage({ id: \\"T+ycr\\", defaultMessage: \\"this props {intl}\\" }, { bar: 'bar' });
636
+ this.props.intl.formatMessage({ id: \\"T+ycr\\", defaultMessage: \\"this props {intl}\\" }, { bar: 'bar' });
637
+ this.props.intl.formatMessage({ id: \\"WUKCt\\", defaultMessage: \\"this props {intl}\\" }, { bar: 'bar' });
638
+ return intl.formatMessage({ id: \\"ALfyd\\", defaultMessage: \\"foo {bar}\\" }, { bar: 'bar' });
639
+ }
640
+ ",
641
+ "meta": Object {},
642
+ "msgs": Array [
643
+ Object {
644
+ "defaultMessage": "props {intl}",
645
+ "description": "bar",
646
+ "id": "hYpBl",
647
+ },
648
+ Object {
649
+ "defaultMessage": "this props {intl}",
650
+ "description": "bar",
651
+ "id": "tBZlS",
652
+ },
653
+ Object {
654
+ "defaultMessage": "this props {intl}",
655
+ "description": Object {
656
+ "obj1": 1,
657
+ "obj2": "123",
658
+ },
659
+ "id": "T+ycr",
660
+ },
661
+ Object {
662
+ "defaultMessage": "this props {intl}",
663
+ "description": Object {
664
+ "obj1": 1,
665
+ "obj2": "123",
666
+ },
667
+ "id": "T+ycr",
668
+ },
669
+ Object {
670
+ "defaultMessage": "this props {intl}",
671
+ "description": Object {
672
+ "obj2": "123",
673
+ },
674
+ "id": "WUKCt",
675
+ },
676
+ Object {
677
+ "defaultMessage": "foo {bar}",
678
+ "description": "bar",
679
+ "id": "ALfyd",
680
+ },
681
+ ],
682
+ }
683
+ `;
684
+
685
+ exports[`emit asserts for overrideIdFn 1`] = `
686
+ Object {
687
+ "code": "import React, { Component } from 'react';
688
+ import { defineMessages, FormattedMessage, defineMessage } from 'react-intl';
689
+ const msgs = defineMessages({ header: { id: \\"HELLO.foo.bar.baz.12.string\\", defaultMessage: \\"Hello World!\\" }, content: { id: \\"HELLO.foo.bar.biff.12.object\\", defaultMessage: \\"Hello Nurse!\\" } });
690
+ defineMessage({ id: \\"HELLO..13.string\\", defaultMessage: \\"defineMessage\\" });
691
+ export default class Foo extends Component {
692
+ render() {
693
+ const { intl } = this.props;
694
+ const { formatMessage } = intl;
695
+ this.props.intl.formatMessage({ id: \\"HELLO..5.string\\", defaultMessage: \\"no-id\\" });
696
+ intl.formatMessage({ id: \\"HELLO..18.string\\", defaultMessage: \\"intl.formatMessage\\" });
697
+ formatMessage({ id: \\"HELLO..13.string\\", defaultMessage: \\"formatMessage\\" });
698
+ return (<div>
699
+ <h1>
700
+ <FormattedMessage {...msgs.header}/>
701
+ </h1>
702
+ <p>
703
+ <FormattedMessage {...msgs.content}/>
704
+ </p>
705
+ <FormattedMessage id=\\"HELLO.foo.bar.zoo.18.object\\" defaultMessage=\\"Hello World! {abc}\\" values={{ abc: 2 }}/>
706
+ <FormattedMessage id=\\"HELLO..18.object\\" defaultMessage=\\"Hello World! {abc}\\" values={{ abc: 2 }}/>
707
+ </div>);
708
+ }
709
+ }
710
+ ",
711
+ "meta": Object {},
712
+ "msgs": Array [
713
+ Object {
714
+ "defaultMessage": "Hello World!",
715
+ "description": "The default message",
716
+ "id": "HELLO.foo.bar.baz.12.string",
717
+ },
718
+ Object {
719
+ "defaultMessage": "Hello Nurse!",
720
+ "description": Object {
721
+ "metadata": "Additional metadata content.",
722
+ "text": "Something for the translator.",
723
+ },
724
+ "id": "HELLO.foo.bar.biff.12.object",
725
+ },
726
+ Object {
727
+ "defaultMessage": "defineMessage",
728
+ "description": "foo",
729
+ "id": "HELLO..13.string",
730
+ },
731
+ Object {
732
+ "defaultMessage": "no-id",
733
+ "description": "no-id",
734
+ "id": "HELLO..5.string",
735
+ },
736
+ Object {
737
+ "defaultMessage": "intl.formatMessage",
738
+ "description": "no-id",
739
+ "id": "HELLO..18.string",
740
+ },
741
+ Object {
742
+ "defaultMessage": "formatMessage",
743
+ "description": "no-id",
744
+ "id": "HELLO..13.string",
745
+ },
746
+ Object {
747
+ "defaultMessage": "Hello World! {abc}",
748
+ "description": Object {
749
+ "metadata": "Additional metadata content.",
750
+ "text": "Something for the translator. Another description",
751
+ },
752
+ "id": "HELLO.foo.bar.zoo.18.object",
753
+ },
754
+ Object {
755
+ "defaultMessage": "Hello World! {abc}",
756
+ "description": Object {
757
+ "metadata": "Additional metadata content.",
758
+ "text": "Something for the translator. Another description",
759
+ },
760
+ "id": "HELLO..18.object",
761
+ },
762
+ ],
763
+ }
764
+ `;
765
+
766
+ exports[`emit asserts for removeDefaultMessage 1`] = `
767
+ Object {
768
+ "code": "import React, { Component } from 'react';
769
+ import { defineMessages, FormattedMessage } from 'react-intl';
770
+ const messages = defineMessages({ foo: { id: \\"greeting-user\\" } });
771
+ export default class Foo extends Component {
772
+ render() {
773
+ return (<FormattedMessage id=\\"greeting-world\\"/>);
774
+ }
775
+ }
776
+ ",
777
+ "meta": Object {},
778
+ "msgs": Array [
779
+ Object {
780
+ "defaultMessage": "Hello, {name}",
781
+ "description": "Greeting the user",
782
+ "id": "greeting-user",
783
+ },
784
+ Object {
785
+ "defaultMessage": "Hello World!",
786
+ "description": "Greeting to the world",
787
+ "id": "greeting-world",
788
+ },
789
+ ],
790
+ }
791
+ `;
792
+
793
+ exports[`emit asserts for removeDescription 1`] = `
794
+ Object {
795
+ "code": "import React, { Component } from 'react';
796
+ import { defineMessages, FormattedMessage } from 'react-intl';
797
+ const messages = defineMessages({ foo: { id: \\"greeting-user\\", defaultMessage: \\"Hello, {name}\\" } });
798
+ export default class Foo extends Component {
799
+ render() {
800
+ return (<FormattedMessage id=\\"greeting-world\\" defaultMessage=\\"Hello World!\\"/>);
801
+ }
802
+ }
803
+ ",
804
+ "meta": Object {},
805
+ "msgs": Array [
806
+ Object {
807
+ "defaultMessage": "Hello, {name}",
808
+ "description": "Greeting the user",
809
+ "id": "greeting-user",
810
+ },
811
+ Object {
812
+ "defaultMessage": "Hello World!",
813
+ "description": "Greeting to the world",
814
+ "id": "greeting-world",
815
+ },
816
+ ],
817
+ }
818
+ `;
819
+
820
+ exports[`emit asserts for resourcePath 1`] = `
821
+ Object {
822
+ "code": "export function foo() {
823
+ props.intl.formatMessage({ id: \\"resourcePath-hYpBl\\", defaultMessage: \\"props {intl}\\" }, { bar: 'bar' });
824
+ this.props.intl.formatMessage({ id: \\"resourcePath-tBZlS\\", defaultMessage: \\"this props {intl}\\" }, { bar: 'bar' });
825
+ return intl.formatMessage({ id: \\"resourcePath-ALfyd\\", defaultMessage: \\"foo {bar}\\" }, { bar: 'bar' });
826
+ }
827
+ ",
828
+ "meta": Object {},
829
+ "msgs": Array [
830
+ Object {
831
+ "defaultMessage": "props {intl}",
832
+ "description": "bar",
833
+ "id": "resourcePath-hYpBl",
834
+ },
835
+ Object {
836
+ "defaultMessage": "this props {intl}",
837
+ "description": "bar",
838
+ "id": "resourcePath-tBZlS",
839
+ },
840
+ Object {
841
+ "defaultMessage": "foo {bar}",
842
+ "description": "bar",
843
+ "id": "resourcePath-ALfyd",
844
+ },
845
+ ],
846
+ }
847
+ `;
848
+
849
+ exports[`emit asserts for stringConcat 1`] = `
850
+ Object {
851
+ "code": "import React, { Component } from 'react';
852
+ import { FormattedMessage, defineMessage } from 'react-intl';
853
+ export default class Foo extends Component {
854
+ render() {
855
+ return (<div>
856
+ <FormattedMessage id=\\"foo.bar.bazid\\" defaultMessage=\\"Hello World!farbaz\\"/>
857
+ {intl.formatMessage({ id: \\"header\\", defaultMessage: \\"Hello World!foobar\\" })}
858
+ {defineMessage({ id: \\"header2\\", defaultMessage: \\"Hello World!\\" })}
859
+ </div>);
860
+ }
861
+ }
862
+ ",
863
+ "meta": Object {},
864
+ "msgs": Array [
865
+ Object {
866
+ "defaultMessage": "Hello World!farbaz",
867
+ "description": "The default message.",
868
+ "id": "foo.bar.bazid",
869
+ },
870
+ Object {
871
+ "defaultMessage": "Hello World!foobar",
872
+ "description": "The default message",
873
+ "id": "header",
874
+ },
875
+ Object {
876
+ "defaultMessage": "Hello World!",
877
+ "description": "The default message asd",
878
+ "id": "header2",
879
+ },
880
+ ],
881
+ }
882
+ `;
883
+
884
+ exports[`emit asserts for templateLiteral 1`] = `
885
+ Object {
886
+ "code": "import React, { Component } from 'react';
887
+ import { FormattedMessage, defineMessage } from 'react-intl';
888
+ defineMessage({ id: \\"template\\", defaultMessage: \\"should remove newline and extra spaces\\" });
889
+ export default class Foo extends Component {
890
+ render() {
891
+ return (<FormattedMessage id=\\"foo.bar.baz\\" defaultMessage=\\"Hello World!\\"/>);
892
+ }
893
+ }
894
+ ",
895
+ "meta": Object {},
896
+ "msgs": Array [
897
+ Object {
898
+ "defaultMessage": "should remove newline and extra spaces",
899
+ "id": "template",
900
+ },
901
+ Object {
902
+ "defaultMessage": "Hello World!",
903
+ "description": "The default message.",
904
+ "id": "foo.bar.baz",
905
+ },
906
+ ],
907
+ }
908
+ `;