diff --git a/dist/index.js b/dist/index.js new file mode 100644 index 0000000..d805b7a --- /dev/null +++ b/dist/index.js @@ -0,0 +1,38 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.helpers = require("./src/helpers"); +const tsStructureParser = require("./src/tsStructureParser"); +class EnumMemberDeclaration { +} +exports.EnumMemberDeclaration = EnumMemberDeclaration; +class EnumDeclaration { +} +exports.EnumDeclaration = EnumDeclaration; +var TypeKind; +(function (TypeKind) { + TypeKind[TypeKind["BASIC"] = 0] = "BASIC"; + TypeKind[TypeKind["ARRAY"] = 1] = "ARRAY"; + TypeKind[TypeKind["UNION"] = 2] = "UNION"; +})(TypeKind = exports.TypeKind || (exports.TypeKind = {})); +function classDecl(name, isInteface) { + return { + name: name, + methods: [], + typeParameters: [], + typeParameterConstraint: [], + implements: [], + fields: [], + isInterface: isInteface, + decorators: [], + annotations: [], + extends: [], + moduleName: null, + annotationOverridings: {} + }; +} +exports.classDecl = classDecl; +function parseStruct(content, modules, mpth) { + return tsStructureParser.parseStruct(content, modules, mpth); +} +exports.parseStruct = parseStruct; +//# sourceMappingURL=index.js.map \ No newline at end of file diff --git a/dist/index.js.map b/dist/index.js.map new file mode 100644 index 0000000..5787330 --- /dev/null +++ b/dist/index.js.map @@ -0,0 +1 @@ +{"version":3,"file":"index.js","sourceRoot":"","sources":["../index.ts"],"names":[],"mappings":";;AAAA,2CAAiD;AACjD,6DAA8D;AA+C9D;CAGC;AAHD,sDAGC;AAED;CAGC;AAHD,0CAGC;AAED,IAAY,QAIX;AAJD,WAAY,QAAQ;IAChB,yCAAK,CAAA;IACL,yCAAK,CAAA;IACL,yCAAK,CAAA;AACT,CAAC,EAJW,QAAQ,GAAR,gBAAQ,KAAR,gBAAQ,QAInB;AA+FD,mBAA0B,IAAY,EAAE,UAAmB;IACvD,MAAM,CAAC;QACH,IAAI,EAAE,IAAI;QACV,OAAO,EAAE,EAAE;QACX,cAAc,EAAE,EAAE;QAClB,uBAAuB,EAAE,EAAE;QAC3B,UAAU,EAAE,EAAE;QACd,MAAM,EAAE,EAAE;QACV,WAAW,EAAE,UAAU;QACvB,UAAU,EAAE,EAAE;QACd,WAAW,EAAE,EAAE;QACf,OAAO,EAAE,EAAE;QACX,UAAU,EAAE,IAAI;QAChB,qBAAqB,EAAE,EAAE;KAC5B,CAAC;AACN,CAAC;AAfD,8BAeC;AAED,qBAA4B,OAAe,EAAE,OAAiC,EAAE,IAAY;IACxF,MAAM,CAAC,iBAAiB,CAAC,WAAW,CAAC,OAAO,EAAE,OAAO,EAAE,IAAI,CAAC,CAAC;AACjE,CAAC;AAFD,kCAEC"} \ No newline at end of file diff --git a/dist/src/fsUtils.js b/dist/src/fsUtils.js new file mode 100644 index 0000000..2e73295 --- /dev/null +++ b/dist/src/fsUtils.js @@ -0,0 +1,21 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +const pth = require("path"); +const fs = require("fs"); +function resolve(p1, p2) { + return pth.resolve(p1, p2); +} +exports.resolve = resolve; +function readFileSync(p) { + return fs.readFileSync(p).toString(); +} +exports.readFileSync = readFileSync; +function dirname(p) { + return pth.dirname(p); +} +exports.dirname = dirname; +function existsSync(p) { + return fs.existsSync(p); +} +exports.existsSync = existsSync; +//# sourceMappingURL=fsUtils.js.map \ No newline at end of file diff --git a/dist/src/fsUtils.js.map b/dist/src/fsUtils.js.map new file mode 100644 index 0000000..cc0fb87 --- /dev/null +++ b/dist/src/fsUtils.js.map @@ -0,0 +1 @@ +{"version":3,"file":"fsUtils.js","sourceRoot":"","sources":["../../src/fsUtils.ts"],"names":[],"mappings":";;AAAA,4BAA4B;AAC5B,yBAAyB;AAGzB,iBAAwB,EAAU,EAAE,EAAU;IAC1C,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;AAC/B,CAAC;AAFD,0BAEC;AAED,sBAA6B,CAAS;IAClC,MAAM,CAAC,EAAE,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC;AACzC,CAAC;AAFD,oCAEC;AAED,iBAAwB,CAAS;IAC7B,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;AAC1B,CAAC;AAFD,0BAEC;AAED,oBAA2B,CAAS;IAChC,MAAM,CAAC,EAAE,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;AAC5B,CAAC;AAFD,gCAEC"} \ No newline at end of file diff --git a/dist/src/helperMethodExtractor.js b/dist/src/helperMethodExtractor.js new file mode 100644 index 0000000..91b8d6d --- /dev/null +++ b/dist/src/helperMethodExtractor.js @@ -0,0 +1,91 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +const ts = require("typescript"); +const tsm = require("./tsASTMatchers"); +const path = require("path"); +const fs = require("fs"); +const tsStructureParser = require("./tsStructureParser"); +const helpers_1 = require("./helpers"); +function getHelperMethods(srcPath) { + var result = []; + var content = fs.readFileSync(path.resolve(srcPath)).toString(); + var mod = ts.createSourceFile("sample.ts", content, ts.ScriptTarget.ES3, true); + tsm.Matching.visit(mod, x => { + var node = x; + if (node.kind === ts.SyntaxKind.FunctionDeclaration) { + var meta = getMeta(node, content); + if (!meta) { + return; + } + var originalName = node.name.text; + var wrapperMethodName = originalName; + if (meta.name) { + wrapperMethodName = meta.name; + } + else { + meta.name = originalName; + } + wrapperMethodName = meta.name ? meta.name : originalName; + var args = node.parameters ? node.parameters.map(a => readArg(a, srcPath)) : []; + var override = meta.override ? meta.override : false; + var returnType = tsStructureParser.buildType(node.type, srcPath); + result.push(new helpers_1.HelperMethod(originalName, wrapperMethodName, returnType, args, meta)); + } + }); + return result; +} +exports.getHelperMethods = getHelperMethods; +var refineComment = function (comment) { + return comment.replace(/^\s*\/\*+/g, "").replace(/\*+\/\s*$/g, "").split("\n") + .map(x => x.replace(/^\s*\/\//g, "").replace(/^\s*\* {0,1}/g, "")).join("\n").trim(); +}; +function getMeta(node, content) { + var cRange = ts.getLeadingCommentRanges(content, node.pos); + if (!cRange) { + return null; + } + var comment = cRange.map(x => content.substring(x.pos, x.end)).join("\n"); + var ind = comment.indexOf("__$helperMethod__"); + if (ind < 0) { + return null; + } + ind += "__$helperMethod__".length; + var indMeta = comment.indexOf("__$meta__"); + if (indMeta < 0) { + return { comment: refineComment(comment.substring(ind)) }; + } + var commentStr = refineComment(comment.substring(ind, indMeta)); + var indMetaObj = comment.indexOf("{", indMeta); + if (indMetaObj < 0) { + return { comment: commentStr }; + } + try { + var meta = JSON.parse(refineComment(comment.substring(indMetaObj))); + meta.comment = commentStr.trim().length > 0 ? commentStr : null; + meta.override = meta.override || false; + meta.primary = meta.primary || false; + meta.deprecated = meta.deprecated || false; + return meta; + } + catch (e) { + console.log(e); + } + return {}; +} +function readArg(node, srcPath) { + var name = node.name.text; + var type = tsStructureParser.buildType(node.type, srcPath); + var defaultValue; + var optional = node.questionToken != null; + if (node.initializer != null) { + defaultValue = tsStructureParser.parseArg(node.initializer); + optional = true; + } + return { + name: name, + type: type, + defaultValue: defaultValue, + optional: optional + }; +} +//# sourceMappingURL=helperMethodExtractor.js.map \ No newline at end of file diff --git a/dist/src/helperMethodExtractor.js.map b/dist/src/helperMethodExtractor.js.map new file mode 100644 index 0000000..450bcbd --- /dev/null +++ b/dist/src/helperMethodExtractor.js.map @@ -0,0 +1 @@ +{"version":3,"file":"helperMethodExtractor.js","sourceRoot":"","sources":["../../src/helperMethodExtractor.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/dist/src/helpers.js b/dist/src/helpers.js new file mode 100644 index 0000000..4cce16d --- /dev/null +++ b/dist/src/helpers.js @@ -0,0 +1,88 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +const index = require("../index"); +const helperMethodExtractor = require("./helperMethodExtractor"); +var ns = { "RamlWrapper": true }; +class HelperMethod { + constructor(originalName, wrapperMethodName, returnType, args, meta) { + this.originalName = originalName; + this.wrapperMethodName = wrapperMethodName; + this.returnType = returnType; + this.args = args; + this.meta = meta; + } + targetWrappers() { + var isValid = true; + var result = []; + this.args.forEach(x => { + var arr = flatten(x.type, ns); + if (arr.length === 0) { + return; + } + if (!isValid || result.length !== 0) { + result = []; + isValid = false; + return; + } + result = result.concat(arr); + }); + return result; + } + callArgs() { + return this.args.map(x => { + if (flatten(x.type, ns).length === 0) { + return x; + } + return { + name: "this", + type: null, + optional: false, + defaultValue: undefined + }; + }); + } +} +exports.HelperMethod = HelperMethod; +function flatten(t, namespaces) { + if (t.typeKind === index.TypeKind.ARRAY) { + if (namespaces) { + return []; + } + else { + return [flatten(t.base)[0] + "[]"]; + } + } + else if (t.typeKind === index.TypeKind.BASIC) { + var bt = t; + var str = bt.basicName; + var nameSpace = bt.nameSpace && bt.nameSpace.trim(); + if (nameSpace && nameSpace.length > 0 && nameSpace !== "RamlWrapper") { + str = nameSpace + "." + str; + } + if (bt.typeArguments && bt.typeArguments.length !== 0) { + str += `<${bt.typeArguments.map(x => flatten(x)).join(", ")}>`; + } + if (namespaces) { + if (bt.nameSpace) { + return namespaces[bt.nameSpace] ? [str] : []; + } + else { + return []; + } + } + return [str]; + } + else if (t.typeKind === index.TypeKind.UNION) { + var ut = t; + var result = []; + ut.options.forEach(x => result = result.concat(flatten(x, namespaces))); + return result; + } + return []; +} +exports.flatten = flatten; +function getHelperMethods(srcPath) { + return helperMethodExtractor.getHelperMethods(srcPath); +} +exports.getHelperMethods = getHelperMethods; +//# sourceMappingURL=helpers.js.map \ No newline at end of file diff --git a/dist/src/helpers.js.map b/dist/src/helpers.js.map new file mode 100644 index 0000000..77e8142 --- /dev/null +++ b/dist/src/helpers.js.map @@ -0,0 +1 @@ +{"version":3,"file":"helpers.js","sourceRoot":"","sources":["../../src/helpers.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/dist/src/jsonTransformer.js b/dist/src/jsonTransformer.js new file mode 100644 index 0000000..6fcb0de --- /dev/null +++ b/dist/src/jsonTransformer.js @@ -0,0 +1,54 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +class JSONTransformer { + static unique(arr) { + let obj = {}; + for (var i = 0; i < arr.length; i++) { + var str = arr[i]; + obj[str] = true; + } + return Object.keys(obj); + } + static toValidateView(obj) { + let jsonString = obj.getFullText().split("\'").join("\""); + let matches = jsonString.match(/ [\w]+.[\w]+\(\)/); + if (matches && matches.length) { + matches.forEach(match => { + jsonString = jsonString.replace(match, `"${match}"`); + }); + } + let regExp = / ?[a-zA-Z]\w+(\.\w+)?(\s)*:/g; + let m = jsonString.match(regExp); + if (m) { + m = m.map(item => { + return item.trim(); + }); + m = JSONTransformer.unique(m); + m.forEach(match => { + if (!(match.match(/ ?(true|false)[ ,}]?/))) { + let reg = new RegExp(match, "g"); + let replaceWord = `"${match.substring(0, match.length - 1).trim()}":`; + jsonString = jsonString.replace(reg, replaceWord); + } + }); + } + regExp = /:(\s)*?[a-zA-Z]\w+(\.\w+)?/g; + m = jsonString.match(regExp); + if (m) { + m = m.map(item => { + return item.trim(); + }); + m = JSONTransformer.unique(m); + m.forEach(match => { + if (!(match.match(/ ?(true|false)[ ,}]?/))) { + let reg = new RegExp(match, "g"); + let replaceWord = `: "${match.substring(1, match.length).trim()}"`; + jsonString = jsonString.replace(reg, replaceWord); + } + }); + } + return jsonString; + } +} +exports.JSONTransformer = JSONTransformer; +//# sourceMappingURL=jsonTransformer.js.map \ No newline at end of file diff --git a/dist/src/jsonTransformer.js.map b/dist/src/jsonTransformer.js.map new file mode 100644 index 0000000..d988fd9 --- /dev/null +++ b/dist/src/jsonTransformer.js.map @@ -0,0 +1 @@ +{"version":3,"file":"jsonTransformer.js","sourceRoot":"","sources":["../../src/jsonTransformer.ts"],"names":[],"mappings":";;AAAA;IACW,MAAM,CAAC,MAAM,CAAC,GAAa;QAC9B,IAAI,GAAG,GAAG,EAAE,CAAC;QACb,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YACpC,IAAI,GAAG,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC;YACjB,GAAG,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC;QAClB,CAAC;QACD,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAC5B,CAAC;IAEM,MAAM,CAAC,cAAc,CAAE,GAAQ;QAElC,IAAK,UAAU,GAAG,GAAG,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC3D,IAAI,OAAO,GAAG,UAAU,CAAC,KAAK,CAAC,kBAAkB,CAAC,CAAC;QACnD,EAAE,CAAC,CAAC,OAAO,IAAI,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC;YAC5B,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE;gBACpB,UAAU,GAAG,UAAU,CAAC,OAAO,CAAC,KAAK,EAAE,IAAI,KAAK,GAAG,CAAC,CAAC;YACzD,CAAC,CAAC,CAAC;QACP,CAAC;QAED,IAAI,MAAM,GAAG,8BAA8B,CAAC;QAC5C,IAAI,CAAC,GAAG,UAAU,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;QACjC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YACJ,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE;gBACb,MAAM,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;YACvB,CAAC,CAAC,CAAC;YACH,CAAC,GAAG,eAAe,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;YAC9B,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE;gBACd,EAAE,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,sBAAsB,CAAC,CAAC,CAAC,CAAC,CAAC;oBACzC,IAAI,GAAG,GAAG,IAAI,MAAM,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;oBACjC,IAAI,WAAW,GAAG,IAAI,KAAK,CAAC,SAAS,CAAC,CAAC,EAAE,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,IAAI,CAAC;oBACtE,UAAU,GAAG,UAAU,CAAC,OAAO,CAAC,GAAG,EAAE,WAAW,CAAC,CAAC;gBACtD,CAAC;YACL,CAAC,CAAC,CAAC;QACP,CAAC;QAGD,MAAM,GAAG,6BAA6B,CAAC;QACvC,CAAC,GAAG,UAAU,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;QAC7B,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YACJ,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE;gBACb,MAAM,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;YACvB,CAAC,CAAC,CAAC;YACH,CAAC,GAAG,eAAe,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;YAC9B,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE;gBACd,EAAE,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,sBAAsB,CAAC,CAAC,CAAC,CAAC,CAAC;oBACzC,IAAI,GAAG,GAAG,IAAI,MAAM,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;oBACjC,IAAI,WAAW,GAAG,MAAM,KAAK,CAAC,SAAS,CAAC,CAAC,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,GAAG,CAAC;oBACnE,UAAU,GAAG,UAAU,CAAC,OAAO,CAAC,GAAG,EAAE,WAAW,CAAC,CAAC;gBACtD,CAAC;YACL,CAAC,CAAC,CAAC;QACP,CAAC;QACD,MAAM,CAAC,UAAU,CAAC;IACtB,CAAC;CACJ;AAtDD,0CAsDC"} \ No newline at end of file diff --git a/dist/src/tsASTMatchers.js b/dist/src/tsASTMatchers.js new file mode 100644 index 0000000..93b4b13 --- /dev/null +++ b/dist/src/tsASTMatchers.js @@ -0,0 +1,310 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +const ts = require("typescript"); +var Matching; +(function (Matching) { + class BasicMatcher { + match(node) { + throw new Error(); + } + nodeType() { + throw new Error(); + } + doMatch(n) { + if (!n) { + return null; + } + if (this.nodeType() === n.kind) { + return this.match(n); + } + } + } + Matching.BasicMatcher = BasicMatcher; + class ClassDeclarationMatcher extends BasicMatcher { + constructor() { + super(); + } + match(node) { + return node; + } + nodeType() { + return ts.SyntaxKind.ClassDeclaration; + } + } + Matching.ClassDeclarationMatcher = ClassDeclarationMatcher; + class FieldMatcher extends BasicMatcher { + match(node) { + return node; + } + nodeType() { + return ts.SyntaxKind.PropertyDeclaration; + } + } + Matching.FieldMatcher = FieldMatcher; + class AssignmentExpressionMatcher extends BasicMatcher { + constructor(left, right, tr) { + super(); + this.left = left; + this.right = right; + this.tr = tr; + } + match(node) { + if (node.operatorToken.kind === ts.SyntaxKind.EqualsToken) { + if (this.left.doMatch(node.left) && this.right.doMatch(node.right)) { + return this.tr(node); + } + } + return null; + } + nodeType() { + return ts.SyntaxKind.BinaryExpression; + } + } + Matching.AssignmentExpressionMatcher = AssignmentExpressionMatcher; + class VariableDeclarationMatcher extends BasicMatcher { + constructor(left, right, tr) { + super(); + this.left = left; + this.right = right; + this.tr = tr; + } + match(node) { + if (this.left.doMatch(node.name) && this.right.doMatch(node.initializer)) { + return this.tr(node); + } + } + nodeType() { + return ts.SyntaxKind.VariableDeclaration; + } + } + Matching.VariableDeclarationMatcher = VariableDeclarationMatcher; + class ExpressionStatementMatcher extends BasicMatcher { + constructor(expression, tr) { + super(); + this.expression = expression; + this.tr = tr; + } + match(node) { + var exp = this.expression.doMatch(node.expression); + if (exp) { + var v = this.tr(node.expression); + if (v === true) { + return exp; + } + return v; + } + return null; + } + nodeType() { + return ts.SyntaxKind.ExpressionStatement; + } + } + class SimpleIdentMatcher extends BasicMatcher { + constructor(val) { + super(); + this.val = val; + } + match(node) { + if (node.text === this.val) { + return true; + } + return null; + } + nodeType() { + return ts.SyntaxKind.Identifier; + } + } + class TrueMatcher { + doMatch(node) { + return true; + } + nodeType() { + return null; + } + } + class CallExpressionMatcher extends BasicMatcher { + constructor(calleeMatcher, tr) { + super(); + this.calleeMatcher = calleeMatcher; + this.tr = tr; + } + match(node) { + if (this.calleeMatcher.doMatch(node.expression)) { + return this.tr(node); + } + return null; + } + nodeType() { + return ts.SyntaxKind.CallExpression; + } + } + Matching.SKIP = {}; + function visit(n, cb) { + var r0 = cb(n); + if (r0) { + if (r0 === Matching.SKIP) { + return null; + } + return r0; + } + var r = ts.forEachChild(n, x => { + var r = visit(x, cb); + if (r) { + return r; + } + }); + return r; + } + Matching.visit = visit; + class PathNode { + constructor(name, _base) { + this._base = _base; + this.arguments = null; + this.name = name; + } + } + Matching.PathNode = PathNode; + class CallPath { + constructor(base, _baseNode) { + this._baseNode = _baseNode; + this.path = []; + this.base = base; + } + start() { + return this._baseNode.pos; + } + startLocation() { + return this._baseNode.getSourceFile().getLineAndCharacterOfPosition(this.start()); + } + endLocation() { + return this._baseNode.getSourceFile().getLineAndCharacterOfPosition(this.end()); + } + end() { + var ce = this.path[this.path.length - 1]._callExpression; + if (ce) { + return ce.end; + } + return this.start(); + } + toString() { + return this.path.map(x => x.name).join("."); + } + } + Matching.CallPath = CallPath; + class MemberExpressionMatcher extends BasicMatcher { + constructor(objectMatcher, propertyMatcher, tr) { + super(); + this.objectMatcher = objectMatcher; + this.propertyMatcher = propertyMatcher; + this.tr = tr; + } + match(node) { + if (this.objectMatcher.doMatch(node.expression) && this.propertyMatcher.doMatch(node.name)) { + return this.tr(node); + } + return null; + } + nodeType() { + return ts.SyntaxKind.PropertyAccessExpression; + } + } + function memberFromExp(objMatcher, tr = x => true) { + var array = objMatcher.split("."); + var result = null; + for (var a = 0; a < array.length; a++) { + var arg = array[a]; + var ci = arg.indexOf("(*)"); + var isCall = false; + if (ci !== -1) { + arg = arg.substr(0, ci); + isCall = true; + } + if (result == null) { + result = arg === "*" ? anyNode() : ident(arg); + } + else { + result = new MemberExpressionMatcher(result, arg === "*" ? anyNode() : ident(arg), tr); + } + if (isCall) { + result = new CallExpressionMatcher(result, tr); + } + } + return result; + } + Matching.memberFromExp = memberFromExp; + class CallBaseMatcher { + constructor(rootMatcher) { + this.rootMatcher = rootMatcher; + } + doMatch(node) { + var original = node; + if (node.kind === ts.SyntaxKind.CallExpression) { + var call = node; + var res = this.doMatch(call.expression); + if (res) { + if (res.path.length > 0 && res.path[res.path.length - 1].arguments == null) { + res.path[res.path.length - 1].arguments = call.arguments; + res.path[res.path.length - 1]._callExpression = call; + return res; + } + return null; + } + } + else if (node.kind === ts.SyntaxKind.PropertyAccessExpression) { + var me = node; + var v = this.doMatch(me.expression); + if (v) { + if (me.name.kind === ts.SyntaxKind.Identifier) { + v.path.push(new PathNode(me.name.text, me.name)); + return v; + } + return null; + } + } + else if (node.kind === ts.SyntaxKind.Identifier) { + var id = node; + if (this.rootMatcher.doMatch(id)) { + return new CallPath(id.text, id); + } + } + return null; + } + nodeType() { + return null; + } + } + Matching.CallBaseMatcher = CallBaseMatcher; + function ident(name) { + return new SimpleIdentMatcher(name); + } + Matching.ident = ident; + function anyNode() { + return new TrueMatcher(); + } + Matching.anyNode = anyNode; + function call(calleeMatcher, tr = x => true) { + return new CallExpressionMatcher(calleeMatcher, tr); + } + Matching.call = call; + function exprStmt(eM, tr = x => true) { + return new ExpressionStatementMatcher(eM, tr); + } + Matching.exprStmt = exprStmt; + function assign(left, right, tr = x => true) { + return new AssignmentExpressionMatcher(left, right, tr); + } + Matching.assign = assign; + function varDecl(left, right, tr = x => true) { + return new VariableDeclarationMatcher(left, right, tr); + } + Matching.varDecl = varDecl; + function field() { + return new FieldMatcher(); + } + Matching.field = field; + function classDeclaration() { + return new ClassDeclarationMatcher(); + } + Matching.classDeclaration = classDeclaration; +})(Matching = exports.Matching || (exports.Matching = {})); +//# sourceMappingURL=tsASTMatchers.js.map \ No newline at end of file diff --git a/dist/src/tsASTMatchers.js.map b/dist/src/tsASTMatchers.js.map new file mode 100644 index 0000000..eaf9bf4 --- /dev/null +++ b/dist/src/tsASTMatchers.js.map @@ -0,0 +1 @@ +{"version":3,"file":"tsASTMatchers.js","sourceRoot":"","sources":["../../src/tsASTMatchers.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/dist/src/tsStructureParser.js b/dist/src/tsStructureParser.js new file mode 100644 index 0000000..7bbbbf0 --- /dev/null +++ b/dist/src/tsStructureParser.js @@ -0,0 +1,555 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +const ts = require("typescript"); +const JSON5 = require("JSON5"); +exports.tsm = require("./tsASTMatchers"); +exports.helperMethodExtractor = require("./helperMethodExtractor"); +const fsUtil = require("./fsUtils"); +const index_1 = require("../index"); +const index_2 = require("../index"); +const jsonTransformer_1 = require("./jsonTransformer"); +function parse(content) { + return ts.createSourceFile("sample.ts", content, ts.ScriptTarget.ES3, true); +} +var fld = exports.tsm.Matching.field(); +function parseStruct(content, modules, mpth) { + var mod = parse(content); + var module = { functions: [], classes: [], aliases: [], enumDeclarations: [], imports: {}, _imports: [], name: mpth }; + modules[mpth] = module; + var currentModule = null; + exports.tsm.Matching.visit(mod, x => { + if (x.kind === ts.SyntaxKind.VariableDeclaration) { + x.forEachChild(c => { + if (c.kind === ts.SyntaxKind.FunctionExpression) { + const isExport = !!(x.parent.parent.modifiers || []).find(mod => mod.kind === ts.SyntaxKind.ExportKeyword); + const params = []; + let isAsync = !!(c.modifiers || []).find(m => m.kind === ts.SyntaxKind.AsyncKeyword); + const name = x.name.escapedText; + c.parameters.forEach(param => { + params.push({ + name: param.name.getText(), + type: (param.type && param.type.getText()) || "any", + mandatory: !param.questionToken + }); + }); + module.functions.push({ + isArrow: false, + isExport, + isAsync, + name, + params, + }); + } + }); + } + if (x.kind === ts.SyntaxKind.ImportDeclaration) { + var impDec = x; + var localMod = parse(x.getText()); + var localImport = { clauses: [], absPathNode: [], absPathString: "", isNodeModule: false }; + var localNamedImports; + var localAbsPath; + var localAbsPathString; + var localNodeModule = false; + var pth = require("path"); + exports.tsm.Matching.visit(localMod, y => { + var _import = {}; + if (y.kind === ts.SyntaxKind.NamedImports) { + var lit = impDec.importClause.getText(); + localNamedImports = lit.substring(1, lit.length - 1).split(","); + localImport.clauses = localNamedImports.map(im => { + return im.trim(); + }); + } + if (y.kind === ts.SyntaxKind.StringLiteral) { + var localPath = y.getText().substring(1, y.getText().length - 1); + if (localPath[0] === ".") { + var localP = fsUtil.resolve(fsUtil.dirname(mpth) + "/", localPath).split(process.cwd()).join("."); + localAbsPath = localP.split(pth.sep); + localAbsPathString = localP; + } + else { + localAbsPath = localPath.split(pth.sep); + localAbsPathString = localPath; + localNodeModule = true; + } + localImport.absPathNode = localAbsPath; + localImport.absPathString = localAbsPathString.replace(/[\\/]+/g, "/"); + localImport.isNodeModule = localNodeModule; + } + }); + module._imports.push(localImport); + } + if (x.kind === ts.SyntaxKind.FunctionDeclaration || x.kind === ts.SyntaxKind.ArrowFunction) { + const isArrow = x.kind === ts.SyntaxKind.ArrowFunction; + const functionDeclaration = isArrow ? x : x; + const parentVariable = functionDeclaration.parent; + const name = isArrow + ? parentVariable.name && parentVariable.name.getText() + : functionDeclaration.name.text; + let isAsync = false; + let isExport = false; + let params = []; + if (name) { + let modifierContainer = isArrow + ? functionDeclaration.parent.initializer + : functionDeclaration; + if (modifierContainer && modifierContainer.modifiers) { + modifierContainer.modifiers.forEach(modi => { + if (modi.kind === ts.SyntaxKind.AsyncKeyword) { + isAsync = true; + } + if (modi.kind === ts.SyntaxKind.ExportKeyword && !isArrow) { + isExport = true; + } + }); + } + if (isArrow && !isExport) { + do { + modifierContainer = modifierContainer.parent; + } while (modifierContainer && modifierContainer.kind !== ts.SyntaxKind.VariableStatement); + if (modifierContainer && modifierContainer.modifiers) { + modifierContainer.modifiers.forEach(modi => { + if (modi.kind === ts.SyntaxKind.ExportKeyword) { + isExport = true; + } + }); + } + } + functionDeclaration.parameters.forEach(param => { + params.push({ + name: param.name.getText(), + type: (param.type && param.type.getText()) || "any", + mandatory: !param.questionToken + }); + }); + module.functions.push({ + isArrow, + isExport, + isAsync, + name, + params, + }); + } + } + if (x.kind === ts.SyntaxKind.ModuleDeclaration) { + var cmod = x; + currentModule = cmod.name.text; + } + if (x.kind === ts.SyntaxKind.ImportEqualsDeclaration) { + var imp = x; + var namespace = imp.name.text; + if (namespace === "RamlWrapper") { + return; + } + var path = imp.moduleReference; + var literal = path.expression; + var importPath = literal.text; + var absPath = fsUtil.resolve(fsUtil.dirname(mpth) + "/", importPath) + ".ts"; + if (!fsUtil.existsSync(absPath)) { + throw new Error("Path " + importPath + " resolve to " + absPath + "do not exists"); + } + if (!modules[absPath]) { + var cnt = fsUtil.readFileSync(absPath); + var mod = parseStruct(cnt, modules, absPath); + } + module.imports[namespace] = modules[absPath]; + } + if (x.kind === ts.SyntaxKind.TypeAliasDeclaration) { + var u = x; + if (u.name) { + var aliasName = u.name.text; + var type = buildType(u.type, mpth); + module.aliases.push({ name: aliasName, type: type }); + } + } + if (x.kind === ts.SyntaxKind.EnumDeclaration) { + var e = x; + var members = []; + if (e.members) { + e.members.forEach(member => { + let value; + if (member.initializer) { + if (member.initializer.kind === ts.SyntaxKind.NumericLiteral) { + value = parseInt(member.initializer.text); + } + if (member.initializer.kind === ts.SyntaxKind.StringLiteral || + member.initializer.kind === ts.SyntaxKind.JsxText) { + value = String(member.initializer.text); + } + } + members.push({ + name: String(member.name.text), + value, + }); + }); + } + if (e.name) { + module.enumDeclarations.push({ name: e.name.text, members: members }); + } + } + var isInterface = x.kind === ts.SyntaxKind.InterfaceDeclaration; + var isClass = x.kind === ts.SyntaxKind.ClassDeclaration; + if (!isInterface && !isClass) { + return; + } + var c = x; + if (c) { + var fields = {}; + var clazz = index_2.classDecl(c.name.text, isInterface); + if (c.decorators && c.decorators.length) { + clazz.decorators = c.decorators.map((el) => buildDecorator(el.expression)); + } + clazz.moduleName = currentModule; + module.classes.push(clazz); + c.members.forEach(x => { + if (x.kind === ts.SyntaxKind.MethodDeclaration) { + var md = x; + var method = buildMethod(md, content, mpth); + clazz.methods.push(method); + } + var field = fld.doMatch(x); + if (field) { + var f = buildField(field, mpth); + if (f.name === "$") { + clazz.annotations = f.annotations; + } + else { + if (f.name.charAt(0) !== "$" || f.name === "$ref") { + fields[f.name] = f; + clazz.fields.push(f); + } + else { + var targetField = f.name.substr(1); + var of = fields[targetField]; + if (!of) { + if (f.name !== "$$") { + var overridings = clazz.annotationOverridings[targetField]; + if (!overridings) { + overridings = []; + } + clazz.annotationOverridings[targetField] = overridings.concat(f.annotations); + } + } + else { + of.annotations = f.annotations; + } + } + } + } + }); + if (c.typeParameters) { + c.typeParameters.forEach(x => { + clazz.typeParameters.push(x.name["text"]); + if (!x.constraint) { + clazz.typeParameterConstraint.push(null); + } + else { + clazz.typeParameterConstraint.push(x.constraint["typeName"] ? x.constraint["typeName"]["text"] : null); + } + }); + } + if (c.heritageClauses) { + c.heritageClauses.forEach(x => { + x.types.forEach(y => { + if (x.token === ts.SyntaxKind.ExtendsKeyword) { + clazz.extends.push(buildType(y, mpth)); + } + else { + if (x.token === ts.SyntaxKind.ImplementsKeyword) { + clazz.implements.push(buildType(y, mpth)); + } + else { + throw new Error("Unknown token class heritage"); + } + } + }); + }); + } + return exports.tsm.Matching.SKIP; + } + }); + return module; +} +exports.parseStruct = parseStruct; +function buildField(f, path) { + return { + name: f.name["text"], + type: buildType(f.type, path), + annotations: f.name["text"].charAt(0) === "$" ? buildInitializer(f.initializer) : [], + valueConstraint: f.name["text"].charAt(0) !== "$" ? buildConstraint(f.initializer) : null, + optional: f.questionToken != null, + decorators: (f.decorators && f.decorators.length) ? f.decorators.map((el) => buildDecorator(el.expression)) : [], + }; +} +function buildMethod(md, content, path) { + var aliasName = md.name.text; + var text = content.substring(md.pos, md.end); + var params = []; + md.parameters.forEach(x => { + params.push(buildParameter(x, content, path)); + }); + var method = { + returnType: buildType(md.type, path), + name: aliasName, + start: md.pos, + end: md.end, + text: text, + arguments: params + }; + return method; +} +function buildParameter(f, content, path) { + var text = content.substring(f.pos, f.end); + return { + name: f.name["text"], + start: f.pos, + end: f.end, + text: text, + type: buildType(f.type, path) + }; +} +function buildConstraint(e) { + if (!e) { + return null; + } + if (e.kind === ts.SyntaxKind.CallExpression) { + return { + isCallConstraint: true, + value: buildAnnotation(e) + }; + } + else { + return { + isCallConstraint: false, + value: parseArg(e) + }; + } +} +function buildInitializer(i) { + if (!i) { + return []; + } + if (i.kind === ts.SyntaxKind.ArrayLiteralExpression) { + var arr = i; + var annotations = []; + arr.elements.forEach(x => { + annotations.push(buildAnnotation(x)); + }); + return annotations; + } + else { + throw new Error("Only Array Literals supported now"); + } +} +function buildAnnotation(e) { + if (e.kind === ts.SyntaxKind.CallExpression) { + var call = e; + var name = parseName(call.expression); + var a = { + name: name, + arguments: [] + }; + call.arguments.forEach(x => { + a.arguments.push(parseArg(x)); + }); + return a; + } + else { + throw new Error("Only call expressions may be annotations"); + } +} +function buildDecorator(e) { + if (e.kind === ts.SyntaxKind.CallExpression) { + var call = e; + var name = parseName(call.expression); + var a = { + name: name, + arguments: [] + }; + call.arguments.forEach(x => { + a.arguments.push(parseArg(x)); + }); + return a; + } + else if (e.kind === ts.SyntaxKind.Identifier) { + return { + name: String(e.escapedText), + arguments: null + }; + } + else { + throw new Error("Only call expressions may be annotations"); + } +} +function parseArg(n) { + if (n.kind === ts.SyntaxKind.StringLiteral) { + var l = n; + return l.text; + } + if (n.kind === ts.SyntaxKind.NoSubstitutionTemplateLiteral) { + var ls = n; + return ls.text; + } + if (n.kind === ts.SyntaxKind.ArrayLiteralExpression) { + var arr = n; + var annotations = []; + arr.elements.forEach(x => { + annotations.push(parseArg(x)); + }); + return annotations; + } + if (n.kind === ts.SyntaxKind.TrueKeyword) { + return true; + } + if (n.kind === ts.SyntaxKind.PropertyAccessExpression) { + var pa = n; + return parseArg(pa.expression) + "." + parseArg(pa.name); + } + if (n.kind === ts.SyntaxKind.Identifier) { + var ident = n; + return ident.text; + } + if (n.kind === ts.SyntaxKind.FalseKeyword) { + return false; + } + if (n.kind === ts.SyntaxKind.NumericLiteral) { + var nl = n; + return Number(nl.text); + } + if (n.kind === ts.SyntaxKind.BinaryExpression) { + var bin = n; + if (bin.operatorToken.kind = ts.SyntaxKind.PlusToken) { + return parseArg(bin.left) + parseArg(bin.right); + } + } + if (n.kind === ts.SyntaxKind.ObjectLiteralExpression) { + const obj = n; + try { + let jsonString = jsonTransformer_1.JSONTransformer.toValidateView(obj); + try { + return JSON5.parse(jsonString); + } + catch (_a) { + const lamdaSearchRegexp = new RegExp(/(\(\)\s{0,1}=>\s{0,1}{(.|\n)*},)|(\(\)\s{0,1}=>\s{0,1}{(.|\n)*}})/, "gsm"); + jsonString = jsonString.replace(lamdaSearchRegexp, (replacer) => { + const replacerCorrect = replacer.replace(/"/g, `'`); + let func = `"${replacerCorrect.slice(0, replacer.length - 1)}"`; + const lastSymb = replacerCorrect[replacer.length - 1]; + const replacedFunction = func.replace(/\s{2,}/g, ""); + return `{"type": "lamda", "content": ${replacedFunction}}${lastSymb}`; + }); + try { + return JSON5.parse(jsonString); + } + catch (e) { + console.error(`Cant't parse string "${jsonString}" after complex object calculating`); + return null; + } + } + } + catch (e) { + throw new Error(`Can't parse string "${obj.getFullText()}" to json`); + } + } + if (n.kind === ts.SyntaxKind.ArrowFunction) { + return n.getText(); + } + if (n.kind === ts.SyntaxKind.NullKeyword) { + return null; + } + return n.getText(); +} +exports.parseArg = parseArg; +function parseName(n) { + if (n.kind === ts.SyntaxKind.Identifier) { + return n["text"]; + } + if (n.kind === ts.SyntaxKind.PropertyAccessExpression) { + var m = n; + return parseName(m.expression) + "." + parseName(m.name); + } + throw new Error("Only simple identifiers are supported now"); +} +function basicType(n, path) { + var namespaceIndex = n.indexOf("."); + var namespace = namespaceIndex !== -1 ? n.substring(0, namespaceIndex) : ""; + var basicName = namespaceIndex !== -1 ? n.substring(namespaceIndex + 1) : n; + return { typeName: n, nameSpace: namespace, basicName: basicName, typeKind: index_1.TypeKind.BASIC, typeArguments: [], modulePath: path }; +} +function arrayType(b) { + return { base: b, typeKind: index_1.TypeKind.ARRAY }; +} +function unionType(b) { + return { options: b, typeKind: index_1.TypeKind.UNION }; +} +function buildType(t, path) { + if (!t) { + return null; + } + if (t.kind === ts.SyntaxKind.StringKeyword) { + return basicType("string", null); + } + if (t.kind === ts.SyntaxKind.NumberKeyword) { + return basicType("number", null); + } + if (t.kind === ts.SyntaxKind.BooleanKeyword) { + return basicType("boolean", null); + } + if (t.kind === ts.SyntaxKind.NullKeyword) { + return basicType("null", null); + } + if (t.kind === ts.SyntaxKind.AnyKeyword) { + return basicType("any", null); + } + if (t.kind === ts.SyntaxKind.VoidKeyword) { + return basicType("void", null); + } + if (t.kind === ts.SyntaxKind.TypeReference) { + var tr = t; + var res = basicType(parseQualified(tr.typeName), path); + if (tr.typeArguments) { + tr.typeArguments.forEach(x => { + res.typeArguments.push(buildType(x, path)); + }); + } + return res; + } + if (t.kind === ts.SyntaxKind.ArrayType) { + var q = t; + return arrayType(buildType(q.elementType, path)); + } + if (t.kind === ts.SyntaxKind.UnionType) { + var ut = t; + return unionType(ut.types.map(x => buildType(x, path))); + } + if (t.kind === ts.SyntaxKind.ExpressionWithTypeArguments) { + var tra = t; + res = basicType(parseQualified2(tra.expression), path); + if (tra.typeArguments) { + tra.typeArguments.forEach(x => { + res.typeArguments.push(buildType(x, path)); + }); + } + return res; + } + else { + return basicType("mock", null); + } +} +exports.buildType = buildType; +function parseQualified2(n) { + if (!n.name) { + return n.text; + } + return n.name.text; +} +function parseQualified(n) { + if (n.kind === ts.SyntaxKind.Identifier) { + return n["text"]; + } + else { + var q = n; + return parseQualified(q.left) + "." + parseQualified(q.right); + } +} +//# sourceMappingURL=tsStructureParser.js.map \ No newline at end of file diff --git a/dist/src/tsStructureParser.js.map b/dist/src/tsStructureParser.js.map new file mode 100644 index 0000000..0475c16 --- /dev/null +++ b/dist/src/tsStructureParser.js.map @@ -0,0 +1 @@ +{"version":3,"file":"tsStructureParser.js","sourceRoot":"","sources":["../../src/tsStructureParser.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/package.json b/package.json index d5ceab3..7d8d4fd 100644 --- a/package.json +++ b/package.json @@ -9,7 +9,8 @@ "test": "grunt test" }, "dependencies": { - "typescript": "2.7.2" + "typescript": "2.7.2", + "json5": "2.2.3" }, "devDependencies": { "@types/chai": "4.1.2", diff --git a/src/tsStructureParser.ts b/src/tsStructureParser.ts index a5ca67d..63f8fa3 100644 --- a/src/tsStructureParser.ts +++ b/src/tsStructureParser.ts @@ -3,6 +3,7 @@ */ import ts = require("typescript"); +import JSON5 = require("JSON5"); export import tsm = require("./tsASTMatchers"); export import helperMethodExtractor = require("./helperMethodExtractor"); import fsUtil = require("./fsUtils"); @@ -461,7 +462,7 @@ export function parseArg(n: ts.Expression): any { try { let jsonString = JSONTransformer.toValidateView(obj); try { - return JSON.parse(jsonString); + return JSON5.parse(jsonString); } catch { const lamdaSearchRegexp = new RegExp(/(\(\)\s{0,1}=>\s{0,1}{(.|\n)*},)|(\(\)\s{0,1}=>\s{0,1}{(.|\n)*}})/, "gsm"); jsonString = jsonString.replace(lamdaSearchRegexp, (replacer) => { @@ -472,7 +473,7 @@ export function parseArg(n: ts.Expression): any { return `{"type": "lamda", "content": ${replacedFunction}}${lastSymb}`; }); try { - return JSON.parse(jsonString); + return JSON5.parse(jsonString); } catch (e) { console.error(`Cant't parse string "${jsonString}" after complex object calculating`); return null;