diff --git a/index.ts b/index.ts index 6b64f66..b496073 100644 --- a/index.ts +++ b/index.ts @@ -14,32 +14,51 @@ function isMethodCall( ); } -// Should be pretty fast: https://stackoverflow.com/a/34491287/14379 -// tslint:disable-next-line:no-any -function emptyObject(obj: any) { - for (const key in obj) { - if (obj.hasOwnProperty(key)) { - return false; - } - } - return true; -} - -// just a map of string to string -interface Message { - [key: string]: string; +/** + * Represents a react-intl message descriptor + */ +export interface Message { + defaultMessage: string; + description?: string; + id: string; } +// This is the only JSX element we can extract messages from: type ElementName = "FormattedMessage"; +// These are the two methods we can extract messages from: type MethodName = "defineMessages" | "formatMessage"; +// MessageExtracter defines a function type which can extract zero or more +// valid Messages from an ObjectLiteralExpression: type MessageExtracter = (obj: ts.ObjectLiteralExpression) => Message[]; +// sets `target[key] = value`, but only if it is a legal Message key +function copyIfMessageKey( + target: Partial, + key: string, + value: string, +) { + switch (key) { + case "defaultMessage": + case "description": + case "id": + target[key] = value; + break; + default: + break; + } +} + +// are the required keys of a valid Message present? +function isValidMessage(obj: Partial): obj is Message { + return "id" in obj && "defaultMessage" in obj; +} + function extractMessagesForDefineMessages( objLiteral: ts.ObjectLiteralExpression, ): Message[] { const messages: Message[] = []; objLiteral.properties.forEach((p) => { - const message: Message = {}; + const msg: Partial = {}; if ( ts.isPropertyAssignment(p) && ts.isObjectLiteralExpression(p.initializer) && @@ -55,12 +74,12 @@ function extractMessagesForDefineMessages( ts.isPropertyAssignment(ip) && ts.isStringLiteral(ip.initializer) ) { - message[name] = ip.initializer.text; + copyIfMessageKey(msg, name, ip.initializer.text); } // else: key/value is not a string literal/identifier } }); - messages.push(message); + isValidMessage(msg) && messages.push(msg); } }); return messages; @@ -69,18 +88,18 @@ function extractMessagesForDefineMessages( function extractMessagesForFormatMessage( objLiteral: ts.ObjectLiteralExpression, ): Message[] { - const message: Message = {}; + const msg: Partial = {}; objLiteral.properties.forEach((p) => { if ( ts.isPropertyAssignment(p) && (ts.isIdentifier(p.name) || ts.isLiteralExpression(p.name)) && ts.isStringLiteral(p.initializer) ) { - message[p.name.text] = p.initializer.text; + copyIfMessageKey(msg, p.name.text, p.initializer.text); } // else: key/value is not a string literal/identifier }); - return [message]; + return isValidMessage(msg) ? [msg] : []; } function extractMessagesForNode( @@ -137,7 +156,6 @@ function findMethodCallsWithName( extractMessages: MessageExtracter, ) { let messages: Message[] = []; - // getNamedDeclarations is not currently public forAllVarDecls(sourceFile, (decl: ts.Declaration) => { if (isMethodCall(decl, methodName)) { if ( @@ -157,9 +175,7 @@ function findMethodCallsWithName( /** * Parse tsx files */ -// TODO perhaps we should expose the Message interface -// tslint:disable-next-line:array-type -function main(contents: string): {}[] { +function main(contents: string): Message[] { const sourceFile = ts.createSourceFile( "file.ts", contents, @@ -188,8 +204,8 @@ function main(contents: string): {}[] { // convert JsxOpeningLikeElements to Message maps const jsxMessages = elements .map((element) => { - const msg: Message = {}; - element.attributes && + const msg: Partial = {}; + if (element.attributes) { element.attributes.properties.forEach((attr: ts.JsxAttributeLike) => { // found nothing // tslint:disable-next-line:no-any @@ -197,14 +213,22 @@ function main(contents: string): {}[] { if (!a.name || !a.initializer) { return; } - msg[a.name.text] = - a.initializer.text || a.initializer.expression.text; + copyIfMessageKey( + msg, + a.name.text, + a.initializer.text || a.initializer.expression.text, + ); }); - return msg; + } + return isValidMessage(msg) ? msg : null; }) - .filter((r) => !emptyObject(r)); + .filter(notNull); return jsxMessages.concat(dm).concat(fm); } +function notNull(value: T | null): value is T { + return value !== null; +} + export default main; diff --git a/lib/index.d.ts b/lib/index.d.ts index 460cf9d..3f054f9 100644 --- a/lib/index.d.ts +++ b/lib/index.d.ts @@ -1,2 +1,13 @@ -declare function main(contents: string): {}[]; +/** + * Represents a react-intl message descriptor + */ +export interface Message { + defaultMessage: string; + description?: string; + id: string; +} +/** + * Parse tsx files + */ +declare function main(contents: string): Message[]; export default main; diff --git a/lib/index.js b/lib/index.js index f0eadd6..b4b8483 100644 --- a/lib/index.js +++ b/lib/index.js @@ -9,18 +9,26 @@ function isMethodCall(el, methodName) { ts.isIdentifier(el.initializer.expression) && el.initializer.expression.text === methodName); } -function emptyObject(obj) { - for (var key in obj) { - if (obj.hasOwnProperty(key)) { - return false; - } +// sets `target[key] = value`, but only if it is a legal Message key +function copyIfMessageKey(target, key, value) { + switch (key) { + case "defaultMessage": + case "description": + case "id": + target[key] = value; + break; + default: + break; } - return true; +} +// are the required keys of a valid Message present? +function isValidMessage(obj) { + return "id" in obj && "defaultMessage" in obj; } function extractMessagesForDefineMessages(objLiteral) { var messages = []; objLiteral.properties.forEach(function (p) { - var message = {}; + var msg = {}; if (ts.isPropertyAssignment(p) && ts.isObjectLiteralExpression(p.initializer) && p.initializer.properties) { @@ -30,25 +38,27 @@ function extractMessagesForDefineMessages(objLiteral) { var name_1 = ip.name.text; if (ts.isPropertyAssignment(ip) && ts.isStringLiteral(ip.initializer)) { - message[name_1] = ip.initializer.text; + copyIfMessageKey(msg, name_1, ip.initializer.text); } + // else: key/value is not a string literal/identifier } }); - messages.push(message); + isValidMessage(msg) && messages.push(msg); } }); return messages; } function extractMessagesForFormatMessage(objLiteral) { - var message = {}; + var msg = {}; objLiteral.properties.forEach(function (p) { if (ts.isPropertyAssignment(p) && (ts.isIdentifier(p.name) || ts.isLiteralExpression(p.name)) && ts.isStringLiteral(p.initializer)) { - message[p.name.text] = p.initializer.text; + copyIfMessageKey(msg, p.name.text, p.initializer.text); } + // else: key/value is not a string literal/identifier }); - return [message]; + return isValidMessage(msg) ? [msg] : []; } function extractMessagesForNode(node, extractMessages) { var res = []; @@ -75,7 +85,9 @@ function forAllVarDecls(node, cb) { function findJsxOpeningLikeElementsWithName(node, tagName) { var messages = []; function findJsxElement(n) { + // Is this a JsxElement with an identifier name? if (ts.isJsxOpeningLikeElement(n) && ts.isIdentifier(n.tagName)) { + // Does the tag name match what we're looking for? var childTagName = n.tagName; if (childTagName.text === tagName) { messages.push(n); @@ -101,27 +113,39 @@ function findMethodCallsWithName(sourceFile, methodName, extractMessages) { }); return messages; } +/** + * Parse tsx files + */ function main(contents) { - var sourceFile = ts.createSourceFile("file.ts", contents, ts.ScriptTarget.ES2015, false, ts.ScriptKind.TSX); + var sourceFile = ts.createSourceFile("file.ts", contents, ts.ScriptTarget.ES2015, + /*setParentNodes */ false, ts.ScriptKind.TSX); var elements = findJsxOpeningLikeElementsWithName(sourceFile, "FormattedMessage"); var dm = findMethodCallsWithName(sourceFile, "defineMessages", extractMessagesForDefineMessages); + // TODO formatMessage might not be the initializer for a VarDecl + // eg console.log(formatMessage(...)) var fm = findMethodCallsWithName(sourceFile, "formatMessage", extractMessagesForFormatMessage); + // convert JsxOpeningLikeElements to Message maps var jsxMessages = elements .map(function (element) { var msg = {}; - element.attributes && + if (element.attributes) { element.attributes.properties.forEach(function (attr) { - var a = attr; + // found nothing + // tslint:disable-next-line:no-any + var a = attr; // TODO find correct types to avoid "any" if (!a.name || !a.initializer) { return; } - msg[a.name.text] = - a.initializer.text || a.initializer.expression.text; + copyIfMessageKey(msg, a.name.text, a.initializer.text || a.initializer.expression.text); }); - return msg; + } + return isValidMessage(msg) ? msg : null; }) - .filter(function (r) { return !emptyObject(r); }); + .filter(notNull); return jsxMessages.concat(dm).concat(fm); } +function notNull(value) { + return value !== null; +} exports.default = main; //# sourceMappingURL=index.js.map \ No newline at end of file diff --git a/lib/index.js.map b/lib/index.js.map index 6553a3b..34bc612 100644 --- a/lib/index.js.map +++ b/lib/index.js.map @@ -1 +1 @@ -{"version":3,"file":"index.js","sourceRoot":"","sources":["../index.ts"],"names":[],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"index.js","sourceRoot":"","sources":["../index.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/test/app/defineMessages.ts b/test/app/defineMessages.ts index 116856c..6095703 100644 --- a/test/app/defineMessages.ts +++ b/test/app/defineMessages.ts @@ -7,7 +7,8 @@ const lang = defineMessages({ }, "title": { "id": 'app.title', - "defaultMessage": "Hello" + "defaultMessage": "Hello", + "description": "A description for title" }, }) diff --git a/test/index.js b/test/index.js index ac87c75..cf59060 100644 --- a/test/index.js +++ b/test/index.js @@ -53,7 +53,8 @@ test("defineMessages() should only work with variable declaration", t => { }, { id: "app.title", - defaultMessage: "Hello" + defaultMessage: "Hello", + description: "A description for title" } ]; diff --git a/tsconfig.json b/tsconfig.json index 500b291..41e8e61 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -10,7 +10,6 @@ "target": "es5", "declaration": true, "noImplicitAny": true, - "removeComments": true, "strictNullChecks": true, "rootDir": "." },