From 34719929a408511ea592d8efc473d973e9abfbd6 Mon Sep 17 00:00:00 2001 From: Sean Flanigan Date: Tue, 16 Jan 2018 15:26:53 +1000 Subject: [PATCH 1/6] Improve Message interface --- index.ts | 53 ++++++++++++++++++++++++++++++------------------ lib/index.js | 36 +++++++++++++++++++------------- lib/index.js.map | 2 +- tslint.json | 1 - 4 files changed, 56 insertions(+), 36 deletions(-) diff --git a/index.ts b/index.ts index cc2eecc..9e319af 100644 --- a/index.ts +++ b/index.ts @@ -14,32 +14,35 @@ 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 +/** + * Represents a react-intl message descriptor + */ interface Message { - [key: string]: string; + id: string; + defaultMessage: string; + description?: string; + [key: string]: string; // for any other properties } type ElementName = "FormattedMessage"; type MethodName = "defineMessages" | "formatMessage"; type MessageExtracter = (obj: ts.ObjectLiteralExpression) => Message[]; +// tslint:disable-next-line:no-any +function isMessage(obj: any): obj is Message { + return obj.id && obj.defaultMessage; +} + +function newMap() { + return Object.create(null); +} + function extractMessagesForDefineMessages( objLiteral: ts.ObjectLiteralExpression, ): Message[] { const messages: Message[] = []; objLiteral.properties.forEach((p) => { - const message: Message = {}; + const message = newMap(); if ( ts.isPropertyAssignment(p) && ts.isObjectLiteralExpression(p.initializer) && @@ -56,7 +59,9 @@ function extractMessagesForDefineMessages( } } }); - messages.push(message); + if (isMessage(message)) { + messages.push(message); + } } }); return messages; @@ -65,7 +70,7 @@ function extractMessagesForDefineMessages( function extractMessagesForFormatMessage( objLiteral: ts.ObjectLiteralExpression, ): Message[] { - const message: Message = {}; + const message = newMap(); objLiteral.properties.forEach((p) => { if ( ts.isPropertyAssignment(p) && @@ -75,7 +80,11 @@ function extractMessagesForFormatMessage( message[p.name.text] = p.initializer.text; } }); - return [message]; + if (isMessage(message)) { + return [message]; + } else { + return []; + } } function extractMessagesForNode( @@ -183,7 +192,7 @@ function main(contents: string): {}[] { // convert JsxOpeningLikeElements to Message maps const jsxMessages = elements .map((element) => { - const msg: Message = {}; + const msg = newMap(); element.attributes && element.attributes.properties.forEach((attr: ts.JsxAttributeLike) => { // found nothing @@ -195,11 +204,15 @@ function main(contents: string): {}[] { msg[a.name.text] = a.initializer.text || a.initializer.expression.text; }); - return msg; + return isMessage(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.js b/lib/index.js index 7a99116..ba1dee9 100644 --- a/lib/index.js +++ b/lib/index.js @@ -9,18 +9,16 @@ 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; - } - } - return true; +function isMessage(obj) { + return obj.id && obj.defaultMessage; +} +function newMap() { + return Object.create(null); } function extractMessagesForDefineMessages(objLiteral) { var messages = []; objLiteral.properties.forEach(function (p) { - var message = {}; + var message = newMap(); if (ts.isPropertyAssignment(p) && ts.isObjectLiteralExpression(p.initializer) && p.initializer.properties) { @@ -33,13 +31,15 @@ function extractMessagesForDefineMessages(objLiteral) { } } }); - messages.push(message); + if (isMessage(message)) { + messages.push(message); + } } }); return messages; } function extractMessagesForFormatMessage(objLiteral) { - var message = {}; + var message = newMap(); objLiteral.properties.forEach(function (p) { if (ts.isPropertyAssignment(p) && (ts.isIdentifier(p.name) || ts.isLiteralExpression(p.name)) && @@ -47,7 +47,12 @@ function extractMessagesForFormatMessage(objLiteral) { message[p.name.text] = p.initializer.text; } }); - return [message]; + if (isMessage(message)) { + return [message]; + } + else { + return []; + } } function extractMessagesForNode(node, extractMessages) { var res = []; @@ -105,7 +110,7 @@ function main(contents) { var fm = findMethodCallsWithName(sourceFile, "formatMessage", extractMessagesForFormatMessage); var jsxMessages = elements .map(function (element) { - var msg = {}; + var msg = newMap(); element.attributes && element.attributes.properties.forEach(function (attr) { var a = attr; @@ -115,10 +120,13 @@ function main(contents) { msg[a.name.text] = a.initializer.text || a.initializer.expression.text; }); - return msg; + return isMessage(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 96dfea0..4caa06e 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/tslint.json b/tslint.json index 2a79bbc..ffe08b8 100644 --- a/tslint.json +++ b/tslint.json @@ -7,7 +7,6 @@ "jsRules": {}, "rules": { "no-any": true, - // TODO perhaps we *should* use the 'I' prefix? "interface-name": [true, "never-prefix"], "no-unused-expression": [true, "allow-fast-null-checks"] }, From 04440f85a9f4a8fccfdb0cb5fc541b71b0744489 Mon Sep 17 00:00:00 2001 From: Sean Flanigan Date: Tue, 16 Jan 2018 15:36:02 +1000 Subject: [PATCH 2/6] Export Message interface; check nulls --- index.ts | 46 ++++++++++++++++++++++++++-------------------- lib/index.d.ts | 14 +++++++++++++- lib/index.js | 39 ++++++++++++++++++++++++++++----------- lib/index.js.map | 2 +- tsconfig.json | 2 +- tslint.json | 3 +-- 6 files changed, 70 insertions(+), 36 deletions(-) diff --git a/index.ts b/index.ts index 9e319af..cd318e2 100644 --- a/index.ts +++ b/index.ts @@ -6,7 +6,7 @@ function isMethodCall( ): el is ts.VariableDeclaration { return ( ts.isVariableDeclaration(el) && - el.initializer && + !!el.initializer && ts.isCallExpression(el.initializer) && el.initializer.expression && ts.isIdentifier(el.initializer.expression) && @@ -17,23 +17,26 @@ function isMethodCall( /** * Represents a react-intl message descriptor */ -interface Message { +export interface Message { id: string; defaultMessage: string; description?: string; - [key: string]: string; // for any other properties + [key: string]: string | undefined; // for any other properties +} + +interface StringMap { + [key: string]: string | undefined; } type ElementName = "FormattedMessage"; type MethodName = "defineMessages" | "formatMessage"; type MessageExtracter = (obj: ts.ObjectLiteralExpression) => Message[]; -// tslint:disable-next-line:no-any -function isMessage(obj: any): obj is Message { - return obj.id && obj.defaultMessage; +function validMessage(obj: StringMap): obj is Message { + return !!(obj.id && obj.defaultMessage); } -function newMap() { +function newMap(): StringMap { return Object.create(null); } @@ -49,7 +52,10 @@ function extractMessagesForDefineMessages( p.initializer.properties ) { p.initializer.properties.forEach((ip) => { - if (ts.isIdentifier(ip.name) || ts.isLiteralExpression(ip.name)) { + if ( + ip.name && + (ts.isIdentifier(ip.name) || ts.isLiteralExpression(ip.name)) + ) { const name = ip.name.text; if ( ts.isPropertyAssignment(ip) && @@ -57,9 +63,10 @@ function extractMessagesForDefineMessages( ) { message[name] = ip.initializer.text; } + // else: key/value is not a string literal/identifier } }); - if (isMessage(message)) { + if (validMessage(message)) { messages.push(message); } } @@ -79,8 +86,9 @@ function extractMessagesForFormatMessage( ) { message[p.name.text] = p.initializer.text; } + // else: key/value is not a string literal/identifier }); - if (isMessage(message)) { + if (validMessage(message)) { return [message]; } else { return []; @@ -92,7 +100,7 @@ function extractMessagesForNode( extractMessages: MessageExtracter, ): Message[] { const res: Message[] = []; - function find(n: ts.Node): Message[] { + function find(n: ts.Node): Message[] | undefined { if (ts.isObjectLiteralExpression(n)) { res.push(...extractMessages(n)); } else { @@ -125,7 +133,6 @@ function findJsxOpeningLikeElementsWithName( // Does the tag name match what we're looking for? const childTagName = n.tagName; if (childTagName.text === tagName) { - // node is a JsxOpeningLikeElement messages.push(n); } } @@ -145,6 +152,7 @@ function findMethodCallsWithName( forAllVarDecls(sourceFile, (decl: ts.Declaration) => { if (isMethodCall(decl, methodName)) { if ( + decl.initializer && ts.isCallExpression(decl.initializer) && decl.initializer.arguments.length ) { @@ -159,13 +167,8 @@ function findMethodCallsWithName( /** * Parse tsx files - * @export - * @param {string} contents - * @returns {array} */ -// 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, @@ -183,6 +186,8 @@ function main(contents: string): {}[] { "defineMessages", extractMessagesForDefineMessages, ); + // TODO formatMessage might not be the initializer for a VarDecl + // eg console.log(formatMessage(...)) const fm = findMethodCallsWithName( sourceFile, "formatMessage", @@ -193,7 +198,7 @@ function main(contents: string): {}[] { const jsxMessages = elements .map((element) => { const msg = newMap(); - element.attributes && + if (element.attributes) { element.attributes.properties.forEach((attr: ts.JsxAttributeLike) => { // found nothing // tslint:disable-next-line:no-any @@ -204,7 +209,8 @@ function main(contents: string): {}[] { msg[a.name.text] = a.initializer.text || a.initializer.expression.text; }); - return isMessage(msg) ? msg : null; + } + return validMessage(msg) ? msg : null; }) .filter(notNull); diff --git a/lib/index.d.ts b/lib/index.d.ts index 460cf9d..b274852 100644 --- a/lib/index.d.ts +++ b/lib/index.d.ts @@ -1,2 +1,14 @@ -declare function main(contents: string): {}[]; +/** + * Represents a react-intl message descriptor + */ +export interface Message { + id: string; + defaultMessage: string; + description?: string; + [key: string]: string | undefined; +} +/** + * Parse tsx files + */ +declare function main(contents: string): Message[]; export default main; diff --git a/lib/index.js b/lib/index.js index ba1dee9..fcfa509 100644 --- a/lib/index.js +++ b/lib/index.js @@ -3,14 +3,14 @@ Object.defineProperty(exports, "__esModule", { value: true }); var ts = require("typescript"); function isMethodCall(el, methodName) { return (ts.isVariableDeclaration(el) && - el.initializer && + !!el.initializer && ts.isCallExpression(el.initializer) && el.initializer.expression && ts.isIdentifier(el.initializer.expression) && el.initializer.expression.text === methodName); } -function isMessage(obj) { - return obj.id && obj.defaultMessage; +function validMessage(obj) { + return !!(obj.id && obj.defaultMessage); } function newMap() { return Object.create(null); @@ -23,15 +23,17 @@ function extractMessagesForDefineMessages(objLiteral) { ts.isObjectLiteralExpression(p.initializer) && p.initializer.properties) { p.initializer.properties.forEach(function (ip) { - if (ts.isIdentifier(ip.name) || ts.isLiteralExpression(ip.name)) { + if (ip.name && + (ts.isIdentifier(ip.name) || ts.isLiteralExpression(ip.name))) { var name_1 = ip.name.text; if (ts.isPropertyAssignment(ip) && ts.isStringLiteral(ip.initializer)) { message[name_1] = ip.initializer.text; } + // else: key/value is not a string literal/identifier } }); - if (isMessage(message)) { + if (validMessage(message)) { messages.push(message); } } @@ -46,8 +48,9 @@ function extractMessagesForFormatMessage(objLiteral) { ts.isStringLiteral(p.initializer)) { message[p.name.text] = p.initializer.text; } + // else: key/value is not a string literal/identifier }); - if (isMessage(message)) { + if (validMessage(message)) { return [message]; } else { @@ -78,7 +81,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); @@ -91,9 +96,11 @@ function findJsxOpeningLikeElementsWithName(node, tagName) { } function findMethodCallsWithName(sourceFile, methodName, extractMessages) { var messages = []; + // getNamedDeclarations is not currently public forAllVarDecls(sourceFile, function (decl) { if (isMethodCall(decl, methodName)) { - if (ts.isCallExpression(decl.initializer) && + if (decl.initializer && + ts.isCallExpression(decl.initializer) && decl.initializer.arguments.length) { var nodeProps = decl.initializer.arguments[0]; var declMessages = extractMessagesForNode(nodeProps, extractMessages); @@ -103,24 +110,34 @@ 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 = newMap(); - 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; }); - return isMessage(msg) ? msg : null; + } + return validMessage(msg) ? msg : null; }) .filter(notNull); return jsxMessages.concat(dm).concat(fm); diff --git a/lib/index.js.map b/lib/index.js.map index 4caa06e..c0c0a1c 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/tsconfig.json b/tsconfig.json index 3f9c19c..41e8e61 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -10,7 +10,7 @@ "target": "es5", "declaration": true, "noImplicitAny": true, - "removeComments": true, + "strictNullChecks": true, "rootDir": "." }, "include": [ diff --git a/tslint.json b/tslint.json index ffe08b8..f89559f 100644 --- a/tslint.json +++ b/tslint.json @@ -7,8 +7,7 @@ "jsRules": {}, "rules": { "no-any": true, - "interface-name": [true, "never-prefix"], - "no-unused-expression": [true, "allow-fast-null-checks"] + "interface-name": [true, "never-prefix"] }, "rulesDirectory": [] } \ No newline at end of file From 2b741bb8d4baa5b484b3c47f79f4de55c7512356 Mon Sep 17 00:00:00 2001 From: Sean Flanigan Date: Wed, 17 Jan 2018 00:05:16 +1000 Subject: [PATCH 3/6] Remove arbitrary keys from Message interface --- index.ts | 38 +++++++++++++++++++++++++------------- lib/index.d.ts | 3 +-- lib/index.js | 36 +++++++++++++++++++++++++----------- lib/index.js.map | 2 +- test/app/defineMessages.ts | 3 ++- test/index.js | 3 ++- 6 files changed, 56 insertions(+), 29 deletions(-) diff --git a/index.ts b/index.ts index cd318e2..15fe3dc 100644 --- a/index.ts +++ b/index.ts @@ -18,10 +18,9 @@ function isMethodCall( * Represents a react-intl message descriptor */ export interface Message { - id: string; defaultMessage: string; description?: string; - [key: string]: string | undefined; // for any other properties + id: string; } interface StringMap { @@ -32,8 +31,19 @@ type ElementName = "FormattedMessage"; type MethodName = "defineMessages" | "formatMessage"; type MessageExtracter = (obj: ts.ObjectLiteralExpression) => Message[]; -function validMessage(obj: StringMap): obj is Message { - return !!(obj.id && obj.defaultMessage); +function toMessage(obj: StringMap): Message | null { + if (obj.id && obj.defaultMessage) { + const res = { + defaultMessage: obj.defaultMessage, + id: obj.id, + } as Message; + if (obj.description) { + res.description = obj.description; + } + return res; + } else { + return null; + } } function newMap(): StringMap { @@ -45,7 +55,7 @@ function extractMessagesForDefineMessages( ): Message[] { const messages: Message[] = []; objLiteral.properties.forEach((p) => { - const message = newMap(); + const map = newMap(); if ( ts.isPropertyAssignment(p) && ts.isObjectLiteralExpression(p.initializer) && @@ -61,13 +71,14 @@ function extractMessagesForDefineMessages( ts.isPropertyAssignment(ip) && ts.isStringLiteral(ip.initializer) ) { - message[name] = ip.initializer.text; + map[name] = ip.initializer.text; } // else: key/value is not a string literal/identifier } }); - if (validMessage(message)) { - messages.push(message); + const msg = toMessage(map); + if (msg) { + messages.push(msg); } } }); @@ -77,19 +88,20 @@ function extractMessagesForDefineMessages( function extractMessagesForFormatMessage( objLiteral: ts.ObjectLiteralExpression, ): Message[] { - const message = newMap(); + const map = newMap(); 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; + map[p.name.text] = p.initializer.text; } // else: key/value is not a string literal/identifier }); - if (validMessage(message)) { - return [message]; + const msg = toMessage(map); + if (msg) { + return [msg]; } else { return []; } @@ -210,7 +222,7 @@ function main(contents: string): Message[] { a.initializer.text || a.initializer.expression.text; }); } - return validMessage(msg) ? msg : null; + return toMessage(msg); }) .filter(notNull); diff --git a/lib/index.d.ts b/lib/index.d.ts index b274852..3f054f9 100644 --- a/lib/index.d.ts +++ b/lib/index.d.ts @@ -2,10 +2,9 @@ * Represents a react-intl message descriptor */ export interface Message { - id: string; defaultMessage: string; description?: string; - [key: string]: string | undefined; + id: string; } /** * Parse tsx files diff --git a/lib/index.js b/lib/index.js index fcfa509..82721f7 100644 --- a/lib/index.js +++ b/lib/index.js @@ -9,8 +9,20 @@ function isMethodCall(el, methodName) { ts.isIdentifier(el.initializer.expression) && el.initializer.expression.text === methodName); } -function validMessage(obj) { - return !!(obj.id && obj.defaultMessage); +function toMessage(obj) { + if (obj.id && obj.defaultMessage) { + var res = { + defaultMessage: obj.defaultMessage, + id: obj.id, + }; + if (obj.description) { + res.description = obj.description; + } + return res; + } + else { + return null; + } } function newMap() { return Object.create(null); @@ -18,7 +30,7 @@ function newMap() { function extractMessagesForDefineMessages(objLiteral) { var messages = []; objLiteral.properties.forEach(function (p) { - var message = newMap(); + var map = newMap(); if (ts.isPropertyAssignment(p) && ts.isObjectLiteralExpression(p.initializer) && p.initializer.properties) { @@ -28,30 +40,32 @@ function extractMessagesForDefineMessages(objLiteral) { var name_1 = ip.name.text; if (ts.isPropertyAssignment(ip) && ts.isStringLiteral(ip.initializer)) { - message[name_1] = ip.initializer.text; + map[name_1] = ip.initializer.text; } // else: key/value is not a string literal/identifier } }); - if (validMessage(message)) { - messages.push(message); + var msg = toMessage(map); + if (msg) { + messages.push(msg); } } }); return messages; } function extractMessagesForFormatMessage(objLiteral) { - var message = newMap(); + var map = newMap(); 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; + map[p.name.text] = p.initializer.text; } // else: key/value is not a string literal/identifier }); - if (validMessage(message)) { - return [message]; + var msg = toMessage(map); + if (msg) { + return [msg]; } else { return []; @@ -137,7 +151,7 @@ function main(contents) { a.initializer.text || a.initializer.expression.text; }); } - return validMessage(msg) ? msg : null; + return toMessage(msg); }) .filter(notNull); return jsxMessages.concat(dm).concat(fm); diff --git a/lib/index.js.map b/lib/index.js.map index c0c0a1c..e9bc46b 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":";;AAAA,+BAAkC;AAElC,sBACE,EAAkB,EAClB,UAAkB;IAElB,MAAM,CAAC,CACL,EAAE,CAAC,qBAAqB,CAAC,EAAE,CAAC;QAC5B,CAAC,CAAC,EAAE,CAAC,WAAW;QAChB,EAAE,CAAC,gBAAgB,CAAC,EAAE,CAAC,WAAW,CAAC;QACnC,EAAE,CAAC,WAAW,CAAC,UAAU;QACzB,EAAE,CAAC,YAAY,CAAC,EAAE,CAAC,WAAW,CAAC,UAAU,CAAC;QAC1C,EAAE,CAAC,WAAW,CAAC,UAAU,CAAC,IAAI,KAAK,UAAU,CAC9C,CAAC;AACJ,CAAC;AAmBD,mBAAmB,GAAc;IAC/B,EAAE,CAAC,CAAC,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,cAAc,CAAC,CAAC,CAAC;QACjC,IAAM,GAAG,GAAG;YACV,cAAc,EAAE,GAAG,CAAC,cAAc;YAClC,EAAE,EAAE,GAAG,CAAC,EAAE;SACA,CAAC;QACb,EAAE,CAAC,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC,CAAC;YACpB,GAAG,CAAC,WAAW,GAAG,GAAG,CAAC,WAAW,CAAC;QACpC,CAAC;QACD,MAAM,CAAC,GAAG,CAAC;IACb,CAAC;IAAC,IAAI,CAAC,CAAC;QACN,MAAM,CAAC,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED;IACE,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;AAC7B,CAAC;AAED,0CACE,UAAsC;IAEtC,IAAM,QAAQ,GAAc,EAAE,CAAC;IAC/B,UAAU,CAAC,UAAU,CAAC,OAAO,CAAC,UAAC,CAAC;QAC9B,IAAM,GAAG,GAAG,MAAM,EAAE,CAAC;QACrB,EAAE,CAAC,CACD,EAAE,CAAC,oBAAoB,CAAC,CAAC,CAAC;YAC1B,EAAE,CAAC,yBAAyB,CAAC,CAAC,CAAC,WAAW,CAAC;YAC3C,CAAC,CAAC,WAAW,CAAC,UAChB,CAAC,CAAC,CAAC;YACD,CAAC,CAAC,WAAW,CAAC,UAAU,CAAC,OAAO,CAAC,UAAC,EAAE;gBAClC,EAAE,CAAC,CACD,EAAE,CAAC,IAAI;oBACP,CAAC,EAAE,CAAC,YAAY,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,mBAAmB,CAAC,EAAE,CAAC,IAAI,CAAC,CAC9D,CAAC,CAAC,CAAC;oBACD,IAAM,MAAI,GAAG,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC;oBAC1B,EAAE,CAAC,CACD,EAAE,CAAC,oBAAoB,CAAC,EAAE,CAAC;wBAC3B,EAAE,CAAC,eAAe,CAAC,EAAE,CAAC,WAAW,CACnC,CAAC,CAAC,CAAC;wBACD,GAAG,CAAC,MAAI,CAAC,GAAG,EAAE,CAAC,WAAW,CAAC,IAAI,CAAC;oBAClC,CAAC;oBACD,qDAAqD;gBACvD,CAAC;YACH,CAAC,CAAC,CAAC;YACH,IAAM,GAAG,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC;YAC3B,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;gBACR,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YACrB,CAAC;QACH,CAAC;IACH,CAAC,CAAC,CAAC;IACH,MAAM,CAAC,QAAQ,CAAC;AAClB,CAAC;AAED,yCACE,UAAsC;IAEtC,IAAM,GAAG,GAAG,MAAM,EAAE,CAAC;IACrB,UAAU,CAAC,UAAU,CAAC,OAAO,CAAC,UAAC,CAAC;QAC9B,EAAE,CAAC,CACD,EAAE,CAAC,oBAAoB,CAAC,CAAC,CAAC;YAC1B,CAAC,EAAE,CAAC,YAAY,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,mBAAmB,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;YAC3D,EAAE,CAAC,eAAe,CAAC,CAAC,CAAC,WAAW,CAClC,CAAC,CAAC,CAAC;YACD,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,WAAW,CAAC,IAAI,CAAC;QACxC,CAAC;QACD,qDAAqD;IACvD,CAAC,CAAC,CAAC;IACH,IAAM,GAAG,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC;IAC3B,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;QACR,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC;IACf,CAAC;IAAC,IAAI,CAAC,CAAC;QACN,MAAM,CAAC,EAAE,CAAC;IACZ,CAAC;AACH,CAAC;AAED,gCACE,IAAa,EACb,eAAiC;IAEjC,IAAM,GAAG,GAAc,EAAE,CAAC;IAC1B,cAAc,CAAU;QACtB,EAAE,CAAC,CAAC,EAAE,CAAC,yBAAyB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YACpC,GAAG,CAAC,IAAI,OAAR,GAAG,EAAS,eAAe,CAAC,CAAC,CAAC,EAAE;QAClC,CAAC;QAAC,IAAI,CAAC,CAAC;YACN,MAAM,CAAC,EAAE,CAAC,YAAY,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC;QAClC,CAAC;IACH,CAAC;IACD,IAAI,CAAC,IAAI,CAAC,CAAC;IACX,MAAM,CAAC,GAAG,CAAC;AACb,CAAC;AAED,wBACE,IAAa,EACb,EAA0C;IAE1C,EAAE,CAAC,CAAC,EAAE,CAAC,qBAAqB,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACnC,EAAE,CAAC,IAAI,CAAC,CAAC;IACX,CAAC;IAAC,IAAI,CAAC,CAAC;QACN,EAAE,CAAC,YAAY,CAAC,IAAI,EAAE,UAAC,CAAC,IAAK,OAAA,cAAc,CAAC,CAAC,EAAE,EAAE,CAAC,EAArB,CAAqB,CAAC,CAAC;IACtD,CAAC;AACH,CAAC;AAED,4CACE,IAAmB,EACnB,OAAoB;IAEpB,IAAM,QAAQ,GAA+B,EAAE,CAAC;IAChD,wBAAwB,CAAU;QAChC,gDAAgD;QAChD,EAAE,CAAC,CAAC,EAAE,CAAC,uBAAuB,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,YAAY,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;YAChE,kDAAkD;YAClD,IAAM,YAAY,GAAG,CAAC,CAAC,OAAO,CAAC;YAC/B,EAAE,CAAC,CAAC,YAAY,CAAC,IAAI,KAAK,OAAO,CAAC,CAAC,CAAC;gBAClC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YACnB,CAAC;QACH,CAAC;QACD,MAAM,CAAC,EAAE,CAAC,YAAY,CAAC,CAAC,EAAE,cAAc,CAAC,CAAC;IAC5C,CAAC;IACD,cAAc,CAAC,IAAI,CAAC,CAAC;IACrB,MAAM,CAAC,QAAQ,CAAC;AAClB,CAAC;AAED,iCACE,UAAyB,EACzB,UAAsB,EACtB,eAAiC;IAEjC,IAAI,QAAQ,GAAc,EAAE,CAAC;IAC7B,+CAA+C;IAC/C,cAAc,CAAC,UAAU,EAAE,UAAC,IAAoB;QAC9C,EAAE,CAAC,CAAC,YAAY,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC,CAAC,CAAC;YACnC,EAAE,CAAC,CACD,IAAI,CAAC,WAAW;gBAChB,EAAE,CAAC,gBAAgB,CAAC,IAAI,CAAC,WAAW,CAAC;gBACrC,IAAI,CAAC,WAAW,CAAC,SAAS,CAAC,MAC7B,CAAC,CAAC,CAAC;gBACD,IAAM,SAAS,GAAG,IAAI,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;gBAChD,IAAM,YAAY,GAAG,sBAAsB,CAAC,SAAS,EAAE,eAAe,CAAC,CAAC;gBACxE,QAAQ,GAAG,QAAQ,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC;YAC3C,CAAC;QACH,CAAC;IACH,CAAC,CAAC,CAAC;IACH,MAAM,CAAC,QAAQ,CAAC;AAClB,CAAC;AAED;;GAEG;AACH,cAAc,QAAgB;IAC5B,IAAM,UAAU,GAAG,EAAE,CAAC,gBAAgB,CACpC,SAAS,EACT,QAAQ,EACR,EAAE,CAAC,YAAY,CAAC,MAAM;IACtB,mBAAmB,CAAC,KAAK,EACzB,EAAE,CAAC,UAAU,CAAC,GAAG,CAClB,CAAC;IAEF,IAAM,QAAQ,GAAG,kCAAkC,CACjD,UAAU,EACV,kBAAkB,CACnB,CAAC;IACF,IAAM,EAAE,GAAG,uBAAuB,CAChC,UAAU,EACV,gBAAgB,EAChB,gCAAgC,CACjC,CAAC;IACF,gEAAgE;IAChE,qCAAqC;IACrC,IAAM,EAAE,GAAG,uBAAuB,CAChC,UAAU,EACV,eAAe,EACf,+BAA+B,CAChC,CAAC;IAEF,iDAAiD;IACjD,IAAM,WAAW,GAAG,QAAQ;SACzB,GAAG,CAAC,UAAC,OAAO;QACX,IAAM,GAAG,GAAG,MAAM,EAAE,CAAC;QACrB,EAAE,CAAC,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC;YACvB,OAAO,CAAC,UAAU,CAAC,UAAU,CAAC,OAAO,CAAC,UAAC,IAAyB;gBAC9D,gBAAgB;gBAChB,kCAAkC;gBAClC,IAAM,CAAC,GAAG,IAAW,CAAC,CAAC,yCAAyC;gBAChE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC;oBAC9B,MAAM,CAAC;gBACT,CAAC;gBACD,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;oBACd,CAAC,CAAC,WAAW,CAAC,IAAI,IAAI,CAAC,CAAC,WAAW,CAAC,UAAU,CAAC,IAAI,CAAC;YACxD,CAAC,CAAC,CAAC;QACL,CAAC;QACD,MAAM,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;IACxB,CAAC,CAAC;SACD,MAAM,CAAC,OAAO,CAAC,CAAC;IAEnB,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;AAC3C,CAAC;AAED,iBAAoB,KAAe;IACjC,MAAM,CAAC,KAAK,KAAK,IAAI,CAAC;AACxB,CAAC;AAED,kBAAe,IAAI,CAAC"} \ 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" } ]; From b2e76454e8ae9fc8b25e7399c4f11ac97417126e Mon Sep 17 00:00:00 2001 From: Sean Flanigan Date: Wed, 17 Jan 2018 21:42:38 +1000 Subject: [PATCH 4/6] Avoid copying Messages around --- index.ts | 71 ++++++++++++++++++++++++------------------------ lib/index.d.ts | 5 ++++ lib/index.js | 58 ++++++++++++++++----------------------- lib/index.js.map | 2 +- tslint.json | 3 +- 5 files changed, 67 insertions(+), 72 deletions(-) diff --git a/index.ts b/index.ts index 15fe3dc..4e65e70 100644 --- a/index.ts +++ b/index.ts @@ -23,31 +23,37 @@ export interface Message { id: string; } -interface StringMap { - [key: string]: string | undefined; +// a Message with nullable fields, still under construction +export interface PartialMessage { + 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[]; -function toMessage(obj: StringMap): Message | null { - if (obj.id && obj.defaultMessage) { - const res = { - defaultMessage: obj.defaultMessage, - id: obj.id, - } as Message; - if (obj.description) { - res.description = obj.description; - } - return res; - } else { - return null; +// sets `target[key] = value`, but only if it is a legal Message key +function copyIfMessageKey(target: PartialMessage, key: string, value: string) { + switch (key) { + case "defaultMessage": + case "description": + case "id": + target[key] = value; + break; + default: + break; } } -function newMap(): StringMap { - return Object.create(null); +// are the required keys of a valid Message present? +function isValidMessage(obj: PartialMessage): obj is Message { + return "id" in obj && "defaultMessage" in obj; } function extractMessagesForDefineMessages( @@ -55,7 +61,7 @@ function extractMessagesForDefineMessages( ): Message[] { const messages: Message[] = []; objLiteral.properties.forEach((p) => { - const map = newMap(); + const msg: PartialMessage = {}; if ( ts.isPropertyAssignment(p) && ts.isObjectLiteralExpression(p.initializer) && @@ -71,15 +77,12 @@ function extractMessagesForDefineMessages( ts.isPropertyAssignment(ip) && ts.isStringLiteral(ip.initializer) ) { - map[name] = ip.initializer.text; + copyIfMessageKey(msg, name, ip.initializer.text); } // else: key/value is not a string literal/identifier } }); - const msg = toMessage(map); - if (msg) { - messages.push(msg); - } + isValidMessage(msg) && messages.push(msg); } }); return messages; @@ -88,23 +91,18 @@ function extractMessagesForDefineMessages( function extractMessagesForFormatMessage( objLiteral: ts.ObjectLiteralExpression, ): Message[] { - const map = newMap(); + const msg: PartialMessage = {}; objLiteral.properties.forEach((p) => { if ( ts.isPropertyAssignment(p) && (ts.isIdentifier(p.name) || ts.isLiteralExpression(p.name)) && ts.isStringLiteral(p.initializer) ) { - map[p.name.text] = p.initializer.text; + copyIfMessageKey(msg, p.name.text, p.initializer.text); } // else: key/value is not a string literal/identifier }); - const msg = toMessage(map); - if (msg) { - return [msg]; - } else { - return []; - } + return isValidMessage(msg) ? [msg] : []; } function extractMessagesForNode( @@ -115,6 +113,7 @@ function extractMessagesForNode( function find(n: ts.Node): Message[] | undefined { if (ts.isObjectLiteralExpression(n)) { res.push(...extractMessages(n)); + return undefined; } else { return ts.forEachChild(n, find); } @@ -160,7 +159,6 @@ function findMethodCallsWithName( extractMessages: MessageExtracter, ) { let messages: Message[] = []; - // getNamedDeclarations is not currently public forAllVarDecls(sourceFile, (decl: ts.Declaration) => { if (isMethodCall(decl, methodName)) { if ( @@ -209,7 +207,7 @@ function main(contents: string): Message[] { // convert JsxOpeningLikeElements to Message maps const jsxMessages = elements .map((element) => { - const msg = newMap(); + const msg: PartialMessage = {}; if (element.attributes) { element.attributes.properties.forEach((attr: ts.JsxAttributeLike) => { // found nothing @@ -218,11 +216,14 @@ function main(contents: string): Message[] { 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 toMessage(msg); + return isValidMessage(msg) ? msg : null; }) .filter(notNull); diff --git a/lib/index.d.ts b/lib/index.d.ts index 3f054f9..62dcd25 100644 --- a/lib/index.d.ts +++ b/lib/index.d.ts @@ -6,6 +6,11 @@ export interface Message { description?: string; id: string; } +export interface PartialMessage { + defaultMessage?: string; + description?: string; + id?: string; +} /** * Parse tsx files */ diff --git a/lib/index.js b/lib/index.js index 82721f7..b4b8483 100644 --- a/lib/index.js +++ b/lib/index.js @@ -9,28 +9,26 @@ function isMethodCall(el, methodName) { ts.isIdentifier(el.initializer.expression) && el.initializer.expression.text === methodName); } -function toMessage(obj) { - if (obj.id && obj.defaultMessage) { - var res = { - defaultMessage: obj.defaultMessage, - id: obj.id, - }; - if (obj.description) { - res.description = obj.description; - } - return res; - } - else { - return null; +// 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; } } -function newMap() { - return Object.create(null); +// 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 map = newMap(); + var msg = {}; if (ts.isPropertyAssignment(p) && ts.isObjectLiteralExpression(p.initializer) && p.initializer.properties) { @@ -40,42 +38,34 @@ function extractMessagesForDefineMessages(objLiteral) { var name_1 = ip.name.text; if (ts.isPropertyAssignment(ip) && ts.isStringLiteral(ip.initializer)) { - map[name_1] = ip.initializer.text; + copyIfMessageKey(msg, name_1, ip.initializer.text); } // else: key/value is not a string literal/identifier } }); - var msg = toMessage(map); - if (msg) { - messages.push(msg); - } + isValidMessage(msg) && messages.push(msg); } }); return messages; } function extractMessagesForFormatMessage(objLiteral) { - var map = newMap(); + var msg = {}; objLiteral.properties.forEach(function (p) { if (ts.isPropertyAssignment(p) && (ts.isIdentifier(p.name) || ts.isLiteralExpression(p.name)) && ts.isStringLiteral(p.initializer)) { - map[p.name.text] = p.initializer.text; + copyIfMessageKey(msg, p.name.text, p.initializer.text); } // else: key/value is not a string literal/identifier }); - var msg = toMessage(map); - if (msg) { - return [msg]; - } - else { - return []; - } + return isValidMessage(msg) ? [msg] : []; } function extractMessagesForNode(node, extractMessages) { var res = []; function find(n) { if (ts.isObjectLiteralExpression(n)) { res.push.apply(res, extractMessages(n)); + return undefined; } else { return ts.forEachChild(n, find); @@ -110,7 +100,6 @@ function findJsxOpeningLikeElementsWithName(node, tagName) { } function findMethodCallsWithName(sourceFile, methodName, extractMessages) { var messages = []; - // getNamedDeclarations is not currently public forAllVarDecls(sourceFile, function (decl) { if (isMethodCall(decl, methodName)) { if (decl.initializer && @@ -138,7 +127,7 @@ function main(contents) { // convert JsxOpeningLikeElements to Message maps var jsxMessages = elements .map(function (element) { - var msg = newMap(); + var msg = {}; if (element.attributes) { element.attributes.properties.forEach(function (attr) { // found nothing @@ -147,11 +136,10 @@ function main(contents) { 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 toMessage(msg); + return isValidMessage(msg) ? msg : null; }) .filter(notNull); return jsxMessages.concat(dm).concat(fm); diff --git a/lib/index.js.map b/lib/index.js.map index e9bc46b..6f66879 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":";;AAAA,+BAAkC;AAElC,sBACE,EAAkB,EAClB,UAAkB;IAElB,MAAM,CAAC,CACL,EAAE,CAAC,qBAAqB,CAAC,EAAE,CAAC;QAC5B,CAAC,CAAC,EAAE,CAAC,WAAW;QAChB,EAAE,CAAC,gBAAgB,CAAC,EAAE,CAAC,WAAW,CAAC;QACnC,EAAE,CAAC,WAAW,CAAC,UAAU;QACzB,EAAE,CAAC,YAAY,CAAC,EAAE,CAAC,WAAW,CAAC,UAAU,CAAC;QAC1C,EAAE,CAAC,WAAW,CAAC,UAAU,CAAC,IAAI,KAAK,UAAU,CAC9C,CAAC;AACJ,CAAC;AA0BD,oEAAoE;AACpE,0BAA0B,MAAsB,EAAE,GAAW,EAAE,KAAa;IAC1E,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;QACZ,KAAK,gBAAgB,CAAC;QACtB,KAAK,aAAa,CAAC;QACnB,KAAK,IAAI;YACP,MAAM,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;YACpB,KAAK,CAAC;QACR;YACE,KAAK,CAAC;IACV,CAAC;AACH,CAAC;AAED,oDAAoD;AACpD,wBAAwB,GAAmB;IACzC,MAAM,CAAC,IAAI,IAAI,GAAG,IAAI,gBAAgB,IAAI,GAAG,CAAC;AAChD,CAAC;AAED,0CACE,UAAsC;IAEtC,IAAM,QAAQ,GAAc,EAAE,CAAC;IAC/B,UAAU,CAAC,UAAU,CAAC,OAAO,CAAC,UAAC,CAAC;QAC9B,IAAM,GAAG,GAAmB,EAAE,CAAC;QAC/B,EAAE,CAAC,CACD,EAAE,CAAC,oBAAoB,CAAC,CAAC,CAAC;YAC1B,EAAE,CAAC,yBAAyB,CAAC,CAAC,CAAC,WAAW,CAAC;YAC3C,CAAC,CAAC,WAAW,CAAC,UAChB,CAAC,CAAC,CAAC;YACD,CAAC,CAAC,WAAW,CAAC,UAAU,CAAC,OAAO,CAAC,UAAC,EAAE;gBAClC,EAAE,CAAC,CACD,EAAE,CAAC,IAAI;oBACP,CAAC,EAAE,CAAC,YAAY,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,mBAAmB,CAAC,EAAE,CAAC,IAAI,CAAC,CAC9D,CAAC,CAAC,CAAC;oBACD,IAAM,MAAI,GAAG,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC;oBAC1B,EAAE,CAAC,CACD,EAAE,CAAC,oBAAoB,CAAC,EAAE,CAAC;wBAC3B,EAAE,CAAC,eAAe,CAAC,EAAE,CAAC,WAAW,CACnC,CAAC,CAAC,CAAC;wBACD,gBAAgB,CAAC,GAAG,EAAE,MAAI,EAAE,EAAE,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;oBACnD,CAAC;oBACD,qDAAqD;gBACvD,CAAC;YACH,CAAC,CAAC,CAAC;YACH,cAAc,CAAC,GAAG,CAAC,IAAI,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAC5C,CAAC;IACH,CAAC,CAAC,CAAC;IACH,MAAM,CAAC,QAAQ,CAAC;AAClB,CAAC;AAED,yCACE,UAAsC;IAEtC,IAAM,GAAG,GAAmB,EAAE,CAAC;IAC/B,UAAU,CAAC,UAAU,CAAC,OAAO,CAAC,UAAC,CAAC;QAC9B,EAAE,CAAC,CACD,EAAE,CAAC,oBAAoB,CAAC,CAAC,CAAC;YAC1B,CAAC,EAAE,CAAC,YAAY,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,mBAAmB,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;YAC3D,EAAE,CAAC,eAAe,CAAC,CAAC,CAAC,WAAW,CAClC,CAAC,CAAC,CAAC;YACD,gBAAgB,CAAC,GAAG,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;QACzD,CAAC;QACD,qDAAqD;IACvD,CAAC,CAAC,CAAC;IACH,MAAM,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;AAC1C,CAAC;AAED,gCACE,IAAa,EACb,eAAiC;IAEjC,IAAM,GAAG,GAAc,EAAE,CAAC;IAC1B,cAAc,CAAU;QACtB,EAAE,CAAC,CAAC,EAAE,CAAC,yBAAyB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YACpC,GAAG,CAAC,IAAI,OAAR,GAAG,EAAS,eAAe,CAAC,CAAC,CAAC,EAAE;YAChC,MAAM,CAAC,SAAS,CAAC;QACnB,CAAC;QAAC,IAAI,CAAC,CAAC;YACN,MAAM,CAAC,EAAE,CAAC,YAAY,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC;QAClC,CAAC;IACH,CAAC;IACD,IAAI,CAAC,IAAI,CAAC,CAAC;IACX,MAAM,CAAC,GAAG,CAAC;AACb,CAAC;AAED,wBACE,IAAa,EACb,EAA0C;IAE1C,EAAE,CAAC,CAAC,EAAE,CAAC,qBAAqB,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACnC,EAAE,CAAC,IAAI,CAAC,CAAC;IACX,CAAC;IAAC,IAAI,CAAC,CAAC;QACN,EAAE,CAAC,YAAY,CAAC,IAAI,EAAE,UAAC,CAAC,IAAK,OAAA,cAAc,CAAC,CAAC,EAAE,EAAE,CAAC,EAArB,CAAqB,CAAC,CAAC;IACtD,CAAC;AACH,CAAC;AAED,4CACE,IAAmB,EACnB,OAAoB;IAEpB,IAAM,QAAQ,GAA+B,EAAE,CAAC;IAChD,wBAAwB,CAAU;QAChC,gDAAgD;QAChD,EAAE,CAAC,CAAC,EAAE,CAAC,uBAAuB,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,YAAY,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;YAChE,kDAAkD;YAClD,IAAM,YAAY,GAAG,CAAC,CAAC,OAAO,CAAC;YAC/B,EAAE,CAAC,CAAC,YAAY,CAAC,IAAI,KAAK,OAAO,CAAC,CAAC,CAAC;gBAClC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YACnB,CAAC;QACH,CAAC;QACD,MAAM,CAAC,EAAE,CAAC,YAAY,CAAC,CAAC,EAAE,cAAc,CAAC,CAAC;IAC5C,CAAC;IACD,cAAc,CAAC,IAAI,CAAC,CAAC;IACrB,MAAM,CAAC,QAAQ,CAAC;AAClB,CAAC;AAED,iCACE,UAAyB,EACzB,UAAsB,EACtB,eAAiC;IAEjC,IAAI,QAAQ,GAAc,EAAE,CAAC;IAC7B,cAAc,CAAC,UAAU,EAAE,UAAC,IAAoB;QAC9C,EAAE,CAAC,CAAC,YAAY,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC,CAAC,CAAC;YACnC,EAAE,CAAC,CACD,IAAI,CAAC,WAAW;gBAChB,EAAE,CAAC,gBAAgB,CAAC,IAAI,CAAC,WAAW,CAAC;gBACrC,IAAI,CAAC,WAAW,CAAC,SAAS,CAAC,MAC7B,CAAC,CAAC,CAAC;gBACD,IAAM,SAAS,GAAG,IAAI,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;gBAChD,IAAM,YAAY,GAAG,sBAAsB,CAAC,SAAS,EAAE,eAAe,CAAC,CAAC;gBACxE,QAAQ,GAAG,QAAQ,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC;YAC3C,CAAC;QACH,CAAC;IACH,CAAC,CAAC,CAAC;IACH,MAAM,CAAC,QAAQ,CAAC;AAClB,CAAC;AAED;;GAEG;AACH,cAAc,QAAgB;IAC5B,IAAM,UAAU,GAAG,EAAE,CAAC,gBAAgB,CACpC,SAAS,EACT,QAAQ,EACR,EAAE,CAAC,YAAY,CAAC,MAAM;IACtB,mBAAmB,CAAC,KAAK,EACzB,EAAE,CAAC,UAAU,CAAC,GAAG,CAClB,CAAC;IAEF,IAAM,QAAQ,GAAG,kCAAkC,CACjD,UAAU,EACV,kBAAkB,CACnB,CAAC;IACF,IAAM,EAAE,GAAG,uBAAuB,CAChC,UAAU,EACV,gBAAgB,EAChB,gCAAgC,CACjC,CAAC;IACF,gEAAgE;IAChE,qCAAqC;IACrC,IAAM,EAAE,GAAG,uBAAuB,CAChC,UAAU,EACV,eAAe,EACf,+BAA+B,CAChC,CAAC;IAEF,iDAAiD;IACjD,IAAM,WAAW,GAAG,QAAQ;SACzB,GAAG,CAAC,UAAC,OAAO;QACX,IAAM,GAAG,GAAmB,EAAE,CAAC;QAC/B,EAAE,CAAC,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC;YACvB,OAAO,CAAC,UAAU,CAAC,UAAU,CAAC,OAAO,CAAC,UAAC,IAAyB;gBAC9D,gBAAgB;gBAChB,kCAAkC;gBAClC,IAAM,CAAC,GAAG,IAAW,CAAC,CAAC,yCAAyC;gBAChE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC;oBAC9B,MAAM,CAAC;gBACT,CAAC;gBACD,gBAAgB,CACd,GAAG,EACH,CAAC,CAAC,IAAI,CAAC,IAAI,EACX,CAAC,CAAC,WAAW,CAAC,IAAI,IAAI,CAAC,CAAC,WAAW,CAAC,UAAU,CAAC,IAAI,CACpD,CAAC;YACJ,CAAC,CAAC,CAAC;QACL,CAAC;QACD,MAAM,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC;IAC1C,CAAC,CAAC;SACD,MAAM,CAAC,OAAO,CAAC,CAAC;IAEnB,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;AAC3C,CAAC;AAED,iBAAoB,KAAe;IACjC,MAAM,CAAC,KAAK,KAAK,IAAI,CAAC;AACxB,CAAC;AAED,kBAAe,IAAI,CAAC"} \ No newline at end of file diff --git a/tslint.json b/tslint.json index f89559f..ffe08b8 100644 --- a/tslint.json +++ b/tslint.json @@ -7,7 +7,8 @@ "jsRules": {}, "rules": { "no-any": true, - "interface-name": [true, "never-prefix"] + "interface-name": [true, "never-prefix"], + "no-unused-expression": [true, "allow-fast-null-checks"] }, "rulesDirectory": [] } \ No newline at end of file From f1a5edeae7d5c8f7987982e13cf746c120022d6f Mon Sep 17 00:00:00 2001 From: Sean Flanigan Date: Fri, 19 Jan 2018 17:28:43 +1000 Subject: [PATCH 5/6] Don't export PartialMessage --- index.ts | 2 +- lib/index.d.ts | 5 ----- 2 files changed, 1 insertion(+), 6 deletions(-) diff --git a/index.ts b/index.ts index 4e65e70..64d8c72 100644 --- a/index.ts +++ b/index.ts @@ -24,7 +24,7 @@ export interface Message { } // a Message with nullable fields, still under construction -export interface PartialMessage { +interface PartialMessage { defaultMessage?: string; description?: string; id?: string; diff --git a/lib/index.d.ts b/lib/index.d.ts index 62dcd25..3f054f9 100644 --- a/lib/index.d.ts +++ b/lib/index.d.ts @@ -6,11 +6,6 @@ export interface Message { description?: string; id: string; } -export interface PartialMessage { - defaultMessage?: string; - description?: string; - id?: string; -} /** * Parse tsx files */ From 7b73f4b6c2de0eb116d70bce0de5260cb07116dd Mon Sep 17 00:00:00 2001 From: Sean Flanigan Date: Fri, 19 Jan 2018 18:03:21 +1000 Subject: [PATCH 6/6] Use Partial --- index.ts | 21 +++++++++------------ lib/index.js.map | 2 +- 2 files changed, 10 insertions(+), 13 deletions(-) diff --git a/index.ts b/index.ts index 64d8c72..b496073 100644 --- a/index.ts +++ b/index.ts @@ -23,13 +23,6 @@ export interface Message { id: string; } -// a Message with nullable fields, still under construction -interface PartialMessage { - 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: @@ -39,7 +32,11 @@ type MethodName = "defineMessages" | "formatMessage"; type MessageExtracter = (obj: ts.ObjectLiteralExpression) => Message[]; // sets `target[key] = value`, but only if it is a legal Message key -function copyIfMessageKey(target: PartialMessage, key: string, value: string) { +function copyIfMessageKey( + target: Partial, + key: string, + value: string, +) { switch (key) { case "defaultMessage": case "description": @@ -52,7 +49,7 @@ function copyIfMessageKey(target: PartialMessage, key: string, value: string) { } // are the required keys of a valid Message present? -function isValidMessage(obj: PartialMessage): obj is Message { +function isValidMessage(obj: Partial): obj is Message { return "id" in obj && "defaultMessage" in obj; } @@ -61,7 +58,7 @@ function extractMessagesForDefineMessages( ): Message[] { const messages: Message[] = []; objLiteral.properties.forEach((p) => { - const msg: PartialMessage = {}; + const msg: Partial = {}; if ( ts.isPropertyAssignment(p) && ts.isObjectLiteralExpression(p.initializer) && @@ -91,7 +88,7 @@ function extractMessagesForDefineMessages( function extractMessagesForFormatMessage( objLiteral: ts.ObjectLiteralExpression, ): Message[] { - const msg: PartialMessage = {}; + const msg: Partial = {}; objLiteral.properties.forEach((p) => { if ( ts.isPropertyAssignment(p) && @@ -207,7 +204,7 @@ function main(contents: string): Message[] { // convert JsxOpeningLikeElements to Message maps const jsxMessages = elements .map((element) => { - const msg: PartialMessage = {}; + const msg: Partial = {}; if (element.attributes) { element.attributes.properties.forEach((attr: ts.JsxAttributeLike) => { // found nothing diff --git a/lib/index.js.map b/lib/index.js.map index 6f66879..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