diff --git a/index.ts b/index.ts index 5a232b9..6d55190 100644 --- a/index.ts +++ b/index.ts @@ -1,130 +1,140 @@ import ts = require("typescript"); -function isDefineMessages(el: ts.Declaration, tagName: string): el is ts.VariableDeclaration { +function isMethodCall(el: ts.Declaration, methodName: string): el is ts.VariableDeclaration { return ( ts.isVariableDeclaration(el) && el.initializer && ts.isCallExpression(el.initializer) && el.initializer.expression && ts.isIdentifier(el.initializer.expression) && - el.initializer.expression.text === tagName + el.initializer.expression.text === methodName ); } // Should be pretty fast: https://stackoverflow.com/a/34491287/14379 +// tslint:disable-next-line:no-any function emptyObject(obj: any) { - for (var x in obj) { - return false; + for (const key in obj) { + if (obj.hasOwnProperty(key)) { + return false; + } } return true; } -interface LooseObject { - [key: string]: any +// just a map of string to string +interface Message { + [key: string]: string; } -function findProps(node: ts.Node, tagName: string): LooseObject[] { - var res: LooseObject[] = []; - find(node); - function find(node: ts.Node): LooseObject[] { - if (!node) { - return undefined; - } - if (ts.isObjectLiteralExpression(node)) { - node.properties.forEach(p => { - var prop: LooseObject = {}; - if ( - ts.isPropertyAssignment(p) && - ts.isObjectLiteralExpression(p.initializer) && - p.initializer.properties - ) { - p.initializer.properties.forEach(ip => { - if (ts.isIdentifier(ip.name)) { - let name = ip.name.text - if (ts.isPropertyAssignment(ip) && ts.isStringLiteral(ip.initializer)) { - prop[name] = ip.initializer.text; - } - } - }); - res.push(prop); +type ElementName = "FormattedMessage"; +type MethodName = "defineMessages" | "formatMessage"; +type MessageExtracter = (obj: ts.ObjectLiteralExpression) => Message[]; + +function extractMessagesForDefineMessages(objLiteral: ts.ObjectLiteralExpression): Message[] { + const messages: Message[] = []; + objLiteral.properties.forEach((p) => { + const message: Message = {}; + if ( + ts.isPropertyAssignment(p) && + ts.isObjectLiteralExpression(p.initializer) && + p.initializer.properties + ) { + p.initializer.properties.forEach((ip) => { + if (ts.isIdentifier(ip.name) || ts.isLiteralExpression(ip.name)) { + const name = ip.name.text; + if (ts.isPropertyAssignment(ip) && ts.isStringLiteral(ip.initializer)) { + message[name] = ip.initializer.text; } - }); - - if (tagName === "formatMessage") { - var prop: LooseObject = {}; - let name; - - node.properties.forEach(p => { - if (ts.isPropertyAssignment(p) && ts.isStringLiteral(p.initializer)) { - name = (p.name as any).escapedText; - prop[name] = p.initializer.text; - } - }); + } + }); + messages.push(message); + } + }); + return messages; +} - res.push(prop); +function extractMessagesForFormatMessage(objLiteral: ts.ObjectLiteralExpression): Message[] { + const message: Message = {}; + 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; } + }); + return [message]; +} + +function extractMessagesForNode(node: ts.Node, extractMessages: MessageExtracter): Message[] { + const res: Message[] = []; + function find(n: ts.Node): Message[] { + if (ts.isObjectLiteralExpression(n)) { + res.push(...extractMessages(n)); + } else { + return ts.forEachChild(n, find); } - return ts.forEachChild(node, find); } - + find(node); return res; } -function forAllVarDecls(node: ts.Node, cb: (el: ts.VariableDeclaration) => void) { +function forAllVarDecls(node: ts.Node, cb: (decl: ts.VariableDeclaration) => void) { if (ts.isVariableDeclaration(node)) { - cb(node) + cb(node); } else { - ts.forEachChild(node, n => forAllVarDecls(n, cb)) + ts.forEachChild(node, (n) => forAllVarDecls(n, cb)); } } -function findFirstJsxOpeningLikeElementWithName( +function findJsxOpeningLikeElementsWithName( node: ts.SourceFile, - tagName: string, - dm?: boolean + tagName: ElementName, ) { - var res: LooseObject[] = []; - find(node); - - function find(node: ts.Node | ts.SourceFile): undefined { - if (!node) { - return undefined; + const messages: ts.JsxOpeningLikeElement[] = []; + function findJsxElement(n: ts.Node): undefined { + // 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? + const childTagName = n.tagName; + if (childTagName.text === tagName) { + // node is a JsxOpeningLikeElement + messages.push(n); + } } - if (dm && ts.isSourceFile(node)) { - // getNamedDeclarations is not currently public - forAllVarDecls(node, (el: ts.Declaration) => { - if (isDefineMessages(el, tagName)) { - if ( - ts.isCallExpression(el.initializer) && - el.initializer.arguments.length - ) { - var nodeProps = el.initializer.arguments[0]; - var props = findProps(nodeProps, tagName); - // props is an array of LooseObject - res = res.concat(props); - } - } - }) - } else { - // Is this a JsxElement with an identifier name? + return ts.forEachChild(n, findJsxElement); + } + findJsxElement(node); + return messages; +} + +function findMethodCallsWithName( + sourceFile: ts.SourceFile, + methodName: MethodName, + extractMessages: MessageExtracter, +) { + let messages: Message[] = []; + // getNamedDeclarations is not currently public + forAllVarDecls(sourceFile, (decl: ts.Declaration) => { + if (isMethodCall(decl, methodName)) { if ( - ts.isJsxOpeningLikeElement(node) && - ts.isIdentifier(node.tagName) + ts.isCallExpression(decl.initializer) && + decl.initializer.arguments.length ) { - // Does the tag name match what we're looking for? - const childTagName = node.tagName; - if (childTagName.text === tagName) { - // node is a JsxOpeningLikeElement - res.push(node); - } + const nodeProps = decl.initializer.arguments[0]; + const declMessages = extractMessagesForNode(nodeProps, extractMessages); + messages = messages.concat(declMessages); } } - - return ts.forEachChild(node, find); - } - - return res; + }); + return messages; } + /** * Parse tsx files * @@ -132,45 +142,50 @@ function findFirstJsxOpeningLikeElementWithName( * @param {string} contents * @returns {array} */ +// TODO perhaps we should expose the Message interface +// tslint:disable-next-line:array-type function main(contents: string): {}[] { - var sourceFile = ts.createSourceFile( + const sourceFile = ts.createSourceFile( "file.ts", contents, ts.ScriptTarget.ES2015, /*setParentNodes */ false, - ts.ScriptKind.TSX + ts.ScriptKind.TSX, ); - var elements = findFirstJsxOpeningLikeElementWithName( + const elements = findJsxOpeningLikeElementsWithName( sourceFile, - "FormattedMessage" + "FormattedMessage", ); - var dm = findFirstJsxOpeningLikeElementWithName( + const dm = findMethodCallsWithName( sourceFile, "defineMessages", - true + extractMessagesForDefineMessages, ); - var fm = findFirstJsxOpeningLikeElementWithName( + const fm = findMethodCallsWithName( sourceFile, "formatMessage", - true + extractMessagesForFormatMessage, ); - var res = elements - .map(element => { - var msg: LooseObject = {}; + // convert JsxOpeningLikeElements to Message maps + const jsxMessages = elements + .map((element) => { + const msg: Message = {}; element.attributes && - element.attributes.properties.forEach((attr: LooseObject) => { + element.attributes.properties.forEach((attr: ts.JsxAttributeLike) => { // found nothing - if (!attr.name || !attr.initializer) return; - msg[attr.name.text] = - attr.initializer.text || attr.initializer.expression.text; + // tslint:disable-next-line:no-any + const a = attr as any; // 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 msg; }) - .filter(r => !emptyObject(r)); + .filter((r) => !emptyObject(r)); - return res.concat(dm).concat(fm); + return jsxMessages.concat(dm).concat(fm); } export default main; diff --git a/lib/index.js b/lib/index.js index 3a0b4de..6e85a7a 100644 --- a/lib/index.js +++ b/lib/index.js @@ -1,58 +1,64 @@ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); var ts = require("typescript"); -function isDefineMessages(el, tagName) { +function isMethodCall(el, methodName) { return (ts.isVariableDeclaration(el) && el.initializer && ts.isCallExpression(el.initializer) && el.initializer.expression && ts.isIdentifier(el.initializer.expression) && - el.initializer.expression.text === tagName); + el.initializer.expression.text === methodName); } function emptyObject(obj) { - for (var x in obj) { - return false; + for (var key in obj) { + if (obj.hasOwnProperty(key)) { + return false; + } } return true; } -function findProps(node, tagName) { - var res = []; - find(node); - function find(node) { - if (!node) { - return undefined; - } - if (ts.isObjectLiteralExpression(node)) { - node.properties.forEach(function (p) { - var prop = {}; - if (ts.isPropertyAssignment(p) && - ts.isObjectLiteralExpression(p.initializer) && - p.initializer.properties) { - p.initializer.properties.forEach(function (ip) { - if (ts.isIdentifier(ip.name)) { - var name_1 = ip.name.text; - if (ts.isPropertyAssignment(ip) && ts.isStringLiteral(ip.initializer)) { - prop[name_1] = ip.initializer.text; - } - } - }); - res.push(prop); +function extractMessagesForDefineMessages(objLiteral) { + var messages = []; + objLiteral.properties.forEach(function (p) { + var message = {}; + if (ts.isPropertyAssignment(p) && + ts.isObjectLiteralExpression(p.initializer) && + p.initializer.properties) { + p.initializer.properties.forEach(function (ip) { + if (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; + } } }); - if (tagName === "formatMessage") { - var prop = {}; - var name_2; - node.properties.forEach(function (p) { - if (ts.isPropertyAssignment(p) && ts.isStringLiteral(p.initializer)) { - name_2 = p.name.escapedText; - prop[name_2] = p.initializer.text; - } - }); - res.push(prop); - } + messages.push(message); + } + }); + return messages; +} +function extractMessagesForFormatMessage(objLiteral) { + var message = {}; + 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; + } + }); + return [message]; +} +function extractMessagesForNode(node, extractMessages) { + var res = []; + function find(n) { + if (ts.isObjectLiteralExpression(n)) { + res.push.apply(res, extractMessages(n)); + } + else { + return ts.forEachChild(n, find); } - return ts.forEachChild(node, find); } + find(node); return res; } function forAllVarDecls(node, cb) { @@ -63,57 +69,56 @@ function forAllVarDecls(node, cb) { ts.forEachChild(node, function (n) { return forAllVarDecls(n, cb); }); } } -function findFirstJsxOpeningLikeElementWithName(node, tagName, dm) { - var res = []; - find(node); - function find(node) { - if (!node) { - return undefined; - } - if (dm && ts.isSourceFile(node)) { - forAllVarDecls(node, function (el) { - if (isDefineMessages(el, tagName)) { - if (ts.isCallExpression(el.initializer) && - el.initializer.arguments.length) { - var nodeProps = el.initializer.arguments[0]; - var props = findProps(nodeProps, tagName); - res = res.concat(props); - } - } - }); - } - else { - if (ts.isJsxOpeningLikeElement(node) && - ts.isIdentifier(node.tagName)) { - var childTagName = node.tagName; - if (childTagName.text === tagName) { - res.push(node); - } +function findJsxOpeningLikeElementsWithName(node, tagName) { + var messages = []; + function findJsxElement(n) { + if (ts.isJsxOpeningLikeElement(n) && + ts.isIdentifier(n.tagName)) { + var childTagName = n.tagName; + if (childTagName.text === tagName) { + messages.push(n); } } - return ts.forEachChild(node, find); + return ts.forEachChild(n, findJsxElement); } - return res; + findJsxElement(node); + return messages; +} +function findMethodCallsWithName(sourceFile, methodName, extractMessages) { + var messages = []; + forAllVarDecls(sourceFile, function (decl) { + if (isMethodCall(decl, methodName)) { + if (ts.isCallExpression(decl.initializer) && + decl.initializer.arguments.length) { + var nodeProps = decl.initializer.arguments[0]; + var declMessages = extractMessagesForNode(nodeProps, extractMessages); + messages = messages.concat(declMessages); + } + } + }); + return messages; } function main(contents) { var sourceFile = ts.createSourceFile("file.ts", contents, ts.ScriptTarget.ES2015, false, ts.ScriptKind.TSX); - var elements = findFirstJsxOpeningLikeElementWithName(sourceFile, "FormattedMessage"); - var dm = findFirstJsxOpeningLikeElementWithName(sourceFile, "defineMessages", true); - var fm = findFirstJsxOpeningLikeElementWithName(sourceFile, "formatMessage", true); - var res = elements + var elements = findJsxOpeningLikeElementsWithName(sourceFile, "FormattedMessage"); + var dm = findMethodCallsWithName(sourceFile, "defineMessages", extractMessagesForDefineMessages); + var fm = findMethodCallsWithName(sourceFile, "formatMessage", extractMessagesForFormatMessage); + var jsxMessages = elements .map(function (element) { var msg = {}; element.attributes && element.attributes.properties.forEach(function (attr) { - if (!attr.name || !attr.initializer) + var a = attr; + if (!a.name || !a.initializer) { return; - msg[attr.name.text] = - attr.initializer.text || attr.initializer.expression.text; + } + msg[a.name.text] = + a.initializer.text || a.initializer.expression.text; }); return msg; }) .filter(function (r) { return !emptyObject(r); }); - return res.concat(dm).concat(fm); + return jsxMessages.concat(dm).concat(fm); } 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 6dcbbde..b2de06b 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/package.json b/package.json index dfb43f3..567d675 100644 --- a/package.json +++ b/package.json @@ -5,7 +5,7 @@ "main": "lib/index.js", "scripts": { "start": "tsc -w", - "test": "ava --verbose" + "test": "tsc && tslint -c tslint.json '*.ts' && ava --verbose" }, "repository": { "type": "git", @@ -24,6 +24,7 @@ }, "homepage": "https://github.com/bang88/typescript-react-intl#readme", "dependencies": { + "tslint": "^5.9.1", "typescript": "^2.6.2" }, "devDependencies": { diff --git a/test/app/defineMessages.ts b/test/app/defineMessages.ts index 5b508cf..116856c 100644 --- a/test/app/defineMessages.ts +++ b/test/app/defineMessages.ts @@ -5,9 +5,9 @@ const lang = defineMessages({ id: 'intro.hello', defaultMessage: "Hello world" }, - title: { - id: 'app.title', - defaultMessage: "Hello" + "title": { + "id": 'app.title', + "defaultMessage": "Hello" }, }) diff --git a/test/app/wrappedComponent.tsx b/test/app/wrappedComponent.tsx index 39aa385..1fc5def 100644 --- a/test/app/wrappedComponent.tsx +++ b/test/app/wrappedComponent.tsx @@ -11,6 +11,11 @@ class WrappedComponent extends React.Component{ defaultMessage: "Email" }); + const formatMessageWithStringKeys = formatMessage({ + "id": "anotherPlaceholder", + "defaultMessage": "Name" + }); + return
diff --git a/test/index.js b/test/index.js index 74dc0f5..ac87c75 100644 --- a/test/index.js +++ b/test/index.js @@ -79,9 +79,12 @@ test("formatMessage() API should work with a wrapped by injectIntl Component", t var res = p(content.toString()); - var expected = [{ id: "emailPlaceholder", defaultMessage: "Email" }]; + var expected = [ + { id: "emailPlaceholder", defaultMessage: "Email" }, + { id: "anotherPlaceholder", defaultMessage: "Name" } + ]; - t.is(res.length, 1); + t.is(res.length, 2); t.deepEqual(res, expected); }); \ No newline at end of file diff --git a/tsconfig.json b/tsconfig.json index ffd7bcf..3f9c19c 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -5,6 +5,8 @@ "module": "commonjs", "moduleResolution": "node", "noEmitOnError": false, + "noUnusedLocals": true, + "noUnusedParameters": true, "target": "es5", "declaration": true, "noImplicitAny": true, diff --git a/tslint.json b/tslint.json new file mode 100644 index 0000000..9414a58 --- /dev/null +++ b/tslint.json @@ -0,0 +1,14 @@ +{ + "defaultSeverity": "error", + "extends": [ + "tslint:recommended" + ], + "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"] + }, + "rulesDirectory": [] +} \ No newline at end of file diff --git a/yarn.lock b/yarn.lock index 9d45e6e..63c6301 100644 --- a/yarn.lock +++ b/yarn.lock @@ -76,6 +76,12 @@ ansi-styles@^3.0.0: dependencies: color-convert "^1.0.0" +ansi-styles@^3.1.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.0.tgz#c159b8d5be0f9e5a6f346dab94f16ce022161b88" + dependencies: + color-convert "^1.9.0" + ansi-styles@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-1.0.0.tgz#cb102df1c56f5123eab8b67cd7b98027a0279178" @@ -600,6 +606,10 @@ balanced-match@^0.4.1: version "0.4.2" resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-0.4.2.tgz#cb3f3e3c732dc0f01ee70b403f302e61d7709838" +balanced-match@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.0.tgz#89b4d199ab2bee49de164ea02b89ce462d71b767" + bcrypt-pbkdf@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.1.tgz#63bc5dcb61331b92bc05fd528953c33462a06f8d" @@ -645,6 +655,13 @@ brace-expansion@^1.0.0: balanced-match "^0.4.1" concat-map "0.0.1" +brace-expansion@^1.1.7: + version "1.1.8" + resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.8.tgz#c07b211c7c952ec1f8efd51a77ef0d1d3990a292" + dependencies: + balanced-match "^1.0.0" + concat-map "0.0.1" + braces@^1.8.2: version "1.8.5" resolved "https://registry.yarnpkg.com/braces/-/braces-1.8.5.tgz#ba77962e12dff969d6b76711e914b737857bf6a7" @@ -661,7 +678,7 @@ buffer-shims@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/buffer-shims/-/buffer-shims-1.0.0.tgz#9978ce317388c649ad8793028c3477ef044a8b51" -builtin-modules@^1.0.0: +builtin-modules@^1.0.0, builtin-modules@^1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/builtin-modules/-/builtin-modules-1.1.1.tgz#270f076c5a72c02f5b65a47df94c5fe3a278892f" @@ -727,6 +744,14 @@ chalk@^1.0.0, chalk@^1.1.0, chalk@^1.1.1, chalk@^1.1.3: strip-ansi "^3.0.0" supports-color "^2.0.0" +chalk@^2.3.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.3.0.tgz#b5ea48efc9c1793dccc9b4767c93914d3f2d52ba" + dependencies: + ansi-styles "^3.1.0" + escape-string-regexp "^1.0.5" + supports-color "^4.0.0" + chokidar@^1.4.2: version "1.6.1" resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-1.6.1.tgz#2f4447ab5e96e50fb3d789fd90d4c72e0e4c70c2" @@ -801,6 +826,12 @@ color-convert@^1.0.0: dependencies: color-name "^1.1.1" +color-convert@^1.9.0: + version "1.9.1" + resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.1.tgz#c1261107aeb2f294ebffec9ed9ecad529a6097ed" + dependencies: + color-name "^1.1.1" + color-name@^1.1.1: version "1.1.2" resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.2.tgz#5c8ab72b64bd2215d617ae9559ebb148475cf98d" @@ -811,6 +842,10 @@ combined-stream@^1.0.5, combined-stream@~1.0.5: dependencies: delayed-stream "~1.0.0" +commander@^2.12.1: + version "2.13.0" + resolved "https://registry.yarnpkg.com/commander/-/commander-2.13.0.tgz#6964bca67685df7c1f1430c584f07d7597885b9c" + common-path-prefix@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/common-path-prefix/-/common-path-prefix-1.0.0.tgz#cd52f6f0712e0baab97d6f9732874f22f47752c0" @@ -957,6 +992,10 @@ diff@^3.0.0, diff@^3.0.1: version "3.2.0" resolved "https://registry.yarnpkg.com/diff/-/diff-3.2.0.tgz#c9ce393a4b7cbd0b058a725c93df299027868ff9" +diff@^3.2.0: + version "3.4.0" + resolved "https://registry.yarnpkg.com/diff/-/diff-3.4.0.tgz#b1d85507daf3964828de54b37d0d73ba67dda56c" + dot-prop@^4.1.0: version "4.1.1" resolved "https://registry.yarnpkg.com/dot-prop/-/dot-prop-4.1.1.tgz#a8493f0b7b5eeec82525b5c7587fa7de7ca859c1" @@ -1011,6 +1050,10 @@ esprima@^3.1.1: version "3.1.3" resolved "https://registry.yarnpkg.com/esprima/-/esprima-3.1.3.tgz#fdca51cee6133895e3c88d535ce49dbff62a4633" +esprima@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.0.tgz#4499eddcd1110e0b218bacf2fa7f7f59f55ca804" + espurify@^1.6.0: version "1.7.0" resolved "https://registry.yarnpkg.com/espurify/-/espurify-1.7.0.tgz#1c5cf6cbccc32e6f639380bd4f991fab9ba9d226" @@ -1231,6 +1274,17 @@ glob@^7.0.3, glob@^7.0.5: once "^1.3.0" path-is-absolute "^1.0.0" +glob@^7.1.1: + version "7.1.2" + resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.2.tgz#c19c9df9a028702d678612384a6552404c636d15" + dependencies: + fs.realpath "^1.0.0" + inflight "^1.0.4" + inherits "2" + minimatch "^3.0.4" + once "^1.3.0" + path-is-absolute "^1.0.0" + globals@^9.0.0: version "9.16.0" resolved "https://registry.yarnpkg.com/globals/-/globals-9.16.0.tgz#63e903658171ec2d9f51b1d31de5e2b8dc01fb80" @@ -1627,6 +1681,13 @@ js-tokens@^3.0.0: version "3.0.1" resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-3.0.1.tgz#08e9f132484a2c45a30907e9dc4d5567b7f114d7" +js-yaml@^3.7.0: + version "3.10.0" + resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.10.0.tgz#2e78441646bd4682e963f22b6e92823c309c62dc" + dependencies: + argparse "^1.0.7" + esprima "^4.0.0" + js-yaml@^3.8.2: version "3.8.4" resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.8.4.tgz#520b4564f86573ba96662af85a8cafa7b4b5a6f6" @@ -1870,6 +1931,12 @@ minimatch@^3.0.0, minimatch@^3.0.2: dependencies: brace-expansion "^1.0.0" +minimatch@^3.0.4: + version "3.0.4" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083" + dependencies: + brace-expansion "^1.1.7" + minimist@0.0.8: version "0.0.8" resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.8.tgz#857fcabfc3397d2625b8228262e86aa7a011b05d" @@ -2108,6 +2175,10 @@ path-key@^2.0.0: version "2.0.1" resolved "https://registry.yarnpkg.com/path-key/-/path-key-2.0.1.tgz#411cadb574c5a140d3a4b1910d40d80cc9f40b40" +path-parse@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.5.tgz#3c1adf871ea9cd6c9431b6ea2bd74a0ff055c4c1" + path-type@^1.0.0: version "1.1.0" resolved "https://registry.yarnpkg.com/path-type/-/path-type-1.1.0.tgz#59c44f7ee491da704da415da5a4070ba4f8fe441" @@ -2423,6 +2494,12 @@ resolve-from@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-3.0.0.tgz#b22c7af7d9d6881bc8b6e653335eebcb0a188748" +resolve@^1.3.2: + version "1.5.0" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.5.0.tgz#1f09acce796c9a762579f31b2c1cc4c3cddf9f36" + dependencies: + path-parse "^1.0.5" + restore-cursor@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-2.0.0.tgz#9f7ee287f82fd326d4fd162923d62129eee0dfaf" @@ -2450,6 +2527,10 @@ semver-diff@^2.0.0: version "5.3.0" resolved "https://registry.yarnpkg.com/semver/-/semver-5.3.0.tgz#9b2ce5d3de02d17c6012ad326aa6b4d0cf54f94f" +semver@^5.3.0: + version "5.4.1" + resolved "https://registry.yarnpkg.com/semver/-/semver-5.4.1.tgz#e059c09d8571f0540823733433505d3a2f00b18e" + set-blocking@~2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7" @@ -2606,6 +2687,12 @@ supports-color@^3.2.3: dependencies: has-flag "^1.0.0" +supports-color@^4.0.0: + version "4.5.0" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-4.5.0.tgz#be7a0de484dec5c5cddf8b3d59125044912f635b" + dependencies: + has-flag "^2.0.0" + symbol-observable@^0.2.2: version "0.2.4" resolved "https://registry.yarnpkg.com/symbol-observable/-/symbol-observable-0.2.4.tgz#95a83db26186d6af7e7a18dbd9760a2f86d08f40" @@ -2683,6 +2770,33 @@ trim-right@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/trim-right/-/trim-right-1.0.1.tgz#cb2e1203067e0c8de1f614094b9fe45704ea6003" +tslib@^1.8.0, tslib@^1.8.1: + version "1.8.1" + resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.8.1.tgz#6946af2d1d651a7b1863b531d6e5afa41aa44eac" + +tslint@^5.9.1: + version "5.9.1" + resolved "https://registry.yarnpkg.com/tslint/-/tslint-5.9.1.tgz#1255f87a3ff57eb0b0e1f0e610a8b4748046c9ae" + dependencies: + babel-code-frame "^6.22.0" + builtin-modules "^1.1.1" + chalk "^2.3.0" + commander "^2.12.1" + diff "^3.2.0" + glob "^7.1.1" + js-yaml "^3.7.0" + minimatch "^3.0.4" + resolve "^1.3.2" + semver "^5.3.0" + tslib "^1.8.0" + tsutils "^2.12.1" + +tsutils@^2.12.1: + version "2.16.0" + resolved "https://registry.yarnpkg.com/tsutils/-/tsutils-2.16.0.tgz#ad8e83f47bef4f7d24d173cc6cd180990c831105" + dependencies: + tslib "^1.8.1" + tunnel-agent@^0.6.0: version "0.6.0" resolved "https://registry.yarnpkg.com/tunnel-agent/-/tunnel-agent-0.6.0.tgz#27a5dea06b36b04a0a9966774b290868f0fc40fd"