@formatjs/ts-transformer 3.9.9 → 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.
- package/BUILD +82 -0
- package/CHANGELOG.md +713 -0
- package/LICENSE.md +0 -0
- package/README.md +0 -0
- package/examples/compile.ts +50 -0
- package/index.ts +3 -0
- package/integration-tests/BUILD +37 -0
- package/integration-tests/integration/comp.tsx +40 -0
- package/integration-tests/integration/jest.config.js +25 -0
- package/integration-tests/integration/ts-jest.test.tsx +32 -0
- package/integration-tests/package.json +5 -0
- package/integration-tests/vue/fixtures/index.vue +30 -0
- package/integration-tests/vue/fixtures/main.ts +4 -0
- package/integration-tests/vue/integration.test.ts +75 -0
- package/package.json +3 -3
- package/src/console_utils.ts +32 -0
- package/src/interpolate-name.ts +147 -0
- package/src/transform.ts +764 -0
- package/src/types.ts +12 -0
- package/tests/__snapshots__/index.test.ts.snap +908 -0
- package/tests/fixtures/FormattedMessage.tsx +35 -0
- package/tests/fixtures/additionalComponentNames.tsx +16 -0
- package/tests/fixtures/additionalFunctionNames.tsx +20 -0
- package/tests/fixtures/ast.tsx +83 -0
- package/tests/fixtures/defineMessages.tsx +67 -0
- package/tests/fixtures/defineMessagesPreserveWhitespace.tsx +87 -0
- package/tests/fixtures/descriptionsAsObjects.tsx +17 -0
- package/tests/fixtures/extractFromFormatMessage.tsx +45 -0
- package/tests/fixtures/extractFromFormatMessageStateless.tsx +46 -0
- package/tests/fixtures/extractSourceLocation.tsx +8 -0
- package/tests/fixtures/formatMessageCall.tsx +44 -0
- package/tests/fixtures/inline.tsx +26 -0
- package/tests/fixtures/nested.tsx +10 -0
- package/tests/fixtures/noImport.tsx +52 -0
- package/tests/fixtures/overrideIdFn.tsx +70 -0
- package/tests/fixtures/removeDefaultMessage.tsx +22 -0
- package/tests/fixtures/removeDescription.tsx +22 -0
- package/tests/fixtures/resourcePath.tsx +23 -0
- package/tests/fixtures/stringConcat.tsx +26 -0
- package/tests/fixtures/templateLiteral.tsx +21 -0
- package/tests/index.test.ts +127 -0
- package/tests/interpolate-name.test.ts +14 -0
- package/ts-jest-integration.ts +9 -0
- package/tsconfig.json +5 -0
- package/index.d.ts +0 -4
- package/index.d.ts.map +0 -1
- package/index.js +0 -6
- package/src/console_utils.d.ts +0 -4
- package/src/console_utils.d.ts.map +0 -1
- package/src/console_utils.js +0 -49
- package/src/interpolate-name.d.ts +0 -15
- package/src/interpolate-name.d.ts.map +0 -1
- package/src/interpolate-name.js +0 -95
- package/src/transform.d.ts +0 -78
- package/src/transform.d.ts.map +0 -1
- package/src/transform.js +0 -483
- package/src/types.d.ts +0 -12
- package/src/types.d.ts.map +0 -1
- package/src/types.js +0 -2
- package/ts-jest-integration.d.ts +0 -6
- package/ts-jest-integration.d.ts.map +0 -1
- package/ts-jest-integration.js +0 -10
package/src/transform.js
DELETED
|
@@ -1,483 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.transform = exports.transformWithTs = void 0;
|
|
4
|
-
var tslib_1 = require("tslib");
|
|
5
|
-
var typescript = (0, tslib_1.__importStar)(require("typescript"));
|
|
6
|
-
var interpolate_name_1 = require("./interpolate-name");
|
|
7
|
-
var icu_messageformat_parser_1 = require("@formatjs/icu-messageformat-parser");
|
|
8
|
-
var console_utils_1 = require("./console_utils");
|
|
9
|
-
var json_stable_stringify_1 = (0, tslib_1.__importDefault)(require("json-stable-stringify"));
|
|
10
|
-
var MESSAGE_DESC_KEYS = [
|
|
11
|
-
'id',
|
|
12
|
-
'defaultMessage',
|
|
13
|
-
'description',
|
|
14
|
-
];
|
|
15
|
-
function primitiveToTSNode(factory, v) {
|
|
16
|
-
return typeof v === 'string'
|
|
17
|
-
? factory.createStringLiteral(v)
|
|
18
|
-
: typeof v === 'number'
|
|
19
|
-
? factory.createNumericLiteral(v + '')
|
|
20
|
-
: typeof v === 'boolean'
|
|
21
|
-
? v
|
|
22
|
-
? factory.createTrue()
|
|
23
|
-
: factory.createFalse()
|
|
24
|
-
: undefined;
|
|
25
|
-
}
|
|
26
|
-
function isValidIdentifier(k) {
|
|
27
|
-
try {
|
|
28
|
-
new Function("return {".concat(k, ":1}"));
|
|
29
|
-
return true;
|
|
30
|
-
}
|
|
31
|
-
catch (e) {
|
|
32
|
-
return false;
|
|
33
|
-
}
|
|
34
|
-
}
|
|
35
|
-
function objToTSNode(factory, obj) {
|
|
36
|
-
if (typeof obj === 'object' && !obj) {
|
|
37
|
-
return factory.createNull();
|
|
38
|
-
}
|
|
39
|
-
var props = Object.entries(obj)
|
|
40
|
-
.filter(function (_a) {
|
|
41
|
-
var _ = _a[0], v = _a[1];
|
|
42
|
-
return typeof v !== 'undefined';
|
|
43
|
-
})
|
|
44
|
-
.map(function (_a) {
|
|
45
|
-
var k = _a[0], v = _a[1];
|
|
46
|
-
return factory.createPropertyAssignment(isValidIdentifier(k) ? k : factory.createStringLiteral(k), primitiveToTSNode(factory, v) ||
|
|
47
|
-
(Array.isArray(v)
|
|
48
|
-
? factory.createArrayLiteralExpression(v
|
|
49
|
-
.filter(function (n) { return typeof n !== 'undefined'; })
|
|
50
|
-
.map(function (n) { return objToTSNode(factory, n); }))
|
|
51
|
-
: objToTSNode(factory, v)));
|
|
52
|
-
});
|
|
53
|
-
return factory.createObjectLiteralExpression(props);
|
|
54
|
-
}
|
|
55
|
-
function messageASTToTSNode(factory, ast) {
|
|
56
|
-
return factory.createArrayLiteralExpression(ast.map(function (el) { return objToTSNode(factory, el); }));
|
|
57
|
-
}
|
|
58
|
-
function literalToObj(ts, n) {
|
|
59
|
-
if (ts.isNumericLiteral(n)) {
|
|
60
|
-
return +n.text;
|
|
61
|
-
}
|
|
62
|
-
if (ts.isStringLiteral(n)) {
|
|
63
|
-
return n.text;
|
|
64
|
-
}
|
|
65
|
-
if (n.kind === ts.SyntaxKind.TrueKeyword) {
|
|
66
|
-
return true;
|
|
67
|
-
}
|
|
68
|
-
if (n.kind === ts.SyntaxKind.FalseKeyword) {
|
|
69
|
-
return false;
|
|
70
|
-
}
|
|
71
|
-
}
|
|
72
|
-
function objectLiteralExpressionToObj(ts, obj) {
|
|
73
|
-
return obj.properties.reduce(function (all, prop) {
|
|
74
|
-
if (ts.isPropertyAssignment(prop) && prop.name) {
|
|
75
|
-
if (ts.isIdentifier(prop.name)) {
|
|
76
|
-
all[prop.name.escapedText.toString()] = literalToObj(ts, prop.initializer);
|
|
77
|
-
}
|
|
78
|
-
else if (ts.isStringLiteral(prop.name)) {
|
|
79
|
-
all[prop.name.text] = literalToObj(ts, prop.initializer);
|
|
80
|
-
}
|
|
81
|
-
}
|
|
82
|
-
return all;
|
|
83
|
-
}, {});
|
|
84
|
-
}
|
|
85
|
-
var DEFAULT_OPTS = {
|
|
86
|
-
onMsgExtracted: function () { return undefined; },
|
|
87
|
-
onMetaExtracted: function () { return undefined; },
|
|
88
|
-
};
|
|
89
|
-
function isMultipleMessageDecl(ts, node) {
|
|
90
|
-
return (ts.isIdentifier(node.expression) &&
|
|
91
|
-
node.expression.text === 'defineMessages');
|
|
92
|
-
}
|
|
93
|
-
function isSingularMessageDecl(ts, node, additionalComponentNames) {
|
|
94
|
-
var compNames = new Set((0, tslib_1.__spreadArray)([
|
|
95
|
-
'FormattedMessage',
|
|
96
|
-
'defineMessage',
|
|
97
|
-
'formatMessage',
|
|
98
|
-
'$formatMessage'
|
|
99
|
-
], additionalComponentNames, true));
|
|
100
|
-
var fnName = '';
|
|
101
|
-
if (ts.isCallExpression(node) && ts.isIdentifier(node.expression)) {
|
|
102
|
-
fnName = node.expression.text;
|
|
103
|
-
}
|
|
104
|
-
else if (ts.isJsxOpeningElement(node) && ts.isIdentifier(node.tagName)) {
|
|
105
|
-
fnName = node.tagName.text;
|
|
106
|
-
}
|
|
107
|
-
else if (ts.isJsxSelfClosingElement(node) &&
|
|
108
|
-
ts.isIdentifier(node.tagName)) {
|
|
109
|
-
fnName = node.tagName.text;
|
|
110
|
-
}
|
|
111
|
-
return compNames.has(fnName);
|
|
112
|
-
}
|
|
113
|
-
function evaluateStringConcat(ts, node) {
|
|
114
|
-
var right = node.right, left = node.left;
|
|
115
|
-
if (!ts.isStringLiteral(right)) {
|
|
116
|
-
return ['', false];
|
|
117
|
-
}
|
|
118
|
-
if (ts.isStringLiteral(left)) {
|
|
119
|
-
return [left.text + right.text, true];
|
|
120
|
-
}
|
|
121
|
-
if (ts.isBinaryExpression(left)) {
|
|
122
|
-
var _a = evaluateStringConcat(ts, left), result = _a[0], isStatic = _a[1];
|
|
123
|
-
return [result + right.text, isStatic];
|
|
124
|
-
}
|
|
125
|
-
return ['', false];
|
|
126
|
-
}
|
|
127
|
-
function extractMessageDescriptor(ts, node, _a, sf) {
|
|
128
|
-
var overrideIdFn = _a.overrideIdFn, extractSourceLocation = _a.extractSourceLocation, preserveWhitespace = _a.preserveWhitespace;
|
|
129
|
-
var properties = undefined;
|
|
130
|
-
if (ts.isObjectLiteralExpression(node)) {
|
|
131
|
-
properties = node.properties;
|
|
132
|
-
}
|
|
133
|
-
else if (ts.isJsxOpeningElement(node) || ts.isJsxSelfClosingElement(node)) {
|
|
134
|
-
properties = node.attributes.properties;
|
|
135
|
-
}
|
|
136
|
-
var msg = { id: '' };
|
|
137
|
-
if (!properties) {
|
|
138
|
-
return;
|
|
139
|
-
}
|
|
140
|
-
properties.forEach(function (prop) {
|
|
141
|
-
var name = prop.name;
|
|
142
|
-
var initializer = ts.isPropertyAssignment(prop) || ts.isJsxAttribute(prop)
|
|
143
|
-
? prop.initializer
|
|
144
|
-
: undefined;
|
|
145
|
-
if (name && ts.isIdentifier(name) && initializer) {
|
|
146
|
-
// {id: 'id'}
|
|
147
|
-
if (ts.isStringLiteral(initializer)) {
|
|
148
|
-
switch (name.text) {
|
|
149
|
-
case 'id':
|
|
150
|
-
msg.id = initializer.text;
|
|
151
|
-
break;
|
|
152
|
-
case 'defaultMessage':
|
|
153
|
-
msg.defaultMessage = initializer.text;
|
|
154
|
-
break;
|
|
155
|
-
case 'description':
|
|
156
|
-
msg.description = initializer.text;
|
|
157
|
-
break;
|
|
158
|
-
}
|
|
159
|
-
}
|
|
160
|
-
// {id: `id`}
|
|
161
|
-
else if (ts.isNoSubstitutionTemplateLiteral(initializer)) {
|
|
162
|
-
switch (name.text) {
|
|
163
|
-
case 'id':
|
|
164
|
-
msg.id = initializer.text;
|
|
165
|
-
break;
|
|
166
|
-
case 'defaultMessage':
|
|
167
|
-
msg.defaultMessage = initializer.text;
|
|
168
|
-
break;
|
|
169
|
-
case 'description':
|
|
170
|
-
msg.description = initializer.text;
|
|
171
|
-
break;
|
|
172
|
-
}
|
|
173
|
-
}
|
|
174
|
-
else if (ts.isJsxExpression(initializer) && initializer.expression) {
|
|
175
|
-
// <FormattedMessage foo={'barbaz'} />
|
|
176
|
-
if (ts.isStringLiteral(initializer.expression)) {
|
|
177
|
-
switch (name.text) {
|
|
178
|
-
case 'id':
|
|
179
|
-
msg.id = initializer.expression.text;
|
|
180
|
-
break;
|
|
181
|
-
case 'defaultMessage':
|
|
182
|
-
msg.defaultMessage = initializer.expression.text;
|
|
183
|
-
break;
|
|
184
|
-
case 'description':
|
|
185
|
-
msg.description = initializer.expression.text;
|
|
186
|
-
break;
|
|
187
|
-
}
|
|
188
|
-
}
|
|
189
|
-
// description={{custom: 1}}
|
|
190
|
-
else if (ts.isObjectLiteralExpression(initializer.expression) &&
|
|
191
|
-
name.text === 'description') {
|
|
192
|
-
msg.description = objectLiteralExpressionToObj(ts, initializer.expression);
|
|
193
|
-
}
|
|
194
|
-
// <FormattedMessage foo={`bar`} />
|
|
195
|
-
else if (ts.isNoSubstitutionTemplateLiteral(initializer.expression)) {
|
|
196
|
-
var expression = initializer.expression;
|
|
197
|
-
switch (name.text) {
|
|
198
|
-
case 'id':
|
|
199
|
-
msg.id = expression.text;
|
|
200
|
-
break;
|
|
201
|
-
case 'defaultMessage':
|
|
202
|
-
msg.defaultMessage = expression.text;
|
|
203
|
-
break;
|
|
204
|
-
case 'description':
|
|
205
|
-
msg.description = expression.text;
|
|
206
|
-
break;
|
|
207
|
-
}
|
|
208
|
-
}
|
|
209
|
-
// <FormattedMessage foo={'bar' + 'baz'} />
|
|
210
|
-
else if (ts.isBinaryExpression(initializer.expression)) {
|
|
211
|
-
var expression = initializer.expression;
|
|
212
|
-
var _a = evaluateStringConcat(ts, expression), result = _a[0], isStatic = _a[1];
|
|
213
|
-
if (isStatic) {
|
|
214
|
-
switch (name.text) {
|
|
215
|
-
case 'id':
|
|
216
|
-
msg.id = result;
|
|
217
|
-
break;
|
|
218
|
-
case 'defaultMessage':
|
|
219
|
-
msg.defaultMessage = result;
|
|
220
|
-
break;
|
|
221
|
-
case 'description':
|
|
222
|
-
msg.description = result;
|
|
223
|
-
break;
|
|
224
|
-
}
|
|
225
|
-
}
|
|
226
|
-
}
|
|
227
|
-
}
|
|
228
|
-
// {defaultMessage: 'asd' + bar'}
|
|
229
|
-
else if (ts.isBinaryExpression(initializer)) {
|
|
230
|
-
var _b = evaluateStringConcat(ts, initializer), result = _b[0], isStatic = _b[1];
|
|
231
|
-
if (isStatic) {
|
|
232
|
-
switch (name.text) {
|
|
233
|
-
case 'id':
|
|
234
|
-
msg.id = result;
|
|
235
|
-
break;
|
|
236
|
-
case 'defaultMessage':
|
|
237
|
-
msg.defaultMessage = result;
|
|
238
|
-
break;
|
|
239
|
-
case 'description':
|
|
240
|
-
msg.description = result;
|
|
241
|
-
break;
|
|
242
|
-
}
|
|
243
|
-
}
|
|
244
|
-
}
|
|
245
|
-
// description: {custom: 1}
|
|
246
|
-
else if (ts.isObjectLiteralExpression(initializer) &&
|
|
247
|
-
name.text === 'description') {
|
|
248
|
-
msg.description = objectLiteralExpressionToObj(ts, initializer);
|
|
249
|
-
}
|
|
250
|
-
}
|
|
251
|
-
});
|
|
252
|
-
// We extracted nothing
|
|
253
|
-
if (!msg.defaultMessage && !msg.id) {
|
|
254
|
-
return;
|
|
255
|
-
}
|
|
256
|
-
if (msg.defaultMessage && !preserveWhitespace) {
|
|
257
|
-
msg.defaultMessage = msg.defaultMessage.trim().replace(/\s+/gm, ' ');
|
|
258
|
-
}
|
|
259
|
-
if (msg.defaultMessage && overrideIdFn) {
|
|
260
|
-
switch (typeof overrideIdFn) {
|
|
261
|
-
case 'string':
|
|
262
|
-
if (!msg.id) {
|
|
263
|
-
msg.id = (0, interpolate_name_1.interpolateName)({ resourcePath: sf.fileName }, overrideIdFn, {
|
|
264
|
-
content: msg.description
|
|
265
|
-
? "".concat(msg.defaultMessage, "#").concat(typeof msg.description === 'string'
|
|
266
|
-
? msg.description
|
|
267
|
-
: (0, json_stable_stringify_1.default)(msg.description))
|
|
268
|
-
: msg.defaultMessage,
|
|
269
|
-
});
|
|
270
|
-
}
|
|
271
|
-
break;
|
|
272
|
-
case 'function':
|
|
273
|
-
msg.id = overrideIdFn(msg.id, msg.defaultMessage, msg.description, sf.fileName);
|
|
274
|
-
break;
|
|
275
|
-
}
|
|
276
|
-
}
|
|
277
|
-
if (extractSourceLocation) {
|
|
278
|
-
return (0, tslib_1.__assign)((0, tslib_1.__assign)({}, msg), { file: sf.fileName, start: node.pos, end: node.end });
|
|
279
|
-
}
|
|
280
|
-
return msg;
|
|
281
|
-
}
|
|
282
|
-
/**
|
|
283
|
-
* Check if node is `foo.bar.formatMessage` node
|
|
284
|
-
* @param node
|
|
285
|
-
* @param sf
|
|
286
|
-
*/
|
|
287
|
-
function isMemberMethodFormatMessageCall(ts, node, additionalFunctionNames) {
|
|
288
|
-
var fnNames = new Set((0, tslib_1.__spreadArray)([
|
|
289
|
-
'formatMessage',
|
|
290
|
-
'$formatMessage'
|
|
291
|
-
], additionalFunctionNames, true));
|
|
292
|
-
var method = node.expression;
|
|
293
|
-
// Handle foo.formatMessage()
|
|
294
|
-
if (ts.isPropertyAccessExpression(method)) {
|
|
295
|
-
return fnNames.has(method.name.text);
|
|
296
|
-
}
|
|
297
|
-
// Handle formatMessage()
|
|
298
|
-
return ts.isIdentifier(method) && fnNames.has(method.text);
|
|
299
|
-
}
|
|
300
|
-
function extractMessageFromJsxComponent(ts, factory, node, opts, sf) {
|
|
301
|
-
var onMsgExtracted = opts.onMsgExtracted;
|
|
302
|
-
if (!isSingularMessageDecl(ts, node, opts.additionalComponentNames || [])) {
|
|
303
|
-
return node;
|
|
304
|
-
}
|
|
305
|
-
var msg = extractMessageDescriptor(ts, node, opts, sf);
|
|
306
|
-
if (!msg) {
|
|
307
|
-
return node;
|
|
308
|
-
}
|
|
309
|
-
if (typeof onMsgExtracted === 'function') {
|
|
310
|
-
onMsgExtracted(sf.fileName, [msg]);
|
|
311
|
-
}
|
|
312
|
-
var newProps = generateNewProperties(ts, factory, node.attributes, {
|
|
313
|
-
defaultMessage: opts.removeDefaultMessage
|
|
314
|
-
? undefined
|
|
315
|
-
: msg.defaultMessage,
|
|
316
|
-
id: msg.id,
|
|
317
|
-
}, opts.ast);
|
|
318
|
-
if (ts.isJsxOpeningElement(node)) {
|
|
319
|
-
return factory.updateJsxOpeningElement(node, node.tagName, node.typeArguments, factory.createJsxAttributes(newProps));
|
|
320
|
-
}
|
|
321
|
-
return factory.updateJsxSelfClosingElement(node, node.tagName, node.typeArguments, factory.createJsxAttributes(newProps));
|
|
322
|
-
}
|
|
323
|
-
function setAttributesInObject(ts, factory, node, msg, ast) {
|
|
324
|
-
var newProps = (0, tslib_1.__spreadArray)([
|
|
325
|
-
factory.createPropertyAssignment('id', factory.createStringLiteral(msg.id))
|
|
326
|
-
], (msg.defaultMessage
|
|
327
|
-
? [
|
|
328
|
-
factory.createPropertyAssignment('defaultMessage', ast
|
|
329
|
-
? messageASTToTSNode(factory, (0, icu_messageformat_parser_1.parse)(msg.defaultMessage))
|
|
330
|
-
: factory.createStringLiteral(msg.defaultMessage)),
|
|
331
|
-
]
|
|
332
|
-
: []), true);
|
|
333
|
-
for (var _i = 0, _a = node.properties; _i < _a.length; _i++) {
|
|
334
|
-
var prop = _a[_i];
|
|
335
|
-
if (ts.isPropertyAssignment(prop) &&
|
|
336
|
-
ts.isIdentifier(prop.name) &&
|
|
337
|
-
MESSAGE_DESC_KEYS.includes(prop.name.text)) {
|
|
338
|
-
continue;
|
|
339
|
-
}
|
|
340
|
-
if (ts.isPropertyAssignment(prop)) {
|
|
341
|
-
newProps.push(prop);
|
|
342
|
-
}
|
|
343
|
-
}
|
|
344
|
-
return factory.createObjectLiteralExpression(factory.createNodeArray(newProps));
|
|
345
|
-
}
|
|
346
|
-
function generateNewProperties(ts, factory, node, msg, ast) {
|
|
347
|
-
var newProps = (0, tslib_1.__spreadArray)([
|
|
348
|
-
factory.createJsxAttribute(factory.createIdentifier('id'), factory.createStringLiteral(msg.id))
|
|
349
|
-
], (msg.defaultMessage
|
|
350
|
-
? [
|
|
351
|
-
factory.createJsxAttribute(factory.createIdentifier('defaultMessage'), ast
|
|
352
|
-
? factory.createJsxExpression(undefined, messageASTToTSNode(factory, (0, icu_messageformat_parser_1.parse)(msg.defaultMessage)))
|
|
353
|
-
: factory.createStringLiteral(msg.defaultMessage)),
|
|
354
|
-
]
|
|
355
|
-
: []), true);
|
|
356
|
-
for (var _i = 0, _a = node.properties; _i < _a.length; _i++) {
|
|
357
|
-
var prop = _a[_i];
|
|
358
|
-
if (ts.isJsxAttribute(prop) &&
|
|
359
|
-
ts.isIdentifier(prop.name) &&
|
|
360
|
-
MESSAGE_DESC_KEYS.includes(prop.name.text)) {
|
|
361
|
-
continue;
|
|
362
|
-
}
|
|
363
|
-
if (ts.isJsxAttribute(prop)) {
|
|
364
|
-
newProps.push(prop);
|
|
365
|
-
}
|
|
366
|
-
}
|
|
367
|
-
return newProps;
|
|
368
|
-
}
|
|
369
|
-
function extractMessagesFromCallExpression(ts, factory, node, opts, sf) {
|
|
370
|
-
var onMsgExtracted = opts.onMsgExtracted, additionalFunctionNames = opts.additionalFunctionNames;
|
|
371
|
-
if (isMultipleMessageDecl(ts, node)) {
|
|
372
|
-
var _a = node.arguments, arg = _a[0], restArgs = _a.slice(1);
|
|
373
|
-
var descriptorsObj = void 0;
|
|
374
|
-
if (ts.isObjectLiteralExpression(arg)) {
|
|
375
|
-
descriptorsObj = arg;
|
|
376
|
-
}
|
|
377
|
-
else if (ts.isAsExpression(arg) &&
|
|
378
|
-
ts.isObjectLiteralExpression(arg.expression)) {
|
|
379
|
-
descriptorsObj = arg.expression;
|
|
380
|
-
}
|
|
381
|
-
if (descriptorsObj) {
|
|
382
|
-
var properties = descriptorsObj.properties;
|
|
383
|
-
var msgs_1 = properties
|
|
384
|
-
.filter(function (prop) {
|
|
385
|
-
return ts.isPropertyAssignment(prop);
|
|
386
|
-
})
|
|
387
|
-
.map(function (prop) {
|
|
388
|
-
return ts.isObjectLiteralExpression(prop.initializer) &&
|
|
389
|
-
extractMessageDescriptor(ts, prop.initializer, opts, sf);
|
|
390
|
-
})
|
|
391
|
-
.filter(function (msg) { return !!msg; });
|
|
392
|
-
if (!msgs_1.length) {
|
|
393
|
-
return node;
|
|
394
|
-
}
|
|
395
|
-
(0, console_utils_1.debug)('Multiple messages extracted from "%s": %s', sf.fileName, msgs_1);
|
|
396
|
-
if (typeof onMsgExtracted === 'function') {
|
|
397
|
-
onMsgExtracted(sf.fileName, msgs_1);
|
|
398
|
-
}
|
|
399
|
-
var clonedProperties = factory.createNodeArray(properties.map(function (prop, i) {
|
|
400
|
-
if (!ts.isPropertyAssignment(prop) ||
|
|
401
|
-
!ts.isObjectLiteralExpression(prop.initializer)) {
|
|
402
|
-
return prop;
|
|
403
|
-
}
|
|
404
|
-
return factory.createPropertyAssignment(prop.name, setAttributesInObject(ts, factory, prop.initializer, {
|
|
405
|
-
defaultMessage: opts.removeDefaultMessage
|
|
406
|
-
? undefined
|
|
407
|
-
: msgs_1[i].defaultMessage,
|
|
408
|
-
id: msgs_1[i] ? msgs_1[i].id : '',
|
|
409
|
-
}, opts.ast));
|
|
410
|
-
}));
|
|
411
|
-
var clonedDescriptorsObj = factory.createObjectLiteralExpression(clonedProperties);
|
|
412
|
-
return factory.updateCallExpression(node, node.expression, node.typeArguments, (0, tslib_1.__spreadArray)([clonedDescriptorsObj], restArgs, true));
|
|
413
|
-
}
|
|
414
|
-
}
|
|
415
|
-
else if (isSingularMessageDecl(ts, node, opts.additionalComponentNames || []) ||
|
|
416
|
-
isMemberMethodFormatMessageCall(ts, node, additionalFunctionNames || [])) {
|
|
417
|
-
var _b = node.arguments, descriptorsObj = _b[0], restArgs = _b.slice(1);
|
|
418
|
-
if (ts.isObjectLiteralExpression(descriptorsObj)) {
|
|
419
|
-
var msg = extractMessageDescriptor(ts, descriptorsObj, opts, sf);
|
|
420
|
-
if (!msg) {
|
|
421
|
-
return node;
|
|
422
|
-
}
|
|
423
|
-
(0, console_utils_1.debug)('Message extracted from "%s": %s', sf.fileName, msg);
|
|
424
|
-
if (typeof onMsgExtracted === 'function') {
|
|
425
|
-
onMsgExtracted(sf.fileName, [msg]);
|
|
426
|
-
}
|
|
427
|
-
return factory.updateCallExpression(node, node.expression, node.typeArguments, (0, tslib_1.__spreadArray)([
|
|
428
|
-
setAttributesInObject(ts, factory, descriptorsObj, {
|
|
429
|
-
defaultMessage: opts.removeDefaultMessage
|
|
430
|
-
? undefined
|
|
431
|
-
: msg.defaultMessage,
|
|
432
|
-
id: msg.id,
|
|
433
|
-
}, opts.ast)
|
|
434
|
-
], restArgs, true));
|
|
435
|
-
}
|
|
436
|
-
}
|
|
437
|
-
return node;
|
|
438
|
-
}
|
|
439
|
-
var PRAGMA_REGEX = /^\/\/ @([^\s]*) (.*)$/m;
|
|
440
|
-
function getVisitor(ts, ctx, sf, opts) {
|
|
441
|
-
var visitor = function (node) {
|
|
442
|
-
var newNode = ts.isCallExpression(node)
|
|
443
|
-
? extractMessagesFromCallExpression(ts, ctx.factory, node, opts, sf)
|
|
444
|
-
: ts.isJsxOpeningElement(node) || ts.isJsxSelfClosingElement(node)
|
|
445
|
-
? extractMessageFromJsxComponent(ts, ctx.factory, node, opts, sf)
|
|
446
|
-
: node;
|
|
447
|
-
return ts.visitEachChild(newNode, visitor, ctx);
|
|
448
|
-
};
|
|
449
|
-
return visitor;
|
|
450
|
-
}
|
|
451
|
-
function transformWithTs(ts, opts) {
|
|
452
|
-
opts = (0, tslib_1.__assign)((0, tslib_1.__assign)({}, DEFAULT_OPTS), opts);
|
|
453
|
-
(0, console_utils_1.debug)('Transforming options', opts);
|
|
454
|
-
var transformFn = function (ctx) {
|
|
455
|
-
return function (sf) {
|
|
456
|
-
var pragmaResult = PRAGMA_REGEX.exec(sf.text);
|
|
457
|
-
if (pragmaResult) {
|
|
458
|
-
(0, console_utils_1.debug)('Pragma found', pragmaResult);
|
|
459
|
-
var pragma = pragmaResult[1], kvString = pragmaResult[2];
|
|
460
|
-
if (pragma === opts.pragma) {
|
|
461
|
-
var kvs = kvString.split(' ');
|
|
462
|
-
var result = {};
|
|
463
|
-
for (var _i = 0, kvs_1 = kvs; _i < kvs_1.length; _i++) {
|
|
464
|
-
var kv = kvs_1[_i];
|
|
465
|
-
var _a = kv.split(':'), k = _a[0], v = _a[1];
|
|
466
|
-
result[k] = v;
|
|
467
|
-
}
|
|
468
|
-
(0, console_utils_1.debug)('Pragma extracted', result);
|
|
469
|
-
if (typeof opts.onMetaExtracted === 'function') {
|
|
470
|
-
opts.onMetaExtracted(sf.fileName, result);
|
|
471
|
-
}
|
|
472
|
-
}
|
|
473
|
-
}
|
|
474
|
-
return ts.visitNode(sf, getVisitor(ts, ctx, sf, opts));
|
|
475
|
-
};
|
|
476
|
-
};
|
|
477
|
-
return transformFn;
|
|
478
|
-
}
|
|
479
|
-
exports.transformWithTs = transformWithTs;
|
|
480
|
-
function transform(opts) {
|
|
481
|
-
return transformWithTs(typescript, opts);
|
|
482
|
-
}
|
|
483
|
-
exports.transform = transform;
|
package/src/types.d.ts
DELETED
|
@@ -1,12 +0,0 @@
|
|
|
1
|
-
export interface MessageDescriptor {
|
|
2
|
-
id: string;
|
|
3
|
-
description?: string | object;
|
|
4
|
-
defaultMessage?: string;
|
|
5
|
-
file?: string;
|
|
6
|
-
start?: number;
|
|
7
|
-
end?: number;
|
|
8
|
-
}
|
|
9
|
-
export interface Messages {
|
|
10
|
-
[key: string]: MessageDescriptor;
|
|
11
|
-
}
|
|
12
|
-
//# sourceMappingURL=types.d.ts.map
|
package/src/types.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../../../packages/ts-transformer/src/types.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,iBAAiB;IAChC,EAAE,EAAE,MAAM,CAAA;IACV,WAAW,CAAC,EAAE,MAAM,GAAG,MAAM,CAAA;IAC7B,cAAc,CAAC,EAAE,MAAM,CAAA;IACvB,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,GAAG,CAAC,EAAE,MAAM,CAAA;CACb;AAED,MAAM,WAAW,QAAQ;IACvB,CAAC,GAAG,EAAE,MAAM,GAAG,iBAAiB,CAAA;CACjC"}
|
package/src/types.js
DELETED
package/ts-jest-integration.d.ts
DELETED
|
@@ -1,6 +0,0 @@
|
|
|
1
|
-
import { Opts } from '.';
|
|
2
|
-
import type { TsCompilerInstance } from 'ts-jest/dist/types';
|
|
3
|
-
export declare const name = "@formatjs/ts-transformer";
|
|
4
|
-
export declare const version = "2.10.1";
|
|
5
|
-
export declare function factory(compilerInstance: TsCompilerInstance, opts: Opts): import("typescript").TransformerFactory<import("typescript").SourceFile>;
|
|
6
|
-
//# sourceMappingURL=ts-jest-integration.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"ts-jest-integration.d.ts","sourceRoot":"","sources":["../../../../../packages/ts-transformer/ts-jest-integration.ts"],"names":[],"mappings":"AAAA,OAAO,EAAkB,IAAI,EAAC,MAAM,GAAG,CAAA;AACvC,OAAO,KAAK,EAAC,kBAAkB,EAAC,MAAM,oBAAoB,CAAA;AAE1D,eAAO,MAAM,IAAI,6BAA6B,CAAA;AAC9C,eAAO,MAAM,OAAO,WAAW,CAAA;AAE/B,wBAAgB,OAAO,CAAC,gBAAgB,EAAE,kBAAkB,EAAE,IAAI,EAAE,IAAI,4EAEvE"}
|
package/ts-jest-integration.js
DELETED
|
@@ -1,10 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.factory = exports.version = exports.name = void 0;
|
|
4
|
-
var _1 = require(".");
|
|
5
|
-
exports.name = '@formatjs/ts-transformer';
|
|
6
|
-
exports.version = '2.10.1';
|
|
7
|
-
function factory(compilerInstance, opts) {
|
|
8
|
-
return (0, _1.transformWithTs)(compilerInstance.configSet.compilerModule, opts);
|
|
9
|
-
}
|
|
10
|
-
exports.factory = factory;
|